modul praktikum pcd revisi

53
MODUL PRAKTIKUM PENGOLAHAN CITRA DIGITAL BERBASIS PROJECT BASED LEARNING (PBL) Image Processing with MATLAB DOSEN PENGAMPU: ENDINA PUTRI PURWANDARI, S.T., M.KOM NIP. 19870127 201212 2 001 PROGRAM STUDI TEKNIK INFORMATIKA FAKULTAS TEKNIK UNIVERSITAS BENGKULU 2014

Upload: robbie-akachopa-season-ramadhan

Post on 13-Apr-2016

251 views

Category:

Documents


42 download

DESCRIPTION

Modul

TRANSCRIPT

Page 1: Modul Praktikum PCD Revisi

MODUL PRAKTIKUM

PENGOLAHAN CITRA DIGITAL

BERBASIS PROJECT BASED LEARNING (PBL)

Image Processing with MATLAB

DOSEN PENGAMPU:

ENDINA PUTRI PURWANDARI, S.T., M.KOM

NIP. 19870127 201212 2 001

PROGRAM STUDI TEKNIK INFORMATIKA

FAKULTAS TEKNIK

UNIVERSITAS BENGKULU

2014

Page 2: Modul Praktikum PCD Revisi

2

DAFTAR ISI

BAB I PENDAHULUAN ........................................................................... 3

1. Pengenalan MATLAB ................................................................ 3

2. Program MATLAB ..................................................................... 4

BAB II PENGOLAHAN CITRA DI MATLAB ....................................... 6

1. Representasi Citra ....................................................................... 6

2. Kuantisasi .................................................................................... 8

3. Pemprosessan Titik ..................................................................... 10

BAB III GUI MATLAB ............................................................................. 17

1. Pendahuluan ................................................................................ 17

2. Operasi Matriks Citra ................................................................. 18

3. Deteksi Tepi Citra ....................................................................... 20

4. Implementasi Deteksi Tepi dengan Matlab ................................ 21

5. Membaca Sebuah File Citra (Image) .......................................... 22

BAB IV HISTOGRAM CITRA ................................................................. 25

1. Menampilkan Histogram Citra ................................................... 25

2. Citra Warna Menjadi Citra Hitam Putih ..................................... 25

3. Pergeseran Terang gelap Citra .................................................... 32

BAB IV Produk Aplikasi Pengolahan Citra Digital ................................... 38

1. Deteksi Multiple Circle pada Citra RGB .................................... 38

2. Ekstraksi Nomor Plat Kendaraan bermotor. ............................... 42

3. Deteksi dan Ekstraksi Bagian Wajah Pada Citra Single Face .... 43

4. Ekstraksi Citra Iris Mata ............................................................. 46

5. Segmentasi dengan Active Contour ........................................... 48

6. Pengenalan pola bentuk-bentuk bangun datar ............................ 51

OPERATOR PADA MATLAB .................................................................. 53

Page 3: Modul Praktikum PCD Revisi

3

BAB I

PENGENALAN MATLAB

1. Pengenalan MATLAB

MATLAB (Matrix Labority) merupakan perangkat lunak produk dari The

Math Work, Inc. MATLAB adalah sebuah bahasa dengan (high-performance)

kinerja tinggi untuk komputasi masalah teknik. Matlab mengintegrasikan

komputasi, visualisasi, dan pemrograman dalam suatu model yang sangat mudah

untuk pakai dimana masalah-masalah dan penyelesaiannya diekspresikan dalam

notasi matematika yang familiar. Penggunaan Matlab meliputi bidang–bidang:

1. Matematika dan komputasi

2. Pembentukan Algorithm

3. Pemodelan, simulasi, dan pembutan prototype

4. Analisa data, explorasi, dan visualisasi

5. Grafik keilmuan dan bidang rekayasa

6. Pengolahan Citra Digital

Matlab digunakan sebagai platform untuk menganalisis data dan visualisasi

yang dirancang untuk membuat manipulasi matriks sesedehana mungkin.

Disamping itu, Matlab memiliki kemampuan grafis yang kuat dan dengan bahasa

pemrograman sendiri. Matlab memiliki banyak fitur-fitur yang sudah

dikembangkan, dan lebih dikenal dengan nama toolbox. Toolbox-toolbox ini

merupakan kumpulam dari fungsi-fungsi MATLAB (M-Files) yang telah

dikembangkan ke suatu lingkungan kerja Matlab untuk memecahkan masalah

dalam kelas particular. Untuk pengolahan citra toolbox yang digunakan adalah

Image-processing Toolbox (IPT).

Struktur data dasar MATLAB adalah matriks. Pada MATLAB sebuah

variable tunggal adalah matriks 1 x 1, string adalah sebuah 1 x n matriks dari

karakter. Gambar adalah n x m matriks dari pixel. Pixel adalah elemen citra,

elemen terkecil citra digital yang dapat dilihat mata.

Page 4: Modul Praktikum PCD Revisi

4

2. Program MATLAB

Ketika MATLAB dijalankan pertama kali, Matlab desktop tapil, berisi tools

(graphical user interface) untuk mengatur file, variable, dan aplikasi Matlab. Pada

pertama kali Matlab dijalankan maka akan tampil desktop dengan ilustrasi sebagai

berikut :

Gambar 1. Tampilan pertama kali Matlab saat dijalankan

MATLAB‟s IDE memiliki lima lima komponen, yaitu Command Window,

Workspace Browser, Current Directory Browser, Command History Window dan

kosong atau banyak Figure Windows yang aktif untuk menampilkan obyek grafik.

1. Command window digunakan untuk menjalankan fungsi-fungsi Matlab, (untuk

mengetikkan perintah dan ekspresi serta menampilkan hasil).

2. Workspace berisi kumpulan variable-variable yang terbentuk sepanjang sesi Matlab

dan disimpan di memory.

Page 5: Modul Praktikum PCD Revisi

5

3. Current directory browser adalah operasi Matlab file menggunakan current

directory dan search patch sebagai referensi. File yang akan dijalankan harus

berada di current directory atau ada pada serach path.

4. Command history digunakan untuk menyimpan baris-baris perintah yang telah

diketikkan di command window. Kita dapat melihat ungsi-fungsi yang

digunakan sebelumnya, mengcopy, dan menjalankan kembali dari command

history.

5. Figure adalah jemdela untuk menampilkan gambar grafik seperti perintah

plot dan sejenisnya. Gambar pada jendela figure ini dapat disimpan ke dalam

sebuah file yang sewaktu-waktu dapat dipanggil kembali.

Page 6: Modul Praktikum PCD Revisi

6

BAB II

PENGOLAHAN CITRA DI MATLAB

1. Representasi Citra

a. Format Citra

Sebuah gambar adalah suatu nilai array segiempat (pixels). Masing-masing pixel

menghadirkan pengukuran beberapa property dari scene mengukur atas suatu area

terbatas. Property dapat berupa banyak hal, tetapi pada umumnya mengukur rata-rata

terang (satu nilai) atau terang dari gambar yang difilter melalui red, green dan blue

filter (tiga nilai). Nilai normal ditampilkan oleh delapan bilangan bit, memberikan range

256 tingkatan terang.

Resolusi dari suatu gambar : ini digambarkan oleh banyaknya piksel dan nomor

dari nilai terang. Suatu gambar dasar akan membutuhkan banyak ruang

penyimpanan. Metode telah ditetapkan untuk kompres gambar dengan pengkodean

data yang berlebihan dengan cara yang lebih efisien, atau dengan membuang

informasi perceptual yang kurang signifikan. MATLAB mendukung membacan

semua format umum pada gambar.

b. Image Loading and Displaying and Saving

1) Imread

Gambar dimuat ke dalam memori kerja menggunakan perintah :

>> f = imread(„rice.jpg‟);

Tanda titik koma dalam Matlab diakhir perintah digunakan untuk

menghilangkan output (tidak ditampilkan). Jika tidak disertakan, maka

Matlab akan menampilkan output ke layar. Penyebutan nama file tampa path

akan mengasumsikan bahwa file tersebut berada di current working directory

(directory kerja). Selain itu pembacaan file juga dapat dilakukan dengan path

relative. Perhatikan contoh berikut :

>> f = imread(„F:\citra\ rice.jpg‟);

2) Imshow

Untuk menampilkan gambar dapat digunakan perintah berikut :

>> imshow(f, G)

Page 7: Modul Praktikum PCD Revisi

7

Dimana f adalah aray citra dan G adalah jumlah level intensitas yang

digunakan untuk menampilkannya. Jika G diabaikan maka akan menggunakan

default 256. Sintaks yang digunakan :

>> imshow(f, [low high])

Akan menampilkan warna hitam pada semua nilai yang kurang dari atau sama

dengan low dan putih pada semua nilai yang lebih besar atau sama dengan high.

Sintaks yang lain :

>> imshow(f, [ ])

Men-set variable low ke nilai minimum dari array f dan high ke maksimumnya.

Bentuk ini sangat berguna untuk menampilkan citra yang mempunyai range

dinamis yang rendah atau mempunyai nilai positif dan negatif.

3) Figure

Gambaran pada umumnya ditampilkan didalam figure window. Jika suatu

gambaran ditampilkan akan overwrite dulu, kecali jika fungsi figure digunakan :

>> figure, imshow(f)

akan menghasilkan suatu jendela figure baru dan memanjang gambar

didalamnya.

4) Imwrite

Gambar dapat disimpan ke disk menggunakan fungsi imwrite, yang memiliki

fungsi dasar :

>> imwrite(array name, „file name‟)

String yang menjadi isi parameter nama file harus memasukkan estensi

format file yang dikenali. Alternatifnya, format yang diinginkan dapat

disebutkan secara eksplisit pada masukkan parameter ketiga. Tampat

penyimpanan fungsi ini (lokasi file output) ada di derektori kerja. Contoh

dibawah ini adalah untuk menyimpan gambar i ke TIFT file dengan nama

rice_01 :

>> imwrite(i , „rice_01.tif‟);

5) Image Information

Informasu tentang sebuah gambar dapat ditemukan dengan :

>> iminfo filename

Page 8: Modul Praktikum PCD Revisi

8

2. Kuantisasi

a. Grey Level Ranges

Gambaran secara normal ditangkap dengan pixel pada setiap saluran yang

sedang diwakili oleh delapan bilangan bit. Delapan baris kelas data dalam table

dibawah ini disebut dengan kelas numeric.

Type Interpretation Range

uint8 unsigned 8-bit integer [0, 255]

uint16 unsigned 16-bit integer [0, 65535]

uint32 unsigned 32-bit integer [0, 4294967295]

int8 signed 8-bit integer [-128, 127]

int16 signed 16-bit integer [-32768, 32767]

int32 signed 32-bit integer [-2147483648,

2147483647] Single single precision floating point

number

[-1038, 1038] Double double precision floating point

number

[-10308, 10308] Char character (2 bytes per element)

Logical values are 0 or 1 1 byte per element

Suatu gambar pada umumnya ditafsirkan sebagai salah satu dari : intensitas,

biner, indexed, atau RGB.

Suatu intensitas nilai-nilai gambaran menghadirkan nilai terang. Suatu biner

gambaran pixels hanya dua nilai mungkin. Indexed pixl nilai gambar diperlakukan

sebagai index suatu table dari yang “benar” nilai yang dibaca. Gambar RGB

mempunyai tiga saluran, mewakili intensitas di dalam gelombang illuminasi merah,

hijau dan biru (panjang gelombang lain mencangkup dan mungkin lebih dari nilai-

nilai mereka).

Mengkonversi antar kelas data, dengan sintaks umum yang digunakan :

>> B = data_class_name(A)

Dimana data_class_name adalah satu dari data tipe yang terdapat pada contoh

table.

>> B = uint8(A)

Akan mengkonversikan gambar A (beberapa tipe) ke dalam gambar B dari

integer unsigned 8-bit, dengan hilangnya kemungkinan resolusi (nilai kurang dari nol

ditetapkan 0, nilai lebih besar dari pada 255 ditetapkan menjadi 255).

Page 9: Modul Praktikum PCD Revisi

9

Tabel dibawah ini merupakan toolbox yang menyediakan fungsi spesifik

yang mengerjakan penskalaan untuk mengkonversi antara kelas dan tipe citra :

Function Input Type Output Type

im2uint8 Logical, uint8, uint16, double Unint8

im2uint16 Logical, uint8, uint16, double Uint16

mat2gray Double Double in range [0, 1]

im2double Logical, uint8, uint16, double Double

im2bw Uint8, uint16, double Logical

b. Number of Pixels

Gambaran masuk dalam semua ukuran, tetapi (hamper) selalu segiempat.

Matlab memberi beberapa metoda mengakses unsur-unsur dari suatu array, yaitu

pixel suatu aray.

Suatu unsur dapat diakses secara lagsung : mengetik nama array di prompt

akan mengembalikan semua unsur-unsur array (yang mana dapat diambil sementara),

mengetikkan array yang diikuti oleh indeks unsure dalam kurung, nilainya akan

dikembalikan.

Cangkupan unsur-unsur array dapat diakses menggunakan tanda titik dua.

>>(first:last)

akan mengembalikan elemen yang pertama ke terakhir termasuk

dimensional array A. Catatan : indeks dimulai dari satu.

>> A(first :step :last)

akan mengembalikan setiap elemen langkah awal dari pertama dan selesai

ketika terakhir tercapai atau terlampaui.

Langkah bisa negatif, dalam kasus ini anda harus memastikan bahwa pertama

lebih besar daripada terakhir.

Biasanya notasi ini dapat siperluas untuk mengakses suatu bagian dari sebuah

gambar. Sebuah gambar f dapat diputar dengan menggunakan

>> fp = f(end : -1 : 1, :);

Kata kunci end digunakan untuk menandakan indeks terakhir. Menggunakan titik

dua menandakan semua indeks dilewati. Ini juga menandakan bagaimana array

multidimensi diakses.

Page 10: Modul Praktikum PCD Revisi

10

Sebuah bagian gambar di-abstraksi menggunakan

>> fc = f(top : bottom, left :right);

Atau gambar dapat diambil bagiannya sebagai contoh menggunakan

>> fs = f(1 : 2 : end, 1 : 2 : end);

c. Catatan pada gambar berwarna

Jika input pada gambar adalah warna, operasi ini akan menghasilkan gambar

greyscale. Sebuah gambar berwarna memiliki tiga nilai setiap pikselnya, yang diakses

menggunakan indeks ketiga

>> A(x, y, 1:3)

Untuk mengembalikan tiga nilai warna piksel pada (x,y), sebuah bidang warna dapat

diabstraksi menggunakan:

>> R = A(x, y, 1);

Dan dengan cara sama untuk G (indeks terakhir =2) dan B

3. Pemprosessan Titik

Operasi PointOperation adalah operasi untuk memanipulasi tiap nilai piksel,

tanpa melihat nilai piksel tetangga. Dua tipe transformasi dapat diidentifikasi,

memanipulasi dua property piksel, yaitu nilai dan posisi.

a. Manipulasi nilai

Nilai dasar sebuah piksel adalah kecerahan ( pada gambar monokrom) atau

warna (pada gambar multichannel)

1) Skala Piksel

Skala nilai piksel diperoleh dengan mengkalikannya dengan konstanta.

MATLAB menyediakan satu fungsi tunggal yang dapat memberri beberapa efek

>> R = imadjust(A, [low_in, high_in], [low_out, high_out], gamma);

Fungsi ini menggunakan rentang input nilai sebagai dasar dan

memetakannya ke rentang output yang telah ditetapkan. Nilai diluar rentang input

diapit oleh rentang output tertinggi ( nilai dibawah low_in semuanya dipetakan ke

low_out) . rentang nilai diharapkan berada pada interval [0,1]. Fungsi

memperkirakan nilai yang tepat untuk tipe gambar sebelum menerapkan operasi

skala. Jika low-in diperkirakan lebih kecil dari high_in, maka nilai yang sama

tidak dibenarkan untuk Ilow_out dan high_out. Setelah itu gambar dapat di inversi.

Page 11: Modul Praktikum PCD Revisi

11

Nilai gamma menggambarkan bentuk dari kurva pemetaam. Gamma=1

memberikan skala linear, gamma yang lebih kecil menghasilkan pemetaan yang

berada pada nilai yang lebih rendah, sedangkan nilai gamma yang lebih besar

menghasilkan pemetaan yang berada pada nilai skala yang lebih tinggi. Hal ini

membuat kontras antara warna terang dan gelap menjadi lebih jelas. Sehingga

diperkirakan akan menghilangkan salah satu hasil parameter pada nilai dasar.

Rentang tertinggi yang digunakan adalah [0 dan 1], atau gamma =1.

2) Histogram

Histogram sebuah gambar menunjukkan jumlah piksel dengan warna abu-

abu yang diberikan atau dengan nilai warna. Histogram gambar berwarna jarang

digunakan. Histogram gambar dengan level intensitas L pada rentang [0, G]

didefinisikan sebagai fungsi

h(rk) =

nk

rk adalah kth tingkat instensitas pada sebuah gambar, dan nk akan menjadi

jumlah piksle pada nilai abu-abu rk. G akan menjadi 225 untuk sebuah gambar

uint8, 65536 untuk sebuah gambar uint16 dan 1.0 untuk sebuah gambar ganda.

Karena terendah pada MATLABadalah 1, bukan 0, r1 akan disamakan dengan

tingkat intensitas 0, dan sebagainya. Untuk nilai integer gambar G=L-1.

Normalized histogram(normalisasi histogram) diperoleh dari membagi

setiap elemen dari h(rk) dengan total jumlah piksel ppada gambar ( sama dengan

jumlah elemen histogram). Histogram seperti ini disebut probability density

function (pdf) dan menggambarkan kemungkinan intensitas level yang mungkin

diberikan.

p(rk) = nk/n

Fungsi MATLAB untuk menghitung, menampilkan histogram dan

normalisasi histogram adalah

>> h = imhist(A, b);

>> p = imhist(A, b)/numel(A);

b adalah jumlah tempat penyimpanan pada histogram. Jika b dihilangkan

maka dianggap 256. Fungsi numel (A) mengembalikan jumlah elemen yang

berbeda, dalam hal ini jumlah piksel pada A.

Page 12: Modul Praktikum PCD Revisi

12

fungsi tambahan didefinisikan untuk menampilkan data dalam berbagai

bentuk, seperti grafik batang dan penambahan aksis.

3) Ekualisasi Histogram

Manipulasi skala abu-abu dimungkinkan untuk memproleh berbagai efek

berbeda. Salah satunya akualisasi histogram. Tujuannya adalah mengubah skala abu-

abu seperti pdf dari output gambar menjadi sama. Beberapa penulis menyatakan hal

ini dapat meningkatkan tampilan gambar. Transformasi dapat dilakukan dengan

menggunakan fungsi :

>> h = histeq(A, nlev);

nlev adalah jumlah level pada gambar output h, dengan nilai dasar 64.

4) Thresholding

Merupakan metode sederhana untuk membedakan antara objek dan latar

(background), yang berguna untuk menampilkan intensitas yang berbeda. Sebuah

nilai threshold ditentukan, kemudian intensitas yang lebih besar, dikumpulkan ke

satu nilai, intensitas kurang dari ditentukan ke nilai lainnya (biasanya digunakan1

atau maksimal, dan 0 atau minimal . walau sebuah threshold dapat di tentukan

secara manual, lebih baik menggunakan data gambar untuk menghitungnya.

Gonzalez dan Wood menyerankan metode berikut:

1. Pilih sembarang nilai threshold

2. Gunakan untuk men-threshold sebuah gambar

3. Hitung rata-rata nilai abu-abu dari piksel dengan intensitas diatas dan dibawah

threshold, kemudian hitung rata-rata dari dua nilai tersebut.

4. Gunakan nilai baru tersebut untuk men-threshold gambar

5. Ulangi langkah 3 dan 4 hingga threshold berubah dengan nilai yang tidak

berarti(rendah).

Otsu menyarankan metode untuk meminimalisasi jarak antar variasi kelas.

Metode ini tersedia pada toolbox MATLAB:

>>T=graytresh(A);

T adalah niali normalisasi antara 0.0 dan 1.0, sehingga T harus diskala ke

rentang yang tepat sebelum digunakan. Fungsi konversi im2bw akan

mengembalikkan gambar threshold.

Page 13: Modul Praktikum PCD Revisi

13

5) Transformasi Warna

Terdapat berbagai cara untuk menggambarkan data warna yang ada. RGB adalah

yang paling banyak digunakan untuk menangkap dan menampilkan gambar, hal ini

bukanlah yang terbaik untuk pemrosesan gambar karena menampilkan representasi non-

uniform. Sehingga jika nilai RGB diganti dengan nilai tertentu, pengamatan perbedaan

bergantung pada nilai asli RGB. Salah satu cara untuk mengamatinya adalah dengan

menggabungkan output dari standarisasi pewarnaan cahaya untuk menghasilkan sebuah

warna, kemudian mengubah cahaya dari data input sehingga pengamat hanya menyadari

perbedaan cahaya warna. Perbedaan warna asli dan warna yang baru dapat drencanakan

dengan menggunakan pengukuran secara sistematis pada seluruh ruang warna, kita dapat

menghasilkan sebuah diagram MacAdam . Titik menggambarkan warna asli, oval

menggambarkan kontur perbedaan yang baru saja ditemukan.

Dimungkinkan juga untuk mengkategorikan ruang warna sebagai menggunakan

alat dan tidak menggunakan alat. Penggunaan alat digunakan pada penyiaran

(broadcasting), dan industry percetakkan. Yang paling banyak digunakan adalah YIQ,

YCrCb and HSV. Konversi antar ruang menggunakan fungsi sederhana:

>> YIQ = rgb2ntsc(RGB);

Tanpa alat digunakan karena, pada system penggunaan alat meliputi definisi

subjektif. CIE mendefinisikan standar ruang warna pada 1931 dengan mendefinisikan tiga

sumber warna, X,Y dan Z. semua warna yang terlihat dapat dihasilkan dengan kombinasi

linier dari 3 sumber ini. Nilai X,Y, dan Z dapat dinormalisai untuk dijumlahkan menjadi 1.

Warna menggambarkan normalisasi x dan nilai y dapat ditentukan pada diagram

MacAdam.. konversi data antar ruang warna adalah dua tahapan proses. Sebuah struktur

transformasi warna ditentukan terlebih dahulu, misalnya untuk mentransformasi RGB KE

XYZ

>> C = makecform(„srgb2xyz‟);

Kemudian lakukan konversi

>> Ixyz = applycform(Irgb, C);

Tipe data yang digunakan untuk merepresentasikan data mungkin saja berubah. Ruang

warna lainnya dapat didefinisikan, masing-masing mencoba untuk membuat ruang warna

tampak lebih seragam

Page 14: Modul Praktikum PCD Revisi

14

MacAdam Diagram

Garis vertikal dan horizontal menggambarkan nilai x dan y yang telah dinormalisasi

( komponen ketiga seperti z = 1-x-y tidak dibutuhkan). Warna hanya dapat berada dibawah

garis x+y=1, dan hanya beberapa dari titik berikut yang menggambarkan warna yang terlihat.

Warna pelangi muncul pada sisi luar, dan gambar biru adalah panjang gelombang dari

iluminasi cahaya alami yang setara.

b. Ko-ordinat Manipulasi

Hasil dari manipulasi ko-ordinat adalah untuk mengubah gambar. Contohnya,

untuk membuat gambar panorama, atau memperbaiki gambar untuk distorsi lensa,

dengan tujuan membuat pengukuran . manipulasi memiliki dua tahap, perhitungan

piksel dari koordinat baru dan percontohan kembali atau interpolasi.

1) Transformasi

Page 15: Modul Praktikum PCD Revisi

15

1

Terdapat dua kelas transformasi: affine dan non-linear. Transformasi affine

diperoleh dengan memasukkan nilai yang sesuai ke sebuah transform matriks.

Satu atau aksis lainnya dapat diskala, gambar dapat diputar atau dipotong,

tergantung pada nilai a terhadap i. Transform pada MATLAB dengan

menggunakan struktur tform. Struktur tform dihasilkan dengan fungsi:

>> tform = maketform(transform_type, transform_parameters);

Tipe transformasi dapat berupa salah satu dari affine, projective, box,

composite or custom. Parameter transformasi akan tergantung pada tipe

transformasi. Pada bagian ini kita hanya menggunakan transformasi affine yang

parameternya adalah 9 elemen pada matrik. Sehingga kita dapat membuat non-

uniform skala transformasi dengan :

>> T = [2 0 0; 0 3 0; 0 0 1];

>> tform = maketform(„affine‟, T);

Transformasi non linear biasanya digunakan untuk mengubah gambar untuk

memperbaiki distorsi oleh system gambar.

x ′ = x(1 + a1 x + K)

y ′ = y(1 + b y + K)

2) Interpolasi

Hal yang wajar untuk mengambil pada gambar input dan menghitung

lokasinya pada gambar yang terdistorsi. Tetapi nilai parameter transformasi affine,

atau penjumlahan distorsi biasanya non-integer. Sehingga perhitungan koordinat

mengkin bukan integer. Pembulatan kesalahan (error) dapat menghasilkan

beberapa output piksel tidak terhitung. Karena itu distorsi dilakukan secara

terbalik. Kita menggunakan inverse dari transformasi untuk menghitung sumber

dari masing-masing piksel pada gambar distorsi. Sumber piksel mungkin tidak

memiliki koordinat non-integer, tetapi kita dapat memperkirakan nilainya dengan

mengambil nilai piksel terdekat, atau melakukan interpolasi terhadap piksel

terdekat.

Page 16: Modul Praktikum PCD Revisi

16

Transformasi forwarddiperoleh dengan menggunakan usingmenghitung

inverse tformfwd. tforminv atau imtransform,

>> res = tforminv(src, tform, interp);

Interp adalah bendera sederhana untuk menetukan bagaimana interpolasi

dilakukan

Nearest Mengggunakan piksel tetangga terdekat Bilinear Menggunakan berat rata rata dari 2per 2 piksel tetangga

Bicubic Menggunakan berat rata rata dari 4per 4 piksel tetangga

Page 17: Modul Praktikum PCD Revisi

17

BAB III

GUI MATLAB

1. Pendahuluan

Matlab adalah perangkat lunak yang dapat digunakan untuk analisis dan

visualisasi data. Matlab didesain untuk mengolah data dengan menggunakan operasi

matriks. Matlab juga mampu untuk menampilkan grafis dan memiliki bahasa

pemrograman yang baik.

Pada antar muka awal MATLAB tersebut terdapat 3 (tiga) jendela utama yaitu

jendela Current Directory, Command Window dan Command History.

Current Directory digunakan untuk melihat direktori file tempat bekerja

Command Window digunakan untuk memasukkan perintah program (command)

yang akan dieksekusi

Comman History digunakan untuk melihat perintah program (command) yang

pernah digunakan.

Function adalah kata kunci yang digunakan untuk mendefinisikan prosedur pada

matlab. Fungsi dapat menerima input berupa berbagai parameter dan mengeluarkan

output berupa matriks, string, graf atau figure. Beberapa contoh fungsi yang terdapat pada

Matlab seperti sin, imread, imclose dan lain-lain. Matlab masih memiliki banyak fungsi

lainnya.

Page 18: Modul Praktikum PCD Revisi

18

2. Operasi Matriks Citra

Berikut contoh penggunaan fungsi tersebut pada jendela Command.

Tipe data standar pada Matlab adalah matrik. Semua data disimpan dalam bentuk

matrik. Sebuah nilai (single value) disimpan dalam bentuk matrik berukuran 1 x 1.

Sedangkan untuk tipe data string disimpan dalam matrik berukuran 1 x n, dengan n

adalah jumlah karakter.

Tipe data standar pada Matlab adalah matrik. Semua data disimpan dalam bentuk

matrik. Sebuah nilai (single value) disimpan dalam bentuk matrik berukuran 1 x 1.

Sedangkan untuk tipe data string disimpan dalam matrik berukuran 1 x n, dengan n

adalah jumlah karakter.

Begitu pula dengan citra (image). Citra berwarna grey level (keabu-abuan)

disimpan dalam bentuk matrik berukuran dua dimensi m x n dengan m dan n adalah

ukuran citra.

Perhatikan matrik a dibawah ini:

Pada Matlab matrik a tersebut dapat dituliskan sebagai berikut:

Elemen matrik dapat dibaca menggunakan perintah dengan format baris dan kolom.

Sebagai contoh untuk membaca elemen pada baris ke 2 kolom ke 3 pada matrik a

dapat ditulis sebagai berikut:

Untuk membaca lebih dari satu elemen pada sebuah matrik dapat ditulis perintah

berikut:

Page 19: Modul Praktikum PCD Revisi

19

Untuk membaca elemen matrik dalam sebuah baris atau blok, perintah yang

digunakan adalah menggunakan operator colon (:). Perintah ini menghasilkan nilai

dalam bentuk vektor.

Contoh :

>> a(2, 1:3)

Ans =

1 5 -3

Perintah tersebut menampilkan baris ke-2 untuk kolom ke 1 sampai kolom ke-3.

Berikut contoh untuk menampilkan elemen matrik dalam blok elemen

Untuk menampilkan seluruh elemen pada sebuah baris, perintahnya seperti berikut:

Begitu juga jika ingin menampilkan semua elemen pada kolom tertentu

Page 20: Modul Praktikum PCD Revisi

20

Jika ingin menampilkan matrik a dalam sebuah kolom,

>> a(:)

3. Deteksi Tepi Citra

Untuk melakukan segmentasi citra, ada dua teknik yang dapat digunakan yaitu

dengan teknik threshold dan deteksi tepi. Pada praktikum ini akan mempelajari teknik

segmentasi dengan menggunakan deteksi tepi Robert, Prewitt dan Sobel.

Teknik yang perlu dipelajari sebelum melakukan teknik segmentasi adalah teknik

convolution.

Convolution

Gambar 1 mengilustrasikan proses konvolusi pada citra.

1. Buat kode program untuk pseudocode dibawah ini:

Page 21: Modul Praktikum PCD Revisi

21

2. Implementasikan pada sebuah citra teknik konvolusi pada pseudocode no

1 untuk menentukan gradient vektor, magnitude gradient pada deteksi tepi Robert!

3. Tampilkan hasil deteksi gambar tersebut!

4. Bandingkan hasil deteksi tepi menggunakan teknik segmentasi Robert, Prewitt, dan

Sobel!

Operator Prewitt

Operator Sobel

4. Implementasi Deteksi Tepi dengan Matlab

Tulis kode program dibawah ini untuk melakukan deteksi tepi dengan menggunakan

fungsi filter2

Pelajari dengan cermat proses yang terjadi pada program tersebut dan amati hasil deteksi

tepi.

Deteksi tepi dengan operator Prewitt

citra=imread('cameraman.tif');

ic = citra (:,:,1);

px=[-1 0 1;-1 0 1;-1 0 1]; %%

Page 22: Modul Praktikum PCD Revisi

22

Deteksi Vertikal

icx=filter2(px,ic); % convolution

figure,imshow(icx/255);

py=px'; % Deteksi Horizontal

icy=filter2(py,ic);

figure,imshow(icy/255);

edge_p=sqrt(icx.^2+icy.^2);

figure,imshow(edge_p/255);

edge_t=im2bw(edge_p/255,0.3);

figure, imshow(edge_t);

5. Membaca Sebuah File Citra (Image)

Selain sebagai software yang andal di bidang numerik, matlab pun andal di bidang

pengolahan citra digital. Sebelum melakukan pengolahan sebuah citra, hal pertama

yang perlu dilakukan adalah membaca sebuah citra (image). Hal-hal yang harus

diperhatikan adalah:

Menyiapkan sebuah figure kosong

Siapkan komponen yang akan digunakan, seperti pushbutton, text, dll

Atur property masing-masing komponen

Membuat kode program pada m-file

Berikut ini langkah-langkah dalam membaca sebuah citra menggunakan GUIDE

Matlab.

a. Desain figure

Desain figure seperti dalam Gambar 1. Dalam meletakkan komponen pallete

boleh tidak sesuai dengan gambar (sesuai selera).

Page 23: Modul Praktikum PCD Revisi

23

Gambar Desaim Figure Citra

b. Mengatur Layout Komponen

Setelah kita selesai mendesain figure, aturlah masing-masing komponen

menggunakan property inspector.

Komponen

Property Inspector

FontSize FontWeight String Tag

Static text 1

14

`Bold

COntoh Aplikasi Citra

text1

Static text 2

10

Normal (default)

Nama File

text2

Static text 3

10

Normal (default)

Ukuran

text3

Static text 4

10

Normal (default)

x

text4

Edit text 1

10

Normal (default)

Kosongkan

edit1

Edit text 2

10

Normal (default)

Kosongkan

edit2

Edit text 3

10

Normal (default)

Kosongkan

edit3

Pushbutton 1 10 `Bold Buka File Citra btn_buka

Pushbutton 2 10 `Bold Tutup Aplikasi btn_tutup

Axes - - - axes1

Page 24: Modul Praktikum PCD Revisi

24

c. Menyimpan Figure

Setelah selesai mendesain figure, langkah selanjutnya adalah menyimpan

figure, beri nama aplikasi_citra.fig, secara otomatis kita akan dibuatkan kerangka

m-file dengan nama yang sama.

d. Memprogram melalu M-file

Tambahkan beberapa program kode pada rutin callback yang diperlukan,

antara lain:

- btn_buka

Di bawah function btn_buka_callbck, tambahkan program menjadi berikut:

[nama_file1, nama_path1]=uigetfile(...

{'*.bmp; *.jpg', 'File citra (*.bmp, *.jpg)';

'*.bmp', 'File Bitmap(*.bmp)';...

'*.jpg', 'File Jpeg(*.jpg)';

'*.*', 'Semua File (*.*)'},...

'Buka file citra asli');

if ~isequal(nama_file1, 0) handles.data1=imread(fullfile(nama_path1,

nama_file1)); guidata(hObject, handles);

handles.current_data1=handles.data1; axes(handles.axes1);

imshow(handles.current_data1);

else

return

end

set(handles.edit1, 'String', nama_file1);

set(handles.edit2, 'String', size(handles.data1,1));

set(handles.edit3, 'String', size(handles.data1,2));

- btn_tutup

%untuk keluar dari apalikasi

delete(handles.figure1)

Page 25: Modul Praktikum PCD Revisi

25

BAB IV

HISTOGRAM CITRA

1. Menampilkan Histogram Citra

Pada pengolahan citra digital, histogram memberikan informasi cukup

penting tentang keberadaan pixel citra, apakah citra cenderung kea rah gelap atau ke

arah terang. Dari histogram pula, kita dapat mengetahui rata-rata (mean) pixel penyusun

citra.

Untuk membuat aplikasi, sebenarnya kita hanya tinggal memodifikasi aplikasi

pertama dan menambahkan satu axes untuk menampilkan histogramnya. Secara lengkap,

hal-hal yang perlu diperhatikan adalah:

Buka kembali GUIDE dan pilih open existing GUI, lalu dengan browse,

aktifkan file aplikasi_citra.fig.

Tambahkan 2 static text dan satu axes untuk menampilkan histogram sebuah citra.

Komponen

Property Inspector FontSize FontWeight String Tag

Static text 5 12 Bold Citra Asli text5 Static text 6 12 Bold Histogram text5 Axes2 - - - Axes2

Simpan dengan nama baru agar file lama tidak tertimpa, misalnya nama

aplikasi_citra_histogram.fig. Sebelum menjalankannya, tambahkan beberapa kode

program fibawah imshow (handles.current_data1) pada function

btn_buka_Callback(hObject, evendata, handles) dengan:

axes(handles.axes2);

imhist(handles.current_data1);

2. Citra Warna Menjadi Citra Hitam Putih

Cara membuat citra berwarna menjadi hitam putih menggunakan Graphical User

Interface (GUI) MATLAB Thresholding: Citra RGB -> Citra Grayscale -> Citra

Hitam Putih

Page 26: Modul Praktikum PCD Revisi

26

1. Buatlah rancangan GUI MATLAB yang terdiri dari 2 axes, 3 pushbutton, dan 1 slider

seperti tampak pada gambar di bawah ini

2. Hapus xTick, yTick, dan zTick pada masing-masing axes

3. Ubahlah string pada masing-masing pushbuttton dengan nama Open Image, Grayscale,

dan Save

4. Ubahlah Min slider menjadi 0 dan Max menjadi 255

5. Listing Programnya adalah sbb:

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

function varargout = Blood_Cells(varargin)

% BLOOD_CELLS M-file for Blood_Cells.fig

% BLOOD_CELLS, by itself, creates a new BLOOD_CELLS or raises the

% existing singleton*.

%

% H = BLOOD_CELLS returns the handle to a new BLOOD_CELLS or the

% handle to the existing singleton*.

% BLOOD_CELLS('CALLBACK',hObject,eventData,handles,...) calls the

local function named CALLBACK in BLOOD_CELLS.M with the given

input arguments.

%

% BLOOD_CELLS('Property','Value',...) creates a new BLOOD_CELLS or

raises the

% existing singleton*. Starting from the left, property value pairs are

% applied to the GUI before Blood_Cells_OpeningFcn gets called. An

% unrecognized property name or invalid value makes property application

% stop. All inputs are passed to Blood_Cells_OpeningFcn via varargin.

%

% *See GUI Options on GUIDE's Tools menu. Choose "GUI allows only

one instance to run (singleton)".

Page 27: Modul Praktikum PCD Revisi

27

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

34

35

36

37

38

39

40

41

42

43

44

45

%

% See also: GUIDE, GUIDATA, GUIHANDLES

% Edit the above text to modify the response to help Blood_Cells

% Last Modified by GUIDE v2.5 27-Nov-2012 00:17:40

% Begin initialization code - DO NOT EDIT

gui_Singleton = 1;

gui_State = struct('gui_Name', mfilename, ...

'gui_Singleton', gui_Singleton, ...

'gui_OpeningFcn', @Blood_Cells_OpeningFcn, ...

'gui_OutputFcn', @Blood_Cells_OutputFcn, ...

'gui_LayoutFcn', [] , ...

'gui_Callback', []);

if nargin && ischar(varargin{1})

gui_State.gui_Callback = str2func(varargin{1});

end

if nargout

[varargout{1:nargout}] = gui_mainfcn(gui_State, varargin{:});

else

gui_mainfcn(gui_State, varargin{:});

end

% End initialization code - DO NOT EDIT

% --- Executes just before Blood_Cells is made visible.

function Blood_Cells_OpeningFcn(hObject, eventdata, handles, varargin)

% This function has no output args, see OutputFcn.

% hObject handle to figure

% eventdata reserved - to be defined in a future version of MATLAB

% handles structure with handles and user data (see GUIDATA)

% varargin command line arguments to Blood_Cells (see VARARGIN)

% Choose default command line output for Blood_Cells

Page 28: Modul Praktikum PCD Revisi

28

46

47

48

49

50

51

52

53

54

55

56

57

58

59

60

61

62

63

64

65

66

67

68

69

70

71

72

73

74

handles.output = hObject;

movegui(hObject,'center')

% Update handles structure

guidata(hObject,handles);

% UIWAIT makes Blood_Cells wait for user response (see UIRESUME)

% uiwait(handles.figure1);

% --- Outputs from this function are returned to the command line.

function varargout = Blood_Cells_OutputFcn(hObject, eventdata, handles)

% varargout cell array for returning output args (see VARARGOUT);

% hObject handle to figure

% eventdata reserved - to be defined in a future version of MATLAB

% handles structure with handles and user data (see GUIDATA)

% Get default command line output from handles structure

varargout{1} = handles.output;

% --- Executes on button press in pushbutton1.

function pushbutton1_Callback(hObject, eventdata, handles)

% hObject handle to pushbutton1 (see GCBO)

% eventdata reserved - to be defined in a future version of MATLAB

% handles structure with handles and user data (see GUIDATA)

[name_file1,name_path1] = uigetfile( ...

{'*.bmp;*.jpg;*.tif','Files of type (*.bmp,*.jpg,*.tif)';

'*.bmp','File Bitmap (*.bmp)';...

'*.jpg','File jpeg (*.jpg)';

'*.tif','File Tif (*.tif)';

'*.*','All Files (*.*)'},...

'Open Image');

if ~isequal(name_file1,0)

handles.data1 = imread(fullfile(name_path1,name_file1));

guidata(hObject,handles);

Page 29: Modul Praktikum PCD Revisi

29

75

76

77

78

79

80

81

82

83

84

85

86

87

88

89

90

91

92

93

94

95

96

97

98

99

100

101

102

103

104

axes(handles.axes1);

imshow(handles.data1);

else

return;

end

% --- Executes on button press in pushbutton2.

function pushbutton2_Callback(hObject, eventdata, handles)

% hObject handle to pushbutton2 (see GCBO)

% eventdata reserved - to be defined in a future version of MATLAB

% handles structure with handles and user data (see GUIDATA)

image1 = handles.data1;

gray = rgb2gray(image1);

axes(handles.axes2);

imshow(gray);

handles.data2 = gray;

guidata(hObject,handles);

% --- Executes on slider movement.

function slider1_Callback(hObject, eventdata, handles)

% hObject handle to slider1 (see GCBO)

% eventdata reserved - to be defined in a future version of MATLAB

% handles structure with handles and user data (see GUIDATA)

% Hints: get(hObject,'Value') returns position of slider

% get(hObject,'Min') and get(hObject,'Max') to determine range of slider

gray = handles.data2;

value = get(handles.slider1,'value');

thresh = (gray > 0) & (gray < value);

axes(handles.axes2);

imshow(thresh);

handles.data3 = thresh;

guidata(hObject,handles);

Page 30: Modul Praktikum PCD Revisi

30

105

106

107

108

109

110

111

112

113

114

115

116

117

118

119

120

121

122

123

124

125

126

127

% --- Executes on button press in pushbutton3.

function pushbutton3_Callback(hObject, eventdata, handles)

% hObject handle to pushbutton3 (see GCBO)

% eventdata reserved - to be defined in a future version of MATLAB

% handles structure with handles and user data (see GUIDATA)

thresh = handles.data3;

[name_file_save,path_save] = uiputfile( ...

{'*.bmp','File Bitmap (*.bmp)';...

'*.jpg','File jpeg (*.jpg)';

'*.tif','File Tif (*.tif)';

'*.*','All Files (*.*)'},...

'Save Image');

if ~isequal(name_file_save,0)

imwrite(thresh,fullfile(path_save,name_file_save));

else

return

end

% --- Executes during object creation, after setting all properties.

function slider1_CreateFcn(hObject, eventdata, handles)

% hObject handle to slider1 (see GCBO)

% eventdata reserved - to be defined in a future version of MATLAB

% handles empty - handles not created until after all CreateFcns called

% Hint: slider controls usually have a light gray background.

if isequal(get(hObject,'BackgroundColor'),

get(0,'defaultUicontrolBackgroundColor'))

set(hObject,'BackgroundColor',[.9 .9 .9]);

end

Page 31: Modul Praktikum PCD Revisi

31

6. Ketika di Run maka akan muncul

7. Klik Open Image, pilih gambar yang ingin diproses

8. Klik Grayscale

9. Geser nilai Slider

10. Citra hitam putih yang terbentuk dapat disimpan dengan cara meng-klik

tombol Save

Page 32: Modul Praktikum PCD Revisi

32

3. Pergeseran Terang Gelap Citra

Cara membuat citra berwarna menjadi terang/gelap menggunakan Graphical User

Interface (GUI) MATLAB

1. Buatlah rancangan GUI MATLAB yang terdiri dari 2 axes, 2 pushbutton, dan 1

slider seperti tampak pada gambar di bawah ini

2. Hapus xTick, yTick, dan zTick pada masing-masing axes

3. Ubahlah string pada masing-masing pushbuttton dengan nama Buka Citra, dan Exit

4. Ubahlah Min slider menjadi 0 dan Max menjadi 255

5. Listing Programnya adalah sebagai berikut

1

2

3

4

5

6

7

8

9

10

11

12

function varargout = Terang_Gelap(varargin)

% TERANG_GELAP M-file for Terang_Gelap.fig

% TERANG_GELAP, by itself, creates a new TERANG_GELAP or raises the existing

% singleton*.

%

% H = TERANG_GELAP returns the handle to a new TERANG_GELAP or the handle to

% the existing singleton*.

%

% TERANG_GELAP('CALLBACK',hObject,eventData,handles,...) calls the local

% function named CALLBACK in TERANG_GELAP.M with the given input arguments.

%

% TERANG_GELAP('Property','Value',...) creates a new TERANG_GELAP or raises the

% existing singleton*. Starting from the left, property value pairs are

% applied to the GUI before Terang_Gelap_OpeningFcn gets called. An

Page 33: Modul Praktikum PCD Revisi

33

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

34

35

36

37

38

39

40

41

% unrecognized property name or invalid value makes property application

% stop. All inputs are passed to Terang_Gelap_OpeningFcn via varargin.

%

% *See GUI Options on GUIDE's Tools menu. Choose "GUI allows only one

% instance to run (singleton)".

%

% See also: GUIDE, GUIDATA, GUIHANDLES

% Edit the above text to modify the response to help Terang_Gelap

% Last Modified by GUIDE v2.5 01-Jan-2013 17:27:42

% Begin initialization code - DO NOT EDIT

gui_Singleton = 1;

gui_State = struct('gui_Name', mfilename, ...

'gui_Singleton', gui_Singleton, ...

'gui_OpeningFcn', @Terang_Gelap_OpeningFcn, ...

'gui_OutputFcn', @Terang_Gelap_OutputFcn, ...

'gui_LayoutFcn', [] , ...

'gui_Callback', []);

if nargin && ischar(varargin{1})

gui_State.gui_Callback = str2func(varargin{1});

end

if nargout

[varargout{1:nargout}] = gui_mainfcn(gui_State, varargin{:});

else

gui_mainfcn(gui_State, varargin{:});

end

% End initialization code - DO NOT EDIT

% --- Executes just before Terang_Gelap is made visible.

function Terang_Gelap_OpeningFcn(hObject, eventdata, handles, varargin)

Page 34: Modul Praktikum PCD Revisi

34

42

43

44

45

46

47

48

49

50

51

52

53

54

55

56

57

58

59

60

61

62

63

64

65

66

67

68

69

70

% This function has no output args, see OutputFcn.

% hObject handle to figure

% eventdata reserved - to be defined in a future version of MATLAB

% handles structure with handles and user data (see GUIDATA)

% varargin command line arguments to Terang_Gelap (see VARARGIN)

% Choose default command line output for Terang_Gelap

handles.output = hObject;

movegui(hObject,'center')

% Update handles structure

guidata(hObject, handles);

% UIWAIT makes Terang_Gelap wait for user response (see UIRESUME)

% uiwait(handles.figure1);

% --- Outputs from this function are returned to the command line.

function varargout = Terang_Gelap_OutputFcn(hObject, eventdata, handles)

% varargout cell array for returning output args (see VARARGOUT);

% hObject handle to figure

% eventdata reserved - to be defined in a future version of MATLAB

% handles structure with handles and user data (see GUIDATA)

% Get default command line output from handles structure

varargout{1} = handles.output;

% --- Executes on button press in pushbutton1.

function pushbutton1_Callback(hObject, eventdata, handles)

% hObject handle to pushbutton1 (see GCBO)

% eventdata reserved - to be defined in a future version of MATLAB

% handles structure with handles and user data (see GUIDATA)

set(handles.slider1,'value',0);

[name_file1,name_path1] = uigetfile( ...

{'*.bmp;*.jpg;*.tif','Files of type (*.bmp,*.jpg,*.tif)';

Page 35: Modul Praktikum PCD Revisi

35

71

72

73

74

75

76

77

78

79

80

81

82

83

84

85

86

87

88

89

90

91

92

93

94

95

96

97

98

99

'*.bmp','File Bitmap (*.bmp)';

'*.jpg','File jpeg (*.jpg)';

'*.tif','File Tif (*.tif)';

'*.*','All Files (*.*)'},...

'Open Image');

if ~isequal(name_file1,0)

handles.data1 = imread(fullfile(name_path1,name_file1));

guidata(hObject,handles);

axes(handles.axes1);

imshow(handles.data1);

axes(handles.axes2);

imshow(handles.data1);

else

return;

end

% --- Executes on button press in pushbutton2.

function pushbutton2_Callback(hObject, eventdata, handles)

% hObject handle to pushbutton2 (see GCBO)

% eventdata reserved - to be defined in a future version of MATLAB

% handles structure with handles and user data (see GUIDATA)

delete(handles.figure1);

% --- Executes on slider movement.

function slider1_Callback(hObject, eventdata, handles)

% hObject handle to slider1 (see GCBO)

% eventdata reserved - to be defined in a future version of MATLAB

% handles structure with handles and user data (see GUIDATA)

% Hints: get(hObject,'Value') returns position of slider

% get(hObject,'Min') and get(hObject,'Max') to determine range of slider

nilai_slider = get(handles.slider1,'value');

Page 36: Modul Praktikum PCD Revisi

36

100

101

102

103

104

105

106

107

108

109

110

111

112

113

114

115

116

117

118

119

120

121

num_citra = double(handles.data1);

[m, n] = size(handles.data1);

for i = 1:m

for j = 1:n

num_citra(i,j) = num_citra(i,j)+nilai_slider;

if num_citra(i,j) > 255

num_citra(i,j) = 255;

end;

if num_citra(i,j) < 0

num_citra(i,j) = 0;

end;

end;

end;

axes(handles.axes2);

gambar = uint8(num_citra);

imshow(gambar);

% --- Executes during object creation, after setting all properties.

function slider1_CreateFcn(hObject, eventdata, handles)

% hObject handle to slider1 (see GCBO)

% eventdata reserved - to be defined in a future version of MATLAB

% handles empty - handles not created until after all CreateFcns called

% Hint: slider controls usually have a light gray background.

if isequal(get(hObject,'BackgroundColor'), get(0,'defaultUicontrolBackgroundColor'))

set(hObject,'BackgroundColor',[.9 .9 .9]);

end

Page 38: Modul Praktikum PCD Revisi

38

BAB IV

PRODUK APLIKASI PENGOLAHAN CITRA DIGITAL

1. Deteksi Multiple Circle pada Citra RGB

Fungsi-fungsi pendeteksi lingkaran yang dikembangkan oleh David Young pada

tahun 2008 dan diperbaharui pada 2010 mampu mendeteksi obyek yang berbentuk

lingkaran dalam citra RGB. Ada 3 fungsi yang harus digunakan dalam melakukan

pendeteksian :

1. Fungsi untuk memproses transformasi Hough.

Untuk memproses citra dengan transformasi hough digunakan fungsi :

[h, margin] = circle_Hough(fb,rrange,varargin)

Dimana fb adalah citra biner yang berisi obyek lingkaran yang akan dideteksi.

Citra fb ini adalah hasil deteksi tepi. Range adalah range perkiraan radius pada jumlah

lingkaran yang akan dideteksi. Contoh jika radius sejumlah lingkaran diperkirakan

sekitar 20-30 piksel maka parameter ini dapat diberi nilai 20:1:30. Varargin bersifat

opsional. Bentuk dari fungsi ini antara lain :

a. [h,margin]=CIRCLE_HOUGH(fb,RADII), digunakan untuk mengambil citra

biner 2D fb dan vector RADII yang memberikan radius lingkaran untuk

mendeteksi lingkaran mengembalikan akumulator 3-D pada array h, dan sebuah

margin integer seperti H(I,J,K) yang berisi sejumlah lingkaran yang berpusat di

fb(i-margin, j-margin) dengan radius RADII(K) Lingkaran yang melewati fb

tetapi pusatnya berada diluar fb juga masuk dalam pilihan.

b. [h,margin]=CIRCLE_HOUGH(FB, RADII,opt1,...) mempunyai bentuk yang

sama dengan bentuk bentuk 1 hanya saja ditambah dengan option untuk diset.

Setiap option bernilai string yang dimasukkan dalam parameter input.

„same‟ mengambilkan hanya bagian h yang berhubungan dengan posisi pusat di

dalam citra. Dalam kasus ini H(:,:,K) mempunyai dimensi yang sama seperti FB

dan margin adalah 0. Pilihan ini tidak perlu digunakan jika lingkaran yang

pusatnya berada di luar citra ingin dideteksi juga.

„normalise‟ mengalikan setiap potongan H,H(:,:,K) dengan 1/RDII(K). Hal ini

mungkin berguna karena lingkaran yang lebih besar mendapatkan lebih banyak

votes(pilihan) yang kasar dalam proporsi terhadap radiusnya. Setiap fitur dalam

Page 39: Modul Praktikum PCD Revisi

39

fb mendapatkan 1 vote untuk setiap lingkaran. Fungsi ini dengan mudah

digeneralisasi untuk memberikan bobot fitur.

2. Fungsi untuk mencari beberapa peaks dalam akumulator.

Fungsi untuk mencari beberapa peaks dalam akumulator yang merupakan fungsi

circle_hough dapat menggunakan :

peaks = circle_Houghpeaks(h,radii,varargin)

Dengan format fungsi

PEAKS = CIRCLE_HOUGHPEAKS(H,RADII,MARGIN,OPTIONS)

menempatkan posisi peaks dalam outputs CIRCLE_HOUGN. Hasilnya PEAKS adalah

array 3 x N, dimana setiap kolom memberikan posisi dan radius dari lingkaran yang

mungkin ada dalam array yang asli. Baris pertama peaks menyimpan koordinat x

dan baris kedua koordinat y. baris ketiga adalah radius. H adalah array akumulator

3D yang diberikan oleh CIRCLE_HOUGH. RADII adalah array radius yang

diberikan sebagai parameter dalam CIRCLE_HOUGH. MARGIN sifatnya opsional,

boleh diabaikan jika pilihan „same‟ digunakan pada CIRCLE_HOUGH. Jika tidak,

seharusnya menjadi hasil kedua yang dikembalikan oleh CIRCLE_HOUGH.

OPTION formatnya daftar pasangan parameter/value yang dipisahkan koma dengan

pengaruh sebagai berikut :

„smoothxy‟ menyebabkan setiap lapisan x-y dari H diperhalus sebelum pendeteksian

peak menggunakan kernel Gaussian 2D dimana parameter sigma diberikan oleh nilai

argument ini.

„smoothr‟ menyebabkan setiap kolom radius dari H diperhalus sebelum pendeteksian

peak menggunakn kernel Gaussian 1D dimana parameter sigma diberikan oleh nilai

argument ini.

Catatan : smoothing mungkin berguna untuk menempatkan peak dalam array

akumulator yang terganggu. Tetapi juga menyebabkan kinerja menurun jika H berisi

peaks yang tajam pilihan ini paling berguna jika penekanan neighborhood tidak

digunakan.

‘threshold’ menset jumlah minimum dari voyes (setelah penghalusan) yang diperlukan

untuk penghitungan peaks

‘Npeaks’ menset jumlah maksimum peaks untuk ditemukan. Peaks NPeaks tertinggi

dikembalikan, jika threshold menyebabkan lebih sedikit peaks NPEAKS yang

tersedia.

Page 40: Modul Praktikum PCD Revisi

40

„Nhoodxy‟ harus diikuti dengan integer ganjil, yang menset pemisihan spasial minimum

antara peaks nilai defaultnya adalah 1.

„Nhoodr‟ harus diikuti oleh bilangan integer ganjil yang menset pemisahan spasial

minimum pada peaks nilai defaultnya 1.

Ketika Peaks ditemukan, tidak ada peak lain dengan posisi dalam kotak NHOODXY x

dan NHOODXY x NHOODXY yang berpusat pada peak pertama yang akan

dideteksi. Peak yang ditemukan secara urut; misalnya, setelah peak tertinggi

ditemukan, yang kedua menemukan yang lebih tinggi dalam kebutuhan H kotak

keluaran menemukan peak yang pertama. Hal ini sama dengan mekanisme yang

diberikan oleh fungsi toolbox HOUGHPEAKS.

Jika option „Nhoodxy‟ dan „Nhoodr‟ diabaikan, pengaruhnya tidak sama, seperti setting

keduanya menjadi 1. Malahan algoritma sekuensial dengan lewatan yang berulang

dalam H., fungsi toolbox IMREGIONALMAX digunakan. Hal ini akan memberikan

hasil yang agak berbeda selama titik threshold di atas bertetangga dengan peak yang

akan tampak sebagai peak independen menggunakan algoritma sequential

suppression tetapi tidak akan menjadi local maksimum.

3. Memberikan lingkaran sebagai hasil.

Fungsi yang digunakan untuk memberikan koordinat lingkaran sebagai hasil adalah :

[x,y] = circlepoints(r).

Dimana fungsi ini memberikan koordinat titik integer dari lingkaran dengan radius r,

sampai tidak ada yang diulang dan tidak ada gaps dalam lingkaran (dalam 8-

connectivity).

Contoh berikut akan melakukan pendeteksian lingkaran pada beberapa obyek

koin dalam sebuah citra. Perintah untuk membaca citra dan mendeteksi tepi dengan

metode Canny.

1 >> im=imread (‘coins.png’);

2 >> e = edge (im,‟canny‟);

3 >> imshow (e);

Bulatan lingkaran koin memiliki radius antara 20-30 piksel. Untuk meyakinkan bahwa

range tersebut terliputi, radius pencarian dari 15-40 piksel dengan step 1. Piksel untuk

setiap radius yang digunakan dalam pendeteksian. Pilihan „same‟ dipilih untuk

menyederhanakan pemrosesan berikutnya, dan pilihan „normalise‟ untuk menghindari

dari bias pada pencarian lingkaran yang lebih besar.

Page 41: Modul Praktikum PCD Revisi

41

4 >>radii = 15:1:40;

5 >>h=circle_Hough(e,radii,‟same‟,‟normalise‟);

Mencari beberapa peak dalam akumulator, menggunakan metode neighborhood

suppression dari pencarian peak untuk meyakinkan bahwa mencari secara spasial

lingkaran yang terpisah. Dipilih 10 peaks yang paling menonjol, karena dalam citra

terlihat ada 10 lingkaran koin yang dicari.

6 >>Peaks=circle_Houghpeaks(h,radii,’nhoodxy,’15,’nhoodr’,21,’npeaks’,10);

Untuk melihat hasilnya, lingkaran yang ditemukan digambar dalam citra

menggunakan kedua posisi dan radius yang disimpan dalam array peaks. Fungsi circle

point cocok digunakan untuk tujuan ini.

7 >>imshow(im);

8 >>hold on;

9 >>for peak = peaks

10 [x,y] = circlepoints(peak(3));

11 Plot(x+peak(1),y+peak(2),‟g-);

12 End

13 Hold off;

Kodingan circle hough di lampiran b-3 . dibelakang buku.

Hasil Pendeteksian ditampilkan pada gambar 6.1

a. Citra asli

Page 42: Modul Praktikum PCD Revisi

42

b. Citra biner hasil deteksi Canny Citra a

c. Citra dengan 10 lingkaran yang dideteksi

Gambar 6.1 Pendeteksian sejumlah lingkaran pada citra RGB

2. Ekstraksi Nomor Plat Kendaraan bermotor.

Aplikasi yang dikembangkan oleh Jeny Rajan dan Chandrashekar dari Universitas

Antwerp Belgia ini digunakan untuk melakukan pengekstrakan nomor plat kendaraan

bermotor. Aplikasi ini melakukan beberapa proses diantaranya :

a. Pemfilteran dengan filter median pada citra grayscale untuk melepaskan noise agar

tidak mengganggu.

Page 43: Modul Praktikum PCD Revisi

43

b. Mendeteksi tepi citra dengan filter sobel untuk mendapatkan tepi obyek dari citra

input dalam bentuk citra biner.

c. Melakukan filter smoothing untuk menghilangkan komponen yang terkoneksi pada

citra biner.

d. Menghitung komponen yang terkoneksi obyek menggunakan fungsi bwlabel. Bagian

ini sangat penting karena di sini harus diketahui nomor obyek. Gunakan fungsi

pixval (dijalankan secara interaktif pada citra biner) untuk mengetahui nomor obyek

yang dipakai oleh nomor plat.

e. Berbekal nomor obyek plat pada citra biner tersebut, gunakan untuk pengekstrakan

pada citra biner baru (semua piksel bernilai 0) sehingga piksel dari citra biner

dengan nomor yang sudah didapatkan berpindah ke citra biner baru dengan piksel

putih.

a. Citra RGB

b. Hasil pengekstraan plat nomor citra a

Gambar 6.2 Pendeteksian dan pengekstraan nomor plat kendaraan

Contoh berikut ini akan mendeteksi dan mengekstrak nomor plat yang berada dalam citra

yang ditampilkan pada gambar 6.2 (a). Hasilnya tampak pada gambar 6.2 (b). Kode perintah

yang dapat digunakan adalah sebagai berikut :

1 >> i=imread(‘citra.jpg’);

2 >> nomor=platenumber(i);

3 >> figure, imshow(k);

Dimana i adalah citra RGB atau grayscale yang akan diekstrak sedangkan argument

nomor adalah citra biner yang berisi nomor plat yang telah diekstrak sebagai obyek di

dalamnya.

Page 44: Modul Praktikum PCD Revisi

44

3. Deteksi dan Ekstraksi Bagian Wajah Pada Citra Single Face

Aplikasi pendeteksian bagian wajah pada citra single face dikembagkan oleh

Aruma Chatarjee yang dirilis tanggal 14 April 2009. Aplikasi ini mampu mendeteksi

wajah dengan baik (di-cover oleh mata dan bibir) pada citra berisi wajah tunggal.

Aplikasi ini melakukan beberapa proses dalam pendeteksiannya :

a. Melakukan proses pengkonversian citra ke citra biner untuk digunakan pada proses

berikutnya.

b. Menghitung komponen yang terkoneksi menggunakan fungsi bwlabel.

c. Menghitung properties boundingbox dari citra yang sudah berlabel.

d. Mengkonversi hasil perhitungan bounding box yang sudah ditemukan pada citra

grayscale input.

e. Untuk mendapatkan citra wajahnya saja maka perlu dilakukan pengekstrakan

dengan mengambil bagian wajah yang sudah dibatasi oleh BoundingBox.

a. Citra asli

b. Citra a dengan boundary

wajah citra a

c. Citra wajah hasil

pengekstrakan

Page 45: Modul Praktikum PCD Revisi

45

d. Citra Grayscale

e. Citra a dengan boundary

wajah citra d

f. Citra wajah hasil

pengekstrakan

Gambr 6.3 Pendekatan dan pengekstrakan bagian wajah pada citra single face

Contoh berikut ini akan melakukan pendeteksian wajah pada gambar 6.3 (a) dan (d),

dimana hasilnya untuk citra wajah dengan BoundingBox pada wajah ditampilkan pada

gambar 6.3 (b) dan (e), sedangkan citra hasil pengekstrakan ditampilkan pada gambar 6.3 (c)

dan (f). Sintaks yang digunakan :

1 >> i=imread(‘citra1.jpg’);

2 >> j=imread(„citra2.jpg‟);

3 >> [m1,theface1] = face(i);

4 >> [m2,theface2] = face(2);

5 >> figure, imshow(m1);

6 >> figure, imshow(theface1);

7 >> figure, imshow(m2);

8 >> figure, imshow(theface2);

Page 46: Modul Praktikum PCD Revisi

46

4. Ekstraksi Citra Iris Mata

Beberapa proses yang dilakukan dalam fungsi pengekstrakan iris mata ini adalah :

a. Citra grayscale mata dilakukan binerisasi, untuk grayscale 0-40 dan 115-255

diubah nilai intensitasnya menjadi 0 (background). Sedangkan 41-114 ,menjadi 1

(foreground). Treshold ini diambil dari beberapa sampel data dan disimpulkan

bahwa nilai grayscale iris rata-rata adalah 41-114.

b. Melakukan penyambungan piksel yang putus.

c. Kemudian daerah yang kosong (hitam) pada bagian iris yang ikut terbawa menjadi

background diisi dengan nilai 1 agar menjadi foreground (bagian iris).

d. Membuang daerah citra biner yang jumlah pikselnya < jumlah piksel iris. Hal ini

untuk menghilangkan detail-detail kecil mempunyai kemiripan nilai intensitas

dengan iris.

e. Untuk menutup bagian iris yang masih berlubang dibagian luar dan dalam maka

dilakukan dilasi dengan strel yang cukup menyambungnya.

f. Daerah yang masih berlubang diisi kembali kemudian dilakukan erosi dengan

strel yang pada langkah 5.

g. Citra biner siap dilakukan pengekstrakan bagian iris mata.

a. Citra RGB mata 1

b. Iris hasil ekstraksi pada citra a

Page 47: Modul Praktikum PCD Revisi

47

c. Citra RGB mata 2

d. Iris hasil ekstraksi pada citra c

e. Citra RGB mata 3

c. Iris hasil ekstraksi pada citra e

Gambar 6.4 Pengekstrakan iris dari citra mata

Pada contoh berikut akan dilakukan pengekstrakan iris mata pada tiga sampel citra

pada gambar 6.4 (a), (c), dan (e). Perintah yang digunakan :

1 >> i = imread(‘citra1.jpg’);

2 >> Gi = ekstrakiris (i); figure, imshow(Gi);

3 >> j = imread(„citra2.jpg‟);

4 >> Gj = ekstrakiris (j); figure, imshow(Gj);

5 >> k = imread(„citra3.jpg‟);

6 >> Gk = ekstrakiris (k); figure, imshow(Gk);

Page 48: Modul Praktikum PCD Revisi

48

Hasil masing-masing ekstraksi 3 citra secara berurut-urut ditampilkan pada gambar

6.4 (b), (d), dan (f). dari gambra tersebut terlihat bahwa citra pada gambar 6.4 (a) dan (c)

menghasilkan ekstraksi yang sempurna. Sedangkan untuk gambar 6.4 (e) menghasilkan

ekstraksi iris yang mengikutkan bagian kulit/bulu mata yang menutupi sebagian iris.

Tetapi keikutsertaan bagian yang tidak diperlukan tidak terlalu menggangu untuk

dilakukan proses berikutnya.

5. Segmentasi dengan Active Contour

Fungsi untuk melakukan segmentasi berbasis Active Contour ini dikembangkan

oleh Shawn Lankton yang dirilis pertama pada tanggal 12 April 2008 dan diperbaharui

kembali pada tanggal 15 April 2008 ini mampu melakukan segmentasi dengan baik pada

obyek dalam citra RGB.

Fungsi untuk melakukan segmentasi adalah

seg=region_seg(f,init_mask,max_its,alpha,display);

Dimana f adalah parameter untuk citra RGB yang akan dilakukan segmentasi.

Init_mask adalah inisialisasi mask yang akan digunakan. Bentuknya adalah citra biner

dengan nilai 0 untuk background dan 1 untuk nilai foreground. Max_its adalah jumlah

maksimal perubahan active contour yang diperbolehkan untuk segmentasi. Alpha adalah

bobot untuk smoothing dengan default 0.2. parameter display menyatakan jika bernilai

true maka visualisasi proses pergerakan active contour saat segmentasi akan ditampilkan.

Jika false maka hanya hasil akhir yang akan ditampilkan. Sedangkan output seg adalah

citra biner hasil segmentasi.

Contoh berikut ini akan melakukan segmentasi dengan fungsi tersebut. Hasil

ditampilkan pada gambar 6.5. perintah dibawah ini melakukan pembacaan citra,

menyiapkan mask yang digunakan.

1 >> i=imread(‘citra.jpg’);

2 >> m=zeros(size(I,1),size(I,2));

%membuat inisialisasi mask

3 >> m(111:222,123:234) = 1;

Page 49: Modul Praktikum PCD Revisi

49

Perintah berikut ini untuk mengubah ukuran citra menjadi setengahnya agar

komputasi menjadi lebih cepat.

4 >> I=imresize(I,.5); % membuat citra lebih kecil

5 >> m=imresize(m,.5); % untuk komputasi lebih cepat

Perintah berikut ini adalah untuk melakukan penampilan citra asli. Mask yang

digunakan pada sebuah gambar di layar yang dibagi menjadi empat bagian.

6 >> subplot(2,2,1); imshow (I); title(‘Input Image’);

7 >> subplot(2,2,2); imshow (m); title(„Initialization‟);

8 >> subplot(2,2,3); title („Segmentation);

Perintah berikut adalah untuk melakukan segmentasi dengan fungsi di atas.

9 >> seg=region_seg(I,m,250);

%fungsi untuk melakukan segmentasi

Hasil akhir segmentasi ditampilkan dengan perintah berikut :

10 >> subplot(224); imshow(seg); title (‘Global Region Based

Segmentation);

Input Image

a. Citra asli RGB

Initialization

b. Inisial Mask

Page 50: Modul Praktikum PCD Revisi

50

250 Iterations

c. Proses segmentasi

Global Region-Based Segmentation

d. Hasil segmentasi

6. Pengenalan pola bentuk-bentuk bangun datar

Fungsi yang digunakan untuk mengklasifikasikan bentuk obyek-obyek bangun

datar pada sebuah citra dikembangkan oleh Ahmed Samieh Abd El-Watab dari

Universitas Al-Azhar Faculty Of Engineering, System & Computers Engineering

Department yang dirilis pada tanggal 14 Desember 2006 ini mampu mengenali obyek

bangun datar untuk bentuk bujur sangkar, persegi panjang, lingkaran, dan lainnya.

Beberapa langkah yang digunakan dalam fungsi tersebut adalah sebagai berikut :

a. Pembacaan citra

b. Mengkonversi citra RGB ke grayscale

c. Menthreshold citra grayscale agar menjadi citra biner. Jika hasil citra biner terbalik

(0 foreground dan 1 background) maka dilakukan inverse.

d. Mencari konsentrasi boundary.

e. Menentukan property bangun datar.

f. Mengkalsifikasikan bangun datar menurut propetinya.

Dalam pengklasifikasian ini, untuk bujur sangkar diberi nilai 3, persegi panjang

diberi nilai 2, lingkaran diberi nilai 1, bentuk lain diberi nilai 0. Dengan sintaks sebagai

berikut :

w=classify(f);

dimana f adalah citra RGB yang berisi obyek bangun datar. Sedangkan w

adalah citra RGB yang diberi tanda masing-masing untuk bentuk-bentuk yang

Page 51: Modul Praktikum PCD Revisi

51

dikenali. Contoh pengklasifikasian obyek bangun datar pada citra RGB seperti

gambar 6.6 berikut :

a. Citra asli RGB

b. Citra hasil klasifikasi obyek bangun datar

Gambar 6.6 Pengklasifikasian obyek bangun datar pada citra RGB

Page 52: Modul Praktikum PCD Revisi

52

OPERATOR PADA MATLAB

Operator Name Matlab

function

Examples

+ Addition plus(A, B) a + b

Subtraction minus(A,B) a - b

.* Array multiplication times(A,B) C = A.*B, C(I,J)=A(I,J)*B(I,J)

* Matrix

multiplication

mtimes(A,B) A*B, standard matrix multiplication

./ Array right division rdivide(A,B) C = A./B, C(I,J) = A(I,J)/B(I,J)

.\ Array left division ldivide(A,B) C = A.\B, C(I,J) = B(I,J)/A(I,J)

/ Matrix right

division

mrdivide(A,B) A/B, is roughly A*inv(B)

\ Matrix left division mldivide(A,B) A\B, is roughly inv(A)*B

.^ array power power(A,B) C = A.^B, C(I,J) = A(I,J)^B(I,J)

^ Matrix power mpower(A,B) C = mpower(A,x) is A(I,J)x

C = mpower(x,A) is C(I,J) = xA(I,J)

C = mpower(A,B) is an error .‟ Vector, matrix

transpose

transpose(A) A.‟ as standard

„ Vector, matrix

complex

conjugate

ctranspose(A) A‟ as standard

+ unary plus uplus(A) +A

- Unary minus uminus(A) -A

: Colon Discussed in section 4.2

Table 1: Operasi Array and Matrix

Function Description

imadd Adds two images, or an image and constant

imsubtract Subtracts two images, or a constant from an image

immultiply Multiplies an image by a constant, or two images pixel by pixel

imdivide Divides an image by a constant, or two images pixel by pixel

Page 53: Modul Praktikum PCD Revisi

53

imabsdiff Computes absolute difference between two images

imcomplement Computes the negative

imlincomb Computes a linear combination, A*a + B*b + C*c + …, A is an

image, a a scalar

Table 2: Operator Image Processing