Anda di halaman 1dari 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

DAFTAR ISI

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

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

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

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

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

2. Kuantisasi....................................................................................

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

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 bidangbidang:
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.

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

MATLABs 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.

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.

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)

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

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
uint8

Interpretation
unsigned 8-bit integer

Range
[0, 255]

uint16
uint32
int8
int16
int32
Single
Double
Char
Logical

unsigned 16-bit integer


unsigned 32-bit integer
signed 8-bit integer
signed 16-bit integer
signed 32-bit integer
single precision floating point
double
precision floating point
number
character
number
values are 0 or 1

[0, 65535]
[0, 4294967295]
[-128, 127]
[-32768, 32767]
[-2147483648,
38, 1038]
[-102147483647]
[-10308, 10308]
(2 bytes per element)
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 nilainilai 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).

Tabel dibawah ini merupakan toolbox yang menyediakan fungsi spesifik


yang mengerjakan penskalaan untuk mengkonversi antara kelas dan tipe citra :
Function
im2uint8
im2uint16
mat2gray
im2double
im2bw

Input Type
Logical, uint8, uint16, double
Logical, uint8, uint16, double
Double
Logical, uint8, uint16, double
Uint8, uint16, double

Output Type
Unint8
Uint16
Double in range [0, 1]
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.

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.

10

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 abuabu 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.

11

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 abuabu 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.

12

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 nonuniform. 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

13

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

14

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 nonuniform 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.
15

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

16

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.

17

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:

18

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

-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

19

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:

20

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]; %%

21

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).

22

Gambar Desaim Figure Citra

b. Mengatur Layout Komponen


Setelah kita selesai mendesain figure, aturlah masing-masing komponen
menggunakan property inspector.
Property Inspector
Komponen

FontSize

FontWeight

Static text 1

14

Static text 2

10

Static text 3

10

Static text 4

10

Edit text 1

10

Edit text 2

10

Edit text 3
Pushbutton 1

10
10

`Bold
Normal
(default)
Normal
(default)
Normal
(default)
Normal
(default)
Normal
(default)
Normal
(default)
`Bold

Pushbutton 2

10

`Bold

Axes

String

Tag

COntoh Aplikasi
Citra

text1

Nama File

text2

Ukuran

text3

text4

Kosongkan

edit1

Kosongkan

edit2

Kosongkan
Buka File Citra

edit3
btn_buka

Tutup Aplikasi

btn_tutup
axes1

23

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)

24

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
Static text 5
Static text 6
Axes2

Property Inspector
FontSize
FontWeight
12
Bold
12
Bold
-

String
Citra Asli
Histogram
-

Tag
text5
text5
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

25

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

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*.

% handle to the existing singleton*.

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

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

local

function named CALLBACK in BLOOD_CELLS.M with the given

input arguments.
%

10

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


raises the

11

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

12

applied to the GUI before Blood_Cells_OpeningFcn gets called. An

13

unrecognized property name or invalid value makes property application

14

stop. All inputs are passed to Blood_Cells_OpeningFcn via varargin.

%
15
16

*See GUI Options on GUIDE's Tools menu. Choose "GUI allows only
one instance to run (singleton)".

26

17

18

% See also: GUIDE, GUIDATA, GUIHANDLES

19

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

20

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

21

% Begin initialization code - DO NOT EDIT

22

gui_Singleton = 1;

23

gui_State = struct('gui_Name',

24

'gui_Singleton', gui_Singleton, ...

25

'gui_OpeningFcn', @Blood_Cells_OpeningFcn, ...

26

'gui_OutputFcn', @Blood_Cells_OutputFcn, ...

27

'gui_LayoutFcn', [] , ...

28

'gui_Callback', []);

29

if nargin && ischar(varargin{1})

30

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

31

end

32

if nargout

33

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

34

else

35

gui_mainfcn(gui_State, varargin{:});

36

end

37

% End initialization code - DO NOT EDIT

38

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

39

function Blood_Cells_OpeningFcn(hObject, eventdata, handles, varargin)

40

% This function has no output args, see OutputFcn.

41

% hObject

42

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

43

% handles

44

% varargin command line arguments to Blood_Cells (see VARARGIN)

45

% Choose default command line output for Blood_Cells

mfilename, ...

handle to figure

structure with handles and user data (see GUIDATA)

27

46

handles.output = hObject;

47

movegui(hObject,'center')

48

% Update handles structure

49

guidata(hObject,handles);

50

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

51

% uiwait(handles.figure1);

52

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

53

function varargout = Blood_Cells_OutputFcn(hObject, eventdata, handles)

54

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

55

% hObject

56

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

57

% handles

58

% Get default command line output from handles structure

59

varargout{1} = handles.output;

60

% --- Executes on button press in pushbutton1.

61

function pushbutton1_Callback(hObject, eventdata, handles)

62

% hObject

63

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

64

% handles

65

[name_file1,name_path1] = uigetfile( ...

66

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

67

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

68

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

69

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

70

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

71

'Open Image');

72

if ~isequal(name_file1,0)

73

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

74

guidata(hObject,handles);

handle to figure

structure with handles and user data (see GUIDATA)

handle to pushbutton1 (see GCBO)

structure with handles and user data (see GUIDATA)

28

75

axes(handles.axes1);

76

imshow(handles.data1);

77

else

78

return;

79

end

80

% --- Executes on button press in pushbutton2.

81

function pushbutton2_Callback(hObject, eventdata, handles)

82

% hObject

83

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

84

% handles

85

image1 = handles.data1;

86

gray = rgb2gray(image1);

87

axes(handles.axes2);

88

imshow(gray);

89

handles.data2 = gray;

90

guidata(hObject,handles);

91

% --- Executes on slider movement.

92

function slider1_Callback(hObject, eventdata, handles)

93

% hObject

94

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

95

% handles

96

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

97

98

gray = handles.data2;

99

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

100

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

101

axes(handles.axes2);

102

imshow(thresh);

103

handles.data3 = thresh;

104

guidata(hObject,handles);

handle to pushbutton2 (see GCBO)

structure with handles and user data (see GUIDATA)

handle to slider1 (see GCBO)

structure with handles and user data (see GUIDATA)

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

29

105

% --- Executes on button press in pushbutton3.

106

function pushbutton3_Callback(hObject, eventdata, handles)

107

% hObject

108

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

109

% handles

110

thresh = handles.data3;

111

[name_file_save,path_save] = uiputfile( ...

112

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

113

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

114

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

115

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

116

'Save Image');

117

if ~isequal(name_file_save,0)

118

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

119

else

120

return

121

end

122

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

123

function slider1_CreateFcn(hObject, eventdata, handles)

124

% hObject

125

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

126

% handles

127

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

handle to pushbutton3 (see GCBO)

structure with handles and user data (see GUIDATA)

handle to slider1 (see GCBO)

empty - handles not created until after all CreateFcns called

if isequal(get(hObject,'BackgroundColor'),
get(0,'defaultUicontrolBackgroundColor'))
set(hObject,'BackgroundColor',[.9 .9 .9]);
end

30

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

31

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

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*.

%
5

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.

%
10

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

11

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

12

applied to the GUI before Terang_Gelap_OpeningFcn gets called. An

32

13

unrecognized property name or invalid value makes property application

14

stop. All inputs are passed to Terang_Gelap_OpeningFcn via varargin.

15

16

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

instance to run (singleton)".

17

18

% See also: GUIDE, GUIDATA, GUIHANDLES

19
20

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

21
22

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

23
24

% Begin initialization code - DO NOT EDIT

25

gui_Singleton = 1;

26

gui_State = struct('gui_Name',

mfilename, ...

27

'gui_Singleton', gui_Singleton, ...

28

'gui_OpeningFcn', @Terang_Gelap_OpeningFcn, ...

29

'gui_OutputFcn', @Terang_Gelap_OutputFcn, ...

30

'gui_LayoutFcn', [] , ...
'gui_Callback', []);

31
32
33

if nargin && ischar(varargin{1})


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

34
35
36
37
38
39

if nargout
[varargout{1:nargout}] = gui_mainfcn(gui_State, varargin{:});
else
gui_mainfcn(gui_State, varargin{:});
end
% End initialization code - DO NOT EDIT

40

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

41

function Terang_Gelap_OpeningFcn(hObject, eventdata, handles, varargin)

33

42

% This function has no output args, see OutputFcn.

43

% hObject

44

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

45

% handles

46

% varargin command line arguments to Terang_Gelap (see VARARGIN)

47

% Choose default command line output for Terang_Gelap

48

handles.output = hObject;

49

movegui(hObject,'center')

50

% Update handles structure

51

guidata(hObject, handles);

52

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

53

% uiwait(handles.figure1);

handle to figure

structure with handles and user data (see GUIDATA)

54
55

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

56

function varargout = Terang_Gelap_OutputFcn(hObject, eventdata, handles)

57

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

58

% hObject

59

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

60

% handles

61

% Get default command line output from handles structure

62

varargout{1} = handles.output;

handle to figure

structure with handles and user data (see GUIDATA)

63
64

% --- Executes on button press in pushbutton1.

65

function pushbutton1_Callback(hObject, eventdata, handles)

66

% hObject

67

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

68

% handles

69

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

handle to pushbutton1 (see GCBO)

structure with handles and user data (see GUIDATA)

[name_file1,name_path1] = uigetfile( ...


70

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

34

71

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

72

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

73

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

74

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

75

'Open Image');

76

if ~isequal(name_file1,0)

77

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

78

guidata(hObject,handles);

79

axes(handles.axes1);

80

imshow(handles.data1);

81

axes(handles.axes2);

82

imshow(handles.data1);

83

else

84

return;

85

end

86

% --- Executes on button press in pushbutton2.

87

function pushbutton2_Callback(hObject, eventdata, handles)

88

% hObject

89

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

90

% handles

91

delete(handles.figure1);

92

% --- Executes on slider movement.

93

function slider1_Callback(hObject, eventdata, handles)

94

% hObject

95

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

96

% handles

97

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

98

99

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

handle to pushbutton2 (see GCBO)

structure with handles and user data (see GUIDATA)

handle to slider1 (see GCBO)

structure with handles and user data (see GUIDATA)

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

35

100

num_citra = double(handles.data1);

101

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

102

for i = 1:m

103

for j = 1:n

104

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

105

if num_citra(i,j) > 255

106

num_citra(i,j) = 255;

107

end;

108

if num_citra(i,j) < 0

109

num_citra(i,j) = 0;

110
111

end;
end;

112

end;

113

axes(handles.axes2);

114

gambar = uint8(num_citra);

115

imshow(gambar);

116

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

117

function slider1_CreateFcn(hObject, eventdata, handles)

118

% hObject

119

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

120

% handles

121

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

handle to slider1 (see GCBO)

empty - handles not created until after all CreateFcns called

if isequal(get(hObject,'BackgroundColor'), get(0,'defaultUicontrolBackgroundColor'))
set(hObject,'BackgroundColor',[.9 .9 .9]);
end

36

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

37

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

38

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.

39

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 8connectivity).
Contoh berikut akan melakukan pendeteksian lingkaran pada beberapa obyek
koin dalam sebuah citra. Perintah untuk membaca citra dan mendeteksi tepi dengan
metode Canny.
1
2
3

>> im=imread (coins.png);


>> e = edge (im,canny);
>> 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.
40

4
5

>>radii = 15:1:40;
>>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
8
9
10
11
12
13

>>imshow(im);
>>hold on;
>>for peak = peaks
[x,y] = circlepoints(peak(3));
Plot(x+peak(1),y+peak(2),g-);
End
Hold off;

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


Hasil Pendeteksian ditampilkan pada gambar 6.1

a. Citra asli

41

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.

42

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.

b.

a. Citra RGB

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
2
3

>> i=imread(citra.jpg);
>> nomor=platenumber(i);
>> 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.
43

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

44

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
2
3
4
5
6
7
8

>> i=imread(citra1.jpg);
>> j=imread(citra2.jpg);
>> [m1,theface1] = face(i);
>> [m2,theface2] = face(2);
>> figure, imshow(m1);
>> figure, imshow(theface1);
>> figure, imshow(m2);
>> figure, imshow(theface2);

45

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

46

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
2
3
4
5
6

>> i = imread(citra1.jpg);
>> Gi = ekstrakiris (i); figure, imshow(Gi);
>> j = imread(citra2.jpg);
>> Gj = ekstrakiris (j); figure, imshow(Gj);
>> k = imread(citra3.jpg);
>> Gk = ekstrakiris (k); figure, imshow(Gk);

47

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
2

>> i=imread(citra.jpg);
>> m=zeros(size(I,1),size(I,2));
%membuat inisialisasi mask

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

48

Perintah berikut ini untuk mengubah ukuran citra menjadi setengahnya agar
komputasi menjadi lebih cepat.

4
5

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


>> 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
7
8

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


>> subplot(2,2,2); imshow (m); title(Initialization);
>> 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

49

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

50

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

51

OPERATOR PADA MATLAB

Operator Name

Matlab

Examples

function
+

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

A*B, standard matrix multiplication

mtimes(A,B)

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

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

division

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


.

Vector, matrix

transpose(A)

C = mpower(A,B)
A.
as standard is an error

ctranspose(A)

A as standard

transpose

Vector, matrix
complex
conjugate

+
:

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

52

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

53

Anda mungkin juga menyukai