modul praktikum pcd revisi
DESCRIPTION
ModulTRANSCRIPT
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
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
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.
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.
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.
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)
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
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).
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.
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.
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.
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.
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
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
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.
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
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.
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:
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
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:
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]; %%
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).
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
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)
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
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)".
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
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);
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);
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
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
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
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)
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)';
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');
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
37
6. Ketika di Run maka akan muncul
7. Klik Buka Citra, pilih gambar yang ingin diproses
8. Geser slider ke arah terang
9. Geser silder ke arah gelap
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
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.
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.
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
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.
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.
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
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);
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
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);
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;
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
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
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
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
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