Anda di halaman 1dari 719

Teori dan Aplikasi

Dilengkapi CD beris
erisi
program-program contcontoh, Abdul Kadir
Abd
file-file latihan, dan Octave
Oct
AdhiS
dhiSusanto

i
Ceritakan kepada saya, maka saya lupa.
Tunjukkan kepada saya,maka saya ingat.
Biarkan saya mengerjakannya, maka saya paham.

Pepatah Cina

ii
Prakata

Aplikasi pengolahan citra telah memberikan sumbangan yang sangat berarti dalam berbagai
aspek. Para perancang desain grafis telah merasakan betapa nikmatnya menggunakansoftware
semacam Adobe Photoshop untuk mengerjakan berbagai tugas mereka. Pemakai Microsoft
Word bisa memberikan ilustrasi gambar yang dipoles dengan teknik tertentu, misalnya
memungkinkan gambar seolah-olah dibuat dengan goresan kapur. Robot seperti AIBO dapat
membaca mimik si pemiliknya dan melakukan aksi untuk menghibur. Mesin inspeksi mampu
mendeteksi produk yang cacat. Perangkat presensi dapat mengenali sidik jari para mahasiswa
yang akan mengikuti kuliah. Pintu pun terbuka setelah retina mata si pegawai dipindai oleh
pembaca retina mata. Hal-haltersebutmenunjukkan beberapa contoh yang melibatkan
pengolahan citra.

Buku ini mengupas sejumlah fondasi dalam pengolahan citra hingga ke aplikasinya. Berbeda
dengan buku lain yang umumnya hanya menekankan pada aspek teori, buku ini
mengombinasikan teori dan praktik. Buku ini membahas berbagai rumus matematika dan
sekaligus mewujudkannya ke dalam bentuk program. Dengan perkataan lain, buku ini
menunjukkan bahwa rumus-rumus matematika yang kadang dirasakan sulit untuk dimengerti
dapat diterjemahkan ke dalam program dengan cara yang mudah. Oleh karena itu, buku ini
sangat berguna bagi mahasiswa Teknologi Informasi, Teknik Informatika, atau Teknik Elektro
yang sedang mengambil matakuliah Pengolahan Citra ataupun matakuliah lain yang
memerlukan dasar pengolahan citra. Materi yang disampaikan tidak hanya terbatas pada
pendekatan teori tetapi juga sekaligus disertai dengan algoritma dan penyelesaian dalam
bentuk program.

Contoh program diwujudkan dengan menggunakan Octave. Octave adalah Free Software yang
kompatibel dengan MATLAB. Perangkat lunak ini dapat diunduh secara gratis. Informasi
pengunduhannya dapat dilihat di http://www.gnu.org/software/octave/download.html. Versi
Octave yang digunakan untuk mengimplementasikan program adalah Octave 3.4.3, sedangkan
paket Image Processing yang digunakan adalah versi 1.0.15. Paket ini bisa diunduh di
http://octave.sourceforge.net/image/index.html.

Meskipun diwujudkan dengan Octave, contoh-contoh program yang diberikan sangat mudah
untuk dikonversikanke bentukbahasa pemrograman yang lain seperti Java ataupun C++. Kode-
kode penting untuk mewujudkan program telah diusahakan agar tidak bergantung sepenuhnya
pada fungsi-fungsi yang disediakan oleh Octave.

Agar pembaca bisa menyerap materi yang disajikan dalam buku ini, dianjurkan untuk
menguasai dasar pemrograman Octave terlebih dulu. Pada bagian Lampiran, ringkasan
mengenai dasar Octave diberikan. Materi tersebut diharapkan dapat membantu pembaca
dalam mempelajari dan mempraktikkan dasar Octave secara cepat.

iii
Materi di dalam buku ini telah disusun sedemikian rupa sehingga mempermudah bagi pembaca
yang baru saja belajar pengolahan citra. Oleh karena itu, sebaiknya bab-bab yang terdapat
dalam buku ini dibaca secara berurutan. Namun, apabila pembaca telah memiliki dasar
pengolahan citra, membaca secara langsung ke bab-bab tertentu yang diperlukan juga
dimungkinkan.

Bab 1 memperkenalkan dasar pengolahan citra dan aplikasinya. Bab 2 membahas dasar
pengolahan citra melalui software. Berbagai jenis citra diperkenalkan di dalam bab ini. Cara
membaca citra dari berkas, mengonversi citra, dan menyimpan citra ke dalam berkas mulai
diperkenalkan. Berbagai operasi pemrosesan citra yang berbasis piksel mulai dibahas dalam Bab
3. Dasar histogram juga dibahas dalam bab ini. Bab 4 mulai membahas pengolahan citra yang
mempertimbangkan piksel tetangga. Pada bab inilah konvolusi mulai dibahas. Berbagai filter
mulai diperkenalkan dalam bab ini. Bab 5 membicarakan operasi geometrik seperti
penggeseran citra, pemutaran citra, pembesaran/pengecilan citra, dan berbagai transformasi
untuk mengubah citra. Bab 6 membahas alihragam Fourier untuk melakukan pengolahan citra
pada kawasan frekuensi. Bab 7 mulai membicarakan berbagai operasi morfologi seperti erosi,
dilasi, opening, closing, dan transformasi Top-Hat. Bab 8 membahas berbagai operasi yang
dilaksanakan pada citra biner, misalnya untuk memperoleh tepi objek, rantai kode, perimeter,
dan luas objek. Beberapa fitur yang dapat diperoleh pada citra biner mulai diperkenalkan. Bab 9
membahas secara khusus pemrosesan citra dengan melibatkan unsur warna. Bab 10 mengupas
berbagai teknik untuk kepentingan segmentasi, misalnya deteksi tepi dan peng-ambangan
adaptif. Bab 11 membahas secara rinci berbagai metode untuk melaksanakan restorasi citra.
Berbagai fitur bentuk dan kontur dibicarakan dalam Bab 12. Deskriptor Fourier, momen Zernike,
momen invariant, Polar Fourier Transform, dan convex hull dibahas dalam bab ini. Bab 13
secara khusus membahas fitur tekstur. Bab 14 membahas aplikasi temu kembali citra.

Untuk mempermudah dalam mempraktikkan pengolahan citra, seluruh materipraktik yang


dibahas di dalam buku ini dikemas di dalam sebuah CD yang disertakan bersama buku ini.CD
juga berisi perangkat lunak Octave.

Tidak lupa, penulis mengucapkan terima kasih kepada Direktorat Penelitian dan Pengabdian
kepada Masyarakat, Direktorat Jenderal Pendidikan Tinggi, yang telah memberikan dana hibah
penulisan buku teks tahun 2012 dan pendampingan untuk penyelesaian naskah ini. Banyak
masukan berharga yang telah mewarnai koreksi terhadap naskah buku ini.

Penulis menyadari sepenuhnya, “Tak ada gading yang tak retak”. Walaupun usaha yang
maksimum telah dilakukan, tetap saja terdapat kemungkinan kesalahan dan kekurangan di
dalam penyusunan buku ini. Oleh karena itu, saran dari pembaca sangat penulis harapkan
agarmateri buku ini senantiasa dapat disempurnakan. Akhir kata, semoga buku ini dapat
memberikan manfaat yang nyata dan menjadi sumber inspirasi bagi pembaca dalam
mengembangkan karya-karya inovatif.

Yogyakarta, Juni 2012


Penulis

iv
v
DAFTAR ISI

BAB 1 PENGANTAR PENGOLAHAN CITRA ...............................................................................................1


1.1 Pengertian Pengolahan Citra Digital ....................................................................................2
1.2 Aplikasi Pengolahan Citra ....................................................................................................3
1.3 Prinsip Dasar dalam Pengolahan Citra .................................................................................7
1.3.1 Peningkatan Kecerahan dan Kontras ....................................................................7
1.3.2 Penghilangan Derau .............................................................................................8
1.3.3 Pencarian Bentuk Objek .......................................................................................8

BAB 2 PENGENALAN DASAR CITRA......................................................................................................11


2.1 Representasi Citra Digital ..................................................................................................12
2.2 Kuantisasi Citra .................................................................................................................15
2.3 Kualitas Citra .....................................................................................................................18
2.4 Membaca Citra..................................................................................................................20
2.5 Mengetahui Ukuran Citra .................................................................................................22
2.6 Menampilkan Citra ............................................................................................................23
2.7 Mengenal Jenis Citra .........................................................................................................26
2.7.1 Citra Berwarna ...................................................................................................26
2.7.2 Citra Berskala Keabuan ......................................................................................30
2.7.3 Citra Biner..........................................................................................................31
2.8 Mengonversi Jenis Citra ....................................................................................................32
2.9 Menyimpan Citra ..............................................................................................................40

BAB 3 OPERASI PIKSEL DAN HISTOGRAM ............................................................................................43


3.1 Operasi Piksel....................................................................................................................44
3.2 Menggunakan Histogram Citra ..........................................................................................44
3.3 Meningkatkan Kecerahan ..................................................................................................50
3.4 Meregangkan Kontras .......................................................................................................53
3.5 Kombinasi Kecerahan dan Kontras ....................................................................................55
3.6 Membalik Citra..................................................................................................................56
3.7 Pemetaan Nonlinear .........................................................................................................57
3.8 Pemotongan Aras Keabuan ...............................................................................................59
3.9 Ekualisasi Histogram..........................................................................................................63

BAB 4 OPERASI KETETANGGAAN PIKSEL ..............................................................................................71


4.1 Pengertian Operasi Ketetanggaan Piksel............................................................................72
4.2 Pengertian Ketetanggaan Piksel ........................................................................................72
4.3 Aplikasi Ketetanggaan Piksel pada Filter ............................................................................73
4.3.1 Filter Batas.........................................................................................................74
4.3.2 Filter Pererataan ................................................................................................77
4.3.3 Filter Median .....................................................................................................80
4.4 Pengertian Konvolusi.........................................................................................................83
4.5 Problem pada Konvolusi ....................................................................................................92
4.6 Mempercepat Komputasi pada Konvolusi .........................................................................98
4.7 Pengertian Frekuensi....................................................................................................... 103
4.8 Filter Lolos-Rendah ......................................................................................................... 105
4.9 Filter Lolos-Tinggi ............................................................................................................ 112

vi
4.10 Filter High-Boost ........................................................................................................... 116
4.11 Efek Emboss .................................................................................................................. 118
4.12 Pengklasifikasian Filter Linear dan Nonlinear ................................................................. 121
4.13 Filter Gaussian .............................................................................................................. 122

BAB 5 OPERASI GEOMETRIK .............................................................................................................. 121


5.1 Pengantar Operasi Geometrik ......................................................................................... 122
5.2 Menggeser Citra .............................................................................................................. 123
5.3 Memutar Citra ................................................................................................................ 125
5.4 Interpolasi Piksel ............................................................................................................. 129
5.5 Memutar Berdasarkan Sebarang Koordinat ..................................................................... 134
5.6 Memutar Citra Secara Utuh ............................................................................................. 137
5.7 Memperbesar Citra ......................................................................................................... 140
5.8 Memperkecil Citra........................................................................................................... 145
5.9 Perbesaran dengan Skala Vertikal dan Horizontal Berbeda .............................................. 146
5.10 Pencerminan Citra ......................................................................................................... 146
5.11 Transformasi Affine ....................................................................................................... 151
5.12 Efek Ripple .................................................................................................................... 154
5.13 Efek Twirl ...................................................................................................................... 157
5.14 Transformasi Spherical .................................................................................................. 159
5.15 Transformasi bilinear..................................................................................................... 162

BAB 6PENGOLAHAN CITRA DI KAWASAN FREKUENSI ......................................................................... 161


6.1 Pengolahan Citra di Kawasan Spasial dan Kawasan Frekuensi .......................................... 168
6.2 Alihragam Fourier ............................................................................................................ 169
6.3 Fourier 1-D ...................................................................................................................... 170
6.4 Fourier 2-D ...................................................................................................................... 176
6.5 Fast Fourier Transform .................................................................................................... 178
6.6 Visualisasi Pemrosesan FFT ............................................................................................. 179
6.7 Penapisan pada Kawasan Frekuensi ................................................................................ 184
6.8 Filter Lolos-Rendah ......................................................................................................... 190
6.9 Filter Lolos-Tinggi ............................................................................................................ 200
6.10 Pemfilteran dengan Pendekatan High Frequency Emphasis ........................................... 203

BAB 7 MORFOLOGI UNTUK PENGOLAHAN CITRA ............................................................................... 209


7.1 Pengertian Operasi Morfologi ......................................................................................... 210
7.2 Matematika yang Melatarbelakangi ................................................................................ 212
7.2.1 Teori Himpunan ........................................................................................................... 212
7.2.2 Operasi Nalar ............................................................................................................... 218
7.3 Operasi Dilasi .................................................................................................................. 221
7.4 Operasi Erosi ................................................................................................................... 229
7.5 Bentuk dan Ukuran Elemen Penstruktur .......................................................................... 236
7.6 Operasi Opening ............................................................................................................. 242
7.7 Operasi Closing ............................................................................................................... 245
7.8 Transformasi Hit-or-Miss ................................................................................................. 248
7.9 Skeleton .......................................................................................................................... 255
7.10 Thickening ..................................................................................................................... 263
7.11 Convex Hull ................................................................................................................... 265

vii
7.12 Morfologi Aras Keabuan ................................................................................................ 270
7.12.1 Dilasi Beraras Keabuan................................................................................... 271
7.12.2 Erosi Beraras Keabuan ................................................................................... 274
7.12.3 Opening dan Closing ...................................................................................... 279
7.13 Transformasi Top-Hat.................................................................................................... 281
7.14 Transformasi Bottom-Hat .............................................................................................. 283

BAB 8OPERASI PADA CITRA BINER ..................................................................................................... 287


8.1 Pengantar Operasi Biner ................................................................................................. 288
8.2 Representasi Bentuk ....................................................................................................... 288
8.3 Ekstraksi Tepi Objek ........................................................................................................ 288
8.4 Mengikuti Kontur ............................................................................................................ 292
8.5 Kontur Internal................................................................................................................ 300
8.6 Rantai Kode..................................................................................................................... 305
8.7 Perimeter ........................................................................................................................ 309
8.8 Luas ................................................................................................................................ 313
8.9 Diameter ......................................................................................................................... 317
8.10 Fitur Menggunakan Perimeter, Luas, dan Diameter ....................................................... 325
8.11 Pusat Massa dan Fitur Menggunakan Pusat Massa ........................................................ 329
8.12 Fitur Dispersi ................................................................................................................. 333
8.13 Pelabelan Objek ............................................................................................................ 335

BAB 9 PENGOLAHAN CITRA BERWARNA ............................................................................................ 349


9.1 Dasar Warna ................................................................................................................... 350
9.2 Ruang Warna .................................................................................................................. 350
9.2.1 Ruang Warna RGB............................................................................................ 350
9.2.2 Ruang Warna CMY/CMYK ................................................................................ 352
9.2.3 Ruang Warna YIQ ............................................................................................. 356
9.2.4 Ruang Warna YCbCr ......................................................................................... 358
9.2.5 Ruang Warna HSI, HSV, dan HSL....................................................................... 360
9.2.6 Ruang Warna CIELAB ....................................................................................... 374
9.3 Memperoleh Statistika Warna ......................................................................................... 378
9.4 Mengatur Kecerahan dan Kontras ................................................................................... 382
9.5 Menghitung Jumlah Warna ............................................................................................. 384
9.6 Aplikasi Pencarian Citra Berdasarkan Warna Dominan .................................................... 386

BAB 10 SEGMENTASI CITRA ............................................................................................................... 401


10.1 Pengantar Segmentasi Citra .......................................................................................... 402
10.2 Deteksi Garis ................................................................................................................. 405
10.3 Deteksi Tepi .................................................................................................................. 410
10.3.1 Operator Roberts ........................................................................................... 415
10.3.2 Operator Prewitt............................................................................................ 417
10.3.3 Operator Sobel............................................................................................... 420
10.3.4 Operator Frei-Chen ........................................................................................ 422
10.3.5 Operator Laplacian ........................................................................................ 425
10.3.6 Operator Laplacian of Gaussian ..................................................................... 427
10.3.7 Operator Difference of Gaussian .................................................................... 433
10.3.9 Operator Canny ............................................................................................. 435

viii
10.3.10 Operator Zero-Crossing ................................................................................ 444
10.3.11 Operator Gradien Kompas ........................................................................... 450
10.4 Peng-ambangan Dwi-Aras ............................................................................................. 454
10.5 Peng-ambangan Global Vs. Lokal .................................................................................. 459
10.6 Peng-ambangan Aras-jamak .......................................................................................... 460
10.7 Peng-ambangan dengan Metode Otsu .......................................................................... 463
10.8 Peng-ambangan Adaptif ................................................................................................ 467
10.9 Peng-ambangan Berdasarkan Entropi ............................................................................ 478
10.10 Segmentasi Warna ...................................................................................................... 485

BAB 11 RESTORASI CITRA .................................................................................................................. 497


11.1 Pengantar Restorasi Citra .............................................................................................. 498
11.2 Derau dalam Citra ......................................................................................................... 498
11.3 Jenis Derau.................................................................................................................... 500
11.3.1 Derau Gaussian.............................................................................................. 500
11.3.2 Derau Garam dan Merica (Salt & Pepper Noise) ............................................. 505
11.3.3 Derau Eksponensial........................................................................................ 508
11.3.4 Derau Gamma ............................................................................................... 511
11.3.4 Derau Rayleigh .............................................................................................. 514
11.3.6 Derau Uniform ............................................................................................... 517
11.3.7 Derau Periodis ............................................................................................... 520
11.4 Penghilangan Derau ...................................................................................................... 523
11.4.1 Filter Lolos-Rendah ........................................................................................ 523
11.4.2 Filter Rerata Aritmetik ................................................................................... 526
11.4.3 Filter Rerata Harmonik ................................................................................... 530
11.4.4 Filter Rerata Kontraharmonik ......................................................................... 534
11.4.5 Filter Rerata Yp .............................................................................................. 538
11.4.6 Filter Median ................................................................................................. 540
11.4.7 Filter Max ...................................................................................................... 545
11.4.8 Filter Min ....................................................................................................... 550
11.4.9 Filter Titik-Tengah .......................................................................................... 553
11.5 Penghilangan Derau di Kawasan Frekuensi .................................................................... 555
11.6 Filter Inversi .................................................................................................................. 563
11.7 Filter Wiener ................................................................................................................. 567
11.8 Ukuran Keberhasilan Penghilangan Derau ..................................................................... 570

BAB 12EKSTRAKSI FITUR BENTUK DAN KONTUR ................................................................................ 575


12.1 Pengantar Ekstraksi Fitur ............................................................................................... 576
12.2 Tanda-Tangan Kontur .................................................................................................... 577
12.3 Deskriptor Fourier ......................................................................................................... 581
12.4 Sifat Bundar .................................................................................................................. 590
12.5 Convex Hull dan Soliditas ............................................................................................... 593
12.6 Proyeksi ........................................................................................................................ 608
12.7 Momen Spasial dan Momen Pusat ................................................................................ 610
12.8 Momen Invariant .......................................................................................................... 613
12.9 Momen Jarak ke Pusat .................................................................................................. 616
12.10 Momen Zernike ........................................................................................................... 620
12.11 Polar Fourier Transform............................................................................................... 634

ix
12.12 Kotak Pembatas .......................................................................................................... 640

BAB 13EKSTRAKSI FITUR TEKSTUR ..................................................................................................... 649


13.1 Pengantar Fitur Tekstur ................................................................................................. 650
13.2 Kategori Tekstur ............................................................................................................ 651
13.3 Tekstur Berbasis Histogram ........................................................................................... 653
13.4 Tekstur Laws ................................................................................................................. 660
13.5 Lacunarity ..................................................................................................................... 667
13.6 GLCM ............................................................................................................................ 672

BAB 14 APLIKASI TEMU KEMBALI CITRA ............................................................................................ 685


14.1 Pengantar Aplikasi Temu Kembali Citra ......................................................................... 686
14.2 Perhitungan Jarak Antara Dua Citra ............................................................................... 687
14.2.1 Jarak Euclidean .............................................................................................. 687
14.2.2 Jarak City-Block .............................................................................................. 688
14.2.3 Jarak Kotak Catur ........................................................................................... 689
14.2.4 Jarak Minkowski............................................................................................. 689
14.2.5 Jarak Canberra ............................................................................................... 690
14.2.6 Jarak Bray Curtis ............................................................................................ 690
14.2.7 Divergensi Kullback Leibler ............................................................................. 691
14.2.8 Divergensi Jensen Shannon ............................................................................ 691
14.3 Contoh Penerapan Jarak................................................................................................ 692
14.4 Pengembangan Lebih Lanjut.......................................................................................... 694

LAMPIRAN : PANDUAN OCTAVE ........................................................................................................ 701


L.1 Menginstalasi dan Menjalankan Octave........................................................................... 701
L.2 Perintah Octave ............................................................................................................... 702
L.3 Operator ......................................................................................................................... 703
L.4 Variabel dalam Octave..................................................................................................... 705
L.5 Akhiran Titik Koma dan Pemisahan Pernyataan ............................................................... 706
L.6 Mengenal Memori untuk Variabel ................................................................................... 707
L.7 Tipe Data ......................................................................................................................... 708
L.8 Mengenal Fasilitas Help ................................................................................................... 709
L.9 Bilangan Kompleks .......................................................................................................... 709
L.10 Fungsi Matematika ........................................................................................................ 710
L.11 Prioritas Operator dalam Octave ................................................................................... 714
L.12 Mengakhiri Octave ........................................................................................................ 714
L.13 String Karakter............................................................................................................... 714
L.14 Menampilkan dengan disp ............................................................................................. 715
L.15 Larik .............................................................................................................................. 715
L.16 Notasi : untuk Menyatakan Jangkauan........................................................................... 717
L.17 Operasi Transpos ........................................................................................................... 718
L.18 Membentuk Matriks ...................................................................................................... 718
L.19 Operasi Skalar terhadap Larik ........................................................................................ 719
L.20 Operasi Matematika Antarlarik ...................................................................................... 720
L.21 Mengakses Larik ............................................................................................................ 723
L.22 Memperoleh Ukuran Larik ............................................................................................. 727
L.23 Mengenal Sejumlah Fungsi Larik .................................................................................... 728

x
L.24 Berkas Skrip ................................................................................................................... 730
L.25 Menambahkan Komentar .............................................................................................. 731
L.26 Menuliskan Sebuah Perintah pada Beberapa Baris......................................................... 732
L.27 Operator Relasional dan Logika ..................................................................................... 733
L.27.1 Operator Relasional .................................................................................................... 733
L.27.2 Operator Logika .......................................................................................................... 734
L.28 Pernyataan if ................................................................................................................. 736
L.29 Pernyataan if..elseif ....................................................................................................... 738
L.30 Pernyataan switch ......................................................................................................... 738
L.31 Pernyataan while ........................................................................................................... 739
L.32 Pernyataan for ............................................................................................................... 740
L.33 Pernyataan break .......................................................................................................... 741
L.34 Pernyataan continue ...................................................................................................... 742

DAFTAR PUSTAKA 743


GLOSARIUM 751
INDEKS 757

xi
Pengolahan Citra
Teori dan Aplikasi
Pengantar pengolahan citra
Buku ini sangat cocok dipakai
Pengenalan dasar citra
oleh mahasiswa Teknologi
Operasi piksel dan histogram
Informasi,Teknik Informatika,
Operasi ketetanggaan piksel
Teknik Elektro, dan jurusan teknik
Operasi geometrik
lainyang sedang atau hendak
Pengolahan citra di kawasan frekuensi
mempelajari pengolahan citra
Morfologi untuk pengolahan citra
untuk berbagai kepentingan.
Operasi pada citra biner
Pengolahan citra berwarna
Segmentasi citra
Semua contoh mudah
Restorasi citra
dipraktikkandengan menggunakan
Ekstraksi fitur bentuk dan kontur
Octave ataupun MATLAB.Algoritma
Ekstraksi fitur tekstur dan kode yang disajikan tidak
Aplikasi temu kembali citra
menutup kemungkinan
Panduan Octave
untukdikonversikan ke dalam
bahasa pemrograman lain.

“Buku yang menggabungkan teori dan aplikasi pengolahan citra yang


mudah dipahami. Contoh kode sumber yang diberikan merupakan
pelengkap yang sangat berharga.”
Widyawan, S.T., M.Sc., Ph.D. – Ketua Program Studi Teknologi Informasi UGM

“Buku yang menjembatani teori matematis dengan penerapan langsung


menggunakan pemrograman sehingga lebih mudah dicerna oleh praktisi,
mahasiswa, dan bahkan pengajar. Sangat bermanfaat!”
Noor Ahmad Setiawan, S.T., M.T., Ph.D. – Dosen JTETI FT UGM

“Buku yang secara rinci membahas proses pengolahan citra. Disajikan


dengan contoh-contoh nyata dan disertai dengan program-program
aplikasi yang sangat menarik untuk diikuti.”
Teguh Bharata Adji, S.T., M.T., M.Eng., Ph.D. – Ketua Magister Teknologi Informasi UGM

xii
BAB 1
Pengantar
Pengolahan Citra

Setelah membaca bab ini, diharapkan pembaca


memperoleh wawasan tentang:

pengertian pengolahan citra digital;

aplikasi pengolahan citra digital;

prinsip dasar dalam pengolahan citra.


2 Pengolahan Citra, Teori dan Aplikasi

1.1 Pengertian Pengolahan Citra Digital


Istilah citra digital sangat populer pada masa kini. Banyak peralatan
elektronik yang menghasilkan citra digital; misalnyascanner, kamera digital,
mikroskop digital, dan fingerprint reader(pembaca sidik jari). Perangkat lunak
untuk mengolah citra digital juga sangat populer digunakan oleh pengguna untuk
mengolah foto atau untuk berbagai keperluan lain. Sebagai contoh, Adobe
Photoshopdan GIMP (GNU Image Manipulation Program) menyajikan berbagai
fitur untuk memanipulasi citra digital.

(a) Kamera digital (b) Kamera CCTV

(c) Pemindai (Scanner) (d) Pembaca Sidik Jari

Gambar 1.1Empat contoh alat yang menghasilkan citra digital

Lalu, apa sebenarnya yang dimaksud dengan pengolahan citra


digital?Secara umum, istilah pengolahan citra digital menyatakan “pemrosesan
gambar berdimensi-dua melalui komputer digital” (Jain, 1989).Menurut Efford
(2000), pengolahan citra adalah istilah umum untuk berbagai teknik yang
keberadaannya untuk memanipulasi dan memodifikasi citra dengan berbagai
cara. Foto adalah contoh gambar berdimensi dua yang bisa diolah dengan
Pengantar Pengolahan Citra 3

mudah.Setiap foto dalam bentuk citra digital (misalnya berasal dari kamera
digital) dapat diolah melalui perangkat-lunak tertentu.Sebagai contoh, apabila
hasil bidikan kamera terlihat agak gelap, citra dapat diolah agar menjadi lebih
terang.Dimungkinkan pula untuk memisahkan foto orang dari
latarbelakangnya.Gambaran tersebut menunjukkan hal sederhana yang dapat
dilakukan melalui pengolahan citra digital. Tentu saja, banyak hal lain yang lebih
pelik yang dapat dilakukan melalui pengolahan citra digital.

• Untuk penyederhanaan penyebutan pada pembicaraan


selanjutnya, istilah “pengolahan citra digital” akan dinyatakan
dengan “pengolahan citra” saja.
• Selain citra digital,terdapat citra analog. Foto yang ditempelkan
pada kartu mahasiswa adalah contoh citra analog. Agar foto
tersebut bisa diproses oleh komputer maka harus didigitalkan
melalui alat pemindai.

1.2 Aplikasi Pengolahan Citra


Pengolahan citra merupakan bagian penting yang mendasari berbagai
aplikasi nyata, seperti pengenalan pola, penginderaan jarak-jauh melalui satelit
atau pesawat udara, dan machine vision. Pada pengenalan pola, pengolahan citra
antara lain berperan untuk memisahkan objek dari latarbelakang secara otomatis.
Selanjutnya, objek akan diproses oleh pengklasifikasi pola. Sebagai contoh,
sebuah objek buah bisa dikenali sebagai jeruk, apel, atau pepaya.Pada
penginderaan jarak jauh, tekstur atau warna pada citra dapat dipakai untuk
mengidentifikasi objek-objek yang terdapat di dalam citra. Pada machine vision
(sistem yang dapat“melihat” dan “memahami” yang dilihatnya), pengolahan citra
berperan dalam mengenali bentuk-bentuk khusus yang dilihat oleh
mesin.Penggunaan kamera pemantau ruangan merupakan contoh bagian
aplikasipemrosesan citra.Perubahan gerakan yang ditangkap melalui citra dapat
menjadi dasar untuk melakukan pelaporan situasi yang terekam.
4 Pengolahan Citra, Teori
Te dan Aplikasi

Pengolahan citra juga memungkinkan waja


ajah seseorang
dikartunkan.Sebagaii contoh ditunjukkan pada Gambar 1.2.Apli
plikasi seperti itu
memungkinkan pem
mbuatan kartun yang didasarkan pada obj
bjek-objek nyata.
Perangkat lunak sep
eperti Microsoft Word 2010 menyertakan faasilitas pengolah
gambar yang memun
ungkinkan setiap gambar asli diubah menjadi
di gambar seperti
hasil goresan pensil,
il, kapur, pastel, dan lain-lain, sebagaimana dditunjukkan pada
Gambar 1.3.

Gambar 1.2Aplika
ikasi pengolahan citra untuk mengartunkan
n wajah orang
Pengantar Pengolahan Citra 5

Gambar 1.3Penggunaan efek gambar pada Microsoft Word 2010


memanfaatkan pengolahan citra

Aplikasi pengolahan citra memang makinmeluas.Di dunia kedokteran,


pengolahan citra mempunyai peran yang sangat besar.CT Scan(Computed
Tomography Scan) atau kadang disebut CAT Scan (Computerized Axial
Tomography Scan) merupakan suatu contoh aplikasi pengolahan citra, yang dapat
dipakai untuk melihat potongan atau penampang bagian tubuh manusia.
Tomografi adalah proses untuk menghasilkan citra berdimensi dua dari potongan
objek berdimensi tiga dari sejumlah hasil pemindaian satu-dimensi. Gambar 1.4
memperlihatkan contoh CT Scan dan hasilnya.
6 Pengolahan Citra, Teori dan Aplikasi

(a) CT Scan (Sumber: (b) Contoh hasil CT Scan (Sumber:


http://www.dxhealthcorp.com) http://www.thirdage.com/)

Gambar 1.4CT Scan

Pengolahan citra juga dapat dimanfaatkan, misalnya, untuk kepentingan


penentuan jenis tanaman hias melalui ciri-ciri citra daun. Seseorang yang ingin
tahu mengenai suatu tanaman cukup memasukkan citra daun yang ia miliki dan
kemudian memunggahkan ke sistem berbasis web. Selanjutnya, sistem web dapat
mencarikan informasi yang sesuai dengan citra tersebut.Gambar 1.5
memperlihatkan contoh hasil pencarian jenis tanaman hias.

Gambar 1.5Masukan citra dapat digunakan sebagai dasar


pencarianjenis tanaman hias

Berbagai aplikasi pengolahan citra juga telah dilakukan di


Indonesia.Beberapa contoh ditunjukkan berikut ini.
Identifikasi sidik jari (Isnanto, dkk., 2007)
Pengantar Pengolahan Citra 7

Pencarian database orang melalui foto orang (Aribowo, 2009)


Identifikasi kematangan buah tomat (Noor dan Hariadi, 2009)
Identifikasi penyakit Diabetes mellitus melalui citra kelopak mata (Rachmad,
2009)
Ekstraksi fitur motif batik (Mulaab, 2010)
Identifikasi telapak tangan (Putra dan Erdiawan, 2010)

1.3Prinsip Dasar dalam Pengolahan Citra


Hal-hal yang diutarakan pada Subbab 1.2 merupakan contoh-contoh
aplikasi kegiatan pengolahan citra.Aplikasi-aplikasi seperti itu sesungguhnya
menggunakan prinsip dasar dalam pengolahan citra seperti peningkatan kecerahan
dan kontras, penghilangan derau pada citra, dan pencarian bentuk objek.Beberapa
contoh diberikan berikut ini.

1.3.1 Peningkatan Kecerahan dan Kontras


Seringkali dijumpai citra yang tidak jelas akibat sinar yang kurang ketika
objek dibidikmelalui kamera digital.Dengan menggunakan pengolahan citra, citra
seperti itu bisa diperbaiki melalui peningkatan kecerahan dan kontras.Gambar 1.3
menunjukkan contoh citra yang kurang cerah dan kurang kontras menjadi citra
yang lebih kontras.

(a) Citra dengan kontras (b) Citra dengan kontras yang


rendah telah ditingkatkan
Gambar 1.6Pengolahan citra memungkinkan
pengubahan kontras pada citra
8 Pengolahan Citra, Teori dan Aplikasi

Gambar 1.6(a) kurang jelas, tetapi melalui pengolahan citra yang tepat diperoleh
hasil yang jauh lebih jelas (Gambar 1.6(b)).

1.3.2 Penghilangan Derau


Citra yang akan diproses seringkali dalam keadaan terdistorsi atau
mengandung derau. Untuk kepentingan tertentu, derau tersebut perlu dibersihkan
terlebih dulu.Dalam pengolahan citra, terdapat beberapa metode yang bisa dipakai
untuk keperluan tersebut. Salah satu caradilaksanakan melalui filter notch. Efek
filter tersebut dapat dilihat pada Gambar 1.7.

(a) Citra dengan derau berbentuk kotak-kotak (b) Citra dengan derau telah dihilangkan
Gambar 1.7Pengolahan citra memungkinkan
untukmenghilangkanderau pada citra

Terlihat bahwa derau berbentuk kotak pada Gambar 1.7(a) bisa dihilangkan dan
hasilnya seperti yang terlihat pada Gambar 1.7(b).

1.3.3 Pencarian Bentuk Objek


Untuk kepentingan mengenali suatu objek di dalam citra, objek perlu
dipisahkan terlebih dulu dari latarbelakangnya. Salah satu pendekatan yang umum
dipakai untuk keperluan ini adalah penemuan batas objek.Dalam hal ini, batas
objek berupa bagian tepi objek. Setelah tepiobjek diketahui, pencarian ciri
terhadap objek bisa dilaksanakan, misalnya berdasar perbandingan panjang dan
Pengantar Pengolahan Citra 9

lebar daun. Objek daun dan batas daun yang didapatkan melalui pengolahan citra
diperlihatkan pada Gambar 1.8.Adapun Gambar 1.9 memperlihatkan tahapan
penentuan panjang dan lebar daun diperoleh melalui komputasi oleh komputer.

Pemisahan objek dalam citra terhadap latarbelakang dikenal dengan


sebutan segmentasi.

(a) Citra asli (b) Citra dengan hanya bagian luar


yang digambar

Gambar 1.8Pengolahan citra memungkinkan untuk


mendapatkan bentuk objek
10 Pengolahan Citra, Teori dan Aplikasi

Gambar 1.9Penentuan panjang dan lebar daun


berdasarkan tepi daun

Latihan

1. Jelaskan pengertian pengolahan citra digital!


2. Berikan contoh aplikasi pengolahan citra yang Anda ketahui.
3. Apa yang dimaksud dengan Tomografi?
4. Apaperan filter median?
5. Apa yang dimaksud batas objek? Apa kegunaannya?
6. Jelaskan pengertian segmentasi.
BAB 2
Pengenalan Dasar
Citra

Setelah bab ini berakhir, diharapkan pembaca memahami


hal-hal berikut beserta contoh penerapannya.

Representasi citra digital

Kuantisasi citra

Kualitas citra

Cara membaca citra

Cara mendapatkan ukuran citra

Cara menampilkan citra

Pemahaman jenis citra

Konversi jenis citra


12 Pengolahan Citra, Teori dan Aplikasi

2.1 Representasi Citra Digital

Citra digital dibentuk oleh kumpulan titik yang dinamakan piksel (pixel atau
“picture element”).Setiap piksel digambarkan sebagai satu kotak kecil.Setiap
piksel mempunyai koordinat posisi.Sistem koordinat yang dipakai untuk
menyatakan citra digital ditunjukkan pada Gambar 2.1.

0 N-1
x

Posisi sebuah piksel

y
M-1

Gambar 2.1Sistem koordinat citra berukuran MxN


(M baris dan N kolom)

Dengan sistem koordinat yang mengikuti asas pemindaian pada layar TV


standar itu, sebuah piksel mempunyai koordinat berupa
(x, y)
Dalam hal ini,
• x menyatakan posisi kolom;
• y menyatakan posisi baris;
Mengenal Dasar Citra 13

• piksel pojok kiri-atas mempunyai koordinat (0, 0) dan piksel pada pojok
kanan-bawah mempunyai koordinat (N-1, M-1).

Dalam praktik, penggunaan koordinat pada sistem tertentu


mempunyai sedikit perbedaan. Misalnya, pada OctavedanMATLAB,
piksel pojok kanan-atas tidak mempunyai koordinat (0, 0)
melainkan (1, 1). Selain itu, setiap piksel pada OctavedanMATLAB
diakses melalui notasi (baris, kolom). Mengingat buku ini
menggunakan contoh dengan OctavedanMATLAB, maka notasi
yang digunakan disesuaikan dengan OctavedanMATLAB. Sebagai
contoh, koordinat piksel akan ditulis dengan (y, x) dan koordinat
pojok kanan-atas akan dinyatakan dengan (1, 1).

Dengan menggunakan notasi pada OctavedanMATLAB, citra dinyatakan


dengan
f(y, x)
Sebagai contoh, citra yang berukuran 12x12 yang terdapat pada Gambar 2.2(a)
memiliki susunan data seperti terlihat pada Gambar 2.2(b).Adapun Gambar 2.3
menunjukkan contoh penotasian f(y,x). Berdasarkan gambar tersebut maka:
• f(2,1) bernilai 6
• f(4,7) bernilai 237
Pada citra berskala keabuan, nilai seperti 6 atau 237 dinamakan sebagai intensitas.
14 Pengolahan Citra, Teori dan Aplikasi

6 6 6 6 6 6 6 89 237 237 237 237


6 6 89 237 237 237 6 6 89 237 237 237
6 6 89 237 237 237 237 6 6 89 237 237
6 6 89 237 237 237 237 6 6 89 237 237
6 6 89 237 237 237 237 6 6 89 237 237
6 6 89 237 237 237 6 6 89 237 237 237
6 6 6 6 6 6 6 89 237 237 237 237
6 6 6 6 6 6 89 237 237 237 237 237
6 6 89 237 237 6 6 89 237 237 237 237
6 6 89 237 237 237 6 6 89 237 237 237
6 6 89 237 237 237 237 6 6 89 237 237
6 6 89 237 237 237 237 237 6 6 89 237

(a) Citra berukuran 12 x 12 (b) Data penyusun citra 12 x 12

Gambar 2.2Citra dan nilai penyusun piksel

f(2,1) = 6

1 2 3 4 5 6 7 8 9 10 11 12
1 6 6 6 6 6 6 6 89 237 237 237 237
2 6 6 89 237 237 237 6 6 89 237 237 237
3 6 6 89 237 237 237 237 6 6 89 237 237
4 6 6 89 237 237 237 237 6 6 89 237 237
5 6 6 89 237 237 237 237 6 6 89 237 237
6 6 6 89 237 237 237 6 6 89 237 237 237
7 6 6 6 6 6 6 6 89 237 237 237 237
8 6 6 6 6 6 6 89 237 237 237 237 237
9 6 6 89 237 237 6 6 89 237 237 237 237
10 6 6 89 237 237 237 6 6 89 237 237 237
11 6 6 89 237 237 237 237 6 6 89 237 237
12 6 6 89 237 237 237 237 237 6 6 89 237

f(4,7) = 237
Gambar 2.3Notasi piksel dalam citra
Mengenal Dasar Citra 15

2.2 Kuantisasi Citra


Citra digital sesungguhnya dibentuk melalui pendekatan yang dinamakan
kuantisasi.Kuantisasi adalah prosedur yang dipakai untuk membuat suatu isyarat
yang bersifat kontinu ke dalam bentuk diskret.Untuk mempermudah pemahaman
konsep ini, lihatlah Gambar 2.4.Gambar 2.4(a) menyatakan isyarat analog
menurut perjalanan waktu t, sedangkan Gambar 2.4(b) menyatakan isyarat diskret.

t t

(a) Isyarat analog (b) Isyarat diskret


Gambar 2.4 Perbandingan isyarat analog dan isyarat diskret

Pada isyarat digital, nilai intensitas citra dibuat diskret atau terkuantisasi
dalam sejumlah nilai bulat. Gambar 2.5(a) menunjukkan contoh citra biner dua
nilai intensitas berupa 0 (hitam) dan 1 (putih).Selanjutnya, gambar tersebut
ditumpangkan pada grid 8x8 seperti yang diperlihatkan pada Gambar
2.5(b).Bagian gambar yang jatuh pada kotak kecil dengan luaslebih kecil
dibanding warna putih latarbelakang, seluruh isi kotak dibuat putih.Sebaliknya,
jika mayoritas hitam, isi kotak seluruhnya dibuat hitam.Hasil pengubahan ke citra
digital tampak pada Gambar 2.5(c).Adapun Gambar 2.5(d) memperlihatkan
bilangan yang mewakili warna hitam (0) dan putih (1).Dengan demikian, citra
digital akan lebih baik (lebih sesuai aslinya) apabila ukuran piksel diperkecil atau
jumlah piksel diperbanyak.
16 Pengolahan Citra, Teori dan Aplikasi

(a) Citra yang akan dinyatakan (b) Citra ditumpangkan pada grid
dalam isyarat digital

1 1 1 1 1 0 1 1
1 1 1 1 0 1 1 1
1 0 0 0 0 0 1 1
1 0 0 0 0 0 0 1
0 0 0 0 0 0 0 1
1 0 0 0 0 0 0 1
1 0 0 0 0 0 0 1
1 1 1 1 0 1 1 1

Gambar 2.5Digitalisasi citra biner 8x8 piksel


untuk memperlihatkan bentuk piksel ideal

Bagaimana halnya kalau gambar mengandung unsur warna (tidak sekadar


hitam dan putih)? Prinsipnya sama saja, tetapi sebagai pengecualian,warna hitam
diberikan tiga unsur warna dasar, yaitu merah (R = red), hijau (G = green), dan
biru (B = blue). Seperti halnya pada citra monokrom (hitam-putih) standar,
dengan variasi intensitas dari 0 hingga 255, pada citra berwarna terdapat
16.777.216 variasi warna apabila setiap komponen R, G, dan B mengandung 256
aras intensitas. Namun, kepekaan mata manusia untuk membedakan macam
warna sangat terbatas, yakni jauh di bawah enam belas juta lebih tersebut.
Untuk beberapa keperluan tertentu, jumlah gradasi intensitas saling berbeda.
Tabel 2.1 memberikan lima contoh untuk citra beraras keabuan dan Tabel 2.2
menunjukkan empat contoh penggunaan citra berwarna (RGB). Perhatikan bahwa
Mengenal Dasar Citra 17

jumlah gradasi juga bisa dinyatakan dalam jumlah digit biner atau bit 0 dan 1
sebagai sandi digital per piksel.

Tabel 2.1Jangkauan nilai pada citra keabuan


Komponen Bit per Jangkauan Penggunaan
warna Piksel
1 1 0-1 Citra biner: dokumen
faksimili
8 0-255 Umum: foto dan hasil
pemindai
12 0-4095 Kualitas tinggi: foto dan
hasil pemindai
14 0-16383 Kualitas profesional: foto
dan hasil pemindai
16 0-65535 Kualitas tertinggi: citra
kedokteran dan astronomi

Tabel 2.2Jangkauan nilai pada citra berwarna


Komponen Bit per Jangkauan Penggunaan
Warna Piksel
3 24 0-1 RGB umum
36 0-4095 RGB kualitas tinggi
42 0-16383 RGB kualitas profesional
4 32 0-255 CMYK (cetakan digital)

Dalam pengolahan citra, kuantisasi aras intensitas menentukan kecermatan


hasilnya. Dalam praktik, jumlah aras intensitas piksel dapatdinyatakan
dengankurang dari 8 bit. Contoh pada Gambar 2.6 menunjukkan citra yang
dikuantisasi dengan menggunakan 8, 5, 4, 3, 2, dan 1 bit.
18 Pengolahan Citra, Teori dan Aplikasi

(a) 8 bit (b) 5 bit (c) 4 bit

(d) 3 bit (e) 2 bit (f) 1 bit

Gambar 2.6Kuantisasi citra dengan menggunakan berbagai bit

Pada kuantisasi dengan 1 bit, jumlah level sebanyak 2 (21).Oleh karena itu,
warna yang muncul berupa hitam dan putih saja. Perlu diketahui, penurunan
jumlah aras pada tingkat tertentu membuat mata manusia masih bisa menerima
citra dengan baik. Sebagai contoh, citra dengan 4 bit (Gambar 2.6(c)) dan citra
dengan 8 bit (Gambar 2.6(a)) praktisterlihat sama. Hal seperti itulah yang
mendasari gagasan pemampatan data citra, mengingat citra dengan jumlah bit
lebih rendah tentu akan membutuhkan tempat dan transmisi yang lebih hemat.

2.3 Kualitas Citra

Di samping cacah intensitas kecerahan, jumlah piksel yang digunakan untuk


menyusun suatu citra mempengaruhi kualitas citra. Istilah resolusicitrabiasa
dinyatakan jumlah piksel pada arah lebar dan tinggi. Resolusi piksel biasa
dinyatakan dengan notasi m x n, dengan m menyatakan tinggi dan n menyatakan
Mengenal Dasar Citra 19

lebardalam jumlah piksel. Contoh pada Gambar 2.5 menunjukkan bahwa kalau
gambar apel hanya dinyatakan dalam 8 x 8 piksel,citra yang terbentuk sangat
berbeda dengan aslinya.Seandainya jumlah piksel yang digunakan lebih banyak,
tentu akan lebih mendekati dengan gambar aslinya. Contoh pada Gambar 2.6
memperlihatkan efek resolusi piksel untuk menampilkan gambar yang sama.

(a) Citra berukuran 512 x 512 (b) Citra berukuran 256 x 256
piksel piksel

(c) Citra berukuran 128 x 128 piksel (d) Citra berukuran 64 x 64 piksel

Gambar 2.7Efek resolusi berdasar jumlah piksel pada citra


ketika gambar disajikan dengan ukuran yang sama

Terlihat bahwa pada resolusi tertentu citra menjadi kabur kalau dinyatakan dengan
jumlah piksel yang makinsedikit.
20 Pengolahan Citra, Teori dan Aplikasi

Resolusi spasial ditentukan oleh jumlah piksel per satuan panjang. Istilah
seperti dpi (dot per inch) menyatakan jumlah piksel per inci. Misalnya, citra 300
dpi menyatakan bahwa citraakan dicetak dengan jumlah piksel sebanyak 300
sepanjang satu inci. Berdasarkan hal itu, maka citra dengan resolusi ruang spasial
sebesar 300 dpi dicetak di kertas dengan ukuran lebih kecil daripada yang
mempunyai resolusi ruang sebesar 150 dpi, meskipun kedua gambar memiliki
resolusi piksel yang sama.

2.4 Membaca Citra

Untuk kepentingan memudahkan dalam memahami hasil proses pengolahan


citra, Anda perlu mengenal perintah yang berguna untuk membaca citra yang
tersimpan dalam bentuk file.Octave menyediakan fungsi bernama imread. Bentuk
pemanggilannya:
Img = imread(nama_file_citra)
Dalam hal ini, nama_file_citramenyatakan namafile citra yang hendak dibaca dan
Img menyatakan larik (array) yang menampung data citra yang dibaca.Perlu
diketahui, format-format gambar yang bisa dibaca oleh imread ditunjukkan pada
Tabel 2.3.

Tabel 2.3Daftar formatfile gambar yang bisa dibaca oleh imread


Format Ekstensi Keterangan
Gambar
TIFF .tif, .tiff Tagged Image File Format
merupakan format citra yang
mula-mula dibuat boleh Aldus.
Kemudian, dikembangkan oleh
Microsoft dan terakhir oleh
Adobe.
JPEG .jpg, .jpeg Joint Photographics Expert
Group adalah format citra yang
dirancang agar bisa
memampatkan data dengan rasio
Mengenal Dasar Citra 21

Format Ekstensi Keterangan


Gambar
1:16.
GIF .gif Graphics Interface Format
merupakan format yang
memungkinkan pemampatan data
hingga 50%. Cocok untuk citra
yang memiliki area yang cukup
besar dengan warna yang sama.
BMP .bmp Windows Bitmap merupakan
format bitmap pada Windows.
PNG .png Portable Network Graphics biasa
dibaca ‘ping’. Asal mulanya
dikembangkan sebagai pengganti
format GIF karena adanya
penerapan lisensi GIF.
Mendukung pemampatan data
tanpa menghilangkan informasi
aslinya.
XWD .xwd XWindow Dump

• Daftar file citra pada Tabel 2.3 berlaku untuk


MATLAB.

• Saat buku ini ditulis, Octave hanya mampu


membaca file citra berformat PNG. Format lain
hanya bisa dibaca dengan melibatkan utilitas lain
seperti ImageMagick. Itulah sebabnya, seluruh
contoh file citra dalam buku ini menggunakan
format PNG.
22 Pengolahan Citra, Teori dan Aplikasi

Contoh berikut digunakan untuk membaca filecitra bernama mandrill.png


yang terdapat pada folder C:\Image.

>>Img = imread(’C:\Image\mandrill.png’);
>>

• Dengan cara seperti itu, data citra pada file mandrill.png


disimpan diImg. Dalam hal ini, Img berupa larikyang
mengandung M baris dan N baris. Mengingat file tersebut
berisi data citra berskala keabuan, maka nilai pada setiap
elemen dalam matriks menyatakan intensitas piksel. Nilai
intensitas itu berupa bilangan bulat antara 0 sampai dengan
255.
• Berbagai jenis citra (antara lain yang berskala keabuan) akan
segera dibahas.
• imread juga mendukung pembacaan citra 16 bit. Namun,
pembahasan di buku ini menggunakan semua file citra
berukuran 8 bit (tipe uint8).

2.5 Mengetahui Ukuran Citra

Secara umum, ukuran matriks Imgadalah M x N. Untuk mengetahui nilai M


dan N yang sesungguhnya, dapatdigunakan fungsi pada Octave yang bernama
size. Contoh untuk mengetahui dimensi pada matriks Img:

>>Ukuran = size(Img)
Ukuran =

512 512

>>

Dengan cara seperti itu, terlihat bahwa Imgberisi512 baris dan 512 kolom piksel.
Untuk mendapatkan jumlah baris dan jumlah kolom secara tersendiri, perlu
diberikan perintah seperti berikut:
Mengenal Dasar Citra 23

>> jum_baris = Ukuran(1);


>> jum_kolom = Ukuran(2);
>>

Angka 1 dan 2 pada ukuran menyatakan indeks. Dengan cara seperti itu,
jum_baris berisi jumlah baris padalarikImg dan jum_kolom berisi jumlah
kolom pada larikImg.
Sebagai alternatif, dapat ditulis perintah seperti berikut:

>> [jum_baris, jum_kolom] = size(Img);

Dengan cara seperti itu, jum_barisberisi jumlah baris pada larikImg dan
jum_kolom berisi jumlah kolom pada larikImg.

2.6 Menampilkan Citra

Citra dapat ditampilkan dengan mudah melalui fungsi imshow. Contoh


berikut digunakan untuk menampilkan citra yang terdapat di Img:

>>imshow(Img);
>>

Hasilnya berupa jendela yang menampilkan citra pada Img, seperti terlihat pada
Gambar 2.8.
24 Pengolahan Citra, Teori dan Aplikasi

Gambar 2.8Contoh penampilan gambar pada Img

Apabila dikehendaki untuk menampilkan dua citradi dua jendelamasing-


masing, fungsi figure perlu dipanggil terlebih dulu sebelum memanggil imshow.
Contoh:

>> Sungai = imread('C:\Image\innsbruck.png');


>> Bangunan = imread('C:\Image\altstadt.png');
>>figure(1); imshow(Sungai);
>>figure(2); imshow(Bangunan);

Hasilnya, gambar sungai ditampilkan di jendela 1 dan gambar


bangunandiletakkan di jendela 2.Gambar 2.9 memperlihatkan keadaan pada kedua
jendela, yaitu kebetulan sebagian jendela 2 menutup jendela 1.
Mengenal Dasar Citra 25

Gambar 2.9Menampilkan dua citradi jendela masing-masing

Octave menyediakan fasilitas yang memungkinkan dua buah citra diletakkan


dalam satu jendela. Berdasarkan larikSungai dan Bangunan di depan, dapat
dicobauntuk memberikan perintah berikut:

>> close all;


>>subplot(1,2,1); imshow(Sungai);
>>subplot(1,2,2); imshow(Bangunan);

Hasilnya dapat dilihat pada Gambar 2.10.


26 Pengolahan Citra, Teori dan Aplikasi

Gambar 2.10Contoh pemakaian subplot

Perintah close all digunakan untuk menutup semua jendela. Adapun pada
subplot, argumen pertama menyatakan jumlah baris citra dan argumen kedua
menyatakan jumlah kolom citra dalam jendela.Argumen ketiga menyatakan
indeks citra dalam jendela yang bernilai antara 1 sampai dengan jumlah baris x
jumlah kolom.

2.7 Mengenal Jenis Citra

Ada tiga jenis citra yang umum digunakan dalam pemrosesan citra.Ketiga
jenis citra tersebut yaitu citra berwarna, citra berskala keabuan, dan citra biner.

2.7.1 Citra Berwarna

Citra berwarna, atau biasa dinamakan citra RGB, merupakan jenis citra yang
menyajikan warna dalam bentuk komponen R (merah), G (hijau), dan B
(biru).Setiap komponen warna menggunakan 8 bit (nilainya berkisar antara 0
sampai dengan 255). Dengan demikian, kemungkinan warna yang bisa disajikan
Mengenal Dasar Citra 27

mencapai 255 x 255 x 255 atau 16.581.375 warna. Tabel 2.4 menunjukkan contoh
warna dan nilai R,G, dan B.

Tabel 2.4 Warna dan nilai penyusun warna


Warna R G B
Merah 255 0 0
Hijau 0 255 0
Biru 0 0 255
Hitam 0 0 0
Putih 255 255 255
Kuning 0 255 255

Gambar 2.12 menunjukkan pemetaan warna dalam ruang tiga dimensi.Adapun


Gambar 2.13 menunjukkan keadaan suatu citra dan representasi warnanya.

255
Biru Cyan

Magenta Putih

0 255
G
Hitam Hijau

255
Merah Kuning

Gambar 2.12 Warna RGB dalam ruang berdimensi tiga


28 Pengolahan Citra, Teori dan Aplikasi

Gambar 2.13Citra berwarna dan representasi warnanya.


Setiap piksel dinyatakan dengan nilai R, G, dan B

Perlu diketahui, sebuah warna tidak hanya dinyatakan dengan


komposisi R, G, dan B tunggal. Pada Tabel 2.4 terlihat bahwa
warna merah mempunyai R=255, G=0, dan B=0. Namun,
komposisi R=254, G=1, B=1 juga berwarna merah.

Citra berwarna pun dibaca melalui imread. Contoh:

>> Kota = imread('C:\Image\innsbruckcity.png');

Nah, sekarang dapatdicoba untuk mengenakan size pada Kota:

>>size(Kota)
ans =

747 500 3
Mengenal Dasar Citra 29

>>

Hasilnya menunjukkan bahwaKotaberupa larikberdimensi tiga, dengan dimensi


ketiga berisi tiga buah nilai.Hal inilah yang membedakan dengan citra berskala
keabuan.Secara umum, larik hasil pembacaan citra berwarna dapat digambarkan
seperti berikut.

M-1

3 Komponen B
M
2
1
1 2 N-1 N Komponen G

Komponen R

Gambar 2.14Hasil pembacaan citra berwarna

Dimensi ketiga menyatakan komponen R, G, B. Indeks pertama menyatakan


komponen R, indeks kedua menyatakan komponen G, dan indeks ketiga
menyatakan komponen B.
Berikut adalah cara untuk mendapatkan komponen R, G, dan B pada
larikKota di depan:

>> R = Kota(:,:,1);
>> G = Kota(:,:,2);
>> B = Kota(:,:,3);
30 Pengolahan Citra, Teori dan Aplikasi

Untuk menampilkan gambar berwarna, imshow bisa digunakan seperti kalau


mau menampilkan gambar berskala keabuan. Contoh:

>>figure(1);
>>imshow(Kota);

Hasilnya seperti berikut.

Gambar 2.15Citra berwarna

2.7.2 Citra Berskala Keabuan

Sesuai dengan nama yang melekat, citra jenis ini menangani gradasi warna
hitam dan putih, yang tentu saja menghasilkan efek warna abu-abu.Pada jenis
gambar ini, warna dinyatakan dengan intensitas.Dalam hal ini, intensitas berkisar
Mengenal Dasar Citra 31

antara 0 sampai dengan 255.Nilai 0 menyatakan hitam dan nilai 255 menyatakan
putih.Contoh citra berskala keabuan telah dibahas pada Subbab 2.5.

2.7.3 Citra Biner

Citra biner adalah citra dengan setiap piksel hanya dinyatakan dengan sebuah
nilai dari dua buah kemungkinan (yaitu nilai 0 dan 1).Nilai 0 menyatakan warna
hitam dan nilai 1 menyatakan warna putih.Citra jenis ini banyak dipakai dalam
pemrosesan citra, misalnya untuk kepentingan memperoleh tepi bentuk suatu
objek.Sebagai contoh, perhatikan Gambar 2.16.Bagian kiri menyatakan citra
beraras keabuan, sedangkan bagian kanan adalah hasil konversi ke citra biner.

(a) Citra daun berskala keabuan (b) Citra biner

Gambar 2.16Citra di kanan menyatakan bentuk citra di kiri


dengan mengabaikan komposisi warna

Contoh berikut menunjukkan cara membaca dan menampilkan citra biner.

>>Img = imread('c:\Image\daun_bin.png');
>>imshow(Img);
>>

Hasilnya seperti berikut.


32 Pengolahan Citra, Teori dan Aplikasi

Gambar 2.17Tampilan citra biner

2.8 Mengonversi Jenis Citra


Dalam praktik, seringkali diperlukan utuk mengonversi citra berwarna ke
dalam bentuk citra berskala keabuan mengingat banyak pemrosesan citra yang
bekerja pada skala keabuan.Namun, terkadang citra berskala keabuan pun perlu
dikonversikan ke citra biner, mengingat beberapa operasi dalam pemrosesan citra
berjalan pada citra biner.
Bagaimana cara mengubah citra berwarna ke dalam citra berskala keabuan?
Secara umum citra berwarna dapat dikonversikan ke citra berskala keabuan
melalui rumus:

= + + , + + =1 (2.1)

dengan R menyatakan nilai komponen merah, G menyatakan nilai komponen


hijau, dan B menyatakan nilai komponen biru. Misalnya, sebuah piksel
mempunyai komponen R, G,B sebagai berikut:
Mengenal Dasar Citra 33

R = 50
G = 70
B = 61

Jika a, b, dan c pada Persamaan 2.1 dibuat sama, akan diperoleh hasil seperti
berikut:
I = (50 + 70 + 60) / 3 = 60
Salah satu contoh rumus yang biasa dipakai untuk mengubah ke skala
keabuan yaitu:
= 0,2989 + 0,5870 + 0,1141 (2.2)
Contoh berikut menunjukkan cara melakukan konversi dari citra berwarna ke citra
biner.

>>Img = imread('C:\Image\innsbruckcity.png');
>> Abu=uint8(0.2989 * double(Img(:,:,1)) + ...
0.5870*double(Img(:,:,2)) + ...
0.1141 * double(Img(:,:,3)));
>>imshow(Abu);

• Tanda … menyatakan bahwa perintah pada baris


tersebut masih mempunyai lanjutan pada baris
berikutnya.
• Tanda : berarti semua nilai.
• double dipakai untuk melakukan konversi dari
tipe bilangan bulat 8 bit (uint8) ke tipe double
(yang memungkinkan pemrosesan bilangan real
berpresisi ganda).
• uint8 berguna untuk mengonversi dari tipe
double ke uint8 (tipe bilangan bulat 8 bit).

Hasilnya ditunjukkan pada Gambar 2.18.


34 Pengolahan Citra, Teo
eori dan Aplikasi

Gaambar 2.18Hasil konversi citra berwarna


ke citra berskala keabuan

Bagaimana halny
lnya kalau dikehendaki untuk mengonversika
kan citra berskala
keabuan ke citra bine
ner?Strategi yang dipakai yaitu dengan menera
rapkan suatu nilai
yang dikenal sebaga
gai nilai ambang (threshold). Nilai tersebut
ut dipakai untuk
menentukan suatu int
ntensitas akan dikonversikan menjadi 0 atau menjadi
m 1. Secara
matematis, konversii dinyatakan
d dengan rumus:
0,
= (2.3)
1,
Contoh berikutt menunjukkan
m cara melakukan konversi dar
ari citra berskala
keabuan ke dalam citr
itra biner.

Program : kebiner.m

% KEBINER Digunak
kan untuk mengonversi file
Mengenal Dasar Citra 35

% daun_gray.png ke citra biner

Img = imread('c:\Image\daun_gray.png');
[tinggi, lebar] = size(Img);

ambang = 210; % Nilai ini bisa diubah-ubah


biner = zeros(tinggi, lebar);
for baris=1 : tinggi
for kolom=1 : lebar
if Img(baris, kolom) >= ambang
Biner(baris, kolom) = 0;
else
Biner(baris, kolom) = 1;
end
end
end

imshow(Biner);

Akhir Program

Sebelum mencoba program di atas, akan dibahas dulu kode yang mendasari
program. Tanda % mengawali komentar.Semua tulisan dimulai dari tanda tersebut
hingga akhir baris tidak dianggap sebagai perintah, melainkan sebagai penjelas
bagi pembaca program. Kode

Img= imread('c:\Image\daun_gray.png');

merupakan perintah untuk membaca citra daun_gray.png. Hasilnya disimpan


diImg. Lalu,

[tinggi, lebar] = size(Img);

berguna untuk mendapatkan lebar dan tinggi citra.


Pernyataan

ambang = 210;

digunakan untuk menentukan nilai ambang bagi penentuan konversi suatu piksel
menjadi 0 atau 1. Nilai ambang berkisar antara 0 sampai dengan 255.
Pernyataan

for baris=1 : tinggi


for kolom=1 : lebar
36 Pengolahan Citra, Teori dan Aplikasi

ifImg(baris, kolom) >= ambang


Biner(baris, kolom) = 0;
else
Biner(baris, kolom) = 1;
end
end
end

menangani penentuan nilai 0 atau 1 pada citra biner untuk semua piksel dalam
citra (ditangani dengan dua buah for). Penentuan dilakukan melalui pernyataan if.
Dalam hal ini,

Img(baris, kolom)

menyatakan nilai intensitas piksel pada (baris, kolom).


Setelah

for baris=1 : tinggi

berakhir, maka Binerberisi citra biner. Selanjutnya, citra ditampilkan melalui

imshow(Biner);

Untuk menjalankan program di depan, berikan perintah

>>kebiner;

Hasilnya seperti berikut.


Mengenal Dasar Citra 37

Gambar 2.19Hasil konversi daun_gray.png ke bentuk biner

Gambar 2.20 memperlihatkan berbagai bentuk hasil konversi citra dengan


menggunakan berbagai nilai ambang.
38 Pengolahan Citra, Teori dan Aplikasi

Ambang = 210 Ambang = 160 Ambang = 130

Ambang = 110 Ambang = 100 Ambang = 70

Gambar 2.20Hasil konversi ke citra biner


dengan berbagai nilai ambang

Contoh-contoh yang telah dibahas memberikan gambaran tentang cara


mewujudkan sendiri konversi antarjenis citra. Hal tersebut tentu saja penting
untuk dipahami agar memudahkan di dalam mewujudkan sendiri penulisan
program seandainya menggunakan bahasa pemrograman yang lain.Namun,
sebagai penambah wawasan, sesungguhnya Octave menyediakan beberapa fungsi
untuk kepentingan konversi citra.Tabel 2.5 memperlihatkan dua fungsi penting
yang terkait dengan konversi citra.
Mengenal Dasar Citra 39

Tabel 2.5Fungsi yang disediakan Octave


untuk kepentingan konversi ke aras keabuan
Fungsi Kegunaan
im2bw(I, level) Berguna untuk mengonversikan citra berskala
im2bw(RGB, level) keabuan (I) ataupun berwarna (RGB) ke
dalam citra biner dengan menggunakan level
sebagai ambang konversi. Di MATLAB, jika
argumen kedua (yaitu level) tidak disertakan,
nilai 0,5 secara bawaan digunakan sebagai
ambang konversi. Pada Octave, argumen
kedua harus disertakan. Nilai balik fungsi ini
berupa citra biner
rgb2gray(RGB) Berguna untuk mengonversi citra berwarna
(RGB) ke citra berskala keabuan. Nilai balik
fungsi ini berupa citra berskala keabuan

Pada beberapa contoh yang akan dibahas pada bab-bab selanjutnya, dua fungsi
pada Tabel 2.5 akan digunakan dengan tujuan untuk menyederhanakan
permasalahan dalam menuliskan kode.
Agar terbiasa dengan kedua fungsi tersebut, berikut disajikan contoh
penggunaannya. Contoh pertama:

>>Img= imread('C:\Image\daun_gray.png');
>> BW = im2bw(Img, 0.6);
>>imshow(BW);

Hasilnya seperti berikut.


40 Pengolahan Citra, Teori dan Aplikasi

Gambar 2.21Hasil pembentukan citra biner melalui im2bw

Adapun contoh pemakaian rgb2gray:

>> RGB = imread('C:\Image\innsbruckcity.png');


>> Abu = rgb2gray(RGB);
>>imshow(Abu);

Hasilnya seperti berikut.


Mengenal Dasar Citra 41

Gambar 2.22 Hasil pembentukan citra berskala keabuan


melalui rgb2gray

2.9 Menyimpan Citra


Untuk kepentingan menyimpan citra ke dalam file, fungsi imwrite pada
Octave dapat digunakan. Pemakaiannya:

imwrite(A, nama_file)

A dapat berupa larik dua dimensi (citra berskala keabuan) ataupunlarik berdimensi
tiga (citra RGB).
Contoh:

>>Img = imread('C:\Image\daun_gray.png');
>>X = 255 – Img;
>>imwrite(X, ’negatif_daun.png’);
42 Pengolahan Citra, Teori dan Aplikasi

Perlu diketahui,

X = 255 – Img;

digunakan untuk memperoleh citra negatif dari citra daun_gray.png. Setelah


imwrite dieksekusi,akan terbentuk negatif_daun.png pada folder kerja. Hasilnya
diperlihatkan pada Gambar 2.23.

Gambar 2.23Hasil penyimpanan citra negatif_daun.png

Latihan

1. Jelaskan mengenai koordinat citra.


2. Apa yang dimaksud dengan kuantisasi citra?
3. Jelaskan hubungan jumlah bit dalam kuantisasi citra dengan kompresi
data.
4. Jelaskan makna kualitas citra.
5. Jelaskan pengertian :
a) citra berwarna
Mengenal Dasar Citra 43

b) citra berskala keabuan


c) citra biner
6. Jelaskan mekanisme untuk mengubah citra berwarna ke dalam citra
berskala keabuan.
7. Bagaimana prinsip untuk mengubah citra berskala keabuan ke citra biner?
8. Ubahlah innsbruckcity.png ke citra berskala keabuan dan kemudian
simpan dengan nama inns_gray.png.
9. Buatlah program untuk memproses citra daun_gray.png agar diperoleh
hasil seperti berikut.

10. Gunakanlah fungsi im2bw untuk mengonversikan citra innsbruckcity.png


ke dalam bentuk citra biner dengan menggunakan level sebesar 0,7, 0,5,
dan 0,3.Bagaimana kesan Anda mengenai hasil-hasil yang diperoleh?
11. Buatlah program untuk menguantisasi citra daun_gray.png dengan 2 bit.
Tampilkan hasilnya. Apakah hasilnya masih terlihat seperti aslinya? Bila
tidak, dengan menggunakan berapa bit agar gambar tersebut terlihat sesuai
dengan aslinya?
BAB 3
Operasi Piksel
dan Histogram

Setelah bab ini berakhir, diharapkan pembaca memahami


berbagai bahasan berikut.
Operasi piksel
Menggunakan histogram citra
Meningkatkan kecerahan
Meregangkan kontras
Kombinasi kecerahan dan kontras
Membalik citra
Pemetaan nonlinear
Pemotongan aras keabuan
Ekualisasi histogram
44 Pengolahan Citra, Teori dan Aplikasi

3.1 Operasi Piksel


Pada pengolahan citra terdapat istilah operasi piksel atau kadang disebut
operasi piksel-ke-piksel.Operasi piksel adalah operasi pengolahan citra yang
memetakan hubungan setiap piksel yang bergantung pada piksel itu sendiri. Jika
f(y, x) menyatakan nilai sebuah piksel pada citra f dan g(y, x) menyatakan piksel
hasil pengolahan dari f(y, x), hubungannya dapat dinyatakan dengan

, = , (3.1)

Dalam hal ini, T menyatakan fungsi atau macam operasi yang dikenakan terhadap
piksel f(y, x). Model operasi inilah yang akan dibahas di bab ini,termasuk
pembahasan pengolahan citra berbasis histogram.

3.2 Menggunakan Histogram Citra


Histogram citra merupakan diagram yang menggambarkan frekuensi
setiapnilai intensitas yang muncul di seluruh piksel citra.Nilai yang besar
menyatakan bahwa piksel-piksel yang mempunyai intensitas tersebut sangat
banyak.
Pada citra berskala keabuan, jumlah aras keabuan (biasa disimbolkan dengan
L) sebanyak 256. Nilai aras dimulai dari 0 hingga 255. Adapun histogram untuk
suatu aras dinyatakan dengan hist(k+1) dengan k menyatakan nilai aras (0
sampai dengan L-1). Jadi,hist(k+1) menyatakan jumlah piksel yang bernilai k.
Penggunaan k+1 pada hist diperlukan mengingat dalam Octavedan MATLAB
tidak ada indeks nol atau hist(0). Cara menghitung hist(k+1) ditunjukkan
pada algoritma berikut.

ALGORITMA 3.1 – Menghitung histogram citra aras keabuan


Masukan:
• f(M, N) : citra berukuran M baris dan N kolom
• L : jumlah aras keabuan

1. Buatlah larikhist sebanyak 2L elemen dan isi dengan nol.


2. FOR i ←1 TO M
Operasi Piksel dan Hi
Histogram 45

FOR j←1 TO
ON
hist(f(M,, N
N)+1) ←hist(f(M, N)+1) + 1
END-FO
FOR
END-FOR
R

Contoh berikut menunjukkan


m cara membuat histogram citra innsbruck.png.
in

Program : histo.m

functionhisto(Img
g)
% HISTO Digunakan
n sebagai contoh pembuatan histogram

[jum_baris, jum_k
kolom] = size(Img);
Img = double(Img)
);

Histog = zeros(25
56, 1);
for baris=1 : jum
m_baris
for kolom=1 : jum
m_kolom
Histog(Img(baris,
, kolom)+1) = ...
Histog(Img(baris,
, kolom)+1) + 1;
end
end

% Tampilkan dalam
m bentuk diagram batang
Horis = (0:255)';
;
bar(Horis, Histog
g);

Akhir Skrip

Perlu diketahui, (0:25


255) untuk membentuk nilai dari 0,1,2, dan se
seterusnya sampai
dengan 255. Dengan
an kata lain, (0:255) membentuk larik 1 x 2256. Tanda ‘ di
belakang (0:255) meenyatakan operasi transpos, sehingga hasiln
ilnya berupa larik
erintah bar digunakan untuk membuat diagram
berukuran 256x1. Per am batang.
46 Pengolahan Citra, Teori
Te dan Aplikasi

Misaln
lnya, B berisi 0, 10, 8, …, 5, 20 (berukuran
an 1 x 256). Bila
dilakuk
ukan operasi transpos (B’), diperoleh matrikss berukuran 256 x
1. Hasi
asilnya seperti berikut:

0
10
8

5
20

Dengan memangggil

>>Img = imread
d('C:\Image\innsbruck.png');
>>histo(Img);

diperoleh hasil sepert


erti terlihat pada Gambar 3.1.Perhatikan keber
eradaan satu garis
yang cukup panjangg di posisi intensitas nol, yang berasal dari ba
bagian citra yang
berwarna hitam.Ada
dapun puncak histogram di posisi intensi
nsitas sekitar 90
menyatakan warna ddominan abu-abu.Garis panjang di sisi kan
anan menyatakan
warna putih.

Gamba
bar 3.1Citrainnsbruck.png dan histogramny
nya
Operasi Piksel dan Histogram 47

Untuk kemudahan dalam mengamati histogram, fungsi bawaan bernama


imhistdapat dimanfaatkan. Contoh penggunaannya:

>>Img=imread('C:\Image\innsbruck.png');
>>imhist(Img);

Hasilnya ditunjukkan pada Gambar 3.2.

Gambar 3.2Hasil histogram dengan imhist

Untuk mengetahui nilai histogram, diperlukan perintah seperti berikut:

>> [Histog, aras] = imhist(Img);

Dengan cara seperti itu,Histog berupa larik yang berisi jumlah piksel setiap
nilai aras dalam argumen aras. Namun, diagram tidak dibuat.

• Sayangnya fungsi imhist pada Octave saat buku ini ditulis


masih menyisakan bug.
• Pada pengolahan citra terkadang dijumpai istilah histogram
ternormalisasi. Artinya, nilai histogram dibagi dengan jumlah
piksel dalam citra, sehingga menjadi angka-angka pecahan
bernilai kurang dari satu dan jumlah totalnya satu.
48 Pengolahan Citra, Teori dan Aplikasi

Pada pengolahan citra, histogram mempunyai peran yang cukup


penting.Manfaat yang dapat didapatkan seperti berikut.

1. Berguna untuk mengamati penyebaran intensitas warna dandapat dipakai


untuk pengambilan keputusan misalnya dalam peningkatan kecerahan atau
peregangan kontras serta sebaran warna.
2. Berguna untuk penentuan batas-batas dalam pemisahan objek dari
latarbelakangnya.
3. Memberikan persentase komposisi warna dan tekstur intensitas untuk
kepentingan identifikasi citra.

Khusus pada citra berwarna, histogram dapat diterapkan pada gabungan


komponen-komponen RGB penyusunnya ataupun per komponen.Gambar 3.3
menunjukkan contoh mengenai hal itu.Pada gambar tersebut, I menyatakan
histogram gabungan intensitas warna, R untuk komponen warna merah, G untuk
komponen warna hijau, dan B untuk komponen warna biru.
Operasi Piksel dan Histogram 49

Gambar 3.3Histogram pada citra berwarna secara menyeluruh (I), merah


(R), hijau (G), dan biru (B)

Histogram tidak mencerminkan susunan posisi warna piksel di dalam


citra.Oleh karena itu, histogram tidak dapat dipakai untuk menebak bentuk objek
50 Pengolahan Citra, Teori dan Aplikasi

yang terkandung di dalam citra. Sebagai contoh, Gambar 3.4 memperlihatkan


empat buah citra yang memiliki histogram yang sama, tetapi bentuk masing-
masing jauh berbeda. Dengan demikian, histogram tidak memberikan petunjuk
apapun tentang bentuk yang terkandung dalam keempat citra tersebut.

Gambar 3.4Empat buah citra (a),(b),(c), dan (d) yang memiliki histogram
yang sama (e),tetapi mempunyai informasi yang jauh berbeda

3.3 Meningkatkan Kecerahan

Operasi dasar yang sering dilakukan pada citra adalah peningkatan kecerahan
(brightness).Operasi ini diperlukan dengan tujuan untuk membuat gambar
menjadi lebih terang.
Secara matematis, peningkatan kecerahan dilakukan dengan cara
menambahkan suatu konstanta terhadap nilai seluruh piksel. Misalkan, f(y, x)
menyatakan nilai piksel pada citra berskala keabuan pada koordinat (y, x). Maka,
citra baru

, = , + (3.2)

telah meningkat nilai kecerahan semua pikselnya sebesar terhadap citra asli f(y,
x). Apabila β berupa bilangan negatif, kecerahan akanmenurun atau menjadi lebih
gelap.
Operasi Piksel dan Histogram 51

Sebagai contoh, terdapat citra seperti pada Gambar 3.5(a).Citratersebut dapat


dicerahkan dengan memberikan perintah seperti berikut.

>>Img = imread('C:\Image\absam.png');
>> C = Img + 60;
>>imshow(C);

Hasilnya ditunjukkan pada Gambar 3.5(b).

(a) Sebelum dicerahkan (b) Sesudah dicerahkan

Gambar 3.5Efek pencerahan gambar

Jika dilihat melalui histogram, peningkatan kecerahan sebenarnya berefek


pada penggeseran komposisi intensitas piksel ke kanan bila β berupa bilangan
positif atau ke kiri jika β berupa bilangan negatif di Persamaan 3.2. Gambar 3.6
memperlihatkan keadaan ketika pencerahan dilakukan.
52 Pengolahan Citra, Teori dan Aplikasi

(a) Citra dengan kecerahan rendah (b) Citra dengan kecerahan ditambah 20

(c) Histogram dari gambar (a) (d) Histogram dari gambar (b)

Gambar 3.6Histogram pada peningkatan citra. Komposisi jumlah intensitas


peraras keabuan tidak berubah

Perhatikan, warna hitam (ditandai dengan garis tunggal yang menonjol di ujung
kiri histogram) ikut tergeser. Jadi, warna hitam tidak lagi menjadi hitam kalau
peningkatan kecerahan dilakukan dengan cara seperti di depan.
Bagaimana kalau ingin mencerahkan pada citra berwarna? Secara prinsip, hal
itusama saja dengan pada citra berskala keabuan. Tentu saja, dalam hal ini,
penambahan konstanta dilakukan pada ketiga komponen penyusun warna.
Contoh:

>> RGB = imread('c:\Image\bunga.png');


>> RGB2 = RGB + 80;

Gambar 3.7 memperlihatkan perbedaan antara gambar pada keadaan awal dan
setelah dicerahkan.Gambar 3.7(a) menyatakan citra pada RGB dan Gambar 3.7(b)
menyatakan citra pada RGB2.
Operasi Piksel dan Histogram 53

(a) Keadaan awal (b) Citra yang telah dicerahkan

Gambar 3.7 Peningkatan kecerahan pada citra berwarna

3.4 Meregangkan Kontras

Kontras dalam suatu citra menyatakan distribusi warna terang dan warna
gelap. Suatu citra berskala keabuan dikatakan memiliki kontras rendah apabila
distribusi warna cenderung pada jangkauan aras keabuan yang sempit.
Sebaliknya, citra mempunyai kontras tinggi apabila jangkauan aras keabuan lebih
terdistribusi secara melebar.Kontras dapat diukur berdasarkan perbedaan antara
nilai intensitas tertinggi dan nilai intensitas terendah yang menyusun piksel-piksel
dalam citra.
Perlu diketahui, citra dengan kontras rendah acapkali terjadi karena kondisi
pencahayaan yang jelek ataupun tidak seragam.Hal itu dapatdiakibatkan oleh
sensor-sensor penangkap citra yang tidak linear (Jain, 1989).
Agar distribusi intensitas piksel berubah perlu dilakukan peregangan kontras.
Hal ini dilaksanakan dengan menggunakan rumus

, = , (3.3)

Berdasarkan rumus di atas, kontras akan naik kalau α > 1 dan kontras akan turun
kalau α < 1.
Sebelum mempraktikkan peregangan kontras, perhatikan Gambar 3.8.Gambar
tersebut sengaja dibuat ekstrem sempit agar memiliki kontras yang rendah.Hal ini
dapat dilihat pada histogramnya.
54 Pengolahan Citra, Teori dan Aplikasi

(a) Citra gembala.png (b) Histogram gambar (a)

Gambar 3.8Contoh citra dengan kontras rendah

Sekarang akandicoba untuk meregangkan kontras dengan cara seperti berikut:

>>Img = imread('C:\Image\gembala.png');
>> K = 2.5 * Img;

Gambar 3.9 memperlihatkan hasil peregangan kontras dan bentangan


histogramnya.

(a) Citra hasil peregangan kontras (b) Histogram gambar (a)

Gambar 3.9Hasil peregangan kontras dengan α = 2,5

Kalau dilihat dari histogram pada Gambar 3.9(b), tampak bahwa distribusi
intensitas warna menjadi melebar dan bergeser ke kanan terhadap keadaan
terdahulu. Namun, karena distribusi cenderung ke aras keabuan yang tinggi, maka
warna yang dihasilkan cenderung keputih-putihan.
Operasi Piksel dan Histogram 55

3.5Kombinasi Kecerahan dan Kontras

Operasi peningkatan kecerahan dan peregangan kontras dapat dilakukan


sekaligus untuk kepentingan memperbaiki citra. Secara umum, gabungan kedua
operasi tersebut dapat ditulis menjadi

, = , + (3.4)

Namun, kalau yang dikehendaki adalah melakukan pengaturan agar aras keabuan
pada citra f yang berkisar antara f1 dan f2 menjadi citra g dengan aras antara g1
dan g2, rumus yang diperlukan adalah

, = + , − (3.5)

Mengacuhistrogram pada Gambar 3.9(b), rumus di atas dapat diterapkan.Pertama,


distribusi histogram perlu digeser ke kiri.Selanjutnya, baru dikenakan peregangan
kontras.Implementasinya seperti berikut.

>>Img = imread('C:\Image\gembala.png');
>> C = Img - 45;
>> K = C * 11;

Dengan cara seperti itu, akan dihasilkan citra yang lebih tegas, sebagaimana
diperlihatkan pada Gambar 3.10.

(a) Citra hasil pengaturan kecerahan dan (b) Histogram gambar (a)
peregangan kontras

Gambar 3.10Hasil pengaturan kecerahan dan


peregangan kontras menggunakan Persamaan 3.5
56 Pengolahan Citra, Teori dan Aplikasi

3.6 Membalik Citra

Bila pernah melihat film hasil kamera analog, gambar yang terekam dalam
film tersebut berkebalikan dengan foto saat dicetak, yang dikenal sebagai film
negatif.Citra seperti ini biasa digunakan pada rekam medis; misalnya hasil
fotografi rontgen.Hubungan antara citra dan negatifnya untuk yang beraras
keabuan dapat dinyatakan dengan rumus:

, = 255 − , (3.6)

Hubungan di atas dapat digambarkan seperti secara grafis pada Gambar 3.11.

g(f)

255

0 f
255

Gambar 3.11Pembalikan citra

Gambar 3.11 menunjukkan bahwa kalau f(y, x) bernilai 255, g(y, x) bernilai
0.Sebaliknya, kalau f(y, x) bernilai 0, g(y, x) bernilai 255. Jika bit yang digunakan
bukan 8 tetapi 4, persamaan untuk membalik citra berubah menjadi

, = 15 − , (3.7)

Untuk mempraktikkan Persamaan 3.7, perintah berikut dapat dicoba:

>>Img = imread('C:\Image\lena256.png');
>> R = 255 - Img;
Operasi Piksel dan Histogram 57

Dengan memberikan

R = 255 - Img;

makaR berisi kebalikan dari citra diImg. Citra asli dan citra negatif yang
dihasilkan diperlihatkan pada Gambar 3.12.

(a) Citra asli (b) Citra hasil pembalikan

Gambar 3.12Pembalikan citra

3.7 Pemetaan Nonlinear

Dalam pengolahan citra, terkadang diperlukan pemetaan intensitas piksel


yang tidak menggunakan cara linear seperti yang telah dibahas, melainkan
menggunakan pendekatan nonlinear. Kalau suatu citra berisi bagian yang cerah
dan bagian yang gelap yang cukup ekstrem, akan lebih baik kalau digunakan cara
nonlinear. Sebagai contoh, dapat digunakan fungsi logaritma, yang membuat
bagian yang gelap (intensitas rendah) lebihdicerahkan daripada yang berintensitas
tinggi, karena memuat banyak detail yang penting.Gambar 3.13 memperlihatkan
keadaan tersebut.
58 Pengolahan Citra, Teori dan Aplikasi

g(f)

∆g2

∆g1

f
∆f1 ∆f2

Gambar 3.13Pemetaan dengan fungsi logaritma

Gambar 3.14 menunjukkan bahwa dengan menggunakan selang ∆f yang sama


pada f, ternyatamemberikan selang yang berbeda pada g. Dengan kata lain, terjadi
pengaturan atau variasi intensitas berbeda pada intensitas rendah dan intensitas
tinggi. Peningkatan yang tajam dilakukan pada area yang gelap (yang nilai
intensitasnya rendah).Sifat pemetaan yang tidak seragam itulah yang dikatakan
sebagai pemetaan nonlinear.Gambar 3.14 memperlihatkan efek pemetaan
nonlinear berdasarkan citragembala.png (Gambar 3.8 (a)).
Operasi Piksel dan Histogram 59

(a) Citra pemetaan dengan logaritma (b) Histogram gambar (a)

Gambar 3.14Contoh hasil penggunaanpemetaan nonlinear

Kode yang digunakan untuk melakukan pemetaan di atas seperti berikut:

>>Img = imread('C:\Image\gembala.png');
>> C=log(1+double(Img));
>> C2=im2uint8(mat2gray(C));

Penambahan angka 1 pada fungsi logdimaksudkan untuk menghindari kegagalan


dalam menghitung logaritma alami untuk bilangan nol. Karena fungsi log bekerja
pada area bilangan real maka penggunaan double(Img) diperlukan. Selanjutnya,
mengingat hasil pada C berupa bilangan real, diperlukan konversi balik ke tipe
uint8 (8 bit). Hal ini dikerjakan melalui

C2=im2uint8(mat2gray(C));

Pertama-tama, mat2gray dipanggil agar semua nilai pada larik C berada di dalam
jangkauan [0, 1].Lalu, agar nilai berada pada jangkauan [0, 255], im2uint8
dipanggil.

3.8 PemotonganAras Keabuan

Efek pemotongan (clipping) diperoleh bila dilakukan operasi seperti berikut:


60 Pengolahan Citra, Teori
Te dan Aplikasi

0,
, = , , , "
255
255, !
(3.8)

Nilai g dinolkan atau


au dipotong habis untuk intensitas asli dari 0 hingga
h f1 karena
dipandang tidak meng
ngandung informasi atau objek menarik.Demi
mikian pula untuk
nilai intensitas darii f2 ke atas, yang mungkin hanya mengadung
ng derau.Gambar
3.15 menyajikan diag
agram penggunaan rumus tersebut.

2
255

45o
0 f
f1 f2

Gambar 3.115Contoh pemotongan aras keabuan dengagan pola


sangat tidak linear atau patah-patah

Untuk memprak
aktikkan rumus dalam Persamaan 3.8, kode
de berikut dapat
digunakan.

Program : potong.m

function [Hasil] = potong(berkas, f1, f2)


% POTONG Menghasi
ilkan citra dengan level 0 s/d f1
% serta f2-25
55 dinolkan

Img = imread(berk
kas);
[tinggi, lebar] = size(Img);

Hasil = Img;
Operasi Piksel dan Histogram 61

for baris=1 : tinggi


for kolom=1 : lebar
if Hasil(baris, kolom) <= f1
Hasil(baris, kolom) = 0;
end

if Hasil(baris, kolom) >= f2


Hasil(baris, kolom) = 255;
end
end
end

Akhir Program

Skrip di atas dapat dipanggil dengan menyertakan namafile berisi citra berskala
keabuan, batas rendah dan batas tinggi untuk kepentingan pemotongan pada citra.
Sebagai contoh, pemanggilan seperti berikut dapat diberikan:

>> H=potong('C:\Image\daun.png', 30, 170);


>>imshow(H);

Dengan cara seperti itu, hasil pemrosesan ditampilkan. Gambar 3.16 menunjukkan
contoh daun.png dalam keadaan asli dan hasil pemotongan pada dua tingkat
ambang. Pada Gambar 3.16(b), sedikit noktah warna latar belakang masih
muncul.
62 Pengolahan Citra, Teori dan Aplikasi

(a) Citra asli daun.tif (b) f1=30, f2=170 (c) f1=50, f2=150

Gambar 3.16Efek pemotongan aras keabuan

Untuk melakukan percobaan dalam menentukan f1 dan f2, kekhasan


histogram citra perlu dipertimbangkan.Gambar 3.17 memperlihatkan histogram
daun.png.

Gambar 3.17Histogram daun.png


Operasi Piksel dan Histogram 63

Nilai intensitas yang berposisi sebagai lembah dalam histogram pada Gambar
3.18 (sekitar 40 untuk f1 dan 160 untuk f2) berpotensi menjadi nilai ambang,

3.9Ekualisasi Histogram

Ekualisasi histogram merupakan suatu cara yang bertujuan untuk


memperoleh histogram yang intensitasnya terdistribusi secara seragam pada
citra.Namun, dalam praktik, hasilnya tidak benar-benar seragam (Jain, 1989).
Pendekatan yang dilakukan adalah untuk mendapatkan aras keabuan yang lebih
luas pada daerah yang memiliki banyak piksel dan mempersempit aras keabuan
pada daerah yang berpiksel sedikit.Efeknya dapat digunakan untuk meningkatkan
kontras secara menyeluruh.Perlu diketahui, ekualisasi histogram termasuk sebagai
pemetaan nonlinear.
Misalnya, histogram untuk setiaparas keabuan dinyatakan dengan

hist[i+1]

Dalam hal ini, i bernilai 0, 1, 2, .., L-1, dengan L menyatakan jumlah aras
keabuan. Akumulasi histogram untuk piksel yang memiliki aras k dinyatakan
dengan

# $ + 1 = ∑,-. ℎ'() $ + 1 , $ = 0,1,2, … , + − 1 (3.8)

Selanjutnya, aras k akan diganti dengana dengan ketentuan sebagai berikut:

/, = 01234 + − 1 , $ = 0,1,2, … , + − 1
5 ,6
7
(3.9)

Dalam hal ini, N menyatakan jumlah piksel pada citra.


Untuk memahami proses dalam ekualisasi histogram, lihatlah contoh pada
Tabel 3.1.
64 Pengolahan Citra, Teori dan Aplikasi

Tabel 3.1Proses ekualisasi histogram


I Aras hist[i] c[i] a(i)
1 0 2 2 0
2 1 2 4 0
3 2 4 8 0
4 3 12 20 2
5 4 18 38 4
6 5 14 52 6
7 6 10 62 7
8 7 2 64 7
L=8 N=64

Pada contoh di atas, yang diarsir dengan warna hijau muda menyatakan keadaan
awal citra.Dalam hal ini, citra mengandungN=64 piksel (8x8) dengan jumlah aras
keabuan berupa 8. Selanjutnya, berdasarkan nilai hist[i] maka c[i]
dihitung.Selanjutnya, a[i]dapat dihitung berdasar Persamaan 3.9. Dalam hal ini,
setiap nilai

• 0 atau 1 pada citra akan diganti dengan 0;


• 3 akan diganti dengan 2;
• 4 tidak diganti (tetap);
• 5 diganti dengan 6;
• 6 dan 7 diganti dengan 7.

Gambar 3.18 memperlihatkan keadaan sebelum dan sesudah ekualisasi


histogram.Tampak bahwa di sekitar batang histogram yang paling tinggi terjadi
perenggangan dan perbedaan dengan yang lebih rendah mengecil.
Operasi Piksel dan Histogram 65

(a) Histogram awal (b) Histogram setelah ekualisasi


Gambar 3.18Efek ekualisasi histogram

Algoritma untuk melakukan penggantian nilai intensitas pada citra


ditunjukkan berikut ini.

ALGORITMA 3.2 – Melaksanakan ekualisasi histogram citra


aras keabuan

Masukan:
• f(M, N) : citra berukuran M baris dan N kolom
• n : jumlah piksel dalam citra
Keluaran
• g(M, N) : citra yang telah mengalami ekualisasi histogram

1. Hitung faktor penyekalaan: α ← 255 / n


2. Hitung histogram citra menggunakan Algoritma 3.1 dengan
hasil berupa hist
3. c[1] ← α * hist[1]
4. FOR i←1 TO L-1
5. c[i+1] ← c[i] + round(α * hist[i+1])
6. END-FOR
7. FOR i ←1 TO M
8. FOR j←1 TO N
9. g(y,x) ← c[f(y, x)]
10. END-FOR
11. END-FOR

Berikut adalah contohskrip yang digunakan untuk melakukan ekualisasi


terhadap gambar gembala.png.
66 Pengolahan Citra, Teori
Te dan Aplikasi

Program : ekualisasi.m

% EKUALISASI Cont
toh untuk melakukan ekualisasi histog
gram

\Image\gembala.png');
Img = imread('c:\
[jum_baris, jum_k
kolom] = size(Img);

L=256;
Histog = zeros(L,
, 1);
for baris=1 : jum
m_baris
for kolom=1 : jum
m_kolom
Histog(Img(baris,
, kolom)+1) = ...
Histog(Img(baris,
, kolom)+1) + 1;
end
end

alpha = (L-1) / (jum_baris


( * jum_kolom);

C(1) = alpha * Hi
istog(1);
for i=1 : L-2
C(i+1) = C(i) + round(alpha
r * Histog(i+1));
end

for baris=1 : jum


m_baris
for kolom=1 : jum
m_kolom
Hasil(baris, kolo
om) = C(Img(baris, kolom));
end
end

Hasil = uint8(Has
sil);
imshow(Hasil);

Akhir Program

Gambar 3.19 men


enunjukkan contoh hasil citra berdasarkan pem
emrosesan di atas,
yang memperlihatkan
an dengan jelas posisi peregangan dan pemad
adatan garis-garis
histogram.
Operasi Piksel dan Histogram 67

(a) Hasil ekualisasi histogram (b) Histogram gambar a

Gambar 3.19Hasil ekualisasi histogram dan histogramnya

Perlu diketahui, pernyataan

Hasil = uint8(Hasil);

Pada ekualisasi.m diperlukan untuk membuat hasil bertipe uint8 mengingat

Hasil(baris, kolom) = C(Img(baris, kolom));

memberikanHasil bertipe double. Hal itu disebabkan C memang bertipe double.

Latihan

1. Jelaskan yang dimaksud operasi piksel.


2. Jelaskan pengertian histogram citra.
3. Terdapat citra 4x4 dengan rincian nilai kecerahan piksel seperti berikut.

7 7 7 7
6 5 5 6
5 5 5 5
2 4 0 1

Aras keabuan sebanyak 8 buah.Bagaimana histogram citra tersebut dalam


bentuk angka?
68 Pengolahan Citra, Teori dan Aplikasi

4. Apa bedanya histogram citra asli dengan histogram citra yang ternormalisasi?
Terapkan histogram ternormalisasi untuk citra pada soal 3.
5. Apakah histogram dapat dipakai untuk mengenali objek yang terkandung
dalam citra secara langsung? Jelaskan!
6. Jelaskan yang dimaksud dengan citra dengan kontras yang rendah. Apakah
efeknya?
7. Jelaskan bahwa peningkatan kecerahan melalui rumus

, = , +

tidak memberikan efek peregangan kontras.


8. Jelaskan bahwa dengan menggunakan peningkatan kecerahan saja, warna
hitam justru menjadi tidak tegas lagi.
9. Suatu citra berskala keabuan memiliki nilai aras keabuan terendah berupa a
dan nilai aras keabuan tertinggi sebesar b. Bagaimana cara meregangkan
kontras pada citra agar aras keabuan terendah berupa 0 dan nilai aras keabuan
tertinggi berupa 255?
10. Terangkan proses untuk membentuk film negatif berdasarkan suatu citra.
11. Apa sebenarnya tujuan penggunaan fungsi logaritmik alami dalam operasi
piksel?
12. Berdasarkan Tabel 3.1, berapa jumlah piksel untuk setiaparas keabuan (0
sampai dengan 7) setelah ekualisasi histogram dilakukan.
13. Buatlah suatu program yang dapat digunakan untuk meregangkan kontras dari
suatu citra sehingga nilai aras keabuan terendah pada aras 0 dan nilai aras
keabuan tertinggi dalam histogramnya akan diletakkan pada aras 255. Rumus
yang dapat dipakai:

255
, = , − '89:9;<=>
'89:8-; - − '89:9;<=>

dengan i menyatakan intensitas. Gambar berikut menunjukkan skema


konversinya.
Operasi Piksel dan Histogram 69
70 Pengolahan Citra, Teori dan Aplikasi
BAB 4
Operasi
Ketetanggaan
Piksel

Setelah bab ini berakhir, diharapkan pembaca


mendapatkan pengetahuan mengenai hal-hal berikut dan
cara mempraktikkannya.

Pengertian operasi ketetanggaan piksel


Pengertian ketetanggaan piksel
Aplikasi ketetanggaan piksel pada filter batas
Pengertian konvolusi
Problem pada konvolusi
Mempercepat komputasi pada konvolusi
Pengertian frekuensi
Filter lolos-rendah
Filter lolos-tinggi
Filter high-boost
Efek emboss
72 Pengolahan Citra, Teori dan Aplikasi

4.1 Pengertian Operasi Ketetanggaan Piksel

Operasi ketetanggaan piksel adalah operasi pengolahan citra untuk


mendapatkan nilai suatu piksel yang melibatkan nilai piksel-piksel
tetangganya.Hal ini didasarkan kenyataan bahwa setiap piksel pada umumnya
tidak berdiri sendiri, melainkan terkait dengan piksel tetangga, karena merupakan
bagian suatu objek tertentu di dalam citra.Sifat inilah yang kemudian mendasari
timbulnya algoritma untuk mengolah setiap piksel citra melalui piksel-piksel
tetangga.Sebagai contoh, suatu citra yang berderau dapat dihaluskan melalui
pererataan atas piksel-piksel tetangga.Gambar 4.1 memberikan ilustrasi operasi
ketetanggaan piksel.Delapan piksel tetangga terdekat denganpiksel f(y,x)
digunakanuntukmemperbaikinyamenjadi g(y,x) di tempat yang sama.

x Piksel tetangga f(y, x)


menentukan piksel
pada g(y,x)

f(y, x)
y

g(y, x)

Gambar 4.1Operasi ketetanggaan piksel.


Sejumlah tetangga menentukan nilai sebuah piksel

4.2 Pengertian Ketetanggaan Piksel

Pada pengolahan citra, ketetanggaan piksel banyak dipakai terutama pada


analisis bentuk objek.Ketetanggaan piksel yang umum dipakai adalah 4-
Operasi Ketetanggaan Piksel 73

ketetanggaan dan 8-ketetanggan.Untuk memahami dua jenis ketetanggaan piksel,


lihat Gambar 4.2.

T2 T4 T3 T2

T3 P T1 T5 P T1

T4 T6 T7 T8

Gambar 4.2Dua macam ketetanggaan piksel

Pada 4-ketetanggan, T1, T2, T3, dan T4 merupakan tetangga terdekat piksel P. Pada
8-ketetanggan, tetangga piksel P yaitu piksel-piksel yang berada disekitar P.
Totalnya sebanyak 8 buah. Bila P mempunyai koordinat (b, k) dengan b baris dan
k kolom,hubungan piksel tetangga terhadap P sebagai berikut.

• Pada 4-ketetanggaan

= , +1 , = − 1, , = , −1 , = + 1, (4.1)

• Pada 8-ketetanggaan

= , +1 , = − 1, − 1 ,
= , −1 , = − 1, − 1 (4.2)
= , −1 , = + 1, − 1 ,
= + 1, − 1 , = + 1, + 1

4.3 Aplikasi Ketetanggaan Piksel pada Filter


Ada tiga jenis filter yang menggunakan operasi ketetanggaan piksel yang
akan dibahas sebagai pengantar pada bab ini. Ketiga filter tersebut adalah filter
batas, filter pererataan, dan filter median. Sebagai filter atau tapis, operasi
ketetanggaan piksel berfungsi untuk menyaring atau paling tidak mengurangi
gangguan atau penyimpangan pada citra.
74 Pengolahan Citra, Teori dan Aplikasi

4.3.1 Filter Batas

Filter batas adalah filter yang dikemukakan dalam Davies (1990). Idenya
adalah mencegah piksel yang intensitasnya di luar intensitas piksel-piksel
tetangga.Algoritma yang digunakan untuk keperluan ini dapat dilihat berikut ini.

ALGORITMA 4.1 – Menghitung piksel dengan filter batas


Masukan:
• f(y, x) : Piksel pada posisi (y, x)
Keluaran:
• g(y, x) : Nilai intensitas untuk piksel pada citra g pada posisi
(y, x)

1. Carilah nilai intensitas terkecil pada tetangga f(y, x) dengan


menggunakan 8-ketetanggan dansimpanpadaminInt.
2. Carilah nilai intensitas terbesar pada tetangga f(y, x) dengan
menggunakan 8-ketetanggan dansimpanpadamaksInt.
3. IF f(y, x) <minInt
g(y, x) ←minInt
ELSE
IF f(y. x) >maksInt
g(y, x) ←maksInt
ELSE
g(y, x) ← f(y, x)
END-IF
END-IF

Sebagai contoh, terdapat piksel seperti terlihat pada Gambar 4.3.


Operasi Ketetanggaan
an Piksel 75

G
Gambar 4.3Contoh piksel dan tetangga

Berdasarkan keadaan
an tersebut,

• minInt = mini
nimum(5, 7, 7, 5, 4, 6, 7, 8) = 4;
• maksInt = mak
aksimum(5, 7, 7, 5, 4, 6, 7, 8) = 8;
• mengingat f(y
(y, x) bernilai 9 dan lebih besar daripada 8 (maaksInt) maka g(y,
x) bernilai 8;
• seandainya f(y,
f( x) pada keadaan di atas bernilai 2 (bukan
( 9),g(y,x)
akanbernilaii 4.
4

Untuk melihat efe


efek filter batas, cobalah program berikut.

Program : filbatas.m

% FILBATAS Melaku
ukan operasi ketetanggan piksel
% menggunakan
n filter batas

F = imread('c:\Im
mage\mobil.png');
Ukuran = size(F);
;
tinggi = Ukuran(1
1);
lebar = Ukuran(2)
);

G = F;
76 Pengolahan Citra, Teori dan Aplikasi

for baris=2 : tinggi-1


for kolom=2 : lebar-1
minPiksel = min([F(baris-1, kolom-1) ...
F(baris-1, kolom) F(baris, kolom+1) ...
F(baris, kolom-1) ...
F(baris, kolom+1) F(baris+1, kolom-1) ...
F(baris+1, kolom) F(baris+1, kolom+1)]);
maksPiksel = min([F(baris-1, kolom-1) ...
F(baris-1, kolom) F(baris, kolom+1) ...
F(baris, kolom-1) ...
F(baris, kolom+1) F(baris+1, kolom-1) ...
F(baris+1, kolom) F(baris+1, kolom+1)]);

if F(baris, kolom) < minPiksel


G(baris, kolom) = minPiksel;
else
if F(baris, kolom) > maksPiksel
G(baris, kolom) = maksPiksel;
else
G(baris, kolom) = F(baris, kolom);
end
end
end
end

figure(1);
imshow(G);

clear;

Akhir Program

Perlu diketahui, pemrosesan hanya dilakukan selain baris pertama, baris terakhir,
kolom pertama, dan kolom terakhir.Keempat area tersebut tidak diproses karena
tidak mempunyai tetangga yang lengkap (sebanyak 8).
Untuk melihat efek filter batas, jalankan program di atas. Kemudian,
bandingkan citra asli dan citra yang dihasilkan oleh program tersebut.Gambar 4.3
memperlihatkan perbedaannya.
Operasi Ketetanggaan Piksel 77

(a) Citra mobil yang telah diberi (b) Hasil pemfilteran gambar (a)
bintik-bintik putih

Gambar 4.4Efek filter batas terhadap citra yang mengadung derau

Terlihat bahwa bintik-bintik putih pada citra mobil.pngdapat dihilangkan.Namun,


kalau diperhatikan dengan saksama, operasi tersebut juga mengaburkan citra.Pada
citra boneka2.png, derau malah diperkuat. Artinya, filter itu tidak cocok
digunakan untuk menghilangkan jenis derau yang terdapat pada citra tersebut.

4.3.2 Filter Pererataan

Filter pererataan (Costa dan Cesar, 2001) dilakukan dengan menggunakan


rumus:

, = ∑ ∑ + , + (4.3)

Sebagai contoh, piksel pada f(y, x) dan kedelapan tetangganya memiliki nilai-nilai
kecerahan seperti berikut.
78 Pengolahan Citra, Te
Teori dan Aplikasi

Pada contoh di atas,


s, yang diarsir (yaitu yang bernilai 68) merup
upakan nilai pada
f(y, x). Nilai rerata pengganti
pe untuk g(y, x) dihitung dengan cara se
seperti berikut:

g(y, x) = 1/9 x (65+50+55+76+68+60+60+60+62)


(6 = 61,7778
≅ 62

Jadi, nilai 68 pada f(y


(y,x) diubah menjadi 62 pada g(y, x).
Implementasi dal
alam program dapat dilihat berikut ini.

Program : pemerataan.m

% PEMERATAAN Mela
akukan operasi dengan filter pererata
aan

F = imread('C:\Im
mage\mobil.png');
[tinggi, lebar] = size(F);

F2 = double(F);
for baris=2 : tin
nggi-1
for kolom=2 : leb
bar-1
jum = F2(baris-1,
, kolom-1)+ ...
F2(baris-1, kolom
m) + ...
F2(baris-1, kolom
m-1) + ...
F2(baris, kolom-1
1) + ...
F2(baris, kolom) + ...
F2(baris, kolom+1
1) + ...
F2(baris+1, kolom
m-1) + ...
F2(baris+1, kolom
m) + ...
F2(baris+1, kolom
m+1);

G(baris, kolom) = uint8(1/9 * jum);


end
end
Operasi Ketetanggaan Piksel 79

figure(1); imshow(G);

clear;

Akhir Program

Pada program di atas baris dan kolom yang terletak di pinggir citra tidak ikut
diproses.
Gambar 4.5 menunjukkan efek pemrosesan dengan filter pererataan.
Dibandingkan dengan filter batas, hasil pemrosesan filter pererataan tidak
menghilangkan bintik-bintik putih pada citra mobil, tetapi hanya agak
menyamarkan. Pada citra boneka2.png, deraulebih dihaluskan.

(a) Citra mobil dengan (b) Hasil pemrosesan mobil


bintik-bintik putih

(c) Citra boneka berbintik dengan (d) Hasil pemrosesan boneka


derau

Gambar 4.5Contoh penerapan filter pererataan


80 Pengolahan Citra, Teori dan Aplikasi

Perhatikan hasil pemrosesan filter pada Gambar 4.5(b) dan


Gambar 4.5(d).Terlihat keberadaan garis pada kolom pertama dan
baris pertama. Untuk menghindari efek seperti itu, baris pertama,
kolom pertama, baris terakhir, dan kolom terakhir perlu
dihilangkan. Jadi, efek “bingkai” dihilangkan dengan
memperkecil ukuran citra menjadi (N-2) x (N-2) jika ukuran citra
semula adalah N x N.

4.3.3 Filter Median

Filter median sangat populer dalam pengolahan citra.Filter ini dapat dipakai
untuk menghilangkan derau bintik-bintik. Nilai yang lebih baik digunakan untuk
suatu piksel ditentukan oleh nilai median dari setiap piksel dan kedelapan piksel
tetangga pada 8-ketetanggaan. Secara matematis,filter dapat dinotasikan seperti
berikut:

, = #$%&'(
− 1, − 1 , − 1, , − 1, + 1 , (4.4)
, −1 , , , , +1 ,
+ 1, − 1 , + 1, , + 1, + 1

Contohuntuk satu piksel ditunjukkan pada Gambar 4.6.


Operasi Ketetanggaan
an Piksel 81

10 13 10

10 10 12

12 12 12

10 10 10 10 12 12 12 12 13 Diuruttkan

Nilai di tengah
(median)

Gambar 4.6Gambaran
4 operasi penggunaan filter me
median

Pada contoh di atas


tas terlihat bahwa untuk mendapatkan med
edian, diperlukan
pengurutan (sorting)) terlebih dulu.
Contoh berikut menunjukkan
m penggunaan filter median.

Program : filmedian.m

% FILMEDIAN Melak
kukan operasi dengan filter median

F = imread('C:\Im
mage\mobil.png');
[tinggi, lebar] = size(F);

for baris=2 : tin


nggi-1
for kolom=2 : leb
bar-1
data = [F(baris-1
1, kolom-1) ...
F(baris-1, kolom)
) ...
F(baris-1, kolom+
+1) ...
F(baris, kolom-1)
) ...
F(baris, kolom) ...
F(baris, kolom+1)
) ...
F(baris+1, kolom-
-1) ...
F(baris+1, kolom)
) ...
F(baris+1, kolom+
+1)];
82 Pengolahan Citra, Teori dan Aplikasi

% Urutkan
for i=1 : 8
for j=i+1 : 9
if data(i) > data(j)
tmp = data(i);
data(i) = data(j);
data(j) = tmp;
end
end
end

% Ambil nilai median


G(baris, kolom) = data(5);
end
end

figure(1); imshow(G);

clear;

Akhir Program

Contoh hasil penggunaan filter median dapat dilihat pada Gambar 4.7.
Operasi Ketetanggaan Piksel 83

(a) Citra mobil dengan (b) Hasil pemrosesan terhadap


bintik-bintik putih gambar (a)

(c) Citra boneka dengan (d) Hasil pemrosesan terhadap


derau gambar (c)

Gambar 4.7Contoh penerapan filter median

Hasilnya terlihat bahwa derau dapat dihilangkan, tetapi detail pada citra tetap
dipertahankan.Namun, hal ini tentu saja didapat dengan tambahan beban
komputasi “pengurutan”.

4.4Pengertian Konvolusi

Konvolusi seringkali dilibatkan dalam operasi ketetanggaan piksel.Konvolusi


pada citra sering disebut sebagai konvolusi dua-dimensi (konvolusi 2D).
Konvolusi 2D didefinisikan sebagai proses untuk memperoleh suatu piksel
didasarkan pada nilai piksel itu sendiri dan tetangganya, dengan melibatkan suatu
matriks yang disebut kernel yang merepresentasikan pembobotan. Wujud kernel
84 Pengolahan Citra, Teori dan Aplikasi

umumnya bujur sangkar, tetapidapatpula berbentuk persegi panjang.Gambar 4.8


menunjukkan contoh kernel untuk konvolusi.

1 2 3 1 2 n

1 -1 0 1 1

2 -2 0 2 2
m

3 3
-1 0 1

Gambar 4.8Contoh kernel untuk konvolusi berukuran 3x3 dan mxn

Kernel konvolusi terkadang disebut dengan istilah cadar, cadar


konvolusi, atau cadar spasial.

Secara umum, proses penapisan di kawasan ruang (space domain), sebagai


alternatif di kawasan frekuensi, dilaksanakan melalui operasi konvolusi.Operasi
ini dilakukan dengan menumpangkan suatu jendela (kernel) yang berisi angka-
angka pengali pada setiappiksel yang ditimpali.Kemudian, nilai rerata diambil
dari hasil-hasil kali tersebut. Khusus bila angka-angka pengali tersebut semua
adalah 1, hasil yang didapat sama saja dengan filter pererataan.
Pada pelaksanaan konvolusi, kernel digeser sepanjang baris dan kolom dalam
citra (lihat Gambar 4.9) sehingga diperoleh nilai yang baru pada citra keluaran.
Operasi Ketetanggaan Piksel 85

Kernel digerakkan di
sepanjang baris dan kolom

Citra

Gambar 4.9Konvolusi dilakukan dengan melakukan proses


di sepanjang kolom dan baris pada citra

Bagaimana konvolusi dilakukan? Prosesnya dirumuskan sebagai berikut:

, = ∑+ + ∑* * ℎ + #2 + 1, + (2 + 1 − , − (4.5)

Dalam hal ini,

• m2 adalah separuh dari tinggi kernel (m2 = floor(m/2)),


• n2 adalah separuh dari lebar kernel (n2 = floor(n/2)),
• floor menyatakan pembulatan ke bawah, dan
• h menyatakan kernel, dengan indeks dimulai dari 1.
86 Pengolahan Citra, Teori dan Aplikasi

Apabila kernel h diputar sebesar 180o (dapat dilaksanakan dengan


perintah k = rot90(h)), perhitungan g(y,x) dapatdiperolehmelalui:

+ *

, = , , , + , +
+ *

Ilustrasi konvolusi dijelaskan melalui contoh pada Gambar 4.10.

Gambar 4.10 Contoh konvolusi

Berdasarkan Gambar 4.10, apabila citra yang berada pada jendela kernel berupa
Operasi Ketetanggaan Piksel 87

dan kernel berupa

maka nilai piksel hasil konvolusi berupa:

g(x, y) = -1 x 62 + 0 x 60 + 1 x 60 +
-2 x 60 + 0 x 68 + 2 x 78 +
-1 x 55 + 0 x 50 + 1 x 65
= -62 + 0 + 60 – 120 + 0 + 152 – 55 + 0 + 65
= 40

Dengan demikian, nilai 68 akan diubah menjadi 40 pada citra keluaran.


88 Pengolahan Citra, Teori dan Aplikasi

• Apabila kernel h diputar sebesar 180o (k = rot180(h)),


perhitungan g(y,x) dapatdiperolehmelalui

+ *

, = , , ℎ + #2 + 1, + (2 + 1 + , +
+ *

• Untuk kernel yang simetrik (k(y,x)=k(x,y)),


proseskonvolusisama dengan tidak melalui konvolusi (yaitu
korelasi).

Berikut adalah salah satu algoritma yang dipakai untuk


mengimplementasikan konvolusi pada citra, dengan asumsi kernel mempunyai
jumlah baris dan kolom bernilai ganjil.

ALGORITMA 4.2 – Konvolusi pada citra dengan mengabaikan


bagian tepi

Masukan:
• f : Citra yang akandikonvolusi
• h : kernel konvolusi
Keluaran:
• g : Citra hasil konvolusi

1. m2 ← floor(jumlah_baris_kernel h)
2. n2 ← floor(jumlah_lebar_kernel h)
3. FOR y ← m2+1 TO tinggi_citra_f – m2
FOR x ←n2+1 TO lebar_citra_f – n2
// Lakukan konvolusi
jum← 0;
FOR p ← -m2 TO m2
FOR q ← -n2 TO n2
jum←jum * h(p+m2+1, q+n2+1) * f(y-p, x-p)
END-FOR
END-FOR
g2(y, x) ←jum
END-FOR
END-FOR
Operasi Ketetanggaan
an Piksel 89

4. // Salin pos
osisi g2 ke g dengan membuang yang tidakdik
ikonvolusi
5. FOR y ← m2+1 TO tinggi_citra_f – m2
FOR x ← n2+1 TO lebar_citra_f – n2
g(y-mm2, x-n2) ← g2(y, x)
END-FO FOR
END-FOR R

Berdasarkan algoritm
tma di atas, maka citra hasil akan kehilangan sebesar:
se
• 2 * m2 baris atau
a sama dengan jumlah baris kernel dikuran
angi 1
• 2 * n2 kolom atau sama dengan jumlah kolom kernel dikur
urangi 1
Baris dan kolom yang
ng dihilangkan adalah yang berada di tepi citra
tra.
Fungsi yang digu
gunakan untuk melakukan konvolusi dapat dilih
ilihat berikut ini.

Program : konvolusi.m

function [G] = ko
onvolusi(F, H)
% KONVOLUSI Melak
kukan konvolusi kernel H dengan citra
a F
% H harus mem
mpunyai tinggi dan lebar ganjil
% Hasil: citr
ra G

[tinggi_f, lebar_
_f] = size(F);
[tinggi_h, lebar_
_h] = size(H);

m2 = floor(tinggi
i_h/2);
n2 = floor(lebar_
_h/2);

F2=double(F);
for y=m2+1 : tingggi_f-m2
for x=n2+1 : lebar_f-n2
% Pelaksaanaan konvolusi F(baris, kolom)
jum = 0;
for p=-m22 : m2
for q=-n2
q : n2
j
jum = jum + H(p+m2+1,q+n2+1) * ...
F2(y-p, x-q);
end
end

G(y-m2, x-n2)
x = jum;
end
end

Akhir Program
90 Pengolahan Citra, Teori dan Aplikasi

Contoh pemakaian fungsikonvolusi ditunjukkan berikut ini.

>> H=[-1 0 -1; 0 4 0; -1 0 -1];


>> F = imread(’C:\Image\gedung.png’);
>> K = konvolusi (F, H);

Pertama-tama, kernel H ditentukan melalui

H=[-1 0 -1; 0 4 0; -1 0 -1];

Kernel di atas dinamakan “Quick Mask” (Phillips, 2000) dan berguna untuk
deteksi tepi.
Selanjutnya, citra gedung.png dibaca dan diletakkan di F. Lalu, konvolusi
dilaksanakan dengan memanggil fungsi konvolusi.Dengan cara seperti itu, K
berisi hasil konvolusi citra F dan kernel H. Nilai K dapat dilihat secara sekilas
dengan mengetikkan

>> K

Nilai yang dihasilkan dengan konvolusi dapat bernilai negatif dan bahkan
dapat melebihi nilai 255.Oleh karena itu, pemrosesan konvolusi harus
dilaksanakan dengan menggunakan presisi ganda (bukan bilangan bulat).Lalu,
setelah semua citra diproses dengan konvolusi, perlu dilakukan pengaturan nilai
piksel agar berada pada jangkauan [0, 255].Nilai yang kurang dari 0 diubah
menjadi 0 dan yang melebihi 255 diubah menjadi 255.Fungsi uint8 dapat
digunakan untuk kepentingan tersebut Contoh:

>> K2 = uint8(K);

Dengan cara seperti itu, nilai pada K2 berada pada jangkauan [0, 255].Citra K2
dapat ditampilkandenganmenggunakanimshow.
Operasi Ketetanggaan Piksel 91

Gambar 4.11 memperlihatkan contoh citra asli (tersimpan dalam F) dan citra
yang telah mengalami konvolusi dan telah diatur agar bernilai dalam jangkauan
[0, 255] (tersimpan dalam K2).

(a) Citra gedung.png (d) Hasil konvolusi citra gedung

(c) Citra altstadt.png (b) Hasil konvolusi citra altstadt

Gambar 4.11Contoh penerapan konvolusi

Contoh di atas menunjukkan aplikasi konvolusi yang dapat digunakan untuk


mendapatkan tepi objek.Namun, tentu saja aplikasi konvolusi tidak hanya untuk
kepentingan seperti itu.Untuk memperlihatkan hasil deteksi tepi objek, nilai-nilai
piksel hasil perlu dinaikkan yaitu ditambah 127.
92 Pengolahan Citra, Teori dan Aplikasi

4.5 Problem pada Konvolusi


Pada Algoritma 4.2, terlihat bahwa tidak semua piksel dikenai konvolusi,
yaitu baris dan kolom yang terletak di tepi citra. Hal ini disebabkan piksel yang
berada pada tepi tidak memiliki tetangga yang lengkap sehingga tentu saja rumus
konvolusi tidak berlaku pada piksel seperti itu.Gambar 4.12 menjelaskan contoh
tentang hal ini. Sebagai contoh, konvolusi tidak mungkin dilakukan pada posisi A
dan B.

Tidak ada pasangan

Citra

Tidak ada pasangan

Gambar 4.12Problem pada konvolusi.


Ada bagian dari kernel yang tidak punya pasangan dengan piksel

Problem konvolusi pada piksel yang tidak mempunyai tetangga lengkap


dibahas pada beberapa literatur (Efford, 2000 dan Heijden, 2007; Burger dan
Burge, 2008).Untuk mengatasi keadaan seperti itu, terdapat beberapa solusi.

1. Abaikan piksel pada bagian tepi.


Operasi Ketetanggaan Piksel 93

Cara ini yang dilakukan pada Algoritma 4.2.Karena pada bagian tepi citra,
tetangga tidak lengkap maka piksel pada posisi tersebut tidak dikenai
konvolusi.Sebagai konsekuensinya, citra yang tidak mengalami konvolusi
maka diisi dengan nol atau diisi sesuai nilai pada citra asal.Alternatif lain
(seperti pada contoh program konvolusi.m), bagian yang tidak diproses
tidak diikutkan dalam citra hasil. Akibatnya, ukuran citra hasil mengecil.
2. Buat baris tambahan pada bagian tepi.
Baris dan kolom ditambahkan pada bagian tepi sehingga proses konvolusi
dapat dilaksanakan. Dalam hal ini, baris dan kolom baru diisi dengan nilai
0.
3. Ambil bagian yang tidak punya pasangan dengan bagian lain dari
citra.
Ada beberapa pendekatan yang dapat dilakukan.Dua diantara cara-cara
yang dapat digunakan dijelaskan dalam Gambar 4.12.Indeks melingkar
dilaksanakan dengan mengambil data pada posisi di seberang citra,
sedangkan indeks tercermin diambilkan dari baris/kolom yang ada di
dekatnya. Dua cara yang lain yang diilustrasikan pada Gambar 4.14:
• mengisi dengan citra pada bagian tepi (baik baris tepi maupun kolom
tepi);
• melakukan penggulungan secara periodis.
94 Pengolahan Citra, Teori dan Aplikasi

Kolom Bagian kernel


awal di luar citra

Baris
awal

Citra
Baris
akhir

Indeks tercermin
Kolom
akhir
Indeks melingkar

Gambar 4.13Penentuan indeks untuk mengambil data


untuk posisi kernel di luar area citra
Operasi Ketetanggaan Piksel 95

(a) Citra asli

(b) Bagian tepi diberi nilai nol (c) Pengisian dari baris atau kolom
terpinggir

(d) Pengisian dengan pencerminan (e) Pengulangan dari tepi yang


berseberangan

Gambar 4.14 Cara menangani bagian tepi citra

Algoritma berikut menunjukkan cara menggunakan indeks tercermin.


96 Pengolahan Citra, Teori dan Aplikasi

ALGORITMA 4.3 – Konvolusi pada citra memakai indeks


tercermin

Masukan:
• f : Citra yang akandikonvolusi
• h : kernel konvolusi
Keluaran:
• g(y, x) : Citra hasil konvolusi

1. m2 ← floor(jumlah baris kernel h)


2. n2 ← floor(jumlahlebar_kernel h)
3. FOR y ← 1 TO tinggi_citra_f
FOR x ← 1 TO lebar_citra_f
// Lakukan konvolusi
jum← 0
FOR p ← -m2 TO m2
FOR q ← -n2 TO n2
// Penanganan pada x
x2 ← x-p
IF x2 < 1
x2 ← -x2 + 1
ELSE
IF x2 >lebar_citra_f
x2 ←2 lebar_citra_f – x2 + 1
END-IF
END-IF
// Penanganan pada y
y2 ← y-p
IF y2 < 1
y2 ← -y2 + 1
ELSE
IF y2 >tinggi_citra_f
x2 ← 2 tinggi_citra_f – x2 + 1
END-IF
END-IF
jum←jum * h(p+m2+1, q+n2+1) * f(y2, x2)
END-FOR
END-FOR
g(y, x) ←jum
END-FOR
END-FOR

Implementasi dari Algoritma 4.3 dapat dilihat pada program berikut.


Operasi Ketetanggaan
an Piksel 97

Program : konvolusi2.m

function [G] = ko
onvolusi2(F, H)
% KONVOLUSI2 Mela
akukan konvolusi kernel H dengan citr
ra F
% (Versi Algo
oritma 4.3)
% H harus mem
mpunyai tinggi dan lebar ganjil
% Hasil: citr
ra G

[tinggi_f, lebar_
_f] = size(F);
[tinggi_h, lebar_
_h] = size(H);

m2 = floor(tinggi
i_h/2);
n2 = floor(lebar_
_h/2);

F2=double(F);
for y=1 : tinggi__f
for x=1 : lebar_ff
% Pelaksa
anaan konvolusi F(baris, kolom)
jum = 0;
for p=-m2 : m2
for q=-n2 : n2
% Penanganan x
x2 = x-q;
if x2 < 1
x2 = -x2 + 1;
else
if x2 >lebar_f
x2 = 2 * lebar_f - x2 + 1;
end
end

% Penanganan y
y = y-p;
y2
if y2 < 1
y2 = -y2 + 1;
else
if y2 >tinggi_f
y2 = 2 * tinggi_f - y2 + 1;
end
end

jum = jum + H(p+m


m2+1,q+m2+1) * ...
F2(y2, x2);
end
end

G(y, x) = jum;
end
end

Akhir Program
98 Pengolahan Citra, Teori dan Aplikasi

Penggunaan fungsi konvolusi2 secara prinsip sama dengan pemakaian fungsi


konvolusi. Perbedaannya, konvolusi2 menghasilkan citra berukuran sama
dengan ukuran citra pada argumennya.

4.6 Mempercepat Komputasi pada Konvolusi


Komputasi pada konvolusi dapat menjadi lama jika ukuran kernel membesar.
Untuk kernel dengan ukuran nxn, proses konvolusi akan dilakukan nxn kali.
Kalau dinyatakan dengan ukuran Big O, prosesnya memerlukan O(n2). Untuk
mempercepat komputasi, perlu dicari solusi yang proses komputasinya kurang
dari O(n2). Hal ini dapat dilakukan dengan memecah kernel yang berupa matriks
menjadi dua buah vektor.
Misalnya, h adalah matriks kernel.Untuk kondisi tertentu, h
dapatdipecahmenjadiduabuahvektor seperti berikut:

- = -. -/

Dalam hal ini, hk adalah vektor kolom dan hb adalah vektor baris.Contoh:

−1 0 1 −1
0−2 0 22 = 0 −22 31 0 −14
−1 0 1 −1

Nah, melalui vektor hb dan hk inilah konvolusi terhadap citra dilakukan.Dalam hal
ini, kedua vektor dijadikan sebagai vektor mendatar.
Operasi Ketetanggaan Piksel 99

Suatu kernel dapatdiperiksa dengan mudah untuk menentukan


dapat tidaknya matriks diubah ke bentuk perkalian dua vektor. Hal
ini bisa dilakukan dengan menggunakan fungsi rank. Hasil fungsi
ini berupa 1 kalaumatriksdapatdidekomposisimenjadiduabuah
vektor. Contoh:

>> H = [-1 0 1; -2 0 2; -1 0 1];


>> rank(H)
ans =

1
>>

Hasil 1 di atas menyatakan bahwa H


dapatdidekomposisimenjadiperkalianduavektor.

Suatu kernel yang mempunyairank dengan nilai 1


dapatdidekomposisimenjadiduavektordenganmenggunakanfungsisv
d. Misal, H adalah matriks kernel, maka perintah seperti berikut
dapat diberikan:

>> [U,S,V]=svd(H);
>>hkol = U(:,1) * sqrt(S(1))
>>hbrs = conj(V(:,1)) * sqrt(S(1));

Nah, berdasarkanhasilhkoldanhbrs, dapat dicoba perkalian


seperti berikut:

>>hkol * hbrs'

Tanda‘ berartitranpos. Hasilnya akan berupa matriks kernel.


100 Pengolahan Citra, Teori dan Aplikasi

Bagaimana konvolusi dilakukan melalui kedua vektor hasil dekomposisi


kernel?Algoritma berikut menjelaskannya.

ALGORITMA 4.4 – Konvolusi pada citra menggunakan vektor

Masukan:
• f : Citra
• hy: Kernel baris
• hx: Kernel kolom
• hxdanhyditulis dengan bentuk vektor mendatar dan
berukuran sama
Keluaran:
• g : Citra hasil konvolusi

1. m2 ← floor(jumlah_kolom_kernel_hx)
2. t←f
3. // Proses y
4. FOR y ← m2+1 TO tinggi_citra_f – m2
FOR x ← 1 TO lebar_citra_f
// Lakukankonvolusidenganhy
jum← 0;
FOR p ← -m2 TO m2
jum←jum * hy(p+m2+1) * f(y-p, x)
END-FOR
t(y, x) ←jum
END-FOR
5. // Proses x
FOR y ← 1 TO tinggi_citra_f
FOR x ← m2+1 TO lebar_citra_f –m2
// Lakukankonvolusidenganhx
jum← 0;
FOR p ← -m2 TO m2
jum←jum * hy(p+m2+1) * t(y, x-p)
END-FOR
g(y, x) ←jum
END-FOR

Implementasi algoritma di atas ditunjukkan pada program berikut.


Operasi Ketetanggaan
an Piksel 101

Program : konvolusi3.m

function [G] = ko
onvolusi3(F, Hkol, Hbrs)
% KONVOLUSI3 Mela
akukan konvolusi kernel Hkol dan Hbrs
s dengan citra
F
% (Versi Algo
oritma 4.4)
% Hkol dan Hb
brs harus mempunyai tinggi dan lebar ganjil
% dan ukurann
nnya sama
% Hkol dan Hb
brs berupa vektor mendatar
% Hasil: citr
ra G

[tinggi_f, lebar_
_f] = size(F);
[tinggi_h, lebar_
_h] = size(Hbrs);

m2 = floor(lebar_
_h/2);

F2=double(F);
T = F2;
for y=m2+1 : tingggi_f-m2
for x=1 : lebbar_f
jum = 0;
for p=-m22 : m2
jum = jum + Hkol(p+m2+1) * F2(y-p, x);
end

T(y, x) = jum;
end
end

for y=1 : tinggi__f


for x=m2+1 : lebar_f-m2
jum = 0;
for p=-m22 : m2
jum = jum + Hbrs(p+m2+1) * T(y, x-p);
end

G(y, x) = jum;
end
end

Akhir Program

Contoh berikut menunjukkan


m program yang menggunakan kon
onvolusi3.m.

Program : teskonv.m

% TESKONVMenguji fungsi konvolusi3


102 Pengolahan Citra, Teori dan Aplikasi

Img = imread('C:\Image\gedung.png');
Hkol = [-1 -2 -1];
Hbrs = [1 0 -1];
K = konvolusi3(Img, Hkol, Hbrs);
K2 = uint8(K);
imshow(K2);

Akhir Program

Gambar 4.15 memperlihatkan hasil


pemrosesangedung.pngmenggunakankonvolusi.mdan konvolusi3.m.Pemrosesan
dengan kedua algoritma tersebut memberikan hasil visual yang sedikit berbeda.

(a) Hasil pemrosesan dengan (b) Hasil pemrosesan dengan


konvolusi.m konvolusi3.m

Gambar 4.15Contoh penerapan konvolusi


menggunakan matriks dan vektor

Sebagai perbandingan, Tabel 4.1 menunjukkan waktu yang diperlukan untuk


melakukan konvolusi dengan menggunakan konvolusi2.m, konvolusi3.m, dan
conv2 (milik MATLAB) dalam satuan detik.
Operasi Ketetanggaan Piksel 103

Tabel 4.1Perbandingan waktu komputasi konvolusi


untuk berbagai ukuran kernel
Fungsi 3x3 5x5 7x7 9x9 11x11 13x13
konvolusi2.m 3,74 4,20 4,86 5,56 6,37 7,71
konvolusi3.m 3.53 3,61 3,62 3,62 3,62 3,71
conv2.m 0.02 0,03 0,04 0,18 0,08 0,10

Dapat dilihat bahwa konvolusi3.m (yang menggunakan vektor) lebih cepat


daripada konvolusi2.m (yang menggunakan matriks).Namun, dibandingkan
dengan fungsi conv2 yang tersedia dalam MATLAB, kecepatan kedua konvolusi
yang dibuat sendiri jauh lebih rendah.

4.7 Pengertian Frekuensi


Istilah frekuensi berkonotasi punya kaitan dengan waktu. Sebagai contoh,
isyarat listrik AC pada sistem kelistrikan di Indonesia mempunyai frekuensi
sebesar 50 Hz. Makna 50 Hz di sini menyatakan bahwa terdapat 50 siklus sinus
yang utuh pada setiap detik. Pada citra, istilah frekuensi tidak berhubungan
dengan waktu, melainkan berkaitan dengan keruangan atau spasial.Oleh karena
itu, citra dikatakan memiliki frekuensi spasial.Definisi di Wikipedia menyatakan
bahwa frekuensi spasial adalah karakteristik sebarang struktur yang bersifat
periodis sepanjang posisi dalam ruang.Frekuensi spasial adalah ukuran seberapa
sering struktur muncul berulang dalam satu satuan jarak.
Frekuensi spasial pada citra menunjukkan seberapa sering suatu perubahan
araskeabuan terjadi dari suatu posisi ke posisi berikutnya. Gambar 4.16
menunjukkan secara visual perbedaan antara frekuensi rendah dan frekuensi
tinggi. Pada citra berfrekuensi tinggi, perubahan aras sering terjadi seiring dengan
pergeseran jarak.
104 Pengolahan Citra, Teori dan Aplikasi

Aras keabuan Aras keabuan

Jarak Jarak

(a) Frekuensi rendah (b) Frekuensi tinggi

(c) Citra dengan (d) Citra berfrekuensi tinggi


frekuensi rendah

Gambar 4.16 Perbedaan frekuensi rendah dan


frekuensi tinggi pada citra

Pada Gambar 4.16(a), perubahan aras keabuan terjadi sekali saja, sedangkan pada
Gambar 4.16(b) terlihat bahwa perubahan aras keabuan sering terjadi. Itulah
sebabnya, Gambar 4.16(a) menyatakan contoh frekuensi rendah dan Gambar
4.16(b) menunjukkan contoh frekuensi tinggi.
Pengertian frekuensi dalam citra perlu dipahami terlebih dulu. Pada beberapa
pembicaraan di belakang, istilah frekuensi akansering disebut.

4.8Filter Lolos-Rendah

Filter lolos-bawah(low-pass filter)adalah filter yang mempunyai sifat dapat


meloloskan yang berfrekuensi rendah dan menghilangkan yang berfrekuensi
tinggi. Efek filter ini membuat perubahan aras keabuan menjadi lebih lembut.
Operasi Ketetanggaan Piksel 105

Filter ini berguna untuk menghaluskan derau atau untuk kepentingan interpolasi
tepi objek dalam citra.
Operasi penapisan lolos-bawah dilaksanakan melalui konvolusi atau tanpa
konvolusi. Contoh yang tidak memakai konvolusi dapat dilihat pada filter
median(filter median termasuk dalam filter lolos-bawah). Adapun yang
melibatkan konvolusi menggunakan kernel antara lain berupa seperti yang terlihat
pada Gambar 4.17 (Phillips, 2000).

0 1 0 1 1 1

1/6 1 2 1 1/9 1 1 1

0 1 0 1 1 1

#1 #2

1 1 1 1 2 1

1/10 1 2 1 1/16 2 4 2

1 1 1 1 2 1

#3 #4

Gambar 4.17Contoh kernel untuk filter lolos-bawah

Sebagai contoh, terdapat citra berfrekuensi rendah dan berfrekuensi tinggi


dengan komposisi data seperti berikut.
106 Pengolahan Citra, Teori dan Aplikasi

40 40 40 40 40 128 128 128 128 128


40 40 40 40 40 40 40 40 40 40
40 40 40 40 40 128 128 128 128 128
40 40 40 40 40 40 40 40 40 40
40 40 40 40 40 128 128 128 128 128
40 40 40 40 40 40 40 40 40 40
40 40 40 40 40 128 128 128 128 128
40 40 40 40 40 40 40 40 40 40
40 40 40 40 40 128 128 128 128 128
128 128 128 128 128 40 40 40 40 40
128 128 128 128 128 128 128 128 128 128
128 128 128 128 128 40 40 40 40 40
128 128 128 128 128 128 128 128 128 128
128 128 128 128 128 40 40 40 40 40
128 128 128 128 128 128 128 128 128 128
128 128 128 128 128 40 40 40 40 40
128 128 128 128 128 128 128 128 128 128
128 128 128 128 128 40 40 40 40 40
128 128 128 128 128 128 128 128 128 128
128 128 128 128 128 40 40 40 40 40

(a) Citra dengan frekuensi rendah (b) Citra dengan frekuensi tinggi

(c) Citra dengan frekuensi rendah (d) Citra dengan frekuensi tinggi

Gambar 4.18Nilai-nilai intensitas/kecerahan citra


dengan frekuensi rendah dan frekuensi tinggi pada arah vertikal

Dengan menggunakan kernel


Operasi Ketetanggaan Piksel 107

terhadap kedua citra tersebut danmenggunakan konvolusi.m maka didapatkan


hasil seperti yang terdapat pada Gambar 4.19.

40 40 40 99 99 99
40 40 40 69 69 69
40 40 40 99 99 99
40 40 40 69 69 69
40 40 40 99 99 99
40 40 40 69 69 69
40 40 40 99 99 99
69 69 69 69 69 69
99 99 99 99 99 99
128 128 128 69 69 69
128 128 128 99 99 99
128 128 128 69 69 69
128 128 128 99 99 99
128 128 128 69 69 69
128 128 128 99 99 99
128 128 128 69 69 69
128 128 128 99 99 99
128 128 128 69 69 69

(a) Citra dengan frekuensi rendah (b) Citra dengan frekuensi tinggi

Gambar 4.19Hasil penapisan dengan filter lolos-rendah

Perhatikan Gambar 4.19 (a).Secara prinsip, filter tidak membuat perubahan yang
sangat berarti pada citra kecuali perubahan pada baris yang berisi 69 dan99.
Adapun pada Gambar 4.19(b), frekuensi memang tidak berubah, tetapi terjadi
penghalusan perubahan aras(128 menjadi 99 dan 40 menjadi 69). Apa
pengaruhnya secara visual pada citra? Melalui filter lolos-rendah, hal-hal yang
menyatakan frekuensi tinggi akan diredupkan, sedangkan bagian berfrekuensi
rendah hampir tidak berubah.
108 Pengolahan Citra, Te
Teori dan Aplikasi

Program berikut
ut dapat dipakai untuk mengamati efek filt
ilter lolos rendah
terhadap citra.

Program : tapis.m

function [G] = ta
apis(berkas, H)
% TAPIS Menerapka
an filter H dengan citra F
% H harus mem
mpunyai tinggi dan lebar ganjil
% Hasil: citr
ra G

F = imread(berkas
s);
K = konvolusi(F, H);
G = uint8(K);

figure(1); imshow
w(F);
figure(2); imshow
w(G);

Akhir Program

Contoh penguji progr


gram di atas:

>> H = [1 1 1; 1 1 1; 1 1 1] / 9;
>>tapis('C:\
\Image\mobil.png', H);

Gambar asal dan hasi


sil penapisan akan ditampilkan pada jendela yang
ya terpisah.
Gambar 4.20 menunjukkan
me hasil penapisan dengan filter #2
# pada Gambar
4.17. Contoh terse
rsebut menunjukkan bahwa filter lolos-rrendah mampu
menghaluskan pperubahan-perubahan yang drastis.
is. Perhatikan
ketajamangentingpada
adagoldhillmenjadidiperhalussetelah melalui ppenapisan.Begitu
pula derau pada bonek
neka.
Operasi Ketetanggaan Piksel 109

(a) Citra boneka yang dilengkapi (b) Hasil penapisan citra boneka
derau

(c) Citra goldhill (b) Hasil penapisan citra goldhill

Gambar 4.20Contoh penerapan konvolusi menggunakan kernel #2

Gambar 4.21 menunjukkan hasil penggunaan kernel #1, #2, #3, dan #4 untuk
menapis citra boneka yang telah diberi derau. Adapun Gambar 4.22
memperlihatkan contoh penerapan kernel berukuran 3x3, 5x3, dan 7x7 dengan
nilai koefisien pada kernel bernilai sama.
110 Pengolahan Citra, Teori dan Aplikasi

(a) Citra boneka yang dilengkapi (b) Hasil dengan kernel #1


derau

(c) Hasil dengan kernel #2 (b) Hasil dengan kernel #4

Gambar 4.21 Efek pemakaian tiga macam


filter lolos-rendah pada boneka
Operasi Ketetanggaan Piksel 111

(a) Citra lena256 (b) Hasil dengan kernel 3x3

(c) Hasil dengan kernel 5x5 (b) Hasil dengan kernel 13x13

Gambar 4.22Efekpemakaian filter lolos-rendah


denganberbagaiukuran kernel. Semua bobot bernilai sama

• Efek pengaburan citra dapat ditingkatkan dengan menaikkan


ukuran kernel.
• Rahasia kernel yang digunakan untuk keperluan mengaburkan
citra seperti berikut.

1. Tinggi dan lebar kernel ganjil.


2. Bobot dalam kernel bersifat simetris terhadap piksel pusat.
3. Semua bobot bernilai positif.
4. Jumlah keseluruhan bobot sebesar satu.
112 Pengolahan Citra, Teori dan Aplikasi

4.9Filter Lolos-Tinggi

Filter lolos-tinggi adalah filter yang ditujukan untuk melewatkan frekuensi


tinggi dan menghalangi yang berfrekuensi rendah. Hal ini biasa dipakai untuk
mendapatkan tepi objek dalam citra atau menajamkan citra. Contoh filter lolos-
tinggi dapat dilihat pada Gambar 4.23.

0 -1 0 -1 -1 -1 1 -2 1

-1 4 -1 -1 8 -1 -2 4 -2

0 -1 0 -1 -1 -1 1 -2 1

#1 #2 #3

Gambar 4.23 Contoh tiga kernel filter lolos-tinggi

Filter lolos-tinggi mempunyai sifat yaitu jumlah seluruh koefisien adalah


nol.Selain itu terdapat sifat sebagaiberikut (Efford, 2000).

1. Apabila dikenakan pada area dengan perubahan aras keabuan yang lambat
(frekuensi rendah),hasil berupa nol atau nilai yang sangat kecil.
2. Apabila dikenakan pada area yang perubahan aras keabuannya cepat
(frekuensi tinggi), hasil konvolusi bernilai sangat besar.

Jika kernel seperti berikut

0 -1 0

-1 4 -1

0 -1 0

dikenakan pada data dalam Gambar 4.18, akan diperoleh hasil seperti berikut.
Operasi Ketetanggaan Piksel 113

0 0 0 0 0 0
0 0 0 176 176 176
0 0 0 0 0 0
0 0 0 176 176 176
0 0 0 0 0 0
0 0 0 176 176 176
0 0 0 0 0 0
0 0 0 176 176 176
88 88 88 0 0 0
0 0 0 176 176 176
0 0 0 0 0 0
0 0 0 176 176 176
0 0 0 0 0 0
0 0 0 176 176 176
0 0 0 0 0 0
0 0 0 176 176 176
0 0 0 0 0 0
0 0 0 176 176 176

(a) Citra dengan frekuensi rendah (b) Citra dengan frekuensi tinggi

Gambar 4.24Hasilpenapisan dengan filter lolos-tinggi

Hasil pada Gambar 4.24(a) menunjukkan bahwa hanya pada perbatasan antara
perubahan aras keabuan yang ditonjolkan (baris berisi 88) dan nilai yang lain
bernilai rendah (nol). Dengan demikian,akan muncul garis putih. Hasil pada
Gambar 4.24(b) menunjukkan bahwa citra yang berfrekuensi tinggi hampir tidak
mengalami perubahan, kecuali nilainya saja yang berefek pada penajaman
perbedaan aras keabuan (nilai 150 menjadi 176 dan nilai 40 menjadi 0).
Gambar 4.25 menunjukkan penggunaan filter lolos-tinggi yang terdapat pada
Gambar 4.23 terhadap citra boneka.png.Adapun Gambar 4.26 memperlihatkan
hasil pemrosesan pada citra bulat.png.
114 Pengolahan Citra, Teori dan Aplikasi

(a) Citra boneka.png (b) Hasil dengan kernel #1

(c) Hasil dengan kernel #2 (b) Hasil dengan kernel #3

Gambar 4.25Hasil pemrosesan dengan filter lolos-tinggi


pada citra boneka
Operasi Ketetanggaan Piksel 115

(a) Citra bulat.png (b) Hasil dengan kernel #1

(c) Hasil dengan kernel #2 (b) Hasil dengan kernel #3

Gambar 4.26Hasil pemrosesan dengan filter lolos-tinggi


pada citra bulat

Rahasia kernel yang digunakan untuk keperluan mendeteksi tepi


seperti berikut (Oliver, dkk., 1993).

1. Tinggi dan lebar kernel ganjil.


2. Bobot dalam kernel bersifat simetris terhadap piksel
pusat.
3. Bobot pusat kernel bernilai positif.
4. Bobot tetangga pusat kernel bernilai negatif (dapat
menggunakan 4-ketetanggan atau 8 ketetanggaan).
5. Jumlah keseluruhan bobot sebesar satu.
116 Pengolahan Citra, Teori dan Aplikasi

4.10 Filter High-Boost

Filter “high boost” (Efford, 2000) dapatdigunakan untuk menajamkan citra


melalui konvolusi. Kernel yang dapat dipakai adalah kernel filter lolos-tinggi
dengan nilai di pusat diisi dengan nilai yang lebih besar daripada nilai pada posisi
tersebut untuk filter lolos-tinggi. Sebagai contoh, dapat digunakan kernel seperti
berikut.

-1 -1 -1

-1 c -1 c > 8; misalnya 9

-1 -1 -1

Gambar 4.27Contoh filter high boost

Gambar berikut menunjukkan efek saat c diisi dengan 9, 10, dan 11.
Operasi Ketetanggaan Piksel 117

(a) Citra boneka (b) Hasil untuk c=9

(c) Hasil untuk c=10 (d) Hasil untuk c=11

Gambar 4.28Hasil pemrosesan dengan filter high boost

Tampak bahwa dengan menggunakan filter high boostbernilai tengah tertentu


(pada contoh di atas berupa 9), diperoleh hasil berupa penajaman citra.
118 Pengolahan Citra, Teori dan Aplikasi

Rahasia kernel yang digunakan untuk keperluan menajamkan


citra seperti berikut.

1. Tinggi dan lebar kernel gasal.


2. Bobot dalam kernel bersifat simetris terhadap piksel pusat.
3. Bobot pusat kernel bernilai positif.
4. Bobot di sekeliling pusat kernel bernilai negatif (dapat
menggunakan 4-ketetanggaan atau 8 ketetanggaan).
5. Jumlah keseluruhan bobot lebih besar satu.
6. Bobot terbesar terletak di pusat kernel.

4.11 Efek Emboss

Gambar 4.29 menunjukkan contoh hasil embossing.Terlihat ada penebalan


garis pada arah tertentu.

(a) Berdasar citra boneka2 (b) Berdasar citra lena256

Gambar 4.29Efek emboss


Operasi Ketetanggaan Piksel 119

Kernel yang digunakan seperti berikut:

-2 0 0

0 0 0

0 0 2

Nilai negatif dan positif yang berpasangan menentukan perubahan kecerahan yang
berefek pada penggambaran garis gelap atau terang, Gambar 4.30
memperlihatkan efek beberapa kernel dan hasil yang didapatkan untuk citra
lena256.png.
120 Pengolahan Citra, Teori dan Aplikasi

(a) Kernel #1 (b) Hasil untuk kernel #1

(c) Kernel #2 (d) Hasil untuk kernel #2

(e) Kernel #3 (d) Hasil untuk kernel #3

Gambar 4.30Efek emboss untuk berbagai kernel

Rahasia pembuatan emboss terletak pada kernel konvolusi dengan sifat


seperti berikut (Oliver, dkk., 1993).

1. Tinggi dan lebar kernel gasal.


2. Bobot dalam kernel bersifat tidak simetris terhadap piksel pusat.
3. Bobot pusat kernel bernilai nol.
4. Jumlah keseluruhan bobot bernilai nol.
Operasi Ketetanggaan Piksel 121

Nilai negatif pada kernel emboss menentukan arah penebalan garis. Beberapa
contoh yang dapat dicoba ditunjukkan pada gambar berikut.

Gambar 4.31 Berbagai kernel untuk embossing

4.12 Pengklasifikasian Filter Linear dan Nonlinear

Filter disebut sebagai filter linear jika dalam melakukan penapisan


melibatkan piksel dengan cara linear. Contoh filter linear yaitu filter pererataan.
Filter-filter linear yang lain:
• filter Gaussian
• filter topi Mexico (Laplacian)
122 Pengolahan Citra, Teori dan Aplikasi

Kelemahan filter linear, terutama ketika dipakai untuk konvolusi citra atau
penghilangan derau, yaitu membuat struktur citra yang meliputi titik, tepi, dan
garis ikut terkaburkan dan kualitas citra keseluruhan menurun (Burger dan Burge,
2008). Kelemahan seperti ini dapat diatasi menggunakan filter nonlinear.
Filter nonlinear adalah filter yang bekerja tidak memakai fungsi linear. Filter
batas dan filter median merupakan contoh filter nonlinear.

4.13 Filter Gaussian

Filter Gaussian tergolong sebagai filter lolos-rendah yang didasarkan pada


fungsi Gaussian. Model dua dimensinya berupa:

78 9:8
5 . =$ 8;8 (4.6)

Dalam hal ini,< adalah deviasi standar dan piksel pada pusat (y,x) mendapatkan
bobot terbesar berupa 1.
Filter Gaussian paling tidak berukuran 5x5. Sebagai contoh, bobot-bobotnya
dapatdiperolehdenganmembuat< bernilai 1. Dengan demikian:

5 0, 0 = $ =
=1
5 1,0 = 5 0,1 = 5 −1,0 = 5 0, −1 = $ /
= 0,6065
5 1, 1 = 5 1, −1 = 5 −1,1 = 5 −1, −1 = $ = 0,3679
5 2,1 = 5 1, 2 = 5 −2,1 = 5 −2, −1 = $ /
= 0,0821
5 2,0 = 5 0, 2 = 5 0, −2 = 5 −2,0 = $ = 0.1353
5 2, 2 = 5 −2, −2 = 5 −2,2 = 5 2, −2 = $ = 0,0183

Dengan mengatur nilai terkecil menjadi 1, maka setiap nilai di atas perlu dikalikan
dengan 55 (diperoleh dari 1/0,0183 dan kemudian hasilnya dibulatkan ke atas).
Dengan demikian,diperoleh hasil seperti berikut, yang diperoleh dengan
mengalikan nilai G(x,y) di depan dengan 55.
Operasi Ketetanggaan Piksel 123

Setelah dinormalisasi diperoleh filter seperti berikut:

Gambar 4.32 memberikan contoh penerapan filter Gaussian pada dua buah citra.
124 Pengolahan Citra, Teori dan Aplikasi

(a) Citra bulat.png (b) Hasil konvolusi bulat.png

(c) Citra boneka.png (d) Hasil konvolusi boneka.png

Gambar 4.32 Efek filter Gaussian

Hasilnya, terjadi sedikit penghalusan pada daerah yang intensitasnya berbeda


jauh.

Latihan

1. Apa maksud 4-ketetanggan dan 8-ketetanggan?


2. Menurut pengamatan Anda, apa yang membedakan pemrosesan berikut kalau
dilihat hasilnya secara visual?

(a) Filter batas


(b) Filter pererataan
(c) Filter median
Operasi Ketetanggaan Piksel 125

3. Jelaskan bahwa konvolusi dengan cadar

sesungguhnya sama dengan penggunaan filter pererataan.


4. Bagaimana bentuk kernel yang berguna untuk filter pererataan yang berukuran
5x5, 7 x 7, dan 9x9?
5. Jelaskan pengertian konvolusi.
6. Apa kegunaan konvolusi yang memecah kernel h menjadi dua buah vektor?
7. Terdapat kernel seperti berikut.

Jika dikenakan pada citra yang berisi data seperti berikut, berapa hasil pada
posisi yang diarsir abu-abu?

10 20 10

20 10 20

10 20 10

8. Bagaimana caranya agar citra menjadi kabur?


126 Pengolahan Citra, Teori dan Aplikasi

9. Bagaimana caranya kalau yang ingin didapatkan adalah tepi objek?


10. Apa yang dimaksud dengan frekuensi spasial?
11. Apa kegunaan filter lolos-rendah?
12. Bagaimana halnya dengan filter lolos-tinggi.
13. Berapa nilai c pada kernel berikut agar dapat bertindak sebagai filter high
boost?

1 -2 1

-2 c -2

1 -2 1

14. Cobalah untuk menguji tiga kernel yang digunakan dalam filter lolos-tinggi
terhadap sejumlah gambar.
15. Jelaskan pengertian filter linear dan nonlinear. Berikan contoh masing-masing.
16. Dengan menggunakan pendekatan < bernilai 1, buatlah filter i berukuran
7x7.
BAB 5
Operasi
Geometrik
Setelah bab ini berakhir, diharapkan pembaca
mendapatkan pengetahuan mengenai hal-hal berikut dan
mampu mempraktikkannya.
Pengantar operasi geometrik
Penggeseran citra
Pemutaran citra
Interpolasi piksel
Pemutaran citra berdasarkan sebarang koordi
Pemutaran citra secara utuh
Pembesaran citra
Pengecilan citra
Pembesaran citra dengan skala vertikal dan
horizontal
Pencerminan citra
Transformasi affine
Efek ripple
Efek twirl
Transformasi spherical
Transformasi bilinear
122 Pengolahan Citra, Teori dan Aplikasi

5.1 Pengantar Operasi Geometrik

Operasi geometrik adalah operasi pada citra yang dilakukan secara geometris
seperti translasi, rotasi, dan penyekalaan.Pada operasi seperti ini terdapat
pemetaan geometrik, yang menyatakan hubungan pemetaan antara piksel pada
citra masukan dan piksel pada citra keluaran. Secara prinsip, terdapat dua cara
yang dapat dipakai. Pertama yaitu pemetaan ke depan dan kedua berupa pemetaan
ke belakang. Perbedaan secara visual kedua cara tersebut diperlihatkan pada
Gambar 5.1.

Citra masukan Citra keluaran Citra masukan Citra keluaran

(b) Pemetaan ke depan (a) Pemetaan ke belakang


(mundur)

Gambar 5.1Pemetaan geometrik

Gambar di atas menjelaskan bahwa pada cara pemetaan ke depan, posisi pada
citra keluaran ditentukan dengan acuan pemrosesan pada citra masukan. Pada
gambar tersebut terlihat bahwa kalau piksel keluaran berada pada posisi yang
tidak tepat (tidak berupa bilangan bulat),penempatannyadapat berada pada salah
satu dari empat kemungkinan. Dengan cara seperti ini, ada kemungkinan sebuah
piksel pada citra keluaran tidak pernah diberi nilai atau malah diberi nilai lebih
dari satu kali. Hal ini berbeda dengan pada pemetaan ke belakang.Pada pemetaan
ke belakang, mengingat pemrosesan dimulai dari citra keluaran maka dipastikan
bahwa semua piksel pada citra keluaran akan diberi nilai sekali saja berdasarkan
piksel masukan.
Operasi Geometrik 123

Lubang
ng yang ditimbulkan karena piksel tidak dib
diberi nilai pada
pemeta
etaan ke depan dapat dilihat pada Gambar 5.5.

Pada Gambar 5.1(a),


5 piksel yang digunakan untuk men
enentukan piksel
keluaran dapat ditentu
ntukan oleh salah satu piksel yang tercakup dalam
da kotak yang
menggantung pada keempat
k piksel. Hal itu merupakan carater
tersederhana yang
dapat dilakukan dann biasa dinamakan sebagai pemilihan berda
dasarkan tetangga
terdekat. Cara lain ya
yang dapat dilakukan adalah dengan memperh
rhitungkan empat
piksel yang dapat mewakilinya.
m Cara ini dikenal dengan seb
ebutan interpolasi
bilinear, yaitu linearr di arah vertikal dan mendatar. Kedua cara ini
i akan dibahas
saat membicarakan pemutaran
pe citra (Subbab 5.3).

5.2 Menggeser Citra


ra

Penggeseran citra
tra ke arah mendatar atau vertikal dapat dilak
aksanakan dengan
mudah. Rumus yangg digunakan
d sebagai berikut:

(5.1)
(5.2)

Untuk penyederhanaa
aan pembahasan, sx dan sy dianggap bertipe bi
bilangan bulat.
Contoh berikutt menunjukkan program yang digunakan untuk
un melakukan
penggeseran citra.

Program : geser.m

% GESER Melakukan
n operasi penggeseran citra.

mage\gedung.png');
F = imread('c:\Im
[tinggi, lebar] = size(F);
124 Pengolahan Citra, Teori dan Aplikasi

sx = 45; % Penggesaran arah horisontal


sy = -35; % Penggesaran arah vertikal

F2 = double(F);
G = zeros(size(F2));
for y=1 : tinggi
for x=1 : lebar
xlama = x - sx;
ylama = y - sy;

if (xlama>=1) && (xlama<=lebar) && ...


(ylama>=1) && (ylama<=tinggi)
G(y, x) = F2(ylama, xlama);
else
G(y, x) = 0;
end
end
end

G = uint8(G);
figure(1); imshow(G);

clear all;

Akhir Program

Pada contoh di atas, citra digeser ke kanan sebesar 45 piksel (ditentukan


melalui sx) dan ke atas sebesar 35 piksel (diatur melalui sy). Apabila xlama
hasil perhitungan di luar jangkauan [1, lebar] atau ylama hasil perhitungan di
luar jangkauan [1, tinggi], intensitas piksel pada posisi (y, x) diisi dengan nol
(warna hitam). Posisi yang tidak berada pada posisi koordinat yang valid dalam
citra lama akan diisi dengan nilai nol melalui

G(y, x) = 0;

Hasilnya diperlihatkan pada Gambar 5.2.


Operasi Geometrik 125

(a) Citra gedung asli (b) Hasil penggeseran

Gambar 5.2Contoh penggeseran citra

Gambar hitam di bagian kiri dan bagian atas adalah efek dari

5.3 Memutar Citra

Suatu citra dapat diputar dengan sudut seiring arah jarum jam atau
berlawanan arah jarum jam dengan pusat putaran pada koordinat (0,0). Gambar
5.3 menjelaskan bentuk pemutaran citra. Adapun rumus yang digunakan untuk
memutar citra dengan sudut berlawanan arah jam berupa:

∗ ∗ (5.3)
∗ − ∗ (5.4)
126 Pengolahan Citra, Te
Teori dan Aplikasi

(0,0)
Bingkakai
citra hasil
ha
rotasi

Bag
agian citra asli
yan
ang masuk di
bin
ingkai citra hasil

Citra asli yang


Hasil pemanfaatan pembalikan diputar
perhitungan pemutaran citra
(pemetaan ke belakang)

Gamb
mbar 5.3Pemutaran citra dengan pusat (0, 0)

Berdasarkan Pers
ersamaan 5.3 dan 5.4, pemutaran citra dengan
an sudut searah
jarum jam dapat dilak
lakukan.Caranya, dengan menggunakan x dann y sebagai posisi
baru dan xbaru justruu sebagai posisi lama.Pada saat menghitung dengan
d rumus di
atas, apabila posisi kkoordinat (ybaru ,xbaru) berada di luar area [1
[1, lebar] dan [1,
tinggi], intensitas yan
ang digunakan berupa nol. Cara inilah yang merupakan
me contoh
pemetaan ke belakang
ng. Implementasinya dapat dilihat berikut ini.

Program : rotasi.m

% ROTASI Melakuka
an Operasi pemutaran citra.
% Versi 1
% Menggunakan
n pendekatan pemetaan ke belakang

mage\sungai.png');
F = imread('c:\Im
[tinggi, lebar] = size(F);

sudut = 10; % Suddut pemutaran


rad = pi * sudut//180;
cosa = cos(rad);
Operasi Geometrik 127

sina = sin(rad);
F2 = double(F);
for y=1 : tinggi
for x=1 : lebar
x2 = round(x * cosa + y * sina);
y2 = round(y * cosa - x * sina);

if (x2>=1) && (x2<=lebar) && ...


(y2>=1) && (y2<=tinggi)
G(y, x) = F2(y2, x2);
else
G(y, x) = 0;
end
end
end

G = uint8(G);
figure(1); imshow(G);

clear all;

Akhir Program

Contoh hasil pemutaran dapat dilihat pada Gambar 5.4.

(a) Citra sungai asli (b) Hasil pemutaran

Gambar 5.4Contoh pemutaran citra

Apa yang terjadi kalau dilaksanakan pemetaan ke depan dengan


menggunakan rumus pada Persamaan 5.3 dan 5.4? Sebagaimana telah dijelaskan
di depan (Subbab 5.1), cara seperti itu dapat menimbulkan lubang pada citra hasil.
Artinya, akan ada piksel yang tidak terisi dengan piksel dari citra masukan. Untuk
melihat efek ini, cobalah jalankan program berikut.
128 Pengolahan Citra, Te
Teori dan Aplikasi

Program : rotasi2.m

% ROTASI2 Melakuk
kan operasi pemutaran citra.
% Versi 2
% Menggunakan
n pemetaan ke depan

F = imread('c:\Im
mage\gedung.png');
[tinggi, lebar] = size(F);

sudut = 5; % Suduut pemutaran


rad = pi * sudut//180;
cosa = cos(rad);
sina = sin(rad);
F2 = double(F);
G=zeros(tinggi, lebar);
l
for y=1 : tinggi
for x=1 : lebbar
x2 = rounnd(x * cosa - y * sina);
y2 = rounnd(y * cosa + x * sina);

if (x2>=11) && (x2<=lebar) && ...


(y2>=1
1) && (y2<=tinggi)
G(y2, x2) = F2(y, x);
end
end
end

G = uint8(G);
figure(1); imshow
w(G);

clear all;

Akhir Program

Hasilnya bisa dilihatt pada


p gambar berikut.
Operasi Geometrik 129

(a) Citra gedung asli (b) Hasil pemutaran yang


menimbulkan lubang-lubang
(bintik-bintik gelap) pada citra

Gambar 5.5Efek pemetaan ke depan

Perhatikan pada Gambar 5.5(b).Titik-titik hitam pada citra adalah efek lubang
yang memerlukan penanganan lebih lanjut untuk menghilangkannya.

5.4Interpolasi Piksel

Hasil pemutaran citra menggunakan rotasi.m menimbulkan efek bergerigi


pada objek citra.Hal itu diakibatkan oleh penggunaan nilai intensitas didasarkan
pada piksel tetangga terdekat, yang dilakukan melalui:

x2 = round(x * cosa + y * sina);


y2 = round(y * cosa - x * sina);

Penggunaan fungsi round (pembulatan ke atas) merupakan upaya untuk


menggunakan intensitas piksel terdekat.Alternatif laindilakukan dengan
menggunakan floor (pembulatan ke bawah). Gambar berikut menunjukkan
keadaan tersebut ketika hasil pada Gambar 5.4 (b) diperbesar.
130 Pengolahan Citra, Teori dan Aplikasi

Gambar 5.6Efek bergerigi pada citra hasil pemutaran


memberikancitra terlihat tidak mulus

Keadaan seperti itu dapatdiperhalus melalui interpolasi piksel.


Idenya seperti berikut. Misalnya, hasil perhitungan menghasilkan

xlama = 47,09
ylama = 59,85

Pada contoh di depan, piksel yang digunakan berposisi (60, 47) dengan
melakukan pembulatan ke atas. Namun, sesungguhnya bisa saja piksel yang
digunakan adalah yang berada pada posisi (59, 47) jika dilakukan pembulatan ke
bawah.Hal yang perlu diketahui, kemungkinan yang terjadi dapat melibatkan
empat buah piksel.Gambar 5.7 menunjukkan keadaan ini.Oleh karena itu, nilai
intensitas yang digunakan dapat melibatkan keempat piksel tersebut.
Operasi Geometrik 131

Jika ukuran piksel, yaitu di bawah ukuran kepekaan mata


pemandang, spek zig-zag tidak akan terlihat. Namun, bila
pemutran citra terjadi berulang secara serial, cacat gerigi akan
membesar.

f(p,q) f(p,q+1)

f(p’,q’) p = floor(p’)
b q = floor(q’)

f(p+1,q) f(p+1,q+1)

Gambar 5.7Model pendekatan bilinear interpolation

Perhatikan bahwa f(p’. q’) mempunyai empat piksel terdekat berupa f(p,q),
f(p,q+1), f(p+1,q), dan f(p+1,q+1).
Pratt (2001) menunjukkan cara menghitung nilai intensitas yang digunakan
untuk suatu piksel berdasarkan empat piksel. Rumusnya sebagai berikut:

, 1− 1−! , ! , 1 "
1−! 1, ! 1, 1 " (5.5)

Dalam hal ini, a dan b dihitung melalui:

− (5.6)
132 Pengolahan Citra, Te
Teori dan Aplikasi

! − (5.7)

Rumus dalam Persam


maan 5.5 itulah yang disebut sebagai bilinearr interpolation.
i

Selain
in bilinear interpolation, sebenarnya terdapa
pat beberapa cara
untukk melakukan interpolasi. Dua cara lain yan
ang populer yaitu
ic interpolation, yang menggunakan 16 pikse
bicubic sel tetangga untuk
mempe
peroleh interpolasi intensitas piksel dan bikuadratik
b yang
meliba
batkan 9 piksel terdekat.

Contoh program
m yang menggunakan interpolasi bilinear untu
ntuk mendapatkan
intensitas piksel dapat
at dilihat di bawah ini.

Program : rotasi3.m

% ROTASI3 Melakuk
kan operasi pemutaran citra.
% Versi 3 - menggunakan
m bilinear interpolation

F = imread('c:\Im
mage\gedung.png');
[tinggi, lebar] = size(F);
Operasi Geometrik 133

sudut = 15; % Sudut pemutaran


rad = pi * sudut/180;
cosa = cos(rad);
sina = sin(rad);
F2 = double(F);
for y=1 : tinggi
for x=1 : lebar
x2 = x * cosa + y * sina;
y2 = y * cosa - x * sina;

if (x2>=1) && (x2<=lebar) && ...


(y2>=1) && (y2<=tinggi)
% Lakukan interpolasi bilinear
p = floor(y2);
q = floor(x2);
a = y2-p;
b = x2-q;

if (x2 == lebar) || (y2 == tinggi)


G(y, x) = F(floor(y2), floor(x2));
else
intensitas = (1-a)*((1-b)*F(p,q) + ...
b * F(p, q+1)) + ...
a *((1-b)* F(p+1, q) + ...
b * F(p+1, q+1));

G(y, x) = intensitas;
end
else
G(y, x) = 0;
end
end
end

G = uint8(G);
figure(1); imshow(G);

clear all;

Akhir Program

Gambar 5.8 memperlihatkan perbedaan hasil antara pemutaran citra yang


menggunakan pendekatan interpolasi bilinear dan yang tidak.
134 Pengolahan Citra, Teori dan Aplikasi

(a) Tanpa interpolasi

(b) Dengan interpolasi

Gambar 5.8Perbandingan efek penggunaan interpolasi bilinear

Terlihat bahwa hasil yang menggunakan interpolasi bilinear lebih halus.Namun,


tentu saja, kehalusan tersebut harus dibayar dengan waktu komputasi yang lebih
lama.

5.5 Memutar Berdasarkan Sebarang Koordinat

Operasi pemutaran citra dapat dilakukan dengan pusat di mana saja; tidak
harus dari (0, 0).Gambar 5.9 memperlihatkan keadaan ini.
Operasi Geometrik 135

Bingka
kai citra asli

Bin
ingkai citra hasil
pem
emutaran

Gambar
ar 5.9Pemutaran citra melalui titik pusat citra
ci

Rumus untuk melakukan


m pemutaran berlawanan arah jaru
rum jam sebesar
θyang diperlihatkan
an pada Gambar 5.9diperoleh melaluii pemodifikasian
Persamaan 5.3 dan 5.4:
5.4

− ∗ −# ∗ (5.8)
−# ∗ − − ∗ # (5.9)

Untuk kepenting
ngan pemutaran citra sejauh searah jarum
m jam, intensitas
piksel (y,x) dapat dipe
iperoleh melalui intensitas pada piksel (ybaru, xbaru) yang tertera
pada Persamaan 5.8
.8 dan 5.9.Implementasi program dapat dilih
lihat pada contoh
berikut.

Program : rotasi4.m

% ROTASI4 Melakuk
kan operasi pemutaran citra.
% Versi 4 - pusat
p putaran pada pusat citra
136 Pengolahan Citra, Teori dan Aplikasi

F = imread('c:\Image\gedung.png');
[tinggi, lebar] = size(F);

sudut = 5; % Sudut pemutaran


rad = pi * sudut/180;
cosa = cos(rad);
sina = sin(rad);
F2 = double(F);

m = floor(tinggi / 2);
n = floor(lebar / 2);

for y=1 : tinggi


for x=1 : lebar
x2 = (x-n) * cosa + (y-m) * sina + n;
y2 = (y-m) * cosa - (x-n) * sina + m;
if (x2>=1) && (x2<=lebar) && ...
(y2>=1) && (y2<=tinggi)
% Lakukan interpolasi bilinear
p = floor(y2);
q = floor(x2);
a = y2-p;
b = x2-q;

if (x2==lebar) || (y2 == tinggi)


G(y, x) = F(y2, x2);
else
intensitas = (1-a)*((1-bF(p,q) + ...
b * F(p, q+1)) + ...
a *((1-b)* F(p+1, q) + ...
b * F(p+1, q+1));

G(y, x) = intensitas;
end
else
G(y, x) = 0;
end
end
end

G = uint8(G);
figure(1); imshow(G);

clear all;

Akhir Program

Contoh di atas menggunakan interpolasi bilinear.Hasilnya dapat dilihat pada


Gambar 5.10.
Operasi Geometrik 137

(a) Citra gedung asli (b) Hasil pemutaran 5o

Gambar 5.10 Pemutaran melalui titik pusat citra

5.6 Memutar Citra Secara Utuh

Pada seluruh contoh yang telah diberikan, ada bagian gambar yang hilang
ketika pemutaran dilaksanakan.Namun, adakalanya dihendaki agar pemutaran
citra tidak membuat ada bagian citra asli hilang. Untuk keperluan ini, ukuran citra
hasil pemutaran harus diubah sesuai dengan sudut putaran.Dalam hal ini,
Persamaan 5.8 dan 5.9 digunakan untuk menentukan keempat pojok gambar
semula.Adapun lebar dan tinggi gambar hasil pemutaran dengan menghitung nilai
terkecil dan terbesar dari koordinat keempat pojok hasil pemutaran.Untuk lebih
jelasnya, lihat Gambar 5.11.
138 Pengolahan Citra, Te
Teori dan Aplikasi

(y21,x21)

C
Citra asli

(y22,x22)
C
Citra hasil utuh

m’= max(y
m 21, y22, y23, y24)-
min(y21
2 , y22, y23, y24)+1
(y24,x24)

n
(y23,x23)

m max(x21, x22, x23, x24)- min(x21, x22, x23, x24)+1


m’=

Gambar 5.11
.11Penentuan lebar dan tinggi citra hasil pem
emutaran

Implementasi pemutaran
pe citra secara utuh diperlihatkan
an pada program
rotasi5.m.

Program : rotasi5.m

% ROTASI5 Melakuk
kan operasi pemutaran citra.
% Versi 5
% Memutar den
ngan hasil utuh

mage\gedung.png');
F = imread('c:\Im
[tinggi, lebar] = size(F);

sudut = 45; % Suddut pemutaran


rad = pi * sudut//180;
cosa = cos(rad);
sina = sin(rad);

x11 = 1; y11 = 1;
x12 = lebar; y12 = 1;
x13 = lebar; y13 = tinggi;
x14 = 1; y14 = tinggi;
Operasi Geometrik 139

m = floor(tinggi/2);
n = floor(lebar/2);

% Menentukan pojok
x21 = ((x11-n) * cosa + (y11-m) * sina + n);
y21 = ((y11-m) * cosa - (x11-n) * sina + m);

x22 = ((x12-n) * cosa + (y12-m) * sina + n);


y22 = ((y12-m) * cosa - (x12-n) * sina + m);

x23 = ((x13-n) * cosa + (y13-m) * sina + n);


y23 = ((y13-m) * cosa - (x13-n) * sina + m);

x24 = ((x14-n) * cosa + (y14-m) * sina + n);


y24 = ((y14-m) * cosa - (x14-n) * sina + m);

ymin = min([y21 y22 y23 y24]);


xmin = min([x21 x22 x23 x24]);

ymak = max([y21 y22 y23 y24]);


xmak = max([x21 x22 x23 x24]);

lebar_baru = xmak - xmin + 1;


tinggi_baru = ymak - ymin + 1;
tambahan_y = floor((tinggi_baru-tinggi)/2);
tambahan_x = floor((lebar_baru-lebar)/2);
F2=zeros(tinggi_baru, lebar_baru);
for y=1 : tinggi
for x=1 : lebar
F2(y+tambahan_y, x+tambahan_x) = F(y, x);
end
end

figure(1);
imshow( uint8(F2));

% Putar citra
m = floor(tinggi_baru/2);
n = floor(lebar_baru/2);

for y=1 : tinggi_baru


for x=1 : lebar_baru
x2 = round((x-n) * cosa + (y-m) * sina + n);
y2 = round((y-m) * cosa - (x-n) * sina + m);

if (x2>=1) && (x2<=lebar_baru) && ...


(y2>=1) && (y2<=tinggi_baru)
G(y, x) = F2(y2,x2);
else
G(y,x) = 0;
end
end
end

figure(2);
G = uint8(G);

imshow(G);
140 Pengolahan Citra, Teori dan Aplikasi

clear all;

Akhir Program

Hasil pemutaran gambar dengan menggunakan rotasi5.m ditunjukkan pada


Gambar 5.12.

Gambar 5.12Pemutaran citra secara utuh

5.7 Memperbesar Citra

Suatu citra dapat diperbesar dengan membuat setiap piksel menjadi beberapa
piksel. Gambar 5.13 memberikan contoh cara memperbesar citra.
Operasi Geometrik 141

G
Gambar 5.13Cara memperbesar citra

Pada contoh di atas pe


pembesaran pada arah vertikal dan horizontall sebesar
s 2 kali.
Berikut adalah fungsi
fu yang memperlihatkan caraperbesaranter
tersebut.

Program : perbesar.m

function G = perb
besar(berkas, sy, sx)
% PERBESAR Melaku
ukan operasi pembesaran citra.
% Masukan: be
erkas = nama berkas image
% sy
y : skala pembesaran pada sumbu Y
% sx
x : skala pembesaran pada sumbu X
%
% Versi 1

F = imread(berkas
s);
[tinggi, lebar] = size(F);

tinggi_baru = tin
nggi * sy;
lebar_baru = leba
ar * sx;

F2 = double(F);
for y=1 : tinggi_
_baru
y2 = ((y-1) / sy) + 1;
for x=1 : lebar_b
baru
x2 = ((x-1) / sx)
) + 1;
G(y, x) = F(floor(y2), floor(x2));
142 Pengolahan Citra, Teori dan Aplikasi

end
end

G = uint8(G);

Akhir Program

Perlu diketahui, tinggi dan lebar citra keluaran dihitung berdasarkan

tinggi_baru = tinggi * sy;


lebar_baru = lebar * sx;

Kemudian,

y2 = ((y-1) / sy) + 1;

digunakan untuk memperoleh nilai y2 yang berkisar antara 1 sampai dengan lebar
citra asli. Hal yang serupa dilakukan untuk x2 yang dilaksanakan melalui

x2 = ((x-1) / sx) + 1;

Berdasar fungsi perbesar di atas, dapat diberikan perintah seperti berikut:

>>Img=perbesar('C:\Image\lena128.png', 3, 3);

Pada perintah di atas, citra lena12.pngdiperbesar tiga kali baik pada arah vertikal
maupun horizontal.
Selanjutnya, hasil perbesaran ditampilkan melalui

>>imshow(Img);

Hasilnya dapat dilihat pada Gambar 5.14.


Operasi Geometrik 143

(a) Citra lena 128x12


128

(b) Pembesaran 3x tanpa interpolasi

G
Gambar 5.14Contoh pembesaran citra

Untuk memperh
erhalus hasil perbesaran citra, interpolas
asi piksel perlu
dilakukan.Contoh dap
apat dilihat pada kode berikut.

Program : perbesar2.m

function G = perb
besar2(berkas, sy, sx)
% PERBESAR2 Melak
kukan operasi pembesaran citra
% dengan inte
erpolasi.
% Masukan: be
erkas = nama berkas image
% sy
y : skala pembesaran pada sumbu Y
% sx
x : skala pembesaran pada sumbu X
%
% Versi 2

F = imread(berkas
s);
[tinggi, lebar] = size(F);

tinggi_baru = rou
und(tinggi * sy);
lebar_baru = roun
nd(lebar * sx);

F2 = double(F);
for y=1 : tinggi_
_baru
y2 = (y-1) / sy + 1;
for x=1 : lebar_b
baru
144 Pengolahan Citra, Teori dan Aplikasi

x2 = (x-1) / sx + 1;
% Lakukan interpolasi bilinear
p = floor(y2);
q = floor(x2);
a = y2-p;
b = x2-q;

if (floor(x2)==lebar) || …
(floor(y2) == tinggi)
G(y, x) = F(floor(y2), floor(x2));
else
intensitas = (1-a)*((1-b)*F(p,q) + ...
b * F(p, q+1)) + ...
a *((1-b)* F(p+1, q) + ...
b * F(p+1, q+1));

G(y, x) = intensitas;
end
end
end

G = uint8(G);

Akhir Program

Penghalusan citra keluaran dilakukan melalui interpolasi bilinear, seperti yang


telah dibahas di Subbab 5.4.
Untuk melihat hasil interpolasi pada pembesaran citra, dapatdiberikan
perintah seperti berikut:

>>Img=Perbesar2('C:\Image\lena128.png', 4, 4);
>>imshow(Img);

Hasilnya dapat dilihat pada Gambar 5.15.


Operasi Geometrik 145

(a) Citra lena 128x128

(b) Pembesaran 3x

Gambar 5.15Contoh perbesaran citra dengan interpolasi

Cobalah untuk membandingkan hasil di atas dengan hasil pada Gambar 5.14.

5.8 Memperkecil Citra

Bagaimana kalau ingin memperkecil citra?Secara prinsip, pengecilan citra


berarti mengurangi jumlah piksel.Algoritma yang digunakan untuk
mewujudkanperbesar.m maupun perbesar2.m dapat digunakan untuk keperluan ini
dengan m berupa bilangan pecahan seperti 1/2, ¼, 1/8, dan seterusnya. Contoh:

>>Img=perbesar2('C:\Image\lena256.png', 0.5, 0.5);


>>imshow(Img);

Hasilnya dapat dilihat pada Gambar 5.16.


146 Pengolahan Citra, Teori dan Aplikasi

(b) Hasil pengecilan 0,5 x


pada arah vertikal dan horisontal

(a) Citra lena 256x256

Gambar 5.16Contoh pengecilan dengan interpolasi

5.9Perbesaran dengan Skala Vertikal dan Horizontal Berbeda

Fungsi perbesar dan perbesar2 dapat digunakan untuk melakukan


perbesaran/pengecilan dengan skala horizontal dan vertikal yang berbeda. Sebagai
contoh, dapatdiberikan perintah seperti berikut:

>>Img=perbesar2('C:\Image\gedung.png', 0.5, 2.5);


>>imshow(Img);

Hasilnya ditunjukkan pada Gambar 5.17.

Gambar 5.17Gedung diperbesar 1/2 kali pada arah vertikal dan


2,5 kali pada arah horizontal

5.10Pencerminan Citra

Pencerminan yang umum dilakukan berupa pencerminan secara vertikal dan


pencerminan secara horizontal.Pencerminan secara horizontal dilakukan dengan
menukarkan dua piksel yang berseberangan kir-kanan, sebagaimana diperlihatkan
Operasi Geometrik 147

pada Gambar 5.18.A


.Algoritma untuk menangani pencerminan se
secara horizontal
diperlihatkan Algoritm
itma 5.1.

Gaambar 5.18Pencerminan secara horizontal

ALGORITMA
A 5.1 – Mencerminkan gambar secara hor
orizontal
Masukan:
• f (M,N N): Citra masukan berukuran M baris dan N ko
kolom
Keluaran:
• g (M,, N): Hasil citra yang telah dicerminka kan secara
horizon
ontal

is ← 1 TO M
1. FOR baris
2. olom ← 1 TO N
FOR kol
3. aris, kolom) ← f(N – baris + 1, kolom)
g(bar
4. END-FO OR
5. END-FOR R

Implementasinya ditu
tunjukkan pada program berikut.

Program : cerminh.m

function G = cerm
minh(F)
% CERMINH Berfung
gsi untuk mencerminkan citra
% secara hori
izontal
148 Pengolahan Citra, Teori dan Aplikasi

% Masukan: F = Citra berskala keabuan

[tinggi, lebar] = size(F);

for y=1 : tinggi


for x=1 : lebar
x2 = lebar - x + 1;
y2 = y;

G(y, x) = F(y2, x2);


end
end

G = uint8(G);

Akhir Program

Contoh pemakaian fungsi cerminh:

>> F=imread('C:\Image\boneka.png');
>> G=cerminh(F); imshow(G)

Contoh pencerminan gambar secara horizontal ditunjukkan pada Gambar 5.19.

(a) Citra boneka.tif (b) Pencerminan secara horizontal


Gambar 5.19Pencerminan secara horizontal

Pencerminan secara vertikal dilakukan dengan menukarkan dua piksel yang


berseberangan atas-bawah, sebagaimana diperlihatkan pada Gambar
5.20.Algoritma untuk menangani pencerminan secara horizontal diperlihatkan
Algoritma 5.2.
Operasi Geometrik 149

Ga
Gambar 5.20Pencerminan secara vertikal

ALGORITMA
A 5.2 – Mencerminkan gambar secara vert
rtikal
Masukan:
• f (M,N
N): Citra masukan berukuran M baris dan N ko
kolom
Keluaran:
• g (M,, N): Hasil citra yang telah dicerminka
kan secara
horizon
ontal

is ← 1 TO M
1. FOR baris
2. olom ← 1 TO N
FOR kol
3. aris, kolom) ← f(baris, N – kolom + 1)
g(bar
4. END-FO
OR
5. END-FOR
R

tunjukkan pada program berikut.


Implementasinya ditu

Program : cerminv.m

function G = cerm
minv(F)
% CERMINV Berfung
gsi untuk mencerminkan citra
150 Pengolahan Citra, Teori dan Aplikasi

% secara vertikal
% Masukan: F = Citra berskala keabuan

[tinggi, lebar] = size(F);

for y=1 : tinggi


for x=1 : lebar
x2 = x;
y2 = tinggi - y + 1;

G(y, x) = F(y2, x2);


end
end

G = uint8(G);

Akhir Program

Contoh pemakaian fungsi cerminv:

>> F=imread('C:\Image\boneka.png');
>> G=cerminv(F); imshow(G)

Contoh pencerminan gambar secara vertikal ditunjukkan pada Gambar 5.21.

(a) Citra boneka.tif (b) Pencerminan secara vertikal

Gambar 5.21Pencerminan secara vertikal


Operasi Geometrik 151

Di beberapa software, pencerminan secara horizontal justru


dinamakan vertical flip.

5.11Transformasi Affine

Transformasi affine adalah transformasi linear yang menyertakan penskalaan,


pemutaran, penggeseran, dan shearing(pembengkokan). Transformasi affinedapat
dinyatakan dengan persamaan seperti berikut:

′ (( () +
$ & ' *' * $+ &

(5.10)
)( ))

Persamaan di atas dapat ditulis pula menjadi seperti berikut:

′ (( () +
, ′- , )( )) + -/ 0 (5.11)
1 0 0 1 1

Berdasarkan persamaan di atas, terlihat bahwa transformasi affine memiliki enam


derajat kebebasan: dua untuk translasi (tx dan ty) dan empat buah untuk rotasi,
penskalaan, stretching, dan shearing (a11, a12, a21, dan a22).
Tabel 5.1 menunjukkan koefisien yang digunakan dalam matriks di depan
untuk menyatakan operasi dasar penskalaan, rotasi, translasi, dan pembengkokan.
Tentu saja, keenam koefisien tersebut dapat diatur secara bebas untuk
mendapatkan transformasi affine.Untuk melakukan penggabungan dua operasi
dasar, koefisien yang sama dari dua jenis transformasi dapat dikalikan. Contoh
dapat dilihat pada Gambar 5.22.
152 Pengolahan Citra, Teori dan Aplikasi

Tabel 5.1 Koefisien untuk menentukan efek penskalaan, rotasi.


translasi, dan pembengkokan
Transformasi a11 a12 a21 a22 tx ty
Translasi sebesar (y, x) 1 0 0 1 x Y
Rotasi sebesar θ cos θ sin θ -sin cos 0 0
θ θ
Penyekalaan sebesar s s 0 0 S 0 0
Pembengkokan secara 1 S 0 1 0 0
vertikal sebesar s
Pembengkokan secara 1 0 s 1 0 0
horizontal sebesar s

Gambar 5.22Contoh transformasi linear yang mencakup rotasi,


penyekalaan, dan affine
Operasi Geometrik 153

Fungsi berikut be
berguna untuk mewujudkan transformasi affine
ne.

Program : taffine.m

function G = taff
fine(F, a11, a12, a21, a22, tx, ty)
% TAFFINE Digunak
kan untuk melakukan transformasi affiine.
% Masukan: F = Citra berskala keabuan
% a1
11, a12, a21, a22, tx, ty = mengatur
% tr
ransformasi affine

[tinggi, lebar] = size(F);

for y=1 : tinggi


for x=1 : lebbar
x2 = a11 * x + a12 * y + tx;
y2 = a21 * x + a22 * y + ty;
if (x2>=11) && (x2<=lebar) && ...
(y2>=11) && (y2<=tinggi)

% Laku
ukan interpolasi bilinear
p = fl
loor(y2);
q = fl
loor(x2);
a = y2
2-p;
b = x2
2-q;

if (fl
loor(x2)==lebar) || ...
(fl
loor(y2) == tinggi)
G(y
y, x) = F(floor(y2), floor(x2));
else
int
tensitas = (1-a)*((1-b)*F(p,q) + ...
.
b * F(p, q+1)) + ...
a *
*((1-b)* F(p+1, q) + ...
b * F(p+1, q+1));

G(y
y, x) = intensitas;
end
else
G(y, x)
x = 0;
end
end
end

G = uint8(G);

Akhir Program

Contoh pengguna
naan fungsi taffine untuk melakukan pembbengkokan:
154 Pengolahan Citra, Teori dan Aplikasi

>> F=imread('C:\Image\gedung.png');
>> G=taffine(F,1,0.15,0,1,0,0);
>>imshow(G)

Contoh berikut digunakan untuk memutar gambar:

>>rad=10*pi/180;
>> G=taffine(F,cos(rad),sin(rad), …
-sin(rad),cos(rad),0,0);
>>imshow(G)

Contoh penggabungan rotasi dan translasi:

>> G=taffine(F,cos(rad),sin(rad),-sin(rad), …
cos(rad),-30,-50);

Contoh penggabungan rotasi, penskalaan, dan translasi:

>> G=taffine(F,2 * cos(rad),sin(rad),-sin(rad), …


2 * cos(rad),-30,-50);

Perlu diketahui, angka seperti 2 di depan cos(rad) menyatakan bahwa hasilnya


adalah kebalikannya, yaitu ½ kalinya.

5.12 Efek Ripple

Efek ripple (riak) adalah aplikasi transformasi citra yang membuat gambar
terlihat bergelombang. Efek riakdapaat dibuat baik pada arah x maupun y.
Transformasinya seperti berikut:

)1

23
(5.12)
)1

24
(5.13)
Operasi Geometrik 155

Dalam hal ini, ax dan


an ay menyatakan amplitudoriak gelombang sinus,
s sedangkan
Tx dan Ty menyatakan
an periode gelombang sinus.
Implementasi efe
fek gelombang dapat dilihat di bawah ini.

Program : ripple.m

function G = ripp
ple(F, ax, ay, tx, ty)
% RIPPLE Berfungs
si untuk melakukan transformasi 'ripp
ple'.

dimensi = size(F));
tinggi = dimensi((1);
lebar = dimensi(22);
for y=1 : tinggi
for x=1 : lebbar
x2 = x + ax * sin(2 * pi * y / tx);
y2 = y + ay * sin(2 * pi * x / ty);
if (x2>=11) && (x2<=lebar) && ...
(y2>=11) && (y2<=tinggi)

% Laku
ukan interpolasi bilinear
p = fl
loor(y2);
q = fl
loor(x2);
a = y2
2-p;
b = x2
2-q;

if (fl
loor(x2)==lebar) || ...
(fl
loor(y2) == tinggi)
G(y
y, x) = F(floor(y2), floor(x2));
else
int
tensitas = (1-a)*((1-b)*F(p,q) + ...
.
b * F(p, q+1)) + ...
a *
*((1-b)* F(p+1, q) + ...
b * F(p+1, q+1));

G(y
y, x) = intensitas;
end
else
G(y, x)
x = 0;
end
end
end

G = uint8(G);

Akhir Program
156 Pengolahan Citra, Teori dan Aplikasi

Contoh penggunaan fungsi ripple:

>> F=imread('C:\image\gedung.png');
>> G=ripple(F,10,15,120, 250);
>>imshow(G)

Pada contoh di atas, amplitude gelombang sinus yang digunakan berupa 10 dan
15, sedangkan periode yang digunakan 120 dan 250.Contoh hasil perintah di atas
ditunjukkan pada Gambar 5.23.

Gambar 5.23Contoh hasil efek ripple

Beberapa contoh yang lain dapat dilihat pada Gambar 5.24.


Operasi Geometrik 157

Gambar 5.24Berbagai hasil efek ripple

5.13 Efek Twirl

Transformasi twirl(olak atau puntiran) dilakukan dengan memutar citra


berdasarkan titik pusat citra, tetapi tidak bersifat linear. Salah satu varian bentuk
transformasinya, yang diadaptasi dari Burger & Burge (2008), sebagai berikut:

′ 5 6 cos : (5.14)
′ 5 6 sin :
(5.15)
158 Pengolahan Citra, Te
Teori dan Aplikasi

dengan

6 = − 5
) − 5
) (5.16)

: >6?@ AAB , B C D 6 EF − 6 /6 EF (5.17)

ggunakan rmaks sebesar ½ diagonal citra dan α sebesar 43o.


Contoh berikut mengg

Program : twirl.m

function G = twir
rl(F)
% TWIRL Berfungsi
i untuk melakukan transformasi 'twirl
l'

dimensi = size(F)
);
tinggi = dimensi(
(1);
lebar = dimensi(2
2);
xc = round(lebar / 2);
yc = round(tinggi
i / 2);

alpha = 43 * pi / 180;
rmaks = 0.5 * sqr
rt(xc^2 + yc ^ 2); % 1/2 diagonal cit
tra

for y=1 : tinggi


for x=1 : lebbar
r = sqrt(((x-xc)^2+(y-yc)^2);
beta = attan2(y-yc, x-xc) + …
alpha * (rmaks - r) / rmaks;
x2 = xc + r * cos(beta);
y2 = yc + r * sinn(beta);

if (x2>=1
1) && (x2<=lebar) && ...
(y2>=1
1) && (y2<=tinggi)

% Laku
ukan interpolasi bilinear
p = fl
loor(y2);
q = fl
loor(x2);
a = y2
2-p;
b = x2
2-q;

if (fl
loor(x2)==lebar) || ...
(fl
loor(y2) == tinggi)
G(y
y, x) = F(floor(y2), floor(x2));
else
int
tensitas = (1-a)*((1-b)*F(p,q) + ...
.
b * F(p, q+1)) + ...
a *
*((1-b)* F(p+1, q) + ...
b * F(p+1, q+1));

G(y
y, x) = intensitas;
Operasi Geometrik 159

end
else
G(y, x) = 0;
end
end
end

G = uint8(G);

Akhir Program

Contoh penggunaan fungsi twirl:

>> F=imread('C:\Image\kotatua.png');
>> G=swirl(F); imshow(G)

Hasil ditunjukkan pada Gambar 5.25.

Gambar 5.25Efek transformasi twirl

5.14 Transformasi Spherical

Transformasi spherical memberikan efek bulatan (bola), seperti melihat


gambar menggunakan lensa pembesar.Bagian tengah terlihat membesar.Hal
seperti itu diperoleh dengan menggunakan transformasi seperti berikut.

− I ∗ tan ! , L M 6 ≤ 6 EF P
′ H
, L M 6 > 6
(5.18)
EF
160 Pengolahan Citra, Te
Teori dan Aplikasi

− I ∗ tanA!
tan C , L M 6 ≤ 6 EF P
′ Q
, L M 6 > 6
(5.19)
EF

dengan

( [ \
! R1 − T ∗ 6? sin
6? Z `
S = [ \ ] ^_ ]
(5.20)

( [ \
! R1 − T ∗ 6? sin
6? Z `
S = [ \ ] ^_ ]
(5.21)

6 = − 5
) − 5
) (5.22)

I =6 EF
) 6) (5.23)

6 EF 5 (5.24)
5 UV! 6/2 (5.25)
5 + XX /2 (5.26)

Perlu diketahui, Y dis


isebut indeks refraksi atau indeks pantulan.
Implementasi tran
ransformasi spherical dapat dilihat pada progra
ram berikut.

Program : spheri.m

function G = sphe
eri(F, rho)
% SPHERI Berfungs
si untuk melakukan transformasi 'sphe
erical'

dimensi = size(F)
);
tinggi = dimensi(
(1);
lebar = dimensi(2
2);
xc = round(lebar / 2);
yc = round(tinggi
i / 2);

rmaks = xc; % 1/
/2 lebar gambar

for y=1 : tinggi


for x=1 : lebbar
r = sqrt(((x-xc)^2+(y-yc)^2);
z = sqrt((rmaks^2-r^2);
bx = (1 - 1/rho) * asin((x-xc)/...
sqrt((x-xc)^2+z^22));
by = (1 - 1/rho) * asin((y-yc)/...
Operasi Geometrik 161

sqrt((y-yc)^2+z^2));
if r <= rmaks
x2 = x - z * tan(bx);
y2 = y - z * tan(by);
else
x2 = x;
y2 = y;
end

if (x2>=1) && (x2<=lebar) && ...


(y2>=1) && (y2<=tinggi)

% Lakukan interpolasi bilinear


p = floor(y2);
q = floor(x2);
a = y2-p;
b = x2-q;

if (floor(x2)==lebar) || ...
(floor(y2) == tinggi)
G(y, x) = F(floor(y2), floor(x2));
else
intensitas = (1-a)*((1-b)*F(p,q) + ...
b * F(p, q+1)) + ...
a *((1-b)* F(p+1, q) + ...
b * F(p+1, q+1));

G(y, x) = intensitas;
end
else
G(y, x) = 0;
end
end
end

G = uint8(G);

Akhir Program

Pemakaian skrip di atas dapat dilihat pada contoh berikut:

>> F=imread('C:\Image\kotatua.png');
>>G=spheri(F, 1.8); imshow(G)

Hasil ditunjukkan pada Gambar 5.26.


162 Pengolahan Citra, Te
Teori dan Aplikasi

Gambar 5.26Transformasi spherical

5.15 Transformasi bilinear


b

Transformasi bili
ilinear mempunyai fungsi pemetaan seperti ber
erikut:

( ) a b (5.27)
!( !) !a !b (5.28)

Transformasi ini ter


ermasuk dalam transformasi nonlinear men
engingat terdapat
pencampuran xy.Impl
plementasi dalam bentuk program dapat diliha
hat berikut ini.

Program : tbilin.m

function G = tbil
lin(F, a1, a2, a3, a4, b1, b2, b3, b4
4)
% Fungsi untuk me
elakukan transformasi bilinear

dimensi = size(F)
);
tinggi = dimensi(
(1);
lebar = dimensi(2
2);

for y=1 : tinggi


for x=1 : lebbar
x2 = a1 * x + a2 * y + a3 * x * y + a4;
y2 = b1 * x + b2 * y + b3 * x * y + b4;

if (x2>=1
1) && (x2<=lebar) && ...
(y2>=1
1) && (y2<=tinggi)
Operasi Geometrik 163

% Lakukan interpolasi bilinear


p = floor(y2);
q = floor(x2);
a = y2-p;
b = x2-q;

if (floor(x2)==lebar) || ...
(floor(y2) == tinggi)
G(y, x) = F(floor(y2), floor(x2));
else
intensitas = (1-a)*((1-b)*F(p,q) + ...
b * F(p, q+1)) + ...
a *((1-b)* F(p+1, q) + ...
b * F(p+1, q+1));

G(y, x) = intensitas;
end
else
G(y, x) = 0;
end
end
end

G = uint8(G);

Akhir Program

Contoh pemanggilan fungsi tbilin seperti berikut:

>> F=imread('C:\Image\kotatua.png');
>> G=tbilin(F, 1.2,0.1,0.005,-45,0.1,1,0.005,-30);
>>imshow(G)

Hasinya dapat dilihat pada Gambar 5.27.


164 Pengolahan Citra, Teori dan Aplikasi

Gambar 5.27Transformasi bilinear

Latihan

1. Jelaskan pengertian operasi geometrik.


2. Apa yang disebut dengan istilah berikut.
(a) Pemetaan ke belakang
(b) Pemetaan ke depan
3. Jelaskan yang dimaksud dengan interpolasi bilinear.
4. Tuliskan persamaan matematika yang menggambarkan operasi pencerminan
secara vertikal.
5. Tuliskan sebuah algoritma yang sekaligus digunakan untuk mencerminkan
secara horizontal dan vertikal. Implementasikan dalam bentuk program dan
ujilah.
6. Cobalah untuk menguji skrip untuk pencerminan dengan menggunakan
gambar berwarna. Apa yang terjadi dengan hasilnya? Mengapa begitu?
7. Cobalah untuk memodifikasi cerminh dan cerminv agar bisa digunakan untuk
melakukan pencerminan terhadap gambar berwarna.
8. Jelaskan apa yang dimaksud dengan transformasi-transformasi berikut.
(a) Affine
(b) Spherical
Operasi Geometrik 165

(c) Twirl
(d) Ripple
(e) Bilinear

9. Gambar berikut memberikan gambaran mengenai proses interpolasi linear


(berdimensi satu), yang menjadi dasar dalam penentuan interpolasi bilinear
(berdimensi dua).

Berdasarkan gambar di atas, buktikan bahwa

f(q’) = (1-a) f(q) + a f(q+1)


166 Pengolahan Citra, Teori dan Aplikasi
BAB 6
Pengolahan
Citra di Kawasan
Frekuensi

Setelah bab ini berakhir, diharapkan pembaca


mendapatkan berbagai pengetahuan berikut dan mampu
mempraktikkannya.
Pengolahancitra di kawasan spasial dan kawasan
frekuensi
AlihragamFourier
Fourier 1-D
Fourier 2-D
Fast Fourier transform
Visualisasi pemrosesan FFT
Penapisan pada kawasan frekuensi
Filter lolos-rendah
Filter lolos-tinggi
Penapisan dengan pendekatan high frequency
emphasis
168 Pengolahan Citra, Teori dan Aplikasi

6.1 Pengolahan Citradi Kawasan Spasial dan Kawasan Frekuensi

Citra dapat ditransformasikan di kawasan spasial maupun di kawasan


frekuensi.Dua cara untuk melakukan transformasi citra ditunjukkan pada Gambar
6.2. Sejumlah contoh transformasi di kawasan spasial atau keruangan telah
dibahas di Bab 5.Namun, sebagai alternatif citra perlu diproses di kawasan
frekuensi agar penentuan daerah frekuensinya dapat lebih ketat dan tepat.Untuk
itu diperlukan pasangan transformasi dan transformasi-balik sebelum dan sesudah
penapisan.

Gambar 6.1Transformasi citra dapat diproses


melalui kawasan spasial maupun frekuensi

• Dalam bahasa Indonesia, istilah lain yang identik dengan


transformasi adalahalihragam.

• Adanya pasangan alihragam dan alihragam-balik tentu saja


menambah beban komputasi.

Salah satu alihragam yang biasa dipakai di kawasan frekuensi


adalahalihragamFourier.Sejak algoritma alihragamFourier ditemukan, telah
bermunculan pula macam-macam alihragam yang lain, seperti transformasi
Pengolahan Citra di Kawasan Frekuensi 169

gelombang-singkat (wavelet), transformasi Radon, dan DCT (Discrete Cosine


Transform).

6.2 Alihragam Fourier

Alihragam Fourier (Fourier transform) merupakan salah satu jenis


alihragam ke kawasan frekuensi yang banyak dipakai pada pengolahan citra.
Alihragam ini dimanfaatkan untuk memetakan citra dari kawasan spasial ke dalam
kawasan frekuensi.Disamping untuk melihat karakteristik spektrum citra, juga
menjadi bagian pemrosesannya. Citra dapat diamati sebagaikumpulan gelombang
sinusoid dengan frekuensi, amplitudo, dan fase yang berbeda-beda.Meskipun pada
zaman sekarang terdapat berbagai alihragam sebagai alternatif alihragamFourier,
konsep yang mendasari alihragamFourier perlu dimengerti.Lagipula, beberapa
pemrosesan masih bertumpu pada alihragamFourier.
Berdasarkan temuan ahli fisika dari Prancis bernama Baptiste Joseph
Fourier (1768-1830), semua fungsi yang bersifat periodis, betapapun kompleks
fungsi tersebut, dapat dinyatakan sebagai penjumlahan sinusoid.Kuncinya terletak
pada komposisi amplitude dan fase sinus setiap frekuensi.Begitu pula pada
citra.Sebagai gambaran, suatu isyarat berdimensi satu pada Gambar 6.1(a) dapat
disusun atas tiga gelombang sinusoid seperti terlihat pada Gambar 6.1(b).

Gambar 6.1Contoh isyarat yang tersusun atastiga sinusoid


170 Pengolahan Citra, Teori dan Aplikasi

6.3 Fourier 1-D

Penerapan Discrete Fourier Transform (DFT) atau alihragamFourier


diskret pada citra berdimensi satu disajikan pada pembahasan berikut. Misalnya,
terdapat fungsi f(x) yang terdiri atas N data (f(0), f(1), f(2), f(3), f(4), …, f(N-1)).
Jika dikenakan DFT, akan diperoleh hasil alihragam berupa F(u) berupa

F(u) = (F(0), F(1), F(2), F(3), F(4), .., F(N-1))

Perhatikan bahwa jumlah data diskret N yang sama di kawasan frekuensi, yang
sejalan dengan hukum kelestarian informasi. F(u) diperoleh melalui persamaan:

= ∑ − (6.1)

atau

= ∑ − ,dengan u = 0,1,2,…,N-1 (6.2)

Pada rumus di depan, j menyatakan √−1. Dengan demikian, hasil transformasi


Fourier berupa bilangan kompleks.
Adapun alihragam-baliknya berupa:

=∑ ,dengan u = 0,1,2,…,N-1 (6.3)

Sebagai contoh, terdapat f(x) = (2, 4, 1, 5). AlihragamFourier-nya seperti


berikut.

0 = ∑# −
" " "

= (f(0)(cos(0)-j sin(0)) +
f(1)(cos(0)-j sin(0)) +
f(2)(cos(0)-j sin(0)) +
f(3)( (cos(0)-j sin(0))) / 4
= (f(0) + f(1) + f(2) + f(3)) / 4
= (2 + 4 + 1 + 5) / 4= 12 / 4 = 3

1 = ∑# −
" " "
Pengolahan Citra di Kawasan Frekuensi 171

= (f(0)(cos(0)-j sin(0)) +
f(1)(cos($/2)-j sin($/2)) +
f(2)(cos($)-j sin($)) +
f(3)( (cos(3$/2)-j sin(3$/2))) / 4
= (2 (1-0) + 4(0-j) + 1(-1-0) + 5(0+j)) / 4
= (1+j)/4 = 0,25 + j0,25

2 = ∑# −
" " "

= (f(0)(cos(0)-j sin(0)) +
f(1)(cos($)-j sin($)) +
f(2)(cos(2$)-j sin(2$)) +
f(3)( (cos(3$)-j sin(3$))) / 4
= (2 (1-0) + 4(-1-0) + 1(1-0) + 5(-1-0) ) / 4
= -6 / 4 = -1,50

# #
3 = ∑# −
" " "

= (f(0)(cos(0)-j sin(0)) +
f(1)(cos(3$/2)-j sin(3$/2)) +
f(2)(cos(3$)-j sin(3$)) +
f(3)( (cos(9$/2)-j sin(9$/2))) / 4
= (2 (1-0) + 4(0+j) + 1(-1-0) + 5(0-j) ) / 4
= (1 -j)/4
= 0,25 - j0,25

Gambar 6.2 memperlihatkan citra asli dan hasil transformasi Fourier.


172 Pengolahan Citra, Teori dan Aplikasi

Gambar 6.2Citra dimensi satu dan hasil transformasi Fourier

Pada Gambar 6.2, DFT-1 menyatakan transformasi balik dari kawasan frekuensi
ke kawasan spasial.Perhatikan bahwa data asli f(x) hanya 4, tetapi hasil alihragam
ada 8, seolah ada tambahan informasi.
Sekarang akan ditunjukkan pelaksanaan alihragam-baliknya. Perhatikan
cara menghitungnya.

0 = ∑# +
" "

= F(0)(cos(0)+j sin(0)) +
F(1)(cos(0)+j sin(0)) +
F(2)(cos(0)+j sin(0)) +
F(3)( (cos(0)+j sin(0))) / 4

= F(0) + F(1) + F(2) + F(3)


= 3+ j0 + 0,25 + j0,25 - 1,5+j0 + 0,25-j0,25
=2

#
2$1 2$1
1 =* + -+ + -
4 4

= F(0)(cos(0)+j sin(0)) +
F(1)(cos($/2)+j sin($/2)) +
F(2)(cos($)+j sin($)) +
F(3)( (cos(3$/2)+j sin(3$/2))
= 3 (1+0) + (0,25 + j0,25)(0+j) - 1,5 (-1+0) +
(0,25-j0,25)(0-j)
Pengolahan Citra di Kawasan
K Frekuensi 173

= 3 + j0
j0,25 -0,25 + 1,5 - j0,25 -0,25
=4

#
2$2 2$2
2 =* + -+ + -
4 4

= F(0)(
0)(cos(0)-j sin(0)) +
F(1)(co
(cos($)-j sin($)) +
F(2)(co
(cos(2$)-j sin(2$)) +
F(3)(co
(cos(3$)-j sin(3$))
= 3 (1--0) + (0,25 + j0,25) (-1-0) - 1,5 (1-0) +
((0,25--j0,25))(-1-0)
= 3 – 0,25
0 –j0,25 -1,5 – 0,25 +j0,25
=1

#
2$3 2$3
3 =* + -+ + -
4 4

= (F(0)
(0)(cos(0)+j sin(0)) +
F(1)(co
(cos(3$/2)+j sin(3$/2)) +
F(2)(co
(cos(3$)+j sin(3$)) +
F(3)(( (cos(9$/2)+j
(c sin(9$/2))) / 4
= 3 (1--0) + (0,25 + j0,25) (0-j) - 1,5 (-1-0) +
(0,25
25-j0,25)(0+j)
= 3 - j0,25
j + 0,25 + 1,5 + j0,25 + 0,25
= 5

Tampak bahwa f(x) tidak


ti mengandung komponen imajiner seperti
rti aslinya.
Berikut adala
lah contoh fungsi yang digunakan untuk menghitung
m DFT
berdimensi satu.

Program : dft1d.m
174 Pengolahan Citra, Teor
ori dan Aplikasi

function [Re, Im]


] = dft1d(Fx)
% DFT1D Digunakan
n untuk memperoleh DFT dimensi satu.
% Hasil: Re beris
si bagian real dan
% Im beris
si bagian imajiner

n = length(Fx); % Jumlah nilai dalam fungsi Fx


for u = 0 : n - 1
Re(u+1) = 0;
Im(u+1) = 0;
for x = 0 : n - 1
radian = 2 * pi * u * x / n;
cosr = cos(radian
n);
sinr = -sin(radia
an);
Re(u+1) = Re(u+1)
) + Fx(x+1) * cosr;
Im(u+1) = Im(u+1)
) + Fx(x+1) * sinr;
end

Re(u+1) = Re(u+1)
) / n;
Im(u+1) = Im(u+1)
) / n;
end

Akhir Program

Contoh penggunaann fungsi dft1d ditunjukkan di bawah ini.


ni. Perhatikan Fx
perlu ditranspos.

>>Fx=[2,4,1,
,5]';
>> [Re,Im]=d
dft1d(Fx)
Re =

3.00000 0.25000 -1.50000 0.25000

Im =

0.00000 0.25000 -0.00000 -0.25000

>>

Hasil di atas sesuai dengan


de perhitungan manual di depan.
Alihragam-bal
aliknya dapat diperoleh melalui fungsi idft1d
i seperti
berikut.

Program : idft1d.m
Pengolahan Citra di Kawasan Frekuensi 175

functionFx = idft1d(Fu)
% IDFT1D Digunakan untuk melaksanakan transformasi balik
% 1D DFT.
% Masukan: Fu berupa bilangan kompleks

n = length(Fu); % Jumlah nilai dalam fungsi Fu


for u = 0 : n - 1
Fx(u+1) = 0;
for x = 0 : n - 1
radian = 2 * pi * u * x / n;
cosr = cos(radian);
sinr = sin(radian);
Fx(u+1) = Fx(u+1) + Fu(x+1) * (cosr+ j*sinr);
end
end

Fx = real(Fx); % Peroleh bagian real

Akhir Program

Berikut adalah contoh penggunaan DCT dan alihragam-baliknya:

>>Fx=[2,4,1,5]';
>> [Re,Im]=dft1d(Fx);
>> F=idft1d(Re+Im*j)
F =

2.0000 4.0000 1.0000 5.0000

>>

Perhatikan, argumen pada fungsi idft1d berupa bilangan kompleks, tetapi


tidak ada komponen imjinernya atau nilai imajinernya nol. Pengalian dengan j
pada Im*j dipakai untuk membentuk bagian imajiner. Hasilnya terlihat sama
dengan isi Fx.
176 Pengolahan Citra, Teor
ori dan Aplikasi

6.4 Fourier 2-D

Suatu citra diskret


dis berdimensi dua f(x, y) dapat dinyataka
kan sebagai deret
Fourier, yang ditulisk
skan seperti berikut:

70 70
, . = ∑/
0 ∑ , 1 cos 52$ 6 + 89 − sin 52$ 6 + 89 (6.4)
/ /

Dalam hal ini, citra bberukuran MxN (M baris dan N kolom).Kom


omponenv bernilai
dari 0 sampai dengan
gan M-1 dan u bernilai dari 0 sampai dengann N-1. Dalam hal
ini, u dan v menyatak
takan frekuensi, sedangkan nilai F(u, v) dinam
amakan koefisien
Fourier atau spektrum
um frekuensi diskret.
Adapun alihra
ragam-baliknya berupa:

70 70
1, = / ∑/
0 ∑ ., cos 52$ 6 + /
89 + sin 52$ 6 + /
89 (6.5)

Berdasarkan rum
umus di atas, setiap piksel akan ditransform
rmasikan dengan
kompleksitas berupaa O(MN) atau O(N2) jika ukuran citra berup
upa NxN. Dengan
demikian, untuk citra (N4). Tentu saja,
itra berukuran NxN, kompleksitas berupa O(N
untuk ukuran yangg besar akan diperlukan waktu yang san
angat lama.Itulah
sebabnya, dalam prak
aktik cara tersebut dihindari karena terdapat metode
m lain yang
jauh lebih cepat dalam
am melakukan transformasi.
Sekedar untuk kepentingan
k ilustrasi, alihragamFourier yan
ang menggunakan
Persamaan 6.4 dapatt diimplementasikan
d seperti berikut.

Program : dft2d.m

function [Re, Im]


] = dft2d(berkas)
% DFT2D Digunakan
n untuk memperoleh DFT dimensi dua.
% Masukan: na
ama berkas berskala keabuan
% Hasil: Re berisi
b bagian real dan
% Im berisi
b bagian imajiner

Fx = double(imreaad(berkas));
[m, n] = size(Fx)); % Ukuran citra
% m = jumlah baris
% n = jumlah kolom
for v = 0 : m -1
for u = 0 : n - 1
Pengolahan Citra di Kawasan Frekuensi 177

Re(v+1, u+1) = 0;
Im(v+1, u+1) = 0;
for y = 0 : m - 1
for x = 0 : n - 1
radian = 2 * pi * …
(u * x / n + v * y / m);
cosr = cos(radian);
sinr = -sin(radian);
Re(v+1, u+1) = Re(v+1, u+1) + ...
Fx(y+1, x+1) * cosr;
Im(v+1, u+1) = Im(v+1, u+1) + ...
Fx(y+1, x+1) * sinr;
end
end
end
end

Akhir Program

Fungsi dft2d digunakan untuk mentransformasikan citra berskala keabuan.


Contoh penggunaannya misalnya seperti berikut:

>> [Dr, Di] = dft2d(’C:\Image\lena64.png’);

Dengan cara seperti itu, Dr mencatat bagian real dan Di mencatat bagian
imajiner.
Tabel berikut memberikan contoh waktu pengeksekusian yang dilakukan
pada tiga citra dengan ukuran yang berlainan dengan menggunakan fungsi
dft2d.Terlihat bahwa semakin besar ukuran citra yang diproses, terjadi
peningkatan waktu komputasi yang sangat signifikan.

Tabel 6.1 Waktu komputasi menggunakan dft2d


Citra Waktu
(detik)
lena64.png (ukuran 64 x 64) 3,51
lena128.png (ukuran 128 x 128) 54,42
lena256.png (ukuran 256 x 256) 870,09
178 Pengolahan Citra, Teori dan Aplikasi

Pendekatan lain memungkinkan penghitungan baris dan kolom tidak


dilakukan sekaligus. Pertama, transformasi berdimensi satu hanya dikenakan pada
baris-baris saja.Selanjutnya, hasilnya ditransformasi menurut kolom.Contoh
program dalam bahasa C terdapat diVandevenne (2007).

6.5 Fast Fourier Transform

Suatu metode bernama FFT (Fast Fourier Transform) dibuat untuk


mempercepat komputasi alihragamFourier. Jika kompleksitas DFT untuk
mentransformasikan sebuah piksel seperti yang tertuang dalam implementasi di
depan sebesarO(N2), FFT memiliki kompleksitas sebesar O(N log2 N). Sebagai
pembanding, jika N sama dengan 256 maka N2sama dengan 65.536, sedangkan N
log2 N menghasilkan 256 x 8 atau 2048. Jadi, FFT lebih cepat 32 kali
dibandingkan DFT untuk ukuran citra seperti itu. Pada alihragam berdimensi dua,
penghematan waktu akan lebih terasa.
Peluang adanya penghematan waktu komputasi dapat dilukiskan untuk citra

N=8. Nilai untuk u dan x sama dengan 0,1,2,3,4,5,6,7 dengan nilai


<

real cos + ditunjukkan pada Tabel 6.2.


< <

Tabel 6.2Nilai-nilai <

x 0 1 2 3 4 5 6 7
u
0 1+j0 1+j0 1+j0 1+j0 1+j0 1+j0 1+j0 1+j0

1+j0 1 1 0+j 1 1 -1+j0 1 1 0-j 1 1


1 + − + − − − −
√2 √2 √2 √2 √2 √2 √2 √2
2 1+j0 0+j -1+j0 0-j 1+j0 0+j -1+j0 0-j

1+j0 1 1 0+j 1 1 0-j 1 1 0-j 1 1


3 − − + − + + − +
√2 √2 √2 √2 √2 √2 √2 √2
4 1+j0 1+j0 1+j0 1+j0 1+j0 1+j0 1+j0 1+j0

1+j0 1 1 0+j 1 1 -1+j0 1 1 0-j 1 1


5 + − + − − − −
√2 √2 √2 √2 √2 √2 √2 √2
6 1+j0 0+ j -1+j0 0-j 1+j0 0+j -1+j0 0-j

1+j0 1 1 0+i 1 1 0-j 1 1 0-j 1 1


7 − − − + + − +
√2 √2 √2 √2 √2 √2 √2 √2
Pengolahan Citra di Kawasan Frekuensi 179

Terlihat bahwa nilai-nilai <


banyak yang sama, yaitu 0, , dan 1.

Oleh karena itu, algoritma cepat dibuat untuk tidak mengulang proses perkalian
dengan angka-angka yang sama. Bahkan, perkalian dengan angka 1 dapat
diloncati karena tidak perlu dilakukan. Demikian pula, perkalian dengan nol sama
dengan melompati datanya untuk tidak perlu disertakan dalam perhitungan.
Namun, perlu dictata bahwa penghematan proses komputasi ini hanya dapat
terjadi untuk jumlah pikel N = 2n, yaitu 2, 4, 8, 16, dan seterusnya. Untuk citra
dengan besar N (dan M) kurang dari angka-angka tersebut dapat dilengkapi
dengan piksel-piksel kosong (bernilai intensitas nol).
Cara melakukan komputasi dengan FFT dijabarkan oleh Cooley,
dkk.(1969). Implementasi denganOctave berupa fungsifft danfft2. Contoh
penggunaanfft2 seperti berikut:

>>Img=imread(’C:\Image\lena256.png’);
>> F=fft2(Img);

Pada contoh di atas, citra bernama lena256.png ditransformasikan menggunakan


FFT.

6.6 Visualisasi Pemrosesan FFT

Sebagaimana telah dibahas di depan, alihragamFourier menghasilkan


bilangan kompleks. Terkait dengan hal itu, terdapat definisi spektrum Fourier
seperti berikut:

| ., | = >? ., + @ ., (6.6)

dengan R(u,v) menyatakan bagian real dan I(u,v) menyatakan bagian imajiner.
Adapun sudut fase transformasi didefinisikan sebagai:

D 7,
∅ ., = BC E 7,
(6.7)
180 Pengolahan Citra, Teori dan Aplikasi

Selain itu, terdapat pula istilah power spectrum atau spektrum daya, yang
didefinisikan sebagai kuadrat besaran:

F ., =| ., | = ? ., + @ ., (6.8)

Untuk kepentingan analisis secara visual, spektrum dan sudut fase


Fourierdapat disajikan dalam bentuk gambar.Berikut adalah contoh untuk
melakukan transformasi citra lena256.png dan kemudian menyajikan spektrum.

>>Img=imread(’C:\Image\lena256.png’);
>>F=fft2(Img);
>>imshow(abs(F),[]);

Citra lena256.png dan spektrum Fourier-nya diperlihatkan pada Gambar 6.3(a)


dan Gambar 6.5(b).
Pengolahan Citra di Kawasan Frekuensi 181

(a) Citra lena256.png (b) Visualisasi hasil FFT. Hanya di


pojok kiri atas yang terlihat putih

(c) Visualisasi hasil FFT dengan (d) Visualisasi hasil FFT. Dengan
skala logaritmik intensitas frekuensi nol ditengahkan

Gambar 6.3 Transformasi Fourier pada citra dan visualisasi

Mengingat nilai dalam spektrum terlalu lebar, penerapan logaritma biasa


digunakan hanya untuk kepentingan visualisasi. Sebagai contoh, Gambar 6.3(c)
diperoleh melalui:

>> S2 = log(1 + abs(F));


>>imshow(S2, []);

Penambahan angka 1 dimaksudkan untuk menghindari terjadinya log(0).


182 Pengolahan Citra, Teori dan Aplikasi

Hasil pada Gambar 6.3(c) menunjukkan keadaan yang seperti berulang yang
muncul pada setiap pojok dalam kotak frekuensi.Hal ini disebabkan adanya sifat
pengulangan pada transformasi Fourier.Dalam hal ini, nilai pada M/2 menuju ke
M-1 adalah pengulangan dari titik asal 0 hingga M/2 – 1. Hal ini juga berlaku
pada arah mendatar. Berdasarkan sifat ini, untuk kepentingan visualisasi, titik
awal (0,0) seringkali diubah agar terletak di tengah-tengah kotak frekuensi,
sebagaimana ditunjukkan pada Gambar 6.4.

Gambar 6.4 Frekuensi 0 diletakkan di tengah-tengah kotak frekuensi

Hal seperti itu dapatdikerjakan dengan menggunakan fungsi fftshift yang


disediakan oleh Octave. Kegunaan fungsifftshiftadalah untuk mengatur agar
komponen frekuensi nol diletakkan di tengah-tengah spektrum. Untuk
memberikan gambaran fungsi ini, perhatikan contoh berikut.

X=
Pengolahan Citra di Kawasan Frekuensi 183

1 2 3 4
5 6 7 8
9 10 11 12
13 14 15 16

Jika dikenakan perintah seperti berikut

fftshift(X)

diperoleh hasil berupa:

ans =

11 12 9 10
15 16 13 14
3 4 1 2
7 8 5 6

Gambar 6.5 menunjukkan model penukaran keempat kuadran yang bersebrangan


secara diagonal melalui fftshift.

Gambar 6.5Penukaran kuadran melalui fftshift


184 Pengolahan Citra, Teori dan Aplikasi

Contoh berikut menunjukkan efek penukaranfftshift pada hasil transformasi


Fourier:

>> G=fftshift(F);
>>imshow(log(1+abs(G)),[])
>>

Hasilnya dapat dilihat pada Gambar 6.3(d).

6.7 Penapisan pada Kawasan Frekuensi

Sebagaimana telah diutarakan pada Gambar 6.1, penapisan dapat dilakukan


pada kawasan frekuensi.Menurut teorema konvolusi, konvolusi pada kawasan
frekuensi dapat dilakukan dengan mengalikan F(v, u) dengan H(v,u)(Gonzalez,
dkk., 2004). Dalam hal ini, H(v,u) dinamakan sebagai fungsi transfer filter dan
diperoleh melalui pengenaan DFT terhadap h(y,x), yang merupakan kernel
konvolusi pada kawasan spasial.
Satu hal yang perlu diperhatikan pada kawasan frekuensi, penapisan dapat
menimbulkan problem akibat konvolusi. Problem yang dimaksud dikenal dengan
namawraparound error atau spatial aliasing error (Bovik, 2009). Hal ini
disebabkan pada kawasan frekuensi terdapat fungsi periodis (yang berulang
setelah jarak tertentu) yang membuatgambar akan diulang (seperti efek
pengubinan) dan akibatnya membuat interferensi pada konvolusi. Gambar 6.6(a)
menunjukkan dua citra yaitu f dan h.Adapun Gambar 6.6(b) menunjukkan operasi
konvolusi pada koordinat (m, n).Berdasarkan Gambar 6.6(b), piksel (m, n)
dihitung sebagai penjumlahan atas perkalian antara piksel di f dan h. Hasilnya
tentu saja mengandung kesalahan yaitu ketika perkalian antara f dan h yang
berulang ikut dijumlahkan.
Pengolahan Citra di Kawasan Frekuensi 185

Gambar 6.6Problem wraparound error

Untuk mengatasi wraparound error, fungsi f dan h dimodifikasi dengan cara


memperbesar ukurannya dan bagian yang diperluas diisi dengan nol. Cara
perluasan ukuran dan pemberian nilai nol seperti itu dinamakan sebagai zero
padding. Gambar 6.7(a) menunjukkan keadaan setelah zero padding dikenakan
pada citra f dan h. Adapun Gambar 6.7(b) menunjukkan bahwa konvolusi pada
suatu koordinat piksel tidak lagi mengandung wraparound error.
186 Pengolahan Citra, Teori dan Aplikasi

Gambar 6.7Efek zero padding pada konvolusi pengulangan

Gonzales, dkk. (2004) menjelaskan cara menentukan ukuran baru untuk citra
f dan h. Misalkan, f berukuran axb dan h berukuran cxd. Kedua fungsi tersebut
diperluas menjadi berukuran pxq. Maka, ukuran untuk p dan q harus memenuhi

p> a + c -1 (6.9)

dan
Pengolahan Citra di Kawasan Frekuensi 187

q>b + d -1 (6.10)

Apabila menggunakan FFT, nilai p dan q dipilih sehingga memenuhi

2r

dengan r adalah bilangan bulat. Dalam praktik, nilai p dan q acapkali dibuat sama,
yaitu sebesar r. Dengan kata lain, nilai r harus memenuhi persamaan berikut:

2r> a + c -1 (6.11)

dan

2r>b + d -1 (6.12)

Dengan asumsi bahwa ukuran citra f jauh lebih besar daripada citra h, satu
pendekatan yang biasa dilakukan untuk memperoleh nilai p dan q untuk
kepentingan zero padding menggunakan algoritma seperti berikut.

ALGORITMA 6.1 – Menentukan ukuran zero padding


Masukan:
• f dan h (masing-masing berupa citra berukuran a x b dan c x
d)

Keluaran:
• pxq (ukuran baru citra untuk f dan h)

1. m max(a, b)

2. Cari nilai r sehingga memenuhi 2r> 2m – 1

3. p 2q
4. q 2q
188 Pengolahan Citra, Teori dan Aplikasi

DiOctave dan MATLAB, nilai q berdasarkan Algoritma 6.1 dapat


diperoleh melalui:

nextpow2(2 * max(a, b))

Adapun contoh berikut menunjukkan pemakaian zero padding.

>>Fs = imread('C:\Image\kotatua.png');
>>Hs=fspecial('sobel');
>>size(Fs)
ans =

747500

>>Ff = fft2(Fs, 512, 512);


>>Hf = fft2(Hs, 512, 512);
>> G = Hf .* Ff;
>> F = real(ifft2(G));
>>Fx = F(1:250, 1:250);
>>imshow(uint8(Fx))

Pada contoh di atas, pengaturan 512 didasarkan pada perhitungan untuk zero
padding seperti yang telah dibahas di depan, mengingat ukuran citra berupa
250x250. Pada perintah di atas,

Fx = F(1:250, 1:250);

digunakan untuk mengambil citra seperti ukuran citra semula. Gambar 6.8
menunjukkan contoh citra yang diproses dan hasil pemfilteran.
Pengolahan Citra di Kawasan
K Frekuensi 189

oh pemfilteran dengan filter Sobel pada kaw


Gambar 6.8Contoh wasan frekuensi

Pada perintah
p di depan

Hs=fs
special('sobel');

diguna ngsi fspecial


nakan untuk memperoleh filter Sobel. Fung
disedia
diakan oleh paket Image Processing. Implemeentasi fungsi
Sobelyyang tidak menggunakan fspecial akan dibah
ahas pada Bab
10.

Skrip berikut ditu


itujukan untuk memudahkan dalam menangani
ni penapisan pada
kawasan frekuensi me
melalui FFT.

Program : filterdft.m

function F = filt
terdft(berkas, H)
% FILTERDFT Digun
nakan untuk melaksanakan pemfilteran
% pada kawasa
an frekuensi menggunakan FFT.
% Masukan:
% berkas - nama citra
% H - kern
nel pada kawasan spasial
% Keluaran:
% F - citr
ra yang telah difilter
190 Pengolahan Citra, Teori dan Aplikasi

Fs = double(imread(berkas));
[a, b] = size(Fs); %Peroleh ukuran citra

% Menentukan ukuran baru untuk perluasan citra


r = nextpow2(2 * max(a, b));
p = 2 ^ r;
q = p;

% Transformasi via FFT dengan zero padding


Ff = fft2(Fs, p, q);
Hf = fft2(H, p, q);

% Konvolusi
G = Hf .* Ff;

% Peroleh citra hasil pemfilteran


F = real(ifft2(G));
F = uint8(F(1:a, 1:b));

Akhir Program

Contoh penggunaan fungsi filterdft:

>>H = fspecial(’sobel’);
>>F=filterdft('C:\Image\kotatua.png', H);
>>imshow(F)

6.8 Filter Lolos-Rendah

Filter lolos-bawah (low-pass filter) adalah filter yang mempunyai sifat dapat
meloloskan yang berfrekuensi rendah dan menghilangkan yang berfrekuensi
tinggi. Efek filter ini membuat perubahan level keabuan menjadi lebih lembut.
Filter ini berguna untuk menghaluskan derau atau untuk kepentingan interpolasi
tepi objek dalam citra. Tiga jenis filter lolos-rendah dilihat pada Tabel 6.1.
Pengolahan Citra di Kawasan Frekuensi 191

Tabel 6.1Filter lolos-rendah


Filter Citra terkait
Ideal

Butterworth

Gaussian
192 Pengolahan Citra, Teor
ori dan Aplikasi

Jenis filter lolos


los-rendah pada kawasan frekuensi yang paling
pa sederhana
adalah yang dinamak
akan ILPF (Ideal Low Pass Filter). Filter inii memiliki fungsi
transfer seperti beriku
kut:

1 IC
IC J ., KJ M
G ., =H (6.13)
0 IC J
IC ., LJ

Dalam hal ini, D0 adalah


ad but radius filter,
bilangan non-negatif yang biasa disebu
yangmenentukan ambbang frekuensi, dan D(v,u) adalah jarak antar
tara (v,u) terhadap
pusat filter, yang diny
nyatakan dengan

J ., = √. + (6.14)

Skrip berikut meenunjukkan suatu fungsi yang ditujukan untukk memfilter citra
menggunakan ILPF.

Program : ilpf.m

function F = ilpf
f(berkas, d0)
% ILPF Digunakan untuk melaksanakan pemfilteran
% pada kawasa
an frekuensi menggunakan ILPF.
% Masukan:
% berkas - nama citra
% d0 - me
enentukan frekuensi ambang
% Keluaran:
% F - cit
tra yang telah difilter

Fs = double(imrea
ad(berkas));
[a, b] = size(Fs)
); %Peroleh ukuran citra

% Menentukan ukur
ran baru untuk perluasan citra
r = nextpow2(2 * max(a, b));
p = 2 ^ r;
q = p;

% Menentukan jang
gkauan frekuensi u dan v
u = 0:(p - 1);
v = 0:(q - 1);

% Hitung indeks untuk


u meshgrid
idx = find(u > q/
/2);
u(idx) = u(idx) - q;
idy = find(v > p/
/2);
v(idy) = v(idy) - p;
Pengolahan Citra di Kawasan Frekuensi 193

% Peroleh array meshgrid


[V, U] = meshgrid(v, u);

% Hitung jarak D(v,u)


D = sqrt(V.^2 + U.^2);

% Hitung frekuensi ambang sebesar d0 kalai lebar citra


ambang = d0 * q;

% Peroleh fungsi transfer


Hf = double(D <= ambang);

% Transformasi via FFT dengan zero padding


Ff = fft2(Fs, p, q);

% Pemfilteran
G = Hf .* Ff;

% Transformasi balik
F = real(ifft2(G));
F = uint8(F(1:a, 1:b));

Akhir Program

Contoh pemakaian fungsi ilpf:

>> F = ilpf('C:\Image\kotatua.png', 0.08); imshow(F)

Gambar 6.9 merupakan contoh penerapan IDLF untuk berbagai nilai d0 yang
diterapkan pada kotatua.png.
194 Pengolahan Citra, Teor
ori dan Aplikasi

Gambar 6.9Hasil penerapan ILPF

orth low pass filter) merupakan jenis filter lolos-rendah


BLPF (Butterwor lo yang
digunakan untuk mem
emperbaiki efek bergelombang yang dikenal
al dengan sebutan
ringing, yang diakiba
batkan oleh ILPF. Berbeda dengan ILPF, BLPF
PF tidak memiliki
titik diskontinu yangg ttajam. Fungsi transfernya berupa

G ., = (6.15)
NOP 7,
7 /PQ RST

Dalam hal ini, n dinam


amakan orde filter.
Skrip berikut meenunjukkan suatu fungsi yang ditujukan untuk
uk memfilter citra
menggunakan BLPF.

Program : blpf.m
Pengolahan Citra di Kawasan Frekuensi 195

function F = blpf(berkas, d0, n)


% BLPF Digunakan untuk melaksanakan pemfilteran
% pada kawasan frekuensi menggunakan BLPF.
% Masukan:
% berkas - nama citra
% d0 - menentukan frekuensi ambang
% n - menentukan faktor n
% Keluaran:
% F - citra yang telah difilter

Fs = double(imread(berkas));
[a, b] = size(Fs); %Peroleh ukuran citra

% Menentukan ukuran baru untuk perluasan citra


r = nextpow2(2 * max(a, b));
p = 2 ^ r;
q = p;

% Menentukan jangkauan frekuensi u dan v


u = 0:(p - 1);
v = 0:(q - 1);

% Hitung indeks untuk meshgrid


idx = find(u > q/2);
u(idx) = u(idx) - q;
idy = find(v > p/2);
v(idy) = v(idy) - p;

% Peroleh array meshgrid


[V, U] = meshgrid(v, u);

% Hitung jarak D(v,u)


D = sqrt(V.^2 + U.^2);

% Menentukan n kalau n tidak disebutkan


ifnargin == 2
n = 1;
end

ambang = d0 * p; % Hitung frekuensi ambang


Hf = 1 ./ (1 + D ./ ambang^(2 * n));

% Transformasi via FFT dengan zero padding


Ff = fft2(Fs, p, q);

% Pemfilteran
G = Hf .* Ff;

% Transformasi balik
F = real(ifft2(G));
F = uint8(F(1:a, 1:b));

Akhir Program
196 Pengolahan Citra, Teori dan Aplikasi

Contoh pemakaian fungsi blpf:

>>F=blpf('C:\Image\kotatua.png', 0.02, 0.3 );


>>imshow(F)

Gambar 6.10dan 6.11 merupakan contoh penerapan IDLF untuk berbagai nilai
d0dan nyang berbeda yang diterapkan pada kotatua.png.

Gambar 6.10 Hasil penerapan BLPF dengan N =1


Pengolahan Citra di Kawasan Frekuensi 197

Gambar 6.11 Hasil penerapan BLPF untuk berbagai N

GLPF (Gaussian low pass filter) merupakan filter lolos-rendah dengan fungsi
transfer seperti berikut:

US V,W
G ., = SXS (6.16)

denganY merupakan deviasi standar. Sebagai contoh, dengan menggunakan


Ysama dengan Do maka

US V,W
G ., = SUQ S (6.17)

Saat D(v,u) = D0, filter turun menjadi 0.607 terhadap nilai maksimum 1.
198 Pengolahan Citra, Teor
ori dan Aplikasi

Contoh berikut
ut merupakan fungsi yang digunakan un
untuk melakukan
pemfilteran dengan GLPF.
G

Program : glpf.m

function F = glpf
f(berkas, d0)
% GLPF Digunakan untuk melaksanakan pemfilteran
% pada kawasa
an frekuensi menggunakan GLPF.
% Masukan:
% berkas - nama citra
% d0 - men
nentukan frekuensi ambang
% Keluaran:
% F - citr
ra yang telah difilter

Fs = double(imrea
ad(berkas));
[a, b] = size(Fs)
); %Peroleh ukuran citra

% Menentukan ukur
ran baru untuk perluasan citra
r = nextpow2(2 * max(a, b));
p = 2 ^ r;
q = p;

% Menentukan jang
gkauan frekuensi u dan v
u = 0:(p - 1);
v = 0:(q - 1);

% Hitung indeks untuk


u meshgrid
idx = find(u > q/
/2);
u(idx) = u(idx) - q;
idy = find(v > p/
/2);
v(idy) = v(idy) - p;

% Peroleh array meshgrid


m
[V, U] = meshgrid
d(v, u);

% Hitung jarak D(
(v,u)
D = sqrt(V.^2 + U.^2);
U

% Menentukan n ka
alau n tidak disebutkan
ifnargin == 2
n = 1;
end

ambang = d0 * p; % Hitung frekuensi ambang


Hf = exp(-(D.^2) ./ (2 * ambang ^ 2));

% Transformasi vi
ia FFT dengan zero padding
Ff = fft2(Fs, p, q);

% Pemfilteran
G = Hf .* Ff;

% Transformasi ba
alik
Pengolahan Citra di Kawasan Frekuensi 199

F = real(ifft2(G));
F = uint8(F(1:a, 1:b));

Akhir Program

Contoh pemakaian fungsi di glpf:

>>F=glpf('C:\Image\kotatua.png', 0.05);
>>imshow(F)

Gambar 6.12 merupakan contoh penerapan GLPF untuk berbagai nilai d0 yang
diterapkan pada kotatua.png.

Gambar 6.12 Hasil penerapan filter GLPF


200 Pengolahan Citra, Teori dan Aplikasi

6.9 Filter Lolos-Tinggi

Filter lolos-tinggi adalah filter yang ditujukan untuk menekan frekuensi


rendah hingga frekuensi tertentu dan meloloskan frekuensi lainnya. Filter ini
memiliki hubungan dengan filter lolos-rendah seperti berikut:

GZ[ ., = 1 − GZ\ ., (6.18)

Dengan Hlt(v,u) adalah fungsi transfer filter lolos-tinggi dan Hlf(v,u) adalah fungsi
transfer filter lolos-rendah.
Tiga jenis filter lolos-tinggi dilihat di Tabel 6.3. Ketiga filter yang tercantum
dalam tersebut yaitu IHPF (Ideal high pass filter), BHPF (Butterworth high pass
filter), dan GHPF (Gaussian high pass filter).

Tabel 6.3 Filter lolos-tinggi


Filter Citra terkait
Ideal

Butterworth
Pengolahan Citra di Kawasan
K Frekuensi 201

Filter Citra terkait


Gaussian

Contoh berikutt menunjukkan implementasi filter BHPF untuk


u memfilter
citra.

Program : bhpf.m

function F = bhpf
f(berkas, d0, n)
% BHPF Digunakan untuk melaksanakan pemfilteran
% pada kawasa
an frekuensi menggunakan BHPF.
% Masukan:
% berkas - nama citra
% d0 - men
nentukan frekuensi ambang
% n - mene
entukan faktor n
% Keluaran:
% F - citr
ra yang telah difilter

Fs = double(imrea
ad(berkas));
[a, b] = size(Fs)
); %Peroleh ukuran citra

% Menentukan ukur
ran baru untuk perluasan citra
r = nextpow2(2 * max(a, b));
p = 2 ^ r;
q = p;

% Menentukan jang
gkauan frekuensi u dan v
u = 0:(p - 1);
v = 0:(q - 1);

% Hitung indeks untuk


u meshgrid
idx = find(u > q/
/2);
u(idx) = u(idx) - q;
202 Pengolahan Citra, Teori dan Aplikasi

idy = find(v > p/2);


v(idy) = v(idy) - p;

% Peroleh array meshgrid


[V, U] = meshgrid(v, u);

% Hitung jarak D(v,u)


D = sqrt(V.^2 + U.^2);

% Menentukan n kalau n tidak disebutkan


ifnargin == 2
n = 1;
end

ambang = d0 * p; % Hitung frekuensi ambang


Hlr = 1 ./ (1 + (D ./ ambang) .^(2 * n)); % Lolos-rendah
Hlt = 1 - Hlr; % Lolos-tinggi

% Transformasi via FFT dengan zero padding


Ff = fft2(Fs, p, q);

% Pemfilteran
G = Hlt .* Ff;

% Transformasi balik
F = real(ifft2(G));
F = uint8(F(1:a, 1:b));

Akhir Program

Contoh pemakaian fungsi blpf:

>> F=bhpf('C:\Image\goldhill.png', 0.005, 1 );


>>imshow(F)

Gambar 6.13 menunjukkan gambar asli dan hasil pemrosesan dengan perintah di
atas.
Pengolahan Citra di Kawasan Frekuensi 203

Gambar 6.13 Pemfilteran dengan BHPF

Hasil pada Gambar 6.13(b) menunjukkan bahwa penerapan BHPF pada citra
membuat latarbelakang menjadi hampir hilang, karena nilai intensitas reratanya
hilang (menjadi nol).

6.10 Pemfilterandengan Pendekatan High Frequency Emphasis

Penerapan filter lolos-tinggi dengan cara yang telah dibahas menimbulkan


efek berupa hilangnya latarbelakang. Hal ini disebabkan pemfilteran dengan cara
tersebut menghilangkan komponen DC (F(0,0)).
Nah, untuk mengatasi hal itu, terdapat pendekatan yang dinamakan
pemfilteran high frequency emphasis (HFE). Dalam hal ini, penonjolan frekuensi
tinggi diatur melalui rumus:

G]^_ ., = C + `GZ[ ., (6.19)

Dalam hal ini,

• Hlt adalah fungsi transfer filter lolos-tinggi;


• a adalah nilai ofset, sebagai penambah nilai rerata intensitas;
• b adalah nilai pengali, untuk meningkatkan kontras.
204 Pengolahan Citra, Teor
ori dan Aplikasi

Gonzales, dkk. (200


004) menunjukkan bahwa penggunaan a seb
ebesar 0,5 dan b
sebesar 2 memberika
ikan hasil yang memuaskan pada citra medis
is. Nilai a dan b
itulah yang dicoba dig
digunakan pada program berikut.

Program : hfe.m

function F = hfe(
(berkas, d0, n)
% HFE Digunakan untuk
u melaksanakan pemfilteran
% pada kawasa
an frekuensi menggunakan BHPF
% dan menerap
pkan HFE (High frequency emphasis).
% Masukan:
% berkas - nama citra
% d0 - men
nentukan frekuensi ambang
% n - mene
entukan faktor n
% Keluaran:
% F - citr
ra yang telah difilter

Fs = double(imrea
ad(berkas));
[a, b] = size(Fs)
); %Peroleh ukuran citra

% Menentukan ukur
ran baru untuk perluasan citra
r = nextpow2(2 * max(a, b));
p = 2 ^ r;
q = p;

% Menentukan jang
gkauan frekuensi u dan v
u = 0:(p - 1);
v = 0:(q - 1);

% Hitung indeks untuk


u meshgrid
idx = find(u > q/
/2);
u(idx) = u(idx) - q;
idy = find(v > p/
/2);
v(idy) = v(idy) - p;

% Peroleh array meshgrid


m
[V, U] = meshgrid
d(v, u);

% Hitung jarak D(
(v,u)
D = sqrt(V.^2 + U.^2);
U

% Menentukan n ka
alau n tidak disebutkan
ifnargin == 2
n = 1;
end

ambang = d0 * p; % Hitung frekuensi ambang


Hlr = 1 ./ (1 + (D
( ./ ambang) .^(2 * n)); % Lolos-ren
ndah
Hlt = 1 - Hlr; % Lolos-tin
nggi

% Proses HFE
Hfe = 0.5 + 2 * Hlt;
H
Pengolahan Citra di Kawasan Frekuensi 205

% Transformasi via FFT dengan zero padding


Ff = fft2(Fs, p, q);

% Pemfilteran
G = Hfe .* Ff;

% Transformasi balik
F = real(ifft2(G));
F = uint8(F(1:a, 1:b));

Akhir Program

Contoh penggunaan fungsi hfe:

>> F=hfe('C:\Image\goldhill.png', 0.05, 1 );


>>imshow(F)

Gambar 6.14 menunjukkan gambar asli goldhill.png dan hasil pemrosesan di atas.

Gambar 6.14Hasil penerapan high frequency emphasis

Terlihat bahwa terjadi penonjolan citra tanpa menghilangkan latarbelakang.


206 Pengolahan Citra, Teori dan Aplikasi

Latihan

1. Berikan beberapa contoh transformasi yang mengalihkan ke kawasan


frekuensi.
2. Terdapat data seperti berikut:

f(x) = (3, 4, 4, 5)

Hitunglah transformasi FourierF(0) hingga F(3).


3. Jelaskan maksud istilah berikut.
(a) Spektrum Fourier
(b) Spektrum daya (power spectrum)
4. Apa yang Anda ketahui mengenai FFT?
5. Apa kegunaan fungsi fftshift?
6. Jelaskan yang dimaksud dengan istilah berikut.
(a) Filter lolos-rendah
(b) Filter lolos-tinggi
7. Apa yang dimaksud dengan wraparound error? Jelaskan cara mengatasinya.
8. Apa yang dimaksud dengan filter-filter berikut?
(a) ILPF
(b) BLPF
(c) GLPF
(d) IHPF
(e) BHPF
(f) GHPF
(g) HFE
9. Buatlah fungsi bernama fillrb dengan 4 buah argumen yang secara
berturut-turut menyatakan matriks citra, frekuensi ambang, dan orde filter.
Fungsi tersebut memberikan nilai balik berupa fungsi transfer filter lolos-
rendah tipe Butterworth. Bantuan: modifikasilah berdasarkan blpf.m.
Pengolahan Citra di Kawasan Frekuensi 207

10. Gambarkan fungsi transfer fillrb pada Soal 9 dengan menggunakan f.


Sebagai contoh, gunakan citra boneka2.png, dengan frekuensi sebesar 0,1, dan
orde filter sebesar 1.
Bantuan: Misalkan, H adalah fungsi transfer yang dihasilkan oleh fillrb,
maka Anda bisa menyajikan filter transfer dengan menggunakan perintah
berikut:

mesh(fftshift(H));
colormap(jet);

11. Dengan menggunakan fungsi fillrb (Soal 9), bagaimana kalau dikehendaki
untuk memperoleh fungsi transfer filter lolos-tinggi Butterworth?
208 Pengolahan Citra, Teori dan Aplikasi
BAB 7
Morfologi untuk
Pengolahan Citra

Setelah bab ini berakhir, diharapkan pembaca memahami


berbagai hal berikut dan mampu mempraktikkannya.
Pengertian operasi morfologi
Matematika yang melatarbelakangi
Operasi dilasi
Operasi erosi
Bentuk dan ukuran elemen penstruktur
Operasi opening
Operasi closing
Transformasi Hit-or-Miss
Skeleton
Thickening
Convex hull
Transformasi Top-Hat
Transformasi Bottom-Hat
210 Pengolahan Citra, Teori dan Aplikasi

7.1 Pengertian Operasi Morfologi

Operasi morfologi merupakan operasi yang umum dikenakan pada citra


biner (hitam-putih) untuk mengubah struktur bentuk objek yang terkandung dalam
citra.Sebagai contoh, lubang pada daun dapat ditutup melalui operasi morfologi
sebagaimana ditunjukkan pada Gambar 7.1.Objek-objek daun yang saling
berhimpitan pun dapat dipisahkan melalui morfologi, sebagaimana ditunjukkan
pada Gambar 7.2. Beberapa contoh lainaplikasi morfologi adalah sebagai berikut.
• Membentuk filter spasial, seperti yang telah dibahas pada Bab 6.
• Memperoleh skeleton (rangka) objek.
• Menentukan letak objek di dalam citra.
• Memperoleh bentuk struktur objek.

Gambar 7.1Tulang daun dapat dianggap sebagai bagian daun


melalui morfologi
Morfologi untuk Pengolahan Citra 211

Gambar 7.2 Daun-daun yang bersinggungan dapat dipisahkan


melalui morfologi, yang memperkecil ukurannya

Operasi morfologi sesungguhnya juga dapat dikenakan pada


citra aras keabuan. Pembicaraan mengenai hal ini dilakukan di
bagian akhir di bab ini.

Inti operasi morfologi melibatkan dua larik piksel. Larik pertama berupa
citra yang akan dikenai operasi morfologi, sedangkan larik kedua dinamakan
sebagai kernel atau structuring element(elemen penstruktur) (Shih, 2009). Contoh
kernel ditunjukkan pada Gambar 7.3. Pada contoh tersebut, piksel pusat (biasa
diberi nama hotspot) ditandai dengan warna abu-abu. Piksel pusat ini yang
menjadi pusat dalam melakukan operasi terhadap citra, sebagaimana
diilustrasikan pada Gambar 7.4.

0 1 0 1 1 1 1 1 1
1 1 1 1 1 1 1 1 1
0 1 0 1 1 1 1
1
1 1 1 1 1 1 1 1 1 1

Gambar 7.3Contoh beberapa kernel


212 Pengolahan Citra, Teori dan Aplikasi

Hotspot

0 1 0
Citra
1 1 1
0 1 0

Kernel

Gambar 7.4Operasi kernel terhadap citra

Dua operasi yang mendasari morfologi yaitu dilasi dan erosi. Dua operasi
lain yang sangat berguna dalam pemrosesan citra adalahopening dan closing
dibentuk melalui dua operasi dasar itu.

7.2 Matematika yang Melatarbelakangi

Untuk memahami operasi morfologi, pemahaman terhadap operasi


himpunan seperti interseksi dan gabungan mutlak diperlukan. Selain itu,
pemahaman terhadap operasi logika, seperti “atau” dan ‘dan” juga diperlukan.

7.2.1 Teori Himpunan

Misalkan, terdapat himpunan A yang berada di dalam bidang Z2


(berdimensi dua). Apabila a=(a1, a2) adalah suatu elemen atau anggota di dalam
A, adapat ditulis menjadi

∈ (7.1)

Arti notasi di atas, a adalah anggota himpunan A. kebalikannya, jika a bukan


anggota himpunan A, a ditulis seperti berikut:

∉ (7.2)
Morfologi untuk Pengolahan Citra 213

Sebagai contoh, s = (1, 2) dan t = (1, 4), sedangkan himpunan A berisi seperti
berikut:

A = { (1,1), (1,2), (1, 3), (2, 1), (2, 2) }

Pada contoh tersebut, A memiliki 5 anggota. Berdasarkan contoh tersebut, dapat


dituliskan fakta berikut:


Perlu diketahui, setiap elemen hanya dapat menjadi anggota himpunan satu kali.
Dengan demikian,

A = {(1,1), (1,1), (2,1), (2,3), (2,1)}

sesungguhnya hanya mempunyai 3 anggota,yaitu

A = {(1,1), (2,1), (2,3)}

Notasi φ biasa terdapat dalam pembicaraan himpunan. Simbol tersebut


menyatakan himpunan kosong, yaitu himpunan yang tidak memiliki anggota
sama sekali.
Apabila A dan B adalah himpunan dan setiap anggota himpunan B
merupakan anggota himpunan A, dikatakan bahwa B adalah subhimpunan A.
Notasi yang biasa digunakan untuk kepentingan ini:

B⊆A (7.3)

Union adalah penggabungan dari dua buah himpunan. Misalnya:

C = A ∪B (7.4)
214 Pengolahan Citra, Teori dan Aplikasi

yangmenyatakan bahwa C memiliki anggota berupa semua anggota A ditambah


dengan semua anggota B. Gambar 7.5 memperlihatkan contoh nilai-nilai piksel
penyusun dua citra biner dan menunjukkan hasil operasi union. Semua nilai 1
pada citra tersebut menyatakan anggota himpunan baru, yang cenderung meluas.

1 2 3 4 5 1 2 3 4 5

1 0 1 0 0 0 1 1 0 0 0
2 0 1 1 0 0 0 1 0 0 0
3 0 1 1 1 0 0 0 1 0 0
4 0 1 1 0 0 0 1 0 0 0
5 0 1 0 0 0 1 0 0 0 0

A={(1,2), (2,2), (2,3), B={(1,1), (2,1), (2,2),


(3,2), (3,3), (3,4), (3,3), (4,2), (5,1)}
(4,2), (4,3), (5,2)}

C=A∪B

1 1 0 0 0
0 1 1 0 0
0 1 1 1 0
0 1 1 0 0
1 1 0 0 0

C={(1,1), (1,2), (2,2), (2,3), (3,2), (3,3),(3,4)


(4,2), (4,3), (5,1), (5,2)}

Gambar 7.5Operasi union pada citra biner

Interseksimenyatakan operasi yang menghasilkan himpunan semua


anggota yang terdapat di kedua himpunan. Misalnya:

C = A∩B (7.5)

berarti bahwa C berisi anggota-anggota yang ada di himpunan A dan juga terdapat
di himpunan B. Hasilnya cenderung menyempit. Contoh dapat dilihat pada
Gambar 7.6.
Morfologi untuk Pengolahan Citra 215

1 2 3 4 5 1 2 3 4 5

1 0 1 0 0 0 1 1 0 0 0
2 0 1 1 0 0 0 1 0 0 0
3 0 1 1 1 0 0 0 1 0 0
4 0 1 1 0 0 0 1 0 0 0
5 0 1 0 0 0 1 0 0 0 0

A={(1,2), (2,2), (2,3), B={(1,1), (2,1), (2,2),


(3,2), (3,3), (3,4), (3,3), (4,2), (5,1)}
(4,2), (4,3), (5,2)}

C=A∩B

1 1 0 0 0
0 1 1 0 0
0 1 1 1 0
0 1 1 0 0
1 1 0 0 0

C={(1,2), (2,2), (3,3), (4,1)}

Gambar 7.6Operasi interseksi pada citra biner

Komplemen himpunanA biasa dinotasikan dengan Ac dan menyatakan


semua elemen yang tidak terdapat pada A. Secara matematis, komplemen ditulis
seperti berikut:

Ac = { w | w ∉ A } (7.6)

Notasi di atas dibaca “semua elemen yang tidak menjadi anggota A”.
Komplemen atau juga disebut inversi dapat dibayangkan seperti saling
menukarkan warna hitam dan putih.Nilai yang semula berupa nol diganti satu dan
nilai satu diganti dengan nol. Contoh dapat dilihat di Gambar 7.7.Di bidang
fotografi dengan film, inversi menghasilkan gambar negatif. Istilah komplemen
juga berarti ”pelengkap”, karena bila A digabung dengan operasi union akan
menyempurnakan citra menjadi citra yang semua pikselnya bernilai 1.
216 Pengolahan Citra, Teori dan Aplikasi

1 2 3 4 5 1 2 3 4 5

1 0 1 0 0 0 1 0 1 1 1
2 0 1 1 0 0 1 0 0 1 1
3 0 1 1 1 0 1 0 0 0 1
4 0 1 1 0 0 1 0 0 1 1
5 0 1 0 0 0 1 0 1 1 1

A={(1,2), (2,2), (2,3), Ac = {(1,1), (1,3), (1,4),


(3,2), (3,3), (3,4), (1,5), (2,1), (2,4),
(4,2), (4,3), (5,2)} (2,5), (3,1), (3,5),
(4,1), (4,4), (4,5),
(5,1), (5,3), (5,4), (5,5)}

Gambar 7.7Operasi komplemen

Operasi selisih dua himpunan dapat ditulis seperti berikut:

A – B = { w | w ∈ A, w ∉ B } = A ∩Bc (7.7)

Contoh ditunjukkan di Gambar 7.8.


Morfologi untuk Pengolahan Citra 217

1 2 3 4 5 1 2 3 4 5

1 0 1 0 0 0 1 1 0 0 0
2 0 1 1 0 0 0 1 0 0 0
3 0 1 1 1 0 0 0 1 0 0
4 0 1 1 0 0 0 1 0 0 0
5 0 1 0 0 0 1 0 0 0 0

A={(1,2), (2,2), (2,3), B={(1,1), (2,1), (2,2),


(3,2), (3,3), (3,4), (3,3), (4,2), (5,1)}
(4,2), (4,3), (5,2)}

C=A-B C=B-A

0 0 0 0 0 1 0 0 0 0
0 0 1 0 0 0 0 0 0 0
0 0 0 1 0 0 0 0 0 0
0 0 1 0 0 0 0 0 0 0
0 1 0 0 0 1 0 0 0 0

C = { (2,3), (3,4), C = { (1,1), (5,1) }


(4,3), (5,2) }

Gambar 7.8Contoh selisih dua himpunan

Contoh di atas menunjukkan bahwa A – B ≠ B – A.


Refleksi B dinotasikan dengan dan didefinisikan sebagai berikut:

= | =− , ∈ (7.8)

Refleksi sebenarnya menyatakan percerminan terhadap piksel pusat. Contoh


ditunjukkan pada Gambar 7.9. Bayangan cermin 2-D terjadi melalui pencerminan
pada arah x dan dilanjutkan pada arah y. namun, ternyata hasilnya sama dengan
pemutaran di bidang citra 180o.
218 Pengolahan Citra, Teori dan Aplikasi

1 2 3 4 5 1 2 3 4 5

1 0 0 0 0 0 0 0 0 0 0
2 0 1 1 0 0 0 0 0 0 0
3 0 1 1 1 0 0 1 1 1 0
4 0 0 0 0 0 0 0 1 1 0
5 0 0 0 0 0 0 0 0 0 0

A={(2,2), (2,3), (3,2), = {(3,2), (3,3), (3,4),


(3,3), (3,4)} (4,3), (4,4)}

Gambar 7.9Contoh refleksi

Translasi himpunan A terhadap titik z=(z1, z2) disimbolkan dengan (A)z.


Definisinya sebagai berikut:

( ) = | = + , ∈ (7.9)

Contoh dapat dilihat pada Gambar 7.10.

1 2 3 4 5 1 2 3 4 5

1 0 0 0 0 0 0 0 0 0 0
2 0 1 1 0 0 0 0 0 0 0
3 0 1 1 1 0 0 0 0 0 0
4 0 0 0 0 0 0 0 1 1 0
5 0 0 0 0 0 0 0 1 1 1

A={(2,2), (2,3), (3,2), (A)(2,1) = {(4,3), (4,4), (5,3),


(3,3), (3,4)} (5,4), (5,5)}

Gambar 7.10Contoh translasi satu pikselke kanan dan


dua piksel ke bawah

7.2.2 Operasi Nalar

Operator nalar didasarkan pada aljabar Boolean.Sebagaimana diketahui,


aljabar Boolean adalah pendekatan matematis yang berhubungan dengan nilai
kebenaran (benar atau salah). Ada tiga operator nalar dasar yang akan dibahas,
Morfologi untuk Pengolahan Citra 219

yaitu AND, OR, serta NOT. Tabel kebenaran ketiga operator tersebut dapat dilihat
pada Tabel 7.1 dan 7.2.
Operasi AND melibatkan dua masukan dan mempunyai sifat bahwa hasil
operasinya bernilai 1 hanya jika kedua masukan bernilai 1. Pada operasi OR, hasil
berupa 1 kalau ada masukan yang bernilai 1. Berbeda dengan AND dan OR,
operasi NOT hanya melibatkan satu masukan. Hasil NOT berupa 1 kalau masukan
berupa 0 dan sebaliknya akan menghasilkan nilai 0 kalau masukan berupa 1.

Tabel 7.1Tabel kebenaran AND dan OR

Masukan 1 Masukan 2 AND OR


0 0 0 0
0 1 0 1
1 0 0 1
1 1 1 1

Tabel 7.2Tabel kebenaran NOT

Masukan Keluaran
0 1
1 0

Selain ketiga operator yang disebut di depan, operator lain yang kadang-
kadang digunakan adalah XOR dan NAND. Sifat XOR dan NAND ditunjukkan
pada Tabel 7.3.

Tabel 7.3Tabel kebenaran XOR dan NAND

Masukan 1 Masukan 2 XOR NAND


0 0 0 1
0 1 1 1
1 0 1 1
1 1 0 0
220 Pengolahan Citra, Teori dan Aplikasi

Berbagai efek operasi AND, OR, NOT, XOR, dan NAND ditunjukkan
pada Gambar 7.11. Adapun program yang digunakan untuk membentuk operasi
tersebut dapat dilihat pada nalar.m.

Gambar 7.1 Hasil-hasil operasi nalar atas dua buah citra A dan B

Program : nalar.m

% NALAR Contoh penggunaan NOT, AND, OR, XOR, dan


% kombinasinya.

Lingkaran = imread('C:\Image\lingkaran.png');
Persegi = imread('C:\Image\persegi.png');

close all;

Citra1 = Lingkaran;
subplot(3,3,1); imshow(Citra1, [0 1]);
title('A');

Citra2 = Persegi;
subplot(3,3,2); imshow(Citra2, [0 1]);
title('B');
Morfologi untuk Pengolahan Citra 221

Citra3 = not(Lingkaran);
subplot(3,3,3); imshow(Citra3, [0 1]);
title('not(A)');

Citra4 = and(Lingkaran, Persegi);


subplot(3,3,4); imshow(Citra4, [0 1]);
title('and(A, B)');

Citra5 = xor(Lingkaran, Persegi);


subplot(3,3,5); imshow(Citra5, [0 1]);
title('xor(A, B)');

Citra6 = or(Lingkaran, Persegi);


subplot(3,3,6); imshow(Citra6, [0 1]);
title('or(A, B)');

Citra7 = not(and(Lingkaran, Persegi));


subplot(3,3,7); imshow(Citra7, [0 1]);
title('not(and(A, B))');

Citra8 = not(xor(Lingkaran, Persegi));


subplot(3,3,8); imshow(Citra8, [0 1]);
title('not(xor(A, B))');

Citra9 = not(or(Lingkaran, Persegi));


subplot(3,3,9); imshow(Citra9, [0 1]);
title('not(or(A, B))');

Akhir Program

7.3Operasi Dilasi

Operasi dilasi biasa dipakai untuk mendapatkan efek pelebaran terhadap


piksel yang bernilai 1. Operasi ini dirumuskan seperti berikut (Gonzales &
Woods, 2002):

A⊕B = | ∩ ∁ " (7.10)

Dalam hal ini,

a) = | =− , ∈
b) ( ) = | = + , ∈
c) z=(z1, z2)
222 Pengolahan Citra, Teori dan Aplikasi

Burger & Burge (2008) mendefinisikan operasi dilasi sebagai berikut:

A⊕B = | = + , dengan ∈ ( ∈ (7.11)

Hasil dilasi berupa penjumlahan seluruh pasangan koordinat dari I dan H.


Contoh operasi dilasi dengan menggunakan Persamaan 7.11dapat dilihat
pada Gambar 7.11. Pada contoh tersebut,

A = { (2,2), (2,3), (2,4), (3,2), (3,3), (3,4), (4,3) }


B = { (-1, 0), (0,0), (1,0) }

Dengan demikian,

A⊕B = { (2,2) + (-1, 0) , (2,2) + (0, 0) + (2,2) + (1, 0),


(2,3) + (-1, 0) , (2,3) + (0, 0) + (2,3) + (1, 0),
(2,4) + (-1, 0) , (2,4) + (0, 0) + (2,4) + (1, 0),
(3,2) + (-1, 0) , (3,2) + (0, 0) + (3,2) + (1, 0),
(3,3) + (-1, 0) , (3,3) + (0, 0) + (3,3) + (1, 0),
(3,4) + (-1, 0) , (3,4) + (0, 0) + (3,4) + (1, 0),
(4,3) + (-1, 0) , (4,3) + (0, 0) + (4,3) + (1, 0) }
= { (1,2), (2,2), (3,2), (1,3), (2,3), (3,3),
(1,4), (2,4), (3,3), (2,2), (3,2), (4,2),
(2,3), (3,3), (4,3), (2,4), (3,4), (4,4),
(3,3), (4,3), (5,3) }
= { (1,2), (1,3), (1,4), (2,2), (2,3), (2,4),
(3,2), (3,3), (3,4), (4,2), (4,3), (4,4), (5,3) }
Morfologi untuk Pengolahan Citra 223

1 2 3 4 5 -1 0 1
1 -1
2 0
3 1
4
5

A B

Hotspot vertikal

Penambahan piksel akibat dilasi

A⊕B

Gambar 7.11Efek dilasi dengan hotspot vertikal

Operasi dilasi bersifat komutatif. Artinya,

A⊕B = B⊕A

Selain itu, operasi dilasi bersifat asosiatif. Artinya,

(A⊕B) ⊕C = A⊕ (B ⊕C)

Algoritma untuk melakukan operasi dilasi berdasar Persamaan 7.11


ditunjukkan berikut ini.
224 Pengolahan Citra, Teori dan Aplikasi

ALGORITMA 7.1 – Operasi dilasi

Masukan:
• f (citra berukuran m x n)
• h (elemen penstruktur berukuran s x t)
• hoty (ordinat hotspot -> nomor baris)
• hotx (absis hotpsot -> nomor kolom)

Keluaran:
• g (citra berukuran m x n yang menyatakan hasil operasi
dilasi)

1. g(i,j) nol (untuk semua i dan j)

2. Cari nilai r sehingga memenuhi 2r> 2m – 1

3. p 2q
4. q 2q

Implementasi dalam bentuk program dapat dilihat berikut ini.

Program : dilasi.m

function G = dilasi(F, H, hotx, hoty)


% DILASI Berguna untuk melaksanakan operasi dilasi.
% Masukan:
% F = citra yang akan dikenai dilasi
% H = elemen pentruksur
% (hy, hx) koordinat pusat piksel

[th, lh]=size(H);
[tf, lf]=size(F);

if nargin < 3
hotx = round(lh/2);
hoty = round(th/2);
Morfologi untuk Pengolahan Citra 225

end

Xh = [];
Yh = [];
jum_anggota = 0;

% Menentukan koordinat piksel bernilai 1 pada H


for baris = 1 : th
for kolom = 1 : lh
if H(baris, kolom) == 1
jum_anggota = jum_anggota + 1;
Xh(jum_anggota) = -hotx + kolom;
Yh(jum_anggota) = -hoty + baris;
end
end
end

G = zeros(tf, lf); % Nolkan semua pada hasil dilasi

% Memproses dilasi
for baris = 1 : tf
for kolom = 1 : lf
for indeks = 1 : jum_anggota
if F(baris, kolom) == 1
xpos = kolom + Xh(indeks);
ypos = baris + Yh(indeks);
if (xpos >= 1) && (xpos <= lf) && ...
(ypos >= 1) && (ypos <= tf)
G(ypos, xpos) = 1;
end
end
end
end
end

Akhir Program

Contoh penggunaan fungsi dilasi ditunjukkan di bawah ini.

>> F = [ 0 0 0 0 0 0 0
0 0 0 0 0 0 0
0 0 1 1 1 1 0
0 0 1 1 1 1 0
0 0 0 1 1 1 0
0 0 0 0 0 0 0
0 1 1 0 0 0 0
0 0 0 0 0 0 0];
226 Pengolahan Citra, Teori dan Aplikasi

>> H = [0 1 0; 1 1 1; 0 1 0];
>> G = dilasi(F,H)
G =

0 0 0 0 0 0 0
0 0 1 1 1 1 0
0 1 1 1 1 1 1
0 1 1 1 1 1 1
0 0 1 1 1 1 1
0 1 1 1 1 1 0
1 1 1 1 0 0 0
0 1 1 0 0 0 0

>>

Contoh pada Gambar 7.11 diproses dengan cara seperti berikut:

>> F = [ 0 0 0 0 0;
0 1 1 1 0;
0 1 1 1 0;
0 1 0 0 0;
0 0 0 0 0];
>> H = [0 1 0
0 1 0
0 1 0];
>> G = dilasi(F,H)
G =

0 1 1 1 0
0 1 1 1 0
0 1 1 1 0
0 1 1 1 0
0 1 0 0 0
Morfologi untuk Pengolahan Citra 227

>>

Dengan menggunakan data F dan H di atas, perintah berikut dapat dicoba:

>> G = dilasi(F,H, 2, 1)
G =

0 0 0 0 0
0 1 1 1 0
0 1 1 1 0
0 1 1 1 0
0 1 1 1 0
>>

Angka 2 dan 1 pada argumen fungsi dilasi menyatakan bahwa hotspot pada H
terletak pada kolom kedua dan baris pertama.Jadi, yang berfungsi sebagai hotspot
adalah nilai 1 pada H yang terletak paling atas, bukan yang di tengah.Mengapa
hasilnya seperti itu? Cobalah untuk menganalisisnya. Perlu diketahui, pada saat
menentukan posisi hotspot, pemetaan seperti pada Gambar 7.12 harus digunakan.

1 2 3
1
2
3

Hotspot dengan:
hx = 2
hy = 1

Gambar 7.12Penentuan hotspot menggunakan acuan


angka 1 untuk pojok kiri atas kernel
228 Pengolahan Citra, Teori dan Aplikasi

Untuk melihat efek dilasi pada citra, kode berikut dapat dicoba.

>>close all;
>>Bravo = imread('C:\image\bravo.png');
>> BW = im2bw(Bravo, 0.5);
>> H = ones(4);
>> imshow(dilasi(BW, H));
>>

Gambar asli dan hasil operasi dilasi dapat dilihat pada Gambar 7.13.
Gambar 7.13(a) menyatakan gambar asli. Gambar 7.13(b) adalah hasil konversi
ke bentuk biner dengan menggunakan fungsi bawaan bernama im2bw. Gambar
7.13(c) adalah hasil dilasi melalui perintah di depan. Hasil tersebut diperoleh
dengan menggunakan struktur elemen berukuran 4 x 4 yang keseluruhan bernilai
1. Hal itu diperoleh melalui ones(4). Adapun Gambar 7.13(d) adalah hasil kalau
elemen penstruktur yang digunakan (H) berukuran 7x7 dengan seluruh elemen
bernilai 1.
Morfologi untuk Pengolahan Citra 229

Gambar 7.13Contoh operasi dilasi pada citra

7.4 Operasi Erosi

Operasi erosi mempunyai efek memperkecil struktur citra. Operasi ini


dirumuskan seperti berikut (Gonzalez & Woods, 2002).

A ΘB = |( ) ⊆ (7.12)
230 Pengolahan Citra, Teori dan Aplikasi

Adapun Burger & Burge (2008) mendefinisikan erosi sebagai berikut:

AΘB = ) ∈ * + | ( + ) ∈ ,, - . ) ∈ (7.13)

Makna yang tersirat padaPersamaan 7.12 dan 7.13sebenarnya sama. Berdasarkan


Persamaan 7.13, posisi p terdapat pada AΘB jika seluruh nilai 1 di B terkandung
di posisi p tersebut.Implementasi fungsi erosi berikut didasarkan makna di atas.

Program : erosi.m

function G = erosi(F, H, hotx, hoty)


% EROSI Berguna untuk melaksanakan operasi erosi.
% Masukan:
% F = citra yang akan dikenai dilasi
% H = elemen pentruksur
% (hy, hx) koordinat pusat piksel

[th, lh]=size(H);
[tf, lf]=size(F);

if nargin < 3
hotx = round(lh/2);
hoty = round(th/2);
end

Xh = [];
Yh = [];
jum_anggota = 0;

% Menentukan koordinat piksel bernilai 1 pada H


for baris = 1 : th
for kolom = 1 : lh
if H(baris, kolom) == 1
jum_anggota = jum_anggota + 1;
Xh(jum_anggota) = -hotx + kolom;
Yh(jum_anggota) = -hoty + baris;
end
end
end

G = zeros(tf, lf); % Nolkan semua pada hasil erosi

% Memproses erosi
for baris = 1 : tf
for kolom = 1 : lf
cocok = true;
for indeks = 1 : jum_anggota
Morfologi untuk Pengolahan Citra 231

xpos = kolom + Xh(indeks);


ypos = baris + Yh(indeks);
if (xpos >= 1) && (xpos <= lf) && ...
(ypos >= 1) && (ypos <= tf)
if F(ypos, xpos) ~= 1
cocok = false;
break;
end
else
cocok = false;
end
end

if cocok
G(baris, kolom) = 1;
end
end
end

Akhir Program

Contoh penggunaan fungsi erosi dapat dilihat berikut ini.

>> F =[ 0 0 0 0 0
0 1 1 1 0
0 1 1 1 0
0 1 0 0 0
0 0 0 0 0];

>>H = [0 1 0
0 1 0
0 1 0];

>> G = erosi(F, H)
G =

0 0 0 0 0
0 0 0 0 0
0 1 0 0 0
0 0 0 0 0
0 0 0 0 0

>>
232 Pengolahan Citra, Teori dan Aplikasi

Gambar berikut memperlihatkan bentuk visual untuk contoh di atas.

Hanya ini yang cocok dengan


elemen penstruktur

A B

AΘB

Gambar 7.14 Contoh visualisasi operasi erosi

Operasi erosi bersifat komutatif. Artinya,

AΘB = BΘA

Selain itu, operasi erosi bersifat asosiatif. Artinya,

(AΘB) ΘC = AΘ (B ΘC)

Contoh penggunaan operasi erosi pada citra dapat dicoba dengan


menggunakan perintah berikut:

>> Daun=imread('C:\image\dedaunan.png');
>> BW=im2bw(Daun, 0.1);
Morfologi untuk Pengolahan Citra 233

>> H=ones(4);
>> G=erosi(BW, H);
>> imshow(G, [0 1])

Citra asli dan hasil pemrosesan dengan operasi erosi dapat dilihat pada Gambar
7.15. Terlihat bahwa dengan menggunakan elemen penstruktur

1 1 1 1 1 1
21 1 1 1 1 16
11 1 1 1 1 155
/=1
11 1 1 1 1 15
11 1 1 1 1 15
01 1 1 1 1 14

yang diperoleh melalui H = ones(6), semua daun yang bersinggungandapat


dipisahkan. Namun, sebagai konsekuensinya, bentuk beberapa daun agak berubah.
234 Pengolahan Citra, Teori dan Aplikasi

(a) Citra asli daun.png (b) Hasil konversi ke citra biner

(c) Erosi dengan H = ones(4) (d) Erosi dengan H = ones(6)

Gambar 7.15Contoh operasi erosi pada citra

Operasi erosi dapat dimanfaatkan untuk memperoleh tepi objek. Sebagai


contoh, kode berikut dapat dicoba:

>> Img=imread('C:\Image\daun_gray.png');
>> BW=im2bw(Img, 0.65);
>> BW = not(BW);
>> imshow(BW);

Hasilnya ditunjukkan pada Gambar 7.16(a).


Morfologi untuk Pengolahan Citra 235

Perintah

BW = not(BW);

digunakan untuk melakukan operasi komplemen. Hal ini perlu dilakukan


mengingat latarbelakang gambar asli berwarna putih. Selanjutnya, perintah
berikut dapat dicoba:

>>H = ones(5);
>> G=erosi(BW, H);
>>Ap =BW - G;
>> imshow(Ap);

Hasilnya ditunjukkan pada Gambar 7.16(b). Kuncinya sangat sederhana. Tepi


objek sesungguhnya dapat diperoleh melalui:

Ap = A – (A ΘB) (7.14)
236 Pengolahan Citra, Teori dan Aplikasi

(a) Hasil konversi ke biner (b) Hasil operasi perolehan tepi

Gambar 7.16Contoh erosi untuk mendapatkan tepi objek

7.5 Bentuk dan Ukuran Elemen Penstruktur

Berdasarkan contoh pada Gambar 7.13, terlihat bahwa ukuran elemen


penstruktur menentukan hasil operasi dilasi. Selain ukuran, bentuk elemen
penstruktur juga menentukan hasil operasi morfologi.
Bentuk yang umum digunakan pada operasi morfologi adalah cakram atau
lingkaran. Efek yang diberikan merata pada segala arah. Bentuk dua buah cakram
dapat dilihat pada Gambar 7.17.
Morfologi untuk Pengolahan Citra 237

Gambar 7.17Dua bentuk elemen penstrukturberbentuk cakram

Bentuk elemen penstruktur yang lain yaitu belah ketupat, garis, persegi
panjang, bujur sangkar, dan oktagon. Gambar 7.18 menunjukkan contoh bentuk-
bentuk tersebut.
238 Pengolahan Citra, Teori dan Aplikasi

Gambar 7.18Berbagai bentuk elemen penstruktur

Untuk kepentingan memperoleh elemen penstruktur, MATLAB


menyediakan fungsi bernama strel.Sayangnya, fungsi seperti ini belum
diimplementasikan pada Octave. Sebagai contoh, elemen penstruktur berbentuk
cakram dengan radius 8 diperoleh dengan menggunakan perintah seperti berikut:

>>strel('disk', 8)

ans =
Morfologi untuk Pengolahan Citra 239

Flat STREL object containing 185 neighbors.


Decomposition: 4 STREL objects containing a total of 24 neighbors

Neighborhood:
0 0 0 0 1 1 1 1 1 1 1 0 0 0 0
0 0 0 1 1 1 1 1 1 1 1 1 0 0 0
0 0 1 1 1 1 1 1 1 1 1 1 1 0 0
0 1 1 1 1 1 1 1 1 1 1 1 1 1 0
1 1 1 1 1 1 1 1 1 1 1 1 1 1 1
1 1 1 1 1 1 1 1 1 1 1 1 1 1 1
1 1 1 1 1 1 1 1 1 1 1 1 1 1 1
1 1 1 1 1 1 1 1 1 1 1 1 1 1 1
1 1 1 1 1 1 1 1 1 1 1 1 1 1 1
1 1 1 1 1 1 1 1 1 1 1 1 1 1 1
1 1 1 1 1 1 1 1 1 1 1 1 1 1 1
0 1 1 1 1 1 1 1 1 1 1 1 1 1 0
0 0 1 1 1 1 1 1 1 1 1 1 1 0 0
0 0 0 1 1 1 1 1 1 1 1 1 0 0 0
0 0 0 0 1 1 1 1 1 1 1 0 0 0 0

>>

Agar hasil streldapat dimanfaatkan untuk fungsi erosi ataupun dilasi,


elemen penstruktur dapat diperoleh dengan memberikan perintah semacam
berikut:

>> H = getnhood(strel('disk', 8))

Dengan cara seperti itu, H dapat digunakan pada fungsi erosi atau dilasi. Contoh:

>> G=erosi(BW, H);


240 Pengolahan Citra, Teori dan Aplikasi

>> imshow(G, [0 1]);


>>

Hasilnya dapat dilihat di Gambar 7.19(b).


Gambar 7.19 juga sekaligus memperlihatkan efek berbagai ukuran elemen
penstruktur. Terlihat bahwa dengan menggunakan erosi, objek tertentu (yang
ukurannya lebih kecil daripada elemen penstruktur) akan hilang. Hasil pada
gambar tersebut juga menunjukkan bahwa semakin besar ukuran elemen
penstruktur, objek semakin mengecil.

Gambar 7.19Contoh penggunaan elemen penstruktur


yang bersumberstrel dan dikenakan pada erosi
Morfologi untuk Pengolahan Citra 241

Perlu diketahui, fungsi strel memberikan berbagai pilihan dalam membuat


elemen penstruktur. Tabel 7.4 memperlihatkan beberapa contoh.

Tabel 7.4Contoh strel untuk membuat berbagai bentuk


elemen penstruktur
Penentu Bentuk Contoh
‘disk’ (berbentuk cakaram) strel(‘disk’, 4) → radius 4
‘diamond’ (berbentuk belah strel(‘diamond’, 4) → radius 4
ketupat)
‘line’ (berbentuk garis) strel(‘line’, 3, 0) → panjang 3 dan sudut
0 derajat (datar)
strel(‘line’, 3, 45) → panjang 3 dan
sudut 45 derajat (datar)
‘octagon’ (berbentuk segi strel(‘octagon’, 6)
delapan) Argumen kedua harus kelipatan 3
‘rectangle’ (berbentuk strel(‘rectangle’, [4 2]) → 4 baris 2
persegi panjang) kolom
‘square’ (berbentuk bujur strel(‘square’, 4) → bujur sangkar 4 x 4
sangkar)

Perlu juga diketahui, Octave dan MATLAB mendukung fungsi untuk


kepentingan dilasi bernama imdilate dan untuk erosi bernama erode. Contoh
penggunaannya seperti berikut:

>> Img=imread('C:\Image\struktur.png');
>> BW=im2bw(Img, 0.1);
>> H = ones(11,11);
>> H(1,1)=0;H(1,2)=0;H(2,1)=0;
>> H(10,1)=0;H(10,2)=0;H(11,1)=0;
>> H(1,10)=0;H(1,11)=0;H(2,11)=0;
>> H(10,11)=0;H(11,10)=0;H(11,11)=0;
242 Pengolahan Citra, Teori dan Aplikasi

>> G=imerode(BW,H);
>> imshow(G, [0 1]);
>>

Perintah

H = ones(11,11);
H(1,1)=0;H(1,2)=0;H(2,1)=0;
H(10,1)=0;H(10,2)=0;H(11,1)=0;
H(1,10)=0;H(1,11)=0;H(2,11)=0;
H(10,11)=0;H(11,10)=0;H(11,11)=0;

identik dengan perintah MATLAB

strel('disk', 6)

Hasilnya dapat dilihat pada Gambar 7.20.

(a) Citra struktur.png (b) Hasil imerode dengan strel(‘disk’, 6)

Gambar 7.20Erosi dengan fungsi erode

7.6 Operasi Opening

Operasi openingadalah operasi erosi yang diikuti dengan dilasi dengan


menggunakan elemen penstruktur yang sama. Operasi ini berguna untuk
Morfologi untuk Pengolahan Citra 243

menghaluskan kontur objek dan menghilangkan seluruh piksel di area yang terlalu
kecil untuk ditempati oleh elemen penstruktur.Dengan kata lain, semua struktur
latardepan yang berukuran lebih kecil daripada elemen penstruktur akan
tereliminasi oleh erosi dan kemudian penghalusan dilakukan melalui dilasi.
Definisi operasi opening seperti berikut:

AοB = (AΘB) ⊕B (7.15)

Contoh efek openingdapat diperoleh dengan memberikan perintah berikut:

>>Img = imread('C:\Image\struktur.png');
>>BW=im2bw(Img, 0.1);
>> H = [
0 0 1 1 1 1 1 0 0
0 1 1 1 1 1 1 1 0
1 1 1 1 1 1 1 1 1
1 1 1 1 1 1 1 1 1
1 1 1 1 1 1 1 1 1
1 1 1 1 1 1 1 1 1
1 1 1 1 1 1 1 1 1
0 1 1 1 1 1 1 1 0
0 0 1 1 1 1 1 0 0 ];
>> G=dilasi(BW, H);
>>M=erosi(G, H);
>>imshow(M,[0 1])
>>

Hasilnya dapat dilihat pada Gambar 7.21(c).


244 Pengolahan Citra, Teori dan Aplikasi

Gambar 7.21Perbandingan operasi erosi, opening, dan closing

Gambar 7.21 menunjukkan bahwa operasi erosi membuat objek mengecil


dan bahkan ada yang hilang. Adapun operasi opening membuat ukuran objek
relatif tetap sama, walaupun juga menghilangkan objek yang berukuran kecil
(kurus). Namun, perlu diketahui, operasi opening membuat penghalusan di bagian
tepi. Perhatikan, ujung segitiga tidak tajam setelah dikenai operasi opening.
Sebagai pembanding, Gambar 7.21(d) menunjukkan hasil penggunaan operasi
closing, yang akan dibahas sesudah subbab ini.
Morfologi untuk Peng
ngolahan Citra 245

ing sering dikatakan sebagai idempotent. Art


Operasi openin rtinya, jika suatu
citra telah dikenai
ai operasi opening, pengenaan opening dengan elemen
penstruktur yang sam
ama tidak membawa efek apapun. Sifat inii dapat dituliskan
secara matematis sepe
perti berikut:

(AοB)οB = (AοB)
(A (7.16)

Operator openi
ning dapat dimanfaatkan sebagai filter lolo
olos-rendah, filter
lolos-tinggi, maupunn sebagai tapis lolos-bidang apabila elemen penstruktur
p yang
digunakan berupa cak
akram (Shih, 2009). Berikut adalah rumusanny
nya:

• ah (low-pass): AοBh;
filter lolos-rendah
• filter lolos-tinggi (high-pass): A – (AοBh);
• filter lolos-bidang meter Bh1 < Bh2.
ng (band-pass): (AοBh1)- (AοBh2), dengan diam

Skrip berikut digu


gunakan untuk menangani operasi opening:

Program : opening.m

function G = open
ning (F, H)
% OPENING Melakuk
kan operasi opening.

G = dilasi(erosi(
(F, H), H);

Akhir Program

7.7 Operasi Closing

Operasi closin
sing berguna untuk menghaluskan kontur dan
an menghilangkan
lubang-lubang kecil.
l. D
Definisinya seperti berikut:

A•B = (A⊕B)) ΘB (7.17)


246 Pengolahan Citra, Teori dan Aplikasi

Jadi, operasi closing dilaksanakan dengan melakukan operasi dilasi terlebih


dahulu dan kemudian diikuti dengan operasi erosi.
Contoh berikut menunjukkan efek penutupan lubang pada daun:

>> Img= imread('C:\Image\daun_gray.png');


>> BW=im2bw(Img, 0.65);
>> BW = not(BW);
>> imshow(BW, [0 1] )

Perintah di atas menampilkan hasil seperti terlihat pada Gambar 7.22(a).


Selanjutnya, perintah berikut dapat dicoba:

>> Img = imread('C:\Image\daun_gray.png');


>> BW = im2bw(Img, 0.65);
>> BW = not(BW);
>> H = ones(5);
>> G=dilasi(BW, H);
>> M=erosi(G, H);
>> imshow(M,[0 1])

Hasilnya ditunjukkan pada Gambar 7.22(b).


Morfologi untuk Pengolahan Citra 247

(a) Hasil konversi ke biner (b) Hasil operasi closing

Gambar 7.22 Lubang kecil tertutup oleh operasi closing

Berikut adalah implementasi operasi closing:

Program : closing.m

function G = closing (F, H)


% CLOSING Melakukan operasi opening.

G = erosi(dilasi(F, H), H);

Akhir Program
248 Pengolahan Citra, Teori dan Aplikasi

7.8 TransformasiHit-or-Miss

Transformasi Hit-or-Miss (THM) pada citra biner A didefinisikan sebagai


berikut:

* = ( Θ 7 )∩(
̅Θ +) (7.18)

Dalam hal ini, biasanya B2 = 9997. Morfologi seperti itu dipakai untuk pemrosesan
dan pengenalan bentuk pada citra biner.

• Transformasi Hit-or-Miss terkadang disebut Hit-and-Miss


(Efford, 2000).

• THM merupakan dasar untuk skeleton, thinning, dan pruning.

Sebagai contoh, terdapat pola seperti terlihat pada Gambar 7.23(a). Target
yang dikehendaki adalah menemukan pola tersebut pada citra yang terlihat pada
Gambar 7.23(b).

1 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0
1 0 0 1 0 0 0 0 0 1 0 0 1 0 0 0 0 0
1 1 1 1 1 0 0 1 0 1 1 1 1 0 1 0 0 0
0 0 0 1 1 1 1 1 0 1 1 1 1 0 1 0 0 1
0 0 0 1 0 0 0 1 0 0 0 0 1 0 1 1 1 1
0 0 0 1 0 0 0 1 1 0 0 0 0 1
0 0 0 0 0 0 0 0 0 0 0 0 0 1

(a) Target (b) Citra yang berisi target

Gambar 7.23 Contoh target dan citra yang berisi target

Secara manual dapatdilihat bahwa target yang dicari ada tiga buah. Untuk
menemukan posisinya, dapatdigunakan operasi erosi. Penyelesaiannya seperti
berikut:
Morfologi untuk Pengolahan Citra 249

>>H1 = [1 0 0 0
1 0 0 1
1 1 1 1
0 0 0 1
0 0 0 1 ];
>>Citra = [ 0 0 0 0 0 1 0 0 0 0 0 0 0 0
0 0 0 0 0 1 0 0 1 0 0 0 0 0
1 0 0 1 0 1 1 1 1 0 1 0 0 0
1 1 1 1 0 1 1 1 1 0 1 0 0 1
0 0 0 1 0 0 0 0 1 0 1 1 1 1
0 0 0 1 0 0 0 1 1 0 0 0 0 1
0 0 0 0 0 0 0 0 0 0 0 0 0 1];
>> G = erosi(Citra, H1)

Terlihat bahwa ada tiga elemen pada G yang bernilai 1. Pada posisi itulah target
ditemukan. Gambar 7.24 memperlihatkan isi G. Elemen yang bernilai 1 ditandai
dengan arsiran yang agak gelap. Arsiran yang agak terang digunakan untuk
menandai keberadaan target.

0 0 0 0 0 0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 1 0 0 0 0 0 0
0 0 0 0 0 0 0 1 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0 0 0 0 1 0
0 0 0 0 0 0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0 0 0 0 0 0

Gambar 7.24Hasil erosi. Arsiran dimaksudkan untuk menunjukkan letak


target yang dicari
Nah, sekarang digunakan komplemen atas target yang dicari. Dalam hal ini,
99979. Jadi,
H2 = /

>> H2 = not(H1)
250 Pengolahan Citra, Teori dan Aplikasi

H2 =

0 1 1 1
0 1 1 0
0 0 0 0
1 1 1 0
1 1 1 0

>>

Gambar 7.25 menunjukkan keadaan H2 dan komplemen citra.

0 1 1 1 1 1 1 1 1 0 1 1 1 1 1 1 1 1
0 1 1 0 1 1 1 1 1 0 1 1 0 1 1 1 1 1
0 0 0 0 0 1 1 0 1 0 0 0 0 1 0 1 1 1
1 1 1 0 0 0 0 0 1 0 0 0 0 1 0 1 1 0
1 1 1 0 1 1 1 0 1 1 1 1 0 1 0 0 0 0
1 1 1 0 1 1 1 0 0 1 1 1 1 0
1 1 1 1 1 1 1 1 1 1 1 1 1 0

;1
(a) /2 = / (b) Komplemen citra

Gambar 7.25Mencari kebalikan target H1 pada komplemen citra

Pencarian seperti pada Gambar 7.25 dapat dilakukan dengan menggunakan:

>>erosi(not(Citra), not(H1))

Hasilnya ditunjukkan pada Gambar 7.26.


Morfologi untuk Pengolahan Citra 251

0 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 1 1
0 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
1 1 1 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0
1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0
0 0 0 0 0 0 0 0 0 0 0 0 0 0
1 0 0 0 1 1 0 0 0 0 0 0 0 0

;1
(a) /2 = / (b) Komplemen citra

Gambar 7.26Hasil pencarian kebalikan H1 pada komplemen citra


dengan menggunakan erosi

Hasil THM diperoleh dengan melakukan interseksi antara hasil yang terletak pada
7.24 dan 7.26. Secara visual terlihat bahwa interseksi kedua hasil tersebut
menghasilkan satu nilai saja, yaitu pada posisi yang terlihat pada Gambar 7.27.

Hasil THM

0 0 0 0 0 0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0 0 0 1 0 0
0 0 0 0 0 0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0 0 0 0 0 0

Gambar 7.27 Hasil THM

Hasil di atas menyatakan bahwa pola yang dicari hanya ditemukan satu kali pada
citra dengan posisi seperti yang ditunjukkan oleh angka 1. Bagian yang diarsir
lebih terang menyatakan pola yang dicari.Dalam hal ini, interseksi diperoleh
dengan menggunakan AND. Jadi, solusi THM secara lengkap sebagai berikut:

>>and(erosi(Citra, H1) , erosi(not(Citra), not(H1)))

THM yang dikupas di atas mempunyai kelemahan, yakni perbedaan satu


piksel saja akan membuat pola tidak dikenal. Dalam praktik, terkadang
252 Pengolahan Citra, Teori dan Aplikasi

dikehendaki agar THM bersifat sedikit pemaaf, sehingga pola yang sedikit
berbeda dalam citra tetap dianggap sama dengan target. Pembahasan mengenai hal
itu dapat dilihat pada Solomon & Breckon (2011).

Untuk keperluan menangani transformasi Hit-or-Miss, Octave


dan MATLAB menyediakan fungsi bernama bwhitmiss. Bentuk
pemakaiannya:

bwhitmiss(Citra, SE1, SE2)

Dalam hal ini, argumen pertama menyatakan citra dan SE1


serta SE2 menyatakan elemen penstruktur yang merupakan
pola untuk pencarian.

Untuk kepentingan memudahkan implementasi yang melibatkan THM,


sebuah fungsi bernama thmditunjukkan berikut ini.

Program : thm.m

function G = thm(F, H)
% THM Digunakan untuk menangani transformasi Hit-or-Miss
% F adalah citra yang akan dikenai operasi
% H adalah elemen penstruktur

[tinggi, lebar] = size(H);


H1 = H;
H2 = not(H1);
G = and(erosi(F, H1) , erosi(not(F), H2));

Akhir Program

Contoh berikut menunjukkan cara menemukan batas kiri objek kunci


dengan memanfaatkan fungsi thm:
Morfologi untuk Pengolahan Citra 253

>> Kunci = imread('C:\Image\kunci.png');


>> H = [0 1 1; 0 1 1; 0 1 1];
>> G = thm(Kunci, H); imshow(G)

Pada contoh di atas, elemen pentruktur yang digunakan untuk memperoleh batas
kiri objek berupa:

0 1 1
0 1 1
0 1 1

Gambar 7.28 Elemen penstruktur untuk


memperoleh batas kiri kunci

Hasilnya ditunjukkan pada Gambar 7.29(b). Adapun perintah berikut


memberikan hasil seperti terlihat pada Gambar 7.29(c).

>> H = [ 0 0 0; 1 1 1 ; 1 1 1];
>> G = thm(Kunci, H); imshow(G)

(a) Citra kunci.png (b) Batas kiri kunci (c) Batas atas kunci

Gambar 7.29Contoh memperoleh batas kiri dan batas atas kunci

Pada beberapa kasus, elemen penstruktur yang digunakan untuk


melakukan THM melibatkan bit-bit yang disebut dengan istilah “don’t care”
(dampak nilai 1 atau 0 sama saja). Contoh:
254 Pengolahan Citra, Teori dan Aplikasi

1 = =
= <1 0 =? (7.19)
1 = =

Pada contoh di atas, x menyatakan “don’t care” atau bebas (0 atau 1). Nah, untuk
menangani kasus seperti itu, dapat dibuat transformasi Hit_or_Miss seperti
berikut.

Program : thm2.html

function G = thm2(F, H)
% THM2 Digunakan untuk menangani transformasi Hit-or-Miss
% F adalah citra yang akan dikenai operasi
% H adalah elemen penstruktur
% H bisa mengandung nilai -1 untuk menyatakan
% don't care

[tinggi, lebar] = size(H);

% Membentuk H1
% Periksa nilai don't care (yaitu -1) dan gantilah dengan nol
H1 = H;
for baris = 1 : tinggi
for kolom = 1 : lebar
if H1(baris, kolom) == -1
H1(baris, kolom) = 0;
end
end
end

% Membentuk H2 sebagai komplemen H1


% Periksa nilai don't care (yaitu -1) dan gantilah dengan nol
for baris = 1 : tinggi
for kolom = 1 : lebar
if H(baris, kolom) == -1
H2(baris, kolom) = 0;
else
H2(baris, kolom) = not(H(baris, kolom));
end
end
end

G = and(erosi(F, H1) , erosi(not(F), H2));


return
Morfologi untuk Pengolahan Citra 255

Akhir Program

Secara prinsip, bagian yang bernilai -1 (“don’t care”) selalu diubah menjadi nol.
Ketika dikomplemenkan, nilai -1 juga menghasilkan nilai 0. Dengan demikian,
H1 AND H2 akan selalu menghasilkan nilai 0 pada setiap elemen. Contoh
penggunaan thm2akan diberikan ketika membahas convex hull.

7.9Skeleton

Ada beberapa cara yang digunakan untuk membentuk skeleton.Skeleton


merupakan bentuk unik suatu objek, yang menyerupai rangka suatu
objek.Skeleton mempunyai tiga karakteristik seperti berikut (Young, dkk., 1998):
1) ketebalannya 1 piksel,
2) melewati tengah objek, dan
3) menyatakan topologi objek.
Namun, dalam praktik, ada kasus tertentu yang tidak dapat dipenuhi oleh skeleton.
Contoh ditunjukkan pada Gambar 7.35.

Gambar 7.30Contoh gambar yang tidak dapat dipenuhi oleh skeleton


(Sumber: Young, dkk., 1998)

Skeleton digunakan untuk representasi dan pengenalan tulisan tangan, pola


sidik jari, struktur sel biologis, diagram rangkaian, gambar teknik, rencana jalur
256 Pengolahan Citra, Teori dan Aplikasi

robot, dan semacam itu (Shih, 2009). Terkadang istilah skeletonisasi objek disebut
sebagai Medial Axis Transform (Myler & Weeks, 1993).
Salah satu cara untuk mendapatkan skeleton adalah melaluithinning.
Thinning (pengurusan) adalah operasi morfologi yang digunakan untuk
memperkecil ukuran geometrik objek dengan hasil akhir berupa skeleton atau
rangka, dengan definisinya sebagai berikut:

thinning(A, B) = A ⊗ B = A ^ B
= A – hit_or_miss(A, B) = A∩ (hit_or_miss)c (7.20)

Dalam hal ini, A adalah citra biner dan B adalah delapan elemen penstruktur
B1..Bn. Satu fase perhitungan thinning dilakukan dengan menggunakan delapan
elemen penstruktur.Beberapa fase diperlukan sampai diperoleh hasil yang tidak
lagi mengubah struktur citra.

Operasi thinningmenyerupai erosi. Perbedaannya, thinning tidak


akan membuat komponen objek terputus, melainkan
mengecilkan hingga hasil akhirnya berupa rangka dengan
ketebalan 1 piksel.

B1 B2 B3 B4

0 0 0 1 1 1 0 1 1 1 1 0
1 1 1 1 1 1 0 1 1 1 1 0
1 1 1 0 0 0 0 1 1 1 1 0

B5 B6 B7 B8

1 0 0 1 1 1 1 1 1 0 0 1
1 1 0 0 1 1 1 1 0 0 1 1
1 1 1 0 0 1 1 0 0 1 1 1

Gambar 7.31Contoh 8 elemen penstruktur


untuk melakukan operasi thinning
Morfologi untuk Pengolahan Citra 257

Contoh delapanelemen penstruktur yang digunakan untuk thinning


ditunjukkan pada Gambar 7.28 (Meyer dan Weeks, 1993).Fase pertama operasi
thinning dilakukan sebagai berikut:

A ⊗ B = ((((((((A ⊗ B1) ⊗ B2) ⊗ B3) ⊗ B4) ⊗ B5) ⊗ B6) ⊗ B7) ⊗ B8) (7.21)

Implementasi thinning ditunjukkan berikut ini.

Program : thinning.m

function G = thinning(F, fase)


% THINNING Untuk melakukan operasi thinning terhadap citra F
% Argumen fase menentukan hasil thinning untuk
% fase tersebut. Jika fase tidak disebutkaan,
% operasi thinning dilakukan sampai cstruktur citra
% tidak berubah lagi

if nargin == 1 % Kalau fase tidak disebutkan


fase = 1000000000; % Isi dengan bilangan yang besar
end

% Elemen penstruktur
H1 = [ 0 0 0; 1 1 1; 1 1 1 ];
H2 = [ 1 1 1; 1 1 1; 0 0 0 ];
H3 = [ 0 1 1; 0 1 1; 0 1 1 ];
H4 = [ 1 1 0; 1 1 0; 1 1 0 ];
H5 = [ 1 0 0; 1 1 0; 1 1 1 ];
H6 = [ 1 1 1; 0 1 1; 0 0 1 ];
H7 = [ 1 1 1; 1 1 0; 1 0 0 ];
H8 = [ 0 0 1; 0 1 1; 1 1 1 ];

[tinggi, lebar] = size(F);

C = F;
for p = 1 : fase
C1 = C;
C = and(C, not(thm(C,H1)));
C = and(C, not(thm(C,H2)));
C = and(C, not(thm(C,H3)));
C = and(C, not(thm(C,H4)));
C = and(C, not(thm(C,H5)));
C = and(C, not(thm(C,H6)));
C = and(C, not(thm(C,H7)));
C = and(C, not(thm(C,H8)));

% Periksa hasil C1 dan C sama atau tidak


sama = true;
258 Pengolahan Citra, Teori dan Aplikasi

for baris = 1 : tinggi


for kolom = 1 : lebar
if C1(baris, kolom) ~= C(baris, kolom)
sama = false;
break;
end
end

if sama == false
break;
end
end

if sama == true
break; % Akhiri kalang
end
end

G = C;

Akhir Program

Contoh penggunaan fungsi thinning:

>> F=im2bw(imread('C:\Image\bentuk.png'), 0.5);


>> G=thinning(F); imshow(G)

Hasilnya ditunjukkan pada Gambar 7.32.

(a) Berbagai bentuk objek (b) Skeleton morfologi

Gambar 7.32Citra yang berisi berbagai bentuk dan


hasil akhir setelah mengalami operasi thinning
Morfologi untuk Pengolahan Citra 259

Adapun contoh berikut menunjukkan pengenaan elemen penstruktur untuk


fase kedua:

>> G=thinning(F,2); imshow(G)

Hasilnya ditunjukkan pada Gambar 7.33(a). Hasil fase keenam diperoleh dengan
menggunakan perintah berikut:

>> G=thinning(F,6); imshow(G)

Hasilnya ditunjukkan pada Gambar 7.33(b).

Gambar 7.33Hasil thinning pada berbagai fase


260 Pengolahan Citra, Teori dan Aplikasi

Skeleton juga dapat diperoleh melalui morfologi, seperti yang diajukan


oleh Serra (1982). Definisi skeletondijelaskan berikut ini.Misalnya, A menyatakan
citra biner dengan 1 menyatakan piksel objek dan 0 menyatakan piksel-piksel
latarbelakang.Skeleton A diperoleh dengan menggunakan rumus:

@( ) = ⋃C
BDE @B ( ) (7.22)

Dalam hal ini,

@B ( ) = ( Θ − ( Θ ) ° (7.23)

B adalah elemen penstruktur dan K adalah bilangan terbesar sebelum membuat A


tererosi menjadi himpunan kosong. Kondisi pada K tersebut dapat ditulis secara
matematis seperti berikut:

F = max( | Θ ≠ ∅) (7.24)

Perlu diketahui,

Θ = (( Θ )Θ … )Θ (7.25)

yang menyatakan bahwa hasil erosi dierosiulang sampai terjadi k erosi.


Contoh yang menunjukkan proses pembuatan skeleton suatu objek dengan
cara di atas ditunjukkan pada Gambar 7.36. Pada contoh tersebut, S2(A) berupa
himpunan kosong mengingat semua elemen bernilai nol. Dengan demikian, K = 1
atau S(A) = S1(A).
Morfologi untuk Pengolahan Citra 261

0 1 1 1 0 0 0 0 1 1 1
0 1 1 1 0 0 0 0 1 1 1
0 1 1 1 0 0 0 0 1 1 1
0 1 1 1 0 0 0 0
B
0 1 1 1 1 1 1 0
0 1 1 1 1 1 1 0
0 1 1 1 1 1 1 0
0 0 0 0 0 0 0 0
A

0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0
0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0
0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0
0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0
0 0 1 1 1 1 0 0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
AΘB (A Θ B) ° B

0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0

S1(A) = (A Θ B) - (A Θ B) ° B S2(A)

Gambar 7.34Skeleton secara morfologis

Namun,cara seperti itu tidak menjamin terjadinya skeleton yang titik-titiknya


terkoneksi. Hal ini telah diutarakan oleh Gonzalez dan Woods (2002).
DiOctave dan MATLAB, skeleton dapat diperoleh dengan menggunakan
fungsi bwmorph. Contoh:

>> Img=imread('C:\Image\bentuk.png');
262 Pengolahan Citra, Teori dan Aplikasi

>> Img = im2bw(Img, 0.5);


>> G=bwmorph(Img, 'skel', inf);
>> imshow(G)

Perlu diketahui, im2bwdigunakan untuk memperoleh citra biner. Setelah itu, Img
dapat diproses oleh bwmorph. Argumen ‘skel’ menyatakan bahwa hasil yang
diharapkan adalah skeleton. Argumen inf menyatakan nilai yang tak berhingga,
yang digunakan untuk menyatakan jumlah pengulangan maksimal dalam
membentuk skeleton. Hasil operasi di depan ditunjukkan pada Gambar 7.35.

Gambar 7.35Hasil bwmorph untuk memperoleh skeleton


Morfologi untuk Pengolahan Citra 263

7.10 Thickening

Thickening (penebalan) adalah operasi yang berkebalikan dengan thinning.


Fungsinya adalah memperbesar ukuran geometris objek. Operasi ini didefinisikan
sebagai berikut:

A B = A ∪hit_or_miss(A, B) (7.26)

Dalam hal ini, A adalah citra biner dan B adalah delapan elemen penstruktur
B1..Bn. Satu fase perhitungan thickening dilakukan dengan menggunakan delapan
elemen penstruktur. Contoh kedelapan elemen penstruktur disajikan pada Gambar
7.36.

B1 B2 B3 B4

1 1 1 0 0 0 1 0 0 0 0 1
0 0 0 0 0 0 1 0 0 0 0 1
0 0 0 1 1 1 1 0 0 0 0 1

B5 B6 B7 B8

0 1 1 0 0 0 0 0 0 1 1 0
0 0 1 1 0 0 0 0 1 1 0 0
0 0 0 1 1 0 0 1 1 0 0 0

Gambar 7.36Contoh 8 elemen penstruktur


untuk operasi thickening

Fase pertama operasi thickening dilakukan sebagai berikut:

A B = ((((((((A B1) B2) B3) B4) B5 ) B6) B7) B8)(7.27)

Implementasi thickening ditunjukkan berikut ini.


264 Pengolahan Citra, Teori dan Aplikasi

Program : thickening.m

function G = thickening(F, n_iterasi)


% THICKENING Digunakan untuk menebalkan objek yang terdapat pada
% citra F.
% Argumen n_iterasi menyatakan jumlah iterasi atau
% fase yang dikehendaki untuk melakukan
% penebalan objek'

H1 = [ 1 1 1; 0 0 0; 0 0 0 ];
H2 = [ 0 0 0; 0 0 0; 1 1 1 ];
H3 = [ 1 0 0; 1 0 0; 1 0 0 ];
H4 = [ 0 0 1; 0 0 1; 0 0 1 ];
H5 = [ 0 1 1; 0 0 1; 0 0 0 ];
H6 = [ 0 0 0; 1 0 0; 1 1 0 ];
H7 = [ 0 0 0; 0 0 1; 0 1 1 ];
H8 = [ 1 1 0; 1 0 0; 0 0 0 ];

C = F; % Salin citra F ke C
for p = 1 : n_iterasi
C = or(C, thm(C,H1));
C = or(C, thm(C,H2));
C = or(C, thm(C,H3));
C = or(C, thm(C,H4));
C = or(C, thm(C,H5));
C = or(C, thm(C,H6));
C = or(C, thm(C,H7));
C = or(C, thm(C,H8));
end

G = C;

Akhir Program

Contoh

>>F = imread(’C:\Image\morfo.png’);
>>G=thickening(F,1); imshow(G)

Hasil untuk berbagai fase ditunjukkan pada Gambar 7.37.


Morfologi untuk Pengolahan Citra 265

Gambar 7.37Contoh operasi thickening

7.11 Convex Hull

Himpunan konveks(cembung) adalah himpunan yang mencakup semua


titik yang menghubungkan dua titik yang berada di dalam himpunan.Adapun
convex hull adalah bentuk poligon terkecil yang dapat melingkupi objek.Poligon
ini dapat dibayangkan sebagai gelang elastis yang dapat melingkupi tepi objek,
Hal seperti itu kadang diperlukan untuk kepentingan mengenali objek, dengan
menghilangkan tepian objek yang cekung.
266 Pengolahan Citra, Teori dan Aplikasi

Convex hull diperoleh dengan melibatkan transformasi Hit_or_Miss


(THM) dengan elemen-elemen penstruktur yang dirotasi sebesar 90o. Contoh
elemen penstruktur ditunjukkan pada Gambar 7.38.

B1 B2 B3 B4

1 x x 1 1 1 x x 1 x x x
1 0 x x 0 x x 0 1 x 0 x
1 x x x x x x x 1 1 1 1

Gambar 7.38Empat elemen penstruktur untuk membentuk convex hull

Pada contoh di atas, x menyatakan “don’t care”.


Langkah awal untuk melakukan perhitungan convex hull dilaksanakan
dengan memberikan X01 = A, dengan A adalah citra yang akan diproses.
Selanjutnya, dilakukan perhitungan sebagai berikut:

LBM = ℎO LBP7 , M
∪ . = 1,2,3,4 ( = 1,2,3, … (7.28)

Konvergensi tercapai ketika LBM = LBP7


M
. Nah, bila Di = LBTUVWXYWU
M
, convex hull A
berupa

Z( ) = ⋃\MD7 [M (7.29)

Contoh untuk memperoleh convex hull ditunjukkan pada Gambar 7.39.


Pada contoh tersebut, hasil setelah konvergen untuk LBM , LBM ,LBM , LBM diperlihatkan.
Morfologi untuk Pengolahan Citra 267

0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
0 0 1 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0
0 1 1 0 0 1 0 0 0 0 1 1 1 0 1 0 0 0
0 1 1 0 1 1 0 0 0 0 1 1 1 1 1 1 0 0
0 0 1 1 1 0 0 0 0 0 0 1 1 1 1 1 1 0
0 0 1 1 1 1 1 0 0 0 0 1 1 1 1 1 1 0
0 0 0 0 1 1 1 0 0 0 0 0 0 1 1 1 0 0
0 0 0 0 1 0 0 0 0 0 0 0 0 1 0 0 0 0
0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0

A L1] ^ =3

0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
0 0 1 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0
0 1 1 0 0 1 0 0 0 0 1 1 0 0 1 0 0 0
0 1 1 0 1 1 0 0 0 0 1 1 0 1 1 0 0 0
0 0 1 1 1 0 0 0 0 0 1 1 1 1 1 0 0 0
0 0 1 1 1 1 1 0 0 0 0 1 1 1 1 1 0 0
0 0 0 1 1 1 1 0 0 0 0 0 1 1 1 1 0 0
0 0 0 0 1 1 0 0 0 0 0 0 0 1 0 0 0 0
0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0

L 2] ^ =1 L 3] ^ =2

0 0 0 1 0 0 0 0 0 0 0 0 1 0 0 0 0 0
0 0 1 1 1 0 0 0 0 0 0 1 1 1 0 0 0 0
0 1 1 1 1 1 0 0 0 0 1 1 1 1 1 0 0 0
0 1 1 1 1 1 0 0 0 1 1 1 1 1 1 0 0 0
0 0 1 1 1 1 0 0 0 0 1 1 1 1 1 1 0 0
0 0 1 1 1 1 1 0 0 0 1 1 1 1 1 1 1 0
0 0 0 0 1 1 1 0 0 0 0 0 1 1 1 1 0 0
0 0 0 0 1 0 0 0 0 0 0 0 0 1 1 0 0 0
0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0

L 4] ^ =4 Z( )

Gambar 7.39Proses pembentukanconvex hull


268 Pengolahan Citra, Teori dan Aplikasi

Implementasi pembentukan convex hull dituangkan pada fungsi bernama


convhull, dengan kode sebagai berikut.

Program : convhull.m

function G = convhull(A)
% CONVHULL Untuk melakukan operasi convex hull terhadap citra A
% dengan menggunakan 4 elemen penstruktur
% G = Convex hull

[tinggi, lebar] = size(A);

% Elemen penstruktur
H1 = [ 1 -1 -1; 1 0 -1; 1 -1 -1 ];
H2 = [ 1 1 1; -1 0 -1; -1 -1 -1 ];
H3 = [ -1 -1 1; -1 0 1; -1 -1 1 ];
H4 = [ -1 -1 -1; -1 0 -1; 1 1 1 ];

C = zeros(tinggi, lebar);
C = or(C, chull(A, H1));
C = or(C, chull(A, H2));
C = or(C, chull(A, H3));
C = or(C, chull(A, H4));

G = C;

function [G, k] = chull(A, B)


% A = Citra
% B = elemen penstruktur
% G = Hasil yang konvergen
% k = iterasi hingga korvergen

[tinggi, lebar] = size(A);

k=1;
Ckmin1 = A;
while (true)
Ck = or(Ckmin1, thm2(Ckmin1,B));

% Cek Ckmin1 apa sama dengan Ck


sama = true;
for baris = 1 : tinggi
for kolom = 1 : lebar
if Ckmin1(baris, kolom) ~= Ck(baris, kolom)
sama = false;
break;
end
end

if sama == false
Morfologi untuk Pengolahan Citra 269

break;
end
end

if sama == true
break; % Berarti sudah konvergen
end

% Ke iterasi berikutnya
k = k + 1;
Ckmin1 = Ck;
end

k = k-1;
G = Ckmin1;

Akhir Program

Contoh penggunaan fungsi convhull:

>> Garpu=im2bw(imread('C:\image\fork-3.png'), 0.5);


>> G=convhull(Garpu); imshow(G)

Hasilnya ditunjukkan pada Gambar 7.40(b).


Gambar 7.40(c) menunjukkan keadaan yang dinamakan defisiensi konveks.
Defisiensi konveks menyatakan selisih antara convex hull dan citra asli. Hasil
tersebut diperoleh melalui:

>> imshow(G – Garpu)

(a) Citra fork-3.png (b) Convex hull (c) Convex hull – Citra asli

Gambar 7.40Hasil convex hull dan defisiensi konveks

Bentuk convex hulldapat diubah agar tidak berbentuk kotak. Sebagai


contoh, terdapat delapan elemen penstruktur seperti terlihat pada Gambar 7.41.
270 Pengolahan Citra, Teori dan Aplikasi

B1 B2 B3 B4

1 1 1 1 1 x 1 x x x x x
1 0 x 1 0 x 1 0 x 1 0 x
x x x 1 x x 1 1 x 1 1 1

B5 B6 B7 B8

x x x x x 1 x 1 1 1 1 1
x 0 1 x 0 1 x 0 1 x 0 1
1 1 1 x 1 1 x x 1 x x x

Gambar 7.41 Contoh 8 elemen penstruktur


untuk melakukan operasi convex hull

Dengan menggunakan delapan elemen penstruktur tersebut, diperoleh hasil seperti


terlihat pada Gambar 7.42.

(a) Convex hull (b) Convex hull – Citra asli

Gambar 7.42Convex hull dan defisiensi konveks yang melibatkan


delapan elemen penstruktur

7.12 Morfologi Aras Keabuan

Sejauh ini, pembicaraan mengenai morfologi terbatas pada citra biner.


Sesungguhnya, morfologi juga dapat dikenakan pada citra beraras keabuan.
Namun, tentu saja terdapat perbedaan dalam melakukan operasi morfologi
ini.Beberapa operasi morfologi untuk citra beraras keabuan dibahas di subbab ini.
Morfologi untuk Pengolahan Citra 271

7.12.1 Dilasi Beraras Keabuan

Dilasi pada aras keabuan didefinisikan sebagai berikut (Gonzalez &


Woods, 2002):

⊕Y ( , ^) = O =(M,_)∈` (A(u-i,v-j)+B(i,j)) (7.30)

dengan A adalah citra dan B adalah elemen penstruktur. Jadi, nilai yang dihasilkan
berupa nilai terbesar antara A+B,dengan proses penambahan dilakukan seperti
yang terjadi pada konvolusi citra. Simbol g sesudah tanda ⊕ menyatakan bahwa
operasi dilasi tersebut berlaku untuk citra beraras keabuan.
Ilustrasi dilasi beraras keabuan dapat dilihat pada Gambar 7.43. Pada
contoh tersebut, nilai terbesar A+B adalah25. Nilai tersebut dijadikan sebagai nilai
dalam A⊕gB.

A (Citra) B Himpunan hasil


11 12 13 11+4 12+9 13+5
1 3 8
14 15 16
⊕ 2 7 6 14+6 15+7 16+2
5 9 4
17 18 19 17+8 18+3 19+1
Diputar
180o Terbesar =
4 9 5 25
6 7 2
8 3 1 +

Hasil

25

Gambar 7.43Contoh penentuan nilai dalam dilasi beraras keabuan


272 Pengolahan Citra, Te
Teori dan Aplikasi

Implementasi
si dilasi dapat dilihat pada program berikut.

Program : gdilasi.m

function G = gdil
lasi(F, H, hotx, hoty)
% GDILASI Berguna
a untuk melaksanakan operasi dilasi p
pada
% citra berar
ras keabuan.
% Masukan:
% F = citr
ra yang akan dikenai dilasi
% H = elem
men pentruksur
% (hy, hx) koordinat pusat piksel

[th, lh]=size(H);
;
[tf, lf]=size(F);
;

if nargin < 3
hotx = round(
(lh/2);
hoty = round(
(th/2);
end

G = zeros(tf, lf)
); % Nolkan semua pada hasil dilasi

% Memproses dilas
si
for baris = 1 : tf
t
for kolom = 1 : lf
terbesar = 0;
for p=1:t
th
for q=1:lh
q
y
ypos = baris - (p - hoty);
x
xpos = kolom - (q - hotx);
i (xpos >= 1) && (xpos <= lf) && ...
if .
(ypos >= 1) && (ypos <= tf)
nilai = F(ypos, xpos) + H(p, q);
if terbesar < nilai
terbesar = nilai;
end
e
end
end
end

% Potong nilai terbesar kalau melebihi 255


if terbes
sar > 255
terbe
esar = 255;
end

% Berikan
n nilai terbesar ke G
G(baris, kolom) = terbesar;
end
end
Morfologi untuk Pengolahan Citra 273

G = uint8(G);

Akhir Program

Pada contoh di atas, fungsi uint8 digunakan untuk memastikan bahwa hasil
perhitungan dilasi berkisar antara 0 sampai dengan 255.

Contoh berikut menunjukkan penggunaan fungsi gdilasi yang


dikenakan pada citra mandrill.png dengan menggunakan elemen penstruktur
berukuran 9x9 dengan bentuk cakram.

>> Img=imread('C:\Image\mandrill.png');
>>H = [
0 0 1 1 1 1 1 0 0
0 1 1 1 1 1 1 1 0
1 1 1 1 1 1 1 1 1
1 1 1 1 1 1 1 1 1
1 1 1 1 1 1 1 1 1
1 1 1 1 1 1 1 1 1
1 1 1 1 1 1 1 1 1
0 1 1 1 1 1 1 1 0
0 0 1 1 1 1 1 0 0 ];
>> G=gdilasi(Img, H); imshow(G)

Hasilnya dapat dilihat pada Gambar 7.44.


274 Pengolahan Citra, Teori dan Aplikasi

(a) Citra mandrill.png (b) Dilasi dengan elemen struktur


berukuran 3x3 dan seluruhnya
bernilai 0

(c) Dilasi dengan elemen struktur (d) Dilasi dengan elemen struktur
berukuran 3x3 dan seluruhnya berukuran 9x9 dan berbentuk bola
bernilai 1

Gambar 7.44Efek dilasi pada citra beraras keabuan

7.12.2 Erosi Beraras Keabuan

Erosi pada citra beraras keabuan didefinisikan sebagai berikut:

ΘY ( , ^) = O. (M,_)∈` (A(u+i,v+j)-B(i,j)) (7.31)

dengan A adalah citra dan B adalah elemen penstruktur. Simbol g sesudah tanda Θ
menyatakan bahwa operasi dilasi tersebut berlaku untuk citra beraras keabuan.
Morfologi untuk Peng
ngolahan Citra 275

Jadi, nilai yang dihas


asilkan berupa nilai terkecil antara A-B. Con
ontoh perhitungan
erosi ditunjukkan pad
ada Gambar 7.45.

A (Citra) B Himpunan hasi


asil
11 12 13 11-2 12-3 13
13-8
1 3 8
14 15 16
Θ 2 7 6 14-2 15-7 16
16-6
5 9 4
17 18 19 17-5 18-9 19
19-4

Terkecil = 5
Hasil

Gambar 7.45C
5Contoh penentuan nilai dalam erosi berara
ras keabuan

Implementasi
si erosi pada citra beraras keabuan diwujud
udkankan dengan
fungsi bernama gero
osi. Kodenya seperti berikut.

Program : gerosi.m

function G = gero
osi(F, H, hotx, hoty)
% GEROSI Berguna untuk melaksanakan operasi dilasi
% citra berar
ras keabuan.
% Masukan:
% F = citr
ra yang akan dikenai erosi
% H = elem
men pentruksur
% (hy, hx) koordinat pusat piksel

[th, lh]=size(H);
;
[tf, lf]=size(F);
;

if nargin < 3
hotx = round(
(lh/2);
hoty = round(
(th/2);
end
276 Pengolahan Citra, Teori dan Aplikasi

G = zeros(tf, lf); % Nolkan semua pada hasil erosi

% Memproses erosi
for baris = 1 : tf
for kolom = 1 : lf
terkecil = 255;
for p=1:th
for q=1:lh
ypos = baris + p - hoty;
xpos = kolom + q - hotx;
if (xpos >= 1) && (xpos <= lf) && ...
(ypos >= 1) && (ypos <= tf)
nilai = F(ypos, xpos) + H(p, q);
if terkecil > nilai
terkecil = nilai;
end
end
end
end

% Berikan nilai ke G
if terkecil < 0
terkecil = 0;
end

G(baris, kolom) = terkecil;


end
end

G = uint8(G);

Akhir Program

Contoh penggunaan gerosi seperti berikut:

>> Img=imread('C:\Image\mandrill.png');
>>H = [
0 0 1 1 1 1 1 0 0
0 1 1 1 1 1 1 1 0
1 1 1 1 1 1 1 1 1
1 1 1 1 1 1 1 1 1
1 1 1 1 1 1 1 1 1
1 1 1 1 1 1 1 1 1
1 1 1 1 1 1 1 1 1
0 1 1 1 1 1 1 1 0
Morfologi untuk Pengolahan Citra 277

0 0 1 1 1 1 1 0 0 ];
>> G=gerosi(Img, H); imshow(G)

Hasilnya dapat dilihat pada Gambar 7.46.

(a) ) Citra mandrill.tif (b) Erosi dengan elemen penstruktur


berukuran 3x3 dan seluruhnya
bernilai 0

(c) Erosi dengan elemen struktur (d) Erosi dengan elemen struktur
berukuran 3x3 dan berukuran 9x9 dan berbentuk
seluruhnya bernilai 1 bola

Gambar 7.46Efek erosi pada citra beraras keabuan


278 Pengolahan Citra, Teori dan Aplikasi

Aplikasi erosi dan dilasi pada citra beraras keabuan adalah untuk
memperoleh gradien morfologis. Dalam hal ini, gradien morfologis diperoleh
dengan melakukan pengurangan hasil dilasi dengan nilai hasil erosi. Contoh:

>> Img = imread('C:\Image\boneka.png');


>> X = gdilasi(Img, ones(3));
>> Y = gerosi(Img, ones(3));
>> imshow(X-Y)

Hasilnya dapat dilihat pada Gambar 7.47(d). Adapun hasil pemrosesan dilasi dan
erosi secara berturutan dapat dilihat pada Gambar 7.47(b) dan 7.47(c).

(a) Citra boneka.png (b) Dilasi dengan elemen struktur


berukuran 3x3 dan seluruhnya
bernilai 1

(c) Erosi dengan elemen struktur (d) Hasil dilasi – hasil erosi
berukuran 3x3 dan seluruhnya
bernilai 1

Gambar 7.47Gradien morofologis melalui pengurangan dilasi


dengan erosi pada citra beraras keabuan
Morfologi untuk Pengolahan Citra 279

7.12.3 Opening dan Closing

Secara prinsip, operasi opening dan closing pada citra beraras keabuan
serupa pada citra biner. Definisinya sebagai berikut.

Opening: AοgB = (AΘgB) ⊕gB (7.32)


Closing: A•gB = (A⊕gB) ΘgB (7.33)

Contoh perbedaan hasil operasi opening dan closing pada citra beraras
keabuan dapat dilihat pada Gambar 7.48. Terlihat bahwa operasi opening
berkecenderungan menghilangkan bagian yang cerah tetapi berukuran kecil
(perhatikan pada bagian mata pada hasil opening). Adapun operasi closing
mempertahankan objek kecil yang berwarna terang.

Gambar 7.48Operasi opening dan closing pada citra beraras keabuan


menggunakan elemen penstruktur 5x5 yang seluruhnya bernilai 0
280 Pengolahan Citra, Te
Teori dan Aplikasi

Untuk kepenti
ntingan kemudahan dalam mencoba operasi openingpada
op citra
berskala keabuan, dap
apatdigunakan fungsi bernama gopening. Kodenya
K sebagai
berikut.

Program : gopening.m

function G = gope
ening(F, H)
% GOPENING bergun
na untuk melaksanakan operasi opening
g
% citra berar
ras keabuan
% Masukan:
% F = citr
ra yang akan dikenai erosi
% H = elem
men pentruksur

G = gdilasi(geros
si(F, H), H);

Akhir Program

Untuk kepenti
ntingan kemudahan dalam mencoba operasi closing
cl pada citra
berskala keabuan, dap
apat digunakan fungsi bernama gclosing. Kodenya
K sebagai
berikut.

Program : gclosing.m

function G = gclo
osing(F, H)
% GCLOSING Bergun
na untuk melaksanakan operasi closing
g
% citra berar
ras keabuan.
% Masukan:
% F = citr
ra yang akan dikenai erosi
% H = elem
men pentruksur

G = gerosi(gdilas
si(F, H), H);

Akhir Program
Morfologi untuk Pengolahan Citra 281

Contoh berikut menunjukkan penggunaan gopening:

>> Img = imread('C:\Image\lena256.png');


>> G = gopening(Img, ones(5));
>> imshow(G)

Adapun contoh berikut menunjukkan penggunaan gclosing:

>> Img = imread('C:\Image\lena256.png');


>> G = gclosing(Img, ones(5));
>> imshow(G)

7.13 Transformasi Top-Hat

TransformasiTop-Hat didefinisikan sebagai perbedaan antara citra dan citra


setelah mengalami operasi opening (Solomon & Breckon, 2011) atau dapat
disajikan secara matematis seperti berikut:

TTH(A, B)= A-(A°gB) (7.34)

Pada rumus di atas, A menyatakan citra dan B sebagai elemen penstruktur. Simbol
g menyatakan bahwa operasi tersebut berlaku untuk citra beraras keabuan.
Transformasi ini berguna untuk mendapatkan bentuk global suatu objek
yang mempunyai intensitas yang bervariasi. Sebagai contoh, perhatikan Gambar
7.49(a). Pada citra tersebut, butiran-butiran nasi memiliki intensitas yang tidak
seragam. Melalui opening, diperoleh hasil seperti terlihat pada Gambar 7.49(b).
Hasil transformasi Top-Hat ditunjukkan pada Gambar 7.49(c). Perhatikan bahwa
hasil butiran nasi pada Gambar 7.49(c) terlihat memiliki intensitas yang lebih
seragam dibandingkan pada citra asal.
282 Pengolahan Citra, Teori dan Aplikasi

(a) Citra rice.png (b) Hasil Opening (c) ) Hasil Top-Hat

Gambar 7.49Transformasi Top-Hat menggunakan elemen penstruktur


berukuran 9x9 berbentuk cakram

Pada contoh berikut, TH menyatakan hasil transformasi Top-Hat:

>> Img=imread('C:\Image\rice.png');
>>H = [
0 0 1 1 1 1 1 0 0
0 1 1 1 1 1 1 1 0
1 1 1 1 1 1 1 1 1
1 1 1 1 1 1 1 1 1
1 1 1 1 1 1 1 1 1
1 1 1 1 1 1 1 1 1
1 1 1 1 1 1 1 1 1
0 1 1 1 1 1 1 1 0
0 0 1 1 1 1 1 0 0 ];
>> G=gopening(Img, H);
>> TH=Img-G;
>>imshow(TH)

File rice.png tidak disediakan di CD yang disertakan


bersama buku. File tersebut adalah milik MATLAB.

Hasil transformasi Top-Hat pada contoh seperti di atasakan menghasilkan


citra biner yang lebih baik daripada kalau citra biner diperoleh secara langsung
Morfologi untuk Pengolahan Citra 283

dari citra asal. Sebagai gambaran, Gambar 7.50 memberikan contoh hasil konversi
ke citra biner menggunakan citra rice.png dan hasil konversi citra biner
menggunakan hasil transformasi Top-Hat.

(a) Citra rice.png (b) ) Konversi citra biner (c) Konversi citra biner
melalui rice.png secara melalui hasil Top-Hat
langsung

Gambar 7.50Efek transformasi Top-Hat untuk memperoleh citra biner

Perhatikan bahwa jumlah butir padi pada Gambar 7.50(c) bagian bawah lebih
banyak daripada pada Gambar 7.50(b).

7.14 Transformasi Bottom-Hat

Transformasi Bottom-Hat didefinisikan sebagai berikut:

TBH(A, B) = (A •g B) - A (7.35)

Secara prinsip, operasi ini memperbesar warna putih melalui dilasi, diikuti
dengan pengecilan warna putih melalui erosi dan kemudian dikurangi dengan citra
asal. Dilasi yang diikuti dengan erosi memberikan efek berupa objek-objek yang
berdekatan menjadi semakin dekat. Pengurangan oleh citra asal membuat
penghubung antarobjek menjadi hasil yang tersisa. Dengan kata lain, hasil yang
tersisa adalah piksel-piksel yang digunakan untuk mengisi “lubang”, atau
“penghubung objek”.
284 Pengolahan Citra, Teori dan Aplikasi

Latihan

1. Terdapat dua buah himpunan seperti berikut:


A = {(1,1), (1,2), (2,1), (2,3), (2,1)}
B = {(1,1), (1,3), (2,2), (2,3), (3,1)}

Berapa hasil operasi berikut?


(a) A ∪ B
(b) A ∩ B

2. Perhatikan gambar berikut:

0 0 0 0 0
0 1 1 0 0
0 1 1 1 0
0 0 1 0 0
0 1 0 0 0

(a) Bagaimana bentuk komplemen citra tersebut?


(b) Bagaimana bentuk refleksinya?

3. Jelaskan kegunaan operasi dilasi.

4. Perhatikan citra berikut:

0 0 0 0 0
0 1 1 0 0
0 1 1 1 0
0 0 1 0 0
0 1 0 0 0
Morfologi untuk Pengolahan Citra 285

Perlihatkan hasilnya jika dikenai operasi dilasi dengan elemen penstruktur


seperti berikut?

1 1

Dalam hal ini, yang diarsir adalah hotspot.


Hitung soal di atas secara manual dan kemudian bandingkan dengan hasil
kalau menggunakan fungsi bernama erosi.

Bagaimana hasilnya kalau hotspot justru terletak yang kanan? Lakukan secara
manual dan juga melalui komputasi dengan fungsi erosi.

5. Jelaskan bahwa hasil operasi erosi sebenarnya menyatakan letak elemen


penstruktur di dalam citra yang dikenai operasi tersebut.

6. Jelaskan hubungan operasi berikut terhadap operasi dilasi dan erosi:


(a) operasi opening
(b) operasi closing

7. Operasi opening sering dikatakan idempotent. Apa maksudnya?

8. Jelaskan kegunaan operasi thinning?

9. Cobalah memodifikasi operasi pada thinning.m dengan menggunakan elemen


penstruktur seperti berikut:
286 Pengolahan Citra, Teori dan Aplikasi

B1 B2 B3 B4

0 0 0 1 0 0 1 1 0 1 1 1
1 1 1 1 1 1 1 1 0 1 1 0
1 1 1 1 1 1 1 1 0 1 0 0

B5 B6 B7 B8

1 1 1 1 1 1 0 1 1 0 0 1
1 1 1 0 1 1 0 1 1 0 1 1
0 0 0 0 0 1 0 1 1 1 1 1

Kenakan pada citra bentuk.png. Perhatikan bahwa elemen-elemen


penstruktur di atas sama dengan elemen-elemen penstruktur pada contoh
di depan, tetapi letaknya dipertukarkan. Bandingkan hasilnya dengan
contoh pada Gambar 7.32.

10. Cobalah untuk mengimplementasikan convex hull yang melibatkan delapan


elemen penstruktur.

11. Buatlah fungsi bernama tth yang berguna untuk melaksanakan operasi
transformasi Top-Hat. Lalu, ujilah fungsi tersebut untuk menapis rice.png.
BAB 8
Operasi
pada Citra Biner

Dengan berakhirnya bab ini, diharapkan pembaca dapat


memahami berbagai hal berikut dan kemudian dapat
mencoba untuk mengimplementasikannya.
Pengantar operasi biner
Representasi bentuk
Ekstraksi tepi objek
Mengikuti kontur
Kontur internal
Rantai kode
Perimeter
Luas
Diameter
Fitur menggunakan perimeter, luas, dan diameter
Pusat massa dan fitur menggunakan pusat massa
Fitur dispersi
Pelabelan objek
288 Pengolahan Citra, Teori dan Aplikasi

8.1 Pengantar Operasi Biner

Beberapa pemrosesan citra mengacu pada citra biner.Sebagai contoh,


dengan menggunakan citra biner, perbandingan panjang dan lebar objek dapat
diperoleh. Di depan juga telah dibahas aplikasi citra biner pada morfologi.
Namun, tentu saja masih banyak operasi lain yang memanfaatkan citra biner.
Beberapa contoh diulas dalam bab ini.

8.2 Representasi Bentuk

Fitur suatu objek merupakan karakteristik yang melekat pada objek.Fitur


bentuk merupakan suatu fitur yang diperoleh melalui bentuk objek dan dapat
dinyatakan melalui kontur, area, dan transformasi, sebagaimana ditunjukkan pada
Gambar 8.1.Fitur bentuk biasa digunakan untuk kepentingan identifikasi objek.
Sebagai contoh, rasio kebulatan dipakai sebagai salah satu fitur pada identifikasi
tanaman (Wu, dkk., 2007) dan Polar Fourier Transform (PFT) dapat dipakai
untuk identifikasi daun (Kadir, dkk., 2011).

Representasi
bentuk

Kontur Area Transformasi

• Kode rantai • Rasio kebulatan • Transformasi


• Hampiran poligon • Transformasi jarak Fourier
• … • … • Transformasi PFT
• …

Gambar 8.1Representasi bentuk

8.3 Ekstraksi Tepi Objek

Tepi objek pada citra biner dapat diperoleh melalui algoritma yang dibahas
oleh Davis (1990).Pemrosesan dilakukan dengan menggunakan 8-
ketetanggaan.Sebagai penjelas, lihatlah Gambar 8.2. Piksel P mempuyai 8
tetangga yang dinyatakan dengan P0 hingga P7. Adapun algoritma tertuang pada
Algoritma 8.1.
Operasi pada Citra Biner 289

P3 P2 P1

P4 P P0

P5 P6 P7

Gambar 8.2Piksel dan 8 piksel tetangga

ALGORITMA 8.1 – Memperoleh tepi objek


Masukan:
• f (m,n): Citra masukan berupa citra biner berukuran m baris
dan n kolom
Keluaran:
• g (m, n): Hasil citra yang berisi tepi objek

FOR q ← 2 to m-1
FOR p ← 2 to n-1
p0 ← f(q, p+1)
p1 ← f(q-1, p+1)
p2 ← f(q-1, p)
p3 ← f(q-1, p-1)
p4 ← f(q, p-1)
p5 ← f(q+1, p-1)
p6 ← f(q+1, p)
p7 ← f(q+1, p+1)
sigma ← p0 + p1 + p2 + p3 + p4 + p5 + p6 + p7
IF sigma = 8
g(q, p) ← 0
ELSE
g(q, p) ← f(q, p)
END-IF
END-FOR
END-FOR
290 Pengolahan Citra, Te
Teori dan Aplikasi

Algori
ritma 8.1 mengasumsikan bahwa semua piks
ksel pada kolom
pertam
ama, kolom, terakhir, baris pertama, dan baris
ris terakhir tidak
ada yang
ya bernilai 1. Apabila ada kemungkinan bah
ahwa piksel pada
posisi
si tersebut ada yang bernilai satu, perlu diben
entuk larik baru
yang berukuran
b (m+2) x (n+2), yang mencakup selu
eluruh nilai f dan
dengan
an bagian tepi larikberisi 0.

Perwujudan skrip
sk berdasarkan algoritma di depan dapat dil
ilihat berikut ini.

Program : tepibiner.m

function [G] = te
epibiner(F)
% TEPIBINER Bergu
una untuk mendapatkan tepi objek
% pada citra biner

[jum_baris, jum_k
kolom] = size(F);

G = zeros(jum_bar
ris, jum_kolom);

for q = 2 : jum_bbaris - 1
for p = 2 : jum_kolom
j - 1
p0 = F(q,, p+1);
p1 = F(q--1, p+1);
p2 = F(q--1, p);
p3 = F(q--1, p-1);
p4 = F(q,, p-1);
p5 = F(q++1, p-1);
p6 = F(q++1, p);
p7 = F(q++1, p+1);
sigma = p0
p + p1 + p2 + p3 + p4 + p5 + p6 + p7
7;
if sigma == 8
G(q, p) = 0;
else
G(q, p) = F(q, p);
end
end
end

Akhir Program
Operasi pada Citra Biner 291

Contoh penggunaan fungsi tepibinerdapat dilihat di bawah ini.

>>Img = imread('C:\Image\daun_bin.png');
>> G = tepibiner(Img);
>>imshow(G)
>>

Hasilnya ditunjukkan pada Gambar 8.3.

Gambar 8.3Tepi objek yang diperoleh melalui tepibiner.m


292 Pengolahan Citra, Teori dan Aplikasi

Jika objek berlubang, kontur bagian dalam juga akan dibuat oleh
fungsi tepibiner. Contoh:

8.4 Mengikuti Kontur

Mengikuti kontur (contour following) merupakan suatu metode yang


digunakan untuk mendapatkan tepi objek.Terkait dengan hal itu, terdapat istilah
kontur eksternal dan kontur internal.Gambar 8.4 memberikan ilustrasi tentang
perbedaan kedua jenis kontur tersebut.Terlihat bahwa piksel yang menjadi bagian
kontur eksternal (ditandai dengan huruf E) terletak di luar objek, sedangkan piksel
yang menjadi bagian kontur internal terletak di dalam objek itu sendiri.

0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
0 0 1 1 1 1 1 0 0 0 0 1 1 1 1 1 0 0
0 0 1 1 1 1 1 0 0 0 0 1 1 1 1 1 0 0
0 0 1 1 1 1 1 0 0 0 0 1 1 1 1 1 0 0
0 0 1 1 1 1 1 0 0 0 0 1 1 1 1 1 0 0
0 0 1 1 1 1 1 0 0 0 0 1 1 1 1 1 0 0
0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0

Kontur Kontur
eksternal internal

Gambar 8.4Kontur eksternal dan kontur internal


Operasi pada Citra Biner 293

Istilah kontur identik dengan batas (boundary). Itulah sebabnya,


fitur yang berhubungan dengan kontur acapkali dinamakan
deskriptor batas.

Contoh pada Gambar 8.5 menunjukkan cara untuk memperoleh kontur


eksternal. Dengan menggunakan pendekatan 8-ketetanggaan, diperoleh hasil
sebagai berikut:

(3,2), (4,2), (5,2), (6,2), (7,2), (8,3), (8,4), (8,5), (8,6), (8,7), (7,8), (6,8), (5,8),
(4,8), (3,8), (2,7), (2,6), (2,4), (2,3)

Proses untuk mendapatkan titik awal (yaitu (3,1)) dilakukan dengan melakukan
pemindaian seperti yang diilustrasikan dalam Gambar 8.5. Setelah titik awal
ditemukan, penelusuran dilakukan seperti terlihat pada Gambar 8.5(b).
Penelusuran kontur berakhir setelah bertemu kembali dengan titik awal.

1 2 3 4 5 6 7 8 9

1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
2 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
3 0 0 1 1 1 1 1 0 0 0 0 1 1 1 1 1 0 0
4 0 0 1 1 1 1 1 0 0 0 0 1 1 1 1 1 0 0
5 0 0 1 1 1 1 1 0 0 0 0 1 1 1 1 1 0 0
6 0 0 1 1 1 1 1 0 0 0 0 1 1 1 1 1 0 0
7 0 0 1 1 1 1 1 0 0 0 0 1 1 1 1 1 0 0
8 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
9 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0

Kontur
Titik awal
eksternal

Gambar 8.5Proses penelusuran kontur


294 Pengolahan Citra, Teori dan Aplikasi

Label yang digunakan pada penelusuran kontur ditunjukkan pada Gambar


8.6(a).Piksel tetangga yang diberi latarbelakang hitam merupakan tetangga yang
dijadikan acuan untuk mencari titik kedua yang akan menjadi bagian kontur.
Dengan cara seperti itu, piksel yang berada di atas piksel titik awal ataupun yang
berada di kanannya tidak mungkin menjadi piksel kedua yang merupakan bagian
kontur.

3 2 1 3 2 1
4 P 0 4 P 0
5 6 7 5 6 7

(a) Label tetangga untuk (b) Tetangga berwarna hitam


penelusuran kontur Sebagai basis pencarian titik kedua

Gambar 8.6Label posisi tetangga dan pencarian tetangga


untuk menentukan bagian kedua pada kontur

Penelusuran untuk piksel-piksel berikutnya dilakukan dengan cara yang


khusus. Untuk kepentingan ini, diperlukan suatu pencatatan untuk mengetahui
arah posisi sekarang (C) terhadap posisi sebelum (P) dan berikutnya (N).Sebagai
contoh, dcp digunakan untuk mencatat arah posisi sekarang terhadap piksel
sebelumnya, dpc untuk mencatat arah posisi sebelum terhadap posisi sekarang,
dan dcn untuk mencatat arah posisi sekarang terhadap piksel
berikutnya.Berdasarkan keadaan pada Gambar 8.6(a), hubungan antara dcp dan
dpc adalah berkebalikan.Oleh karena itu, hubungan tersebut dapatditabelkan
seperti berikut.

Tabel 8.1Hubungan antara dpc dan dcp

dcp dcp =
kebalikan(dcp)
0 4
1 5
2 6
3 7
4 0
5 1
6 2
Operasi pada Citra Biner 295

7 3

Algoritma untuk mendapatkan hasil seperti yang telah dibahas dapat dilihat
di bawah ini (Costa & Cesar, 2001).

ALGORITMA 8.2 – Mengikuti kontur


Masukan:
• f (m,n): Citra masukan berukuran m baris dan n kolom berisi
kontur
Keluaran:
• e (n): kontur dengan n piksel

1. Cari piksel pertama yang akan dijadikan sebagai kontur


melalui pemindaian dan disimpan di e[1].
2. n ← 2 // Indeks kedua pada kontur e
3. Cari piksel kedua yang menjadi bagian kontur dengan cara
yang telah dibahas dan diletakkan di piksel_berikutnya
4. dcn← arah dari e[1] ke piksel kedua.
5. WHILE (piksel_berikutnya≠ e[1]
e[n] ←piksel_berikutnya
cari_piksel_berikutnya(e(n), dpc, piksel_berikutnya, dcn)
n ←n + 1
END-WHILE

ALGORITMA 8.3: Memperoleh piksel berikutnya pada kontur

cari_piksel_berikutnya(pc , dpc, pb, dcn)


// pc = piksel sekarang
// dpc = arah piksel sebelumnya ke piksel sekarang
// pb = piksel berikutnya yang akan dihasilkan oleh fungsi
// dcn = arah piksel sekarang ke piksel berikutnya
dcp← kebalikan(dpc)
FOR r ← 0 TO 6
dE← MOD(dcp + r, 8) // Arah eksternal
dI← MOD(dcp + r + 1, 8); // Arah internal

pE←peroleh_piksel_berikutnya(pc, dE)
pI←peroleh_piksel_berikutnya(pc, dI)

IF adalah_latarbelakang(pE) AND adalah_objek(pI)


pb←pE
296 Pengolahan Citra, Teori dan Aplikasi

dcn←dE
END-IF
END-FOR

ALGORITMA 8.4: Memperoleh piksel berikutnya

peroleh_piksel_berikutnya(pc, d)
// pc = piksel sekarang
// d = arah piksel berikutnya
// Nilai balik: piksel berikutnya
XP← [1, 1, 0, -1, -1, -1, 0, 1];
YP ← [0, -1, -1, -1, 0, 1, 1, 1];

cx ←bagian x dari pc + XP(d+1);


cy ←bagian y dari pc + YP(d+1);

Implementasi metode “mengikuti kontur” ditunjukkan berikut ini.


Program : get_contour.m

function [Kontur] = get_contour(BW)


% GET_CONTOUR Berfungsi untuk memperoleh kontur eksternal
% dari suatu citra biner BW
% Hasil berupa Kontur yang berisi pasangan X dan Y dari setiap
% piksel yang menyusun kontur. Kolom 1 menyatakan Y dan
% kolom 2 menyatakan X

% Peroleh kontur

% Proses rantai kode

% Arah sebelumnya ke sekarang


DPC = [0, 1, 2, 3, 4, 5, 6, 7];

% Arah sekarang ke sebelumnya


DCP = [4, 5, 6, 7, 0, 1, 2, 3];

% Arah 0 1 2 3 4 5 6 7
% terhadap posisi sekarang
XP = [1, 1, 0, -1, -1, -1, 0, 1];
YP = [0, -1, -1, -1, 0, 1, 1, 1];

% Peroleh titik awal


Operasi pada Citra Biner 297

[tinggi, lebar] = size(BW);

% Cari titik awal


x1 = 1;
y1 = 1;
selesai = false;
for baris = 1 : tinggi
for kolom = 1 :lebar
if BW(baris, kolom) == 1
y1 = baris;
x1 = kolom-1;
selesai = true;

Kontur(1,1) = y1;
Kontur(1,2) = x1;
break;
end
end

if selesai
break;
end
end

% Proses piksel kedua


for i = 4 : 7
if BW(y1+YP(i+1), x1+XP(i+1)) == 0
dcn = i; % Arah sekarang ke sesudahnya
break;
end
end

yberikut = y1 + YP(dcn+1);
xberikut = x1 + XP(dcn+1);

indeks = 2; % Indeks kedua

% Proses peletakan piksel kedua dan seterusnya


% ke array Kontur
while (yberikut ~= Kontur(1,1)) || (xberikut ~= Kontur(1,2))
Kontur(indeks,1) = yberikut;
Kontur(indeks,2) = xberikut;
dpc = dcn; % Arah sebelum ke sekarang diisi
% dengan arah sekarang ke berikutnya

% Cari piksel berikutnya


for r = 0 : 7
dcp = DCP(dpc+1);
de = rem(dcp+r, 8);
di = rem(dcp+r+1, 8);

cxe = Kontur(indeks,2) + XP(de+1);


cye = Kontur(indeks,1) + YP(de+1);
cxi = Kontur(indeks,2) + XP(di+1);
cyi = Kontur(indeks,1) + YP(di+1);

if (BW(cye, cxe) == 0) && (BW(cyi, cxi) == 1)


yberikut = cye;
xberikut = cxe;
298 Pengolahan Citra, Teori dan Aplikasi

break;
end
end

% Naikkan indeks
indeks = indeks + 1;
end

Akhir Program

Contoh untuk menguji fungsi get_contour:

>> Daun = imread('c:\image\daun_bin.png');


>> C=get_contour(Daun);
>>

Dengancara seperti itu, C berisi data piksel yang menjadi kontur citra biner
daun_bin.png.
Untuk membuktikan bahwa C berisi kontur daun, berikan kode seperti
berikut:

>> D=zeros(size(Daun));
>>for p=1:length(C)
D(C(p,1), C(p,2)) = 1;
end
>>imshow(D)

Pertama-tama, perintah

D=zeros(size(Daun));

digunakan untuk membentuk matriks berukuran sama dengan citra Daun dan
seluruhnya diisi dengan nol. Selanjutnya,

>>for p=1:length(C)
D(C(p,1), C(p,2)) = 1;
Operasi pada Citra Biner 299

end
>>

digunakan untuk membuat matriks D yang sesuai dengan nilai-nilai koordinat


pada larikC diisi dengan angka 1. Dengan demikian, D merekam kontur yang
tercatat pada C. Gambar 8.7 menunjukkan hasil imshow(D).

Gambar 8.7Gambar kontur yang diperoleh


melaluiget_contour
300 Pengolahan Citra, Teori dan Aplikasi

8.5 Kontur Internal

Salah satu cara untuk mendapatkan kontur internal yang telah diurutkan
menurut letak piksel, yaitu dengan memanfaatkan algoritma pelacakan kontur
Moore.Algoritma ini antara lain digunakan pada peta topografik digital (Pradha,
dkk., 2010).

ALGORITMA 8.5 – Memperoleh kontur internal dengan


pelacakan kontur Moore
Masukan:
• f (m,n): Citra masukan berukuran m baris dan n kolom
Keluaran:
• kontur (s): Larik yang berisi piksel-piksel kontur sebanyak s

1. Dapatkan piksel terkiri dan teratas yang bernilai 1.


Selanjutnya, posisi piksel dicatat pada b0 dan posisi untuk
memperoleh piksel berikutnya dicatat pada c0, yang mula-
mula diisi dengan 4 (arah barat pada Gambar 8.8(d)).
2. Periksa 8 tetangga b0 searah jarum jam dimulai dari c0.
Piksel pertama yang bernilai 1 dicatat pada b1. Adapun
posisi yang mendahului b1 dicatat pada c1.
3. kontur(1) ← b0, kontur(2) ← b1, jum← 2
4. b ← b1 dan c ← c1
5. WHILE true
a. Cari piksel pada 8 tetangga yang pertama kali
bernilai 1 dengan pencarian dimulai dari arah c
dengan menggunakan pola arah jarum jam.
b. Catat posisi piksel tersebut ke b.
c. Catat posisi yang mendahului piksel tersebut ke
c.
d. Tambahkan b sebagai bagian kontur:
jum←jum + 1
kontur(jum) ← b

e. IF b = b0
Keluar dari WHILE
END-IF
END-WHILE

Algoritma di atas akan membuat indeks pertama dan indeks terakhir pada
konturberisi nilai yang sama yaitu b0. Jika dikehendaki untuk tidak
Operasi pada Citra Biner 301

menyertakan nilai yang sama pada bagian akhir larikkontur, elemen tersebut
tinggal diabaikan saja.
Untuk memahami proses kerja pada algoritma Moore, perhatikan Gambar
8.8. Gambar 8.8(a) menyatakan keadaan objek pada citra. Piksel yang bernilai 1
menyatakan bagian objek dan yang bernilai 0 adalah bagian latarbelakang. Pada
contoh tersebut, pelacakan akan dimulai pada posisi (2,2), yaitu piksel bagian
objek yang terletak paling kiri dan paling atas. Adapun titik pencarian untuk
piksel kedua dimulai di arah barat atau arah kiri piksel (2,2) tersebut.Pencarian
dilakukan searah jarum jam. Pada langkah pertama, diperoleh piksel pada posisi
(2,3). Pencarian berikutnya akan dimulai di posisi (1,3), yaitu yang ditandai
dengan bulatan. Pada pencarian kedua, piksel yang didapat, yaitu posisi (2,4),
dengan titik pencarian berikutnya dimulai di posisi (1,4). Pada pencarian ketiga,
piksel yang didapat adalah pada (2,5), dengan titik pencarian berikutnya dimulai
di posisi (1,5). Pada pencarian keempat, piksel yang didapat yaitu (3,5), dengan
titik pencarian berikutnya dimulai di posisi (3,6). Jika langkah seperti itu terus
diulang, suatu ketika akan diperoleh piksel yang sama dengan piksel yang pertama
kali menjadi bagian kontur. Saat itulah proses untuk melacak kontur diakhiri.
Semua langkah yang terjadi untuk contoh Gambar 8.8(a) ditunjukkan pada
Gambar 8.8(b).Penomoran arah pencarian ditunjukkan pada Gambar 8.8(d),
sedangkan hasil kontur diperlihatkan pada Gambar 8.8(c).
302 Pengolahan Citra, Te
Teori dan Aplikasi

1 2 3
1 2 3 4 5 6 4
1 0 0 0 0 0 0
2 0 1 1 1 1 0 1 1 1 1
3 0 0 1 1 1 0 1 1 1
4 0 1 1 1 0 0 1 1 1
5 0 0 1 1 1 0 1 1 1
6 0 0 0 0 0 0

Objek
(a
(a) (b)
Piksel objek paling
kiri dan paling atas
0 0 0 0 0 0 sebagai titik awal
pelacakan
0 1 1 1 1 0 2
3 1
0 0 1 0 1 0
0 1 0 1 0 0 4 0
Kontur
0 0 1 1 1 0 5 7
6
0 0 0 0 0 0

(c
(c) (d)

Gamb
bar 8.8Penjelasan pelacakan kontur dengan
an
menggunakan Algoritma Moore

Implementasi
si algoritma Moore ditunjukkan berikut ini.

Program : inbound_tracing.m

function [Kontur]
] = inbound_tracing(BW)
% INBOUND_TRACING
G Memperoleh kontur yang telah teruru
utkan
% dengan meng
ggunakan algoritma pelacakan kontur M
Moore

[jum_baris, jum_k
kolom] = size(BW);

% Peroleh piksel awal


selesai = false;
for p = 1 : jum_bbaris
for q = 1 : jum_kolom
j
if BW(p, q) == 1
b0.y = p;
Operasi pada Citra Biner 303

b0.x = q;

selesai = true;
break;
end
end

if selesai
break;
end
end

c0 = 4; % Arah barat

% Periksa 8 tetangga dan cari piksel pertama yang bernilai 1


for p = 1 : 8
[dy, dx] = delta_piksel(c0);
if BW(b0.y + dy, b0.x + dx) == 1
b1.y = b0.y + dy;
b1.x = b0.x + dx;

c1 = sebelum(c0);
break;
else
c0 = berikut(c0);
end
end

Kontur=[];
Kontur(1, 1) = b0.y;
Kontur(1, 2) = b0.x;
Kontur(2, 1) = b1.y;
Kontur(2, 2) = b1.x;

%Kontur

n = 2; % Jumlah piksel dalam kontur

b = b1;
c = c1;

% Ulang sampai berakhir


while true
for p = 1 : 8
[dy, dx] = delta_piksel(c);
if BW(b.y + dy, b.x + dx) == 1
b.y = b.y + dy;
b.x = b.x + dx;

c = sebelum(c);

n = n + 1;
Kontur(n, 1) = b.y;
Kontur(n, 2) = b.x;

break;
else
c = berikut(c);
end
304 Pengolahan Citra, Teori dan Aplikasi

end

% Kondisi pengakhir pengulangan

if (b.y == b0.y) && (b.x == b0.x)


break;
end
end

return

function [b] = berikut(x)


if x == 0
b = 7;
else
b = x - 1;
end

function [s] = sebelum(x)


if x == 7
s = 0;
else
s = x + 1;
end

if s < 2
s = 2;
elseif s < 4
s = 4;
elseif s < 6
s = 6;
else
s = 0;
end

function [dy, dx] = delta_piksel(id)


if id == 0
dx = 1; dy = 0;
elseif id == 1
dx = 1; dy = -1;
elseif id == 2
dx = 0; dy = -1;
elseif id == 3
dx = -1; dy = -1;
elseif id == 4
dx = -1; dy = 0;
elseif id == 5
dx = -1; dy = 1;
elseif id == 6
dx = 0; dy = 1;
elseif id == 7
dx = 1; dy = 1;
end

Akhir Program
Operasi pada Citra Biner 305

Contoh penggunaan inbound_tracing :

>> D = [ 0 0 0 0 0 0
0 1 1 1 1 0
0 0 1 1 1 0
0 1 1 1 0 0
0 0 1 1 1 0
0 0 0 0 0 0 ];
>> P = inbound_tracing(D)
P =

2 2
2 3
2 4
2 5
3 5
4 4
5 5
5 4
5 3
4 2
3 3
2 2

>>

Perhatikan, elemen pertama dan terakhir pada P sama.

8.6Rantai Kode

Rantai kode (code chain) merupakan contoh representasi kontur yang


mula-mula diperkenalkan oleh Freeman pada tahun 1961.Representasi bentuk
dilakukan dengan menggunakan pendekatan 8-ketetanggan.Kode rantai setiap
306 Pengolahan Citra, Teori dan Aplikasi

tetangga piksel dinyatakan dengan sebuah angka sebagaimana terlihat pada


Gambar 8.9.

3 2 1
4 0
5 6 7

Gambar 8.9Arah rantai kode beserta kodenya

Untuk mempermudah perolehan kode rantai piksel yang menjadi tetangga


suatu piksel, perlu pembuatan indeks yang dapat dihitung melalui rumus berikut:

= 3 ∆ + ∆ + 5 (8.1)

Dalam hal ini,∆ menyatakan selisih nilai kolom dua piksel yang bertetangga dan
∆ menyatakan selisih nilai baris dua piksel yang bertetangga.Hubungan kode
rantai dan indeks pada Persamaan 8.1tersaji pada Tabel 8.2.

Tabel 8.2Indeks dan kode rantai dua piksel yang bertetangga


∆ ∆ Kode Rantai Indeks = 3 ∆ + ∆ + 5
0 +1 6 8
0 -1 2 2
-1 +1 5 7
-1 -1 3 1
+1 +1 7 9
+1 -1 1 3
-1 0 4 4

Kode untuk memperolehkode rantai dapat dilihat berikut ini.


Operasi pada Citra Biner 307

Program : chain_code.m

function [kode_rantai, xawal, yawal] = chain_code(U)


% CHAIN_CODE Digunakan untuk mendapatkan titik awal (x, y) dan
% kode rantai dari kontur U yang datanya telah terurutkan
% misalnya melalui get_contour

% Kode 1 2 3 4 5 6 7 8 9
Kode = ['3', '2', '1', '4', '0', '0', '5', '6', '7' ];

xawal = U(1,2);
yawal = U(1,1);
kode_rantai = '';
for p=2: length(U)
deltay = U(p, 1) - U(p-1, 1);
deltax = U(p, 2) - U(p-1, 2);
indeks = 3 * deltay + deltax + 5;
kode_rantai = strcat(kode_rantai, Kode(indeks));
end

Akhir Program

Contoh penggunaan fungsi chain_code:

>> Daun = imread('c:\image\daun_bin.png');


>> C = inbound_tracing(Daun);
>> [kode, x, y] = chain_code(C)
kode =
007067565666666666665666666666666666666666666766676676676667666766
767666767666676676667666766676667676766667666766666676670676766666
676666766667666676666667667667677676776776776777677767777777676766
677677767776767677677676767676706767776767677676767676776767676767
667667676766766676676767667666766666543434333343343233433333433333
443333333333323233323323342333333433334334333434234434344344444444
445555655656665656666566666656666666666666666666666666666666666666
666666676567666666666666667666666666667666666666676666666666667666
666666666676666666666666766667666766666676666766766767666766766676
666706666766666666666666666666656664566656656665665656565656656566
656666666666666666766666444343233332332332233323333323333333333333
333233334333333233323232323232222322222232221231222222212222121212
212121212122122221221212221222222212222222222222222220122222222222
222222212222212222222222222212222222222222221222222222222223222221
222222222222222222222222222222222212322222222222222222322222223222
323234233343444545554555456455555555556555655655665656566656566566
566656565656656656565645656565656566566656565554533322322322322322
223222223222222322322132222221222221222121221221212122121212121221
212212222212222122212211212121120121211121111211110111111111111211
221112121221211221221222212122122212212221122122122212221212212122
308 Pengolahan Citra, Te
Teori dan Aplikasi

01221121212221212
2112122122121212121211212122121212222
21222222222222
22222232222222222
2100001

x =131
y =8
>>

Fungsishow_co
ontourberikut digunakan untuk menguraika
ikan kembali kode
rantai menjadi koordi
dinat piksel dan kemudian menggambarkan ko
konturnya.

Program : show_contour.m

function show_con
ntour(x, y, rantai_kode)
% SHOW_CONTOUR Co
ontoh untuk menggambar kontur
% melalui ran
ntai kode
% Masukan fun
ngsi ini adalah hasil
% fungsi chai
in_code

% 0 1 2 3 4 5 6 7
Dx = [ +1, +1, 0,
0 -1, -1, -1, 0, +1];
Dy = [ 0, -1, -11, -1, 0, +1, +1, +1];
U = zeros(1,2);
U(1,1) = y;
U(1,2) = x;

for p=2: length(r


rantai_kode)
bilangan = ra
antai_kode(p) - 48;
posx = U(p-1,
, 2) + Dx(bilangan + 1);
posy = U(p-1,
, 1) + Dy(bilangan + 1);

U(p, 1) = pos
sy;
U(p, 2) = pos
sx;
end

% Membentuk gamba
ar kontur
maks_x = max(U(p,
,2));
maks_y = max(U(p,
,1));

D = zeros(maks_y,
, maks_x);
for p=1: length(U
U)
D(U(p,1), U(p
p,2)) = 1;
end

imshow(D);

Akhir Program
Operasi pada Citra Biner 309

Dengan mendasarkan kode yang dihasilkan melalui get_counter, dapat


dilakukanpengujian seperti berikut:

>>show_contour(x,y,kode)
>>

Dengan cara begitu, gambar kontur daun ditampilkan kembali.


Kode rantai digunakan pada beberapa penelitian, antara lain untuk
pencocokan kurva (Yu, dkk., 2010) dan pengenalan huruf Arab/Farsi
(Izakian,dkk., 2008). Namun, representasi kode rantaisebenarnya memiliki
kelemahan sebagai berikut (Levner, 2002).
1. Kode cenderung panjang.
2. Sensitif terhadap distorsi dan segmentasi yang tidak sempurna.
3. Sangat bergantung pada penyekalaan ataupun rotasi.

Levner menguraikan secara kasar langkah-langkah yang perlu dilakukan untuk


menghilangkan ketergantungan terhadap rotasi dan penyekalaan.

8.7Perimeter

Perimeter atau keliling menyatakan panjang tepi suatu


objek.Ilustrasinyadapat dilihat pada Gambar 8.10.Perimeter dapat diperoleh
dengan menggunakan algoritma berikut.

ALGORITMA 8.6 – Estimasi perimeter


Masukan:
• f (M,N): Citra masukan berukuran M baris dan N kolom
Keluaran:
• perimeter

1. Peroleh citra biner.


2. Kenakan algoritma deteksi tepi.
3. Perimeter ← jumlah piksel pada tepi objek hasil langkah 2.
310 Pengolahan Citra, Te
Teori dan Aplikasi

Perimeter
daun

Luas daun

G
Gambar 8.10 Perimeter dan luas daun

Contoh berik
rikut menunjukkan cara menghitung per
erimeter dengan
menggunakan pendek
ekatan di atas.

Program : perim1.m

function hasil = perim1(BW)


% PERIM1 Untuk me
enghitung perimeter suatu objek pada
% BW (citra bi
iner)
% hasil menyataka
an hasil perhitungan perimeter

U = inbound_traci
ing(BW);
hasil = length(U)
) - 1;

Akhir Program
Operasi pada Citra Biner 311

Pada skrip di atas, -1 diberikan mengingat elemen pertama dan terakhir U


sebenarnya berisi nilai yang sama. Itulah sebabnya, jumlah piksel pada kontur
perlu dikurangi satu.
Contoh pengujian fungsi perim1:

>>Img = imread('C:\Image\daun_bin.png');
>>perim1(Img)
ans =1409
>>

Algoritma estimasi perimeter di depan memberikan hasil yang baik ketika


tepi objek terhubung dengan 4-ketetanggaan, tetapi tidak tepat kalau terhubung
menurut 8-ketetanggaan (Costa & Cesar, 2001). Hal itu terjadi karena jarak antara
dua piksel tidak bersifat konstan (dapat berupa 1 atau √2) pada 8-ketetanggaan,
sedangkan jarak selalu 1 pada 4-ketetanggaan. Ilustrasi mengenai jarak antarpiksel
dapat dilihat pada Gambar 8.11.

1 1 1 1 1
1 1 1

1 1
1 1

Jarak 1 Jarak √2

Gambar 8.11Jarak antarpiksel pada 8-ketetanggaan

Apabila tepi objek diproses dengan menggunakan rantai kode (dibahas


pada Subbab 8.4), perimeter dapat diperkirakan dengan menggunakan rumus:

= + √2 (8.2)
312 Pengolahan Citra, Te
Teori dan Aplikasi

dengan Ne menyatak
takan jumlah kode genap dan No menyataka
kan jumlah kode
ganjil. Contoh berikut
ut menunjukkan penggunaan cara seperti itu.

Program : perim2.m

function hasil = perim2(BW)


% PERIM2 Untuk me
enghitung perimeter suatu objek pada
% BW (citra bi
iner) dengan menggunakan
% chain code
%
% hasil menyataka
an hasil perhitungan perimeter

U = inbound_traci
ing(BW);
kode_rantai = cha
ain_code(U);

jum_genap = 0;
jum_ganjil = 0;
for p=1: length(kkode_rantai)
kode = kode_rrantai(p);
if (kode == '0')
' || (kode == '2') || (kode == '4'
') || ...
(kode == '6')
' || (kode == '8')
jum_genap
p = jum_genap + 1;
else
jum_ganji
il = jum_ganjil + 1;
end
end

hasil = jum_genap
p + jum_ganjil * sqrt(2);

Akhir Program

Contoh:

>>Daun = imr
read('C:\Image\daun_bin.png');
>>perim2(Dau
un)
ans = 1605.8
8
>>
Operasi pada Citra Biner
Bi 313

8.8Luas

Cara sederhanaa untuk menghitung luas suatu objek adala


alah dengan cara
menghitung jumlah piksel
pi pada objek tersebut. Algoritmanya seba
bagai berikut.

ALGORITMA
A 8.7 – Menghitung luas objek
Masukan:
• f (m,n)
n): Citra masukan berukuran M baris dan N kol
olom
Keluaran:
• luas

luas ← 0
FOR p = 1 too m
FOR j = 1 to n
IF piksel(
el(p, q) dalam objek
luas ←luas
← +1
END-IF
END-FOR
END-FOR

Contoh berikut adalah


lah implementasi algoritma di atas.

Program : luas.m

function hasil = luas(BW)


% LUAS Untuk meng
ghitung luas citra BW (citra biner)

[tinggi, lebar] = size(BW);

hasil = 0;
for p = 1 : tingg
gi
for q = 1 : lebar
l
if BW(p, q) == 1
hasil
l = hasil + 1;
end
end
314 Pengolahan Citra, Teori dan Aplikasi

end

Akhir Program

Contoh:

>> D = [ 0 0 0 0 0 0
0 1 1 1 1 0
0 0 1 1 1 0
0 1 1 1 0 0
0 0 1 1 1 0
0 0 0 0 0 0 ];
>>luas(D)
ans = 13
>>
>> Daun = imread('c:\image\daun_bin.png');
>>luas(Daun)
ans = 31862
>>

Pendekatan yang lain untuk menghitung luas suatu objek dilakukan


melalui kode rantai (Putra, 2010). Perhitungannya sebagai berikut:

• Kode 0: Area = Area + Y


• Kode 1: Area = Area + (Y + 0.5)
• Kode 2: Area = Area + 0
• Kode 3: Area = Area – (Y + 0,5)
• Kode 4: Area = Area - Y
• Kode 5: Area = Area – (Y + 0,5)
• Kode 6: Area = Area + 0
• Kode 7: Area = Area + (Y + 0,5)
Operasi pada Citra Biner 315

Contoh pada Gambar 8.12 mempunyai kode rantai berupa


0770764554341234201.Perhitungan luas dijabarkan dalam Tabel 8.3. Luasnya
adalah∑ = 22,5.

1 2 3 4 5 6 7 8 9 10

9
8
7
6
5
4
3
2
1

Gambar 8.12 Objek dengan rantai kode


berupa 0770764554341234201

Tabel 8.3Perhitungan luas objek melalui rantai kode


Kode pada Ordinat (Y) Luas
Rantai Kode
0 8 8
7 8 7,5
7 7 6,5
0 6 6
7 6 5,5
6 5 0
4 4 -4
5 4 -3,5
5 3 -2,5
4 2 -2
3 2 -2,5
4 3 -2
1 3 -2,5
2 4 0
316 Pengolahan Citra, Te
Teori dan Aplikasi

Kodee pada Ordinat (Y) Luas


Rantai
tai Kode
3 5 -5,5
4 6 -6
2 6 0
0 7 7
1 7 7,5

Berikut adalah
lah contoh skrip yang digunakan untuk melaku
kukan perhitungan
dengan cara di depan..

Program : luas2.m

function hasil = luas2(BW)


% LUAS2 Untuk men
nghitung luas citra BW (citra biner)
% melalui kode
e rantai

[tinggi, lebar] = size(BW);


U = inbound_traci
ing(BW);

kode_rantai = cha
ain_code(U);
hasil = 0;
for p=1: length(k
kode_rantai)
kode = kode_r
rantai(p);
y = tinggi + 1 -U(p);

switch kode
case '0'
hasill = hasil + y;
case '1'
hasill = hasil + y + 0.5;
case '3'
hasill = hasil - y - 0.5;
case '4'
hasill = hasil - y;
case '5'
hasill = hasil - y + 0.5;
case {'2'','6'}
hasill = hasil ;
case '7'
hasill = hasil + y - 0.5;
end
end

Akhir Program
Operasi pada Citra Biner 317

Contoh penggunaan fungsi luas2:

>> X = [
0 0 0 0 0 0 0 0 0 0
0 0 0 1 1 0 0 0 0 0
0 1 1 1 1 1 0 0 0 0
0 1 1 1 1 1 1 1 0 0
0 0 0 1 1 1 1 1 1 0
0 0 0 1 1 1 1 1 1 0
0 0 1 1 1 1 1 0 0 0
0 0 0 0 1 1 0 0 0 0
0 0 0 0 0 0 0 0 0 0 ];
>> luas2(X)
ans =22.5000
>>

8.9Diameter

Diameter adalah jarak terpanjang antara dua titik dalam tepi objek.Hal itu
dapat dihitung dengan menggunakan metode “Brute force” (Costa dan Cesar,
2001).Algoritmanya sebagai berikut.

ALGORITMA 8.8 – Estimasi diameter bentuk


Masukan:
• f (m,n): Citra masukan berukuran m baris dan n kolom
Keluaran:
• diameter

1. U ← tepi objek (misalnya melalui morfologi)


2. c ← jumlah elemen U
3. jarak_maks← 0
318 Pengolahan Citra, Teori dan Aplikasi

4. FOR p←1 TO c-1


FOR q←p+1 TO c
IF | U(p) – U(q) | >jarak_maks
jarak_maks← | U(p) – U(q) |
piksel1 ← p
piksel2 ← q
END-IF
END-FOR
END-FOR
5. diameter ←jarak_maks

Pada algoritma di atas, piksel1 dan piksel2 mencatat posisi dua piksel yang
memiliki jarak terpanjang.
Contoh implementasi algoritma tersebut diberikan berikut ini. Dalam hal
ini, fungsi peroleh_diameter memerlukan citra biner sebagai masukan dan
memberikan nilai balik berupa panjang objek, dan dua piksel yang mewakili nilai
panjang tersebut.

Program : peroleh_diameter.m

function [diameter, x1, y1, x2, y2] = peroleh_diameter(BW)


% PEROLEH_DIAMETER Digunakan untuk menghitung panjang objek
% pada citra BW (citra biner).
% Hasil:
% diameter : panjang objek
% x1, y1, x2, y2 : menyatakan dua titik yang
% mewakili panjang tersebut

U = get_contour(BW);
n = length(U);
jarak_maks = 0;
piksel1 = 0;
piksel2 = 0;
for p=1 : n-1
for q=p+1 : n
jarak = sqrt((U(p,1)-U(q,1)) ^ 2 + (U(p,2)-U(q,2)) ^ 2);
Operasi pada Citra Biner 319

if jarak > jarak_maks


jarak_maks = jarak;
piksel1 = p;
piksel2 = q;
end
end
end

y1 = U(piksel1, 1);
x1 = U(piksel1, 2);
y2 = U(piksel2, 1);
x2 = U(piksel2, 2);

diameter = jarak_maks;

Akhir Program

Contoh penggunaan fungsi peroleh_diameter diberikan di bawah


ini:

>> Daun = imread('c:\image\daun_bin.png');


>> [d,x1,y1,x2,y2]=peroleh_diameter(Daun);
>>d
d = 515.1641

>> X=[x1,x2]
X =

144 131

>> Y=[y1,y2];
>>line(X,Y, 'Color','r')
>>

Hasil dalam bentuk gambar diperlihatkan pada Gambar 8.13.


320 Pengolahan Citra, Teori dan Aplikasi

Gambar 8.13 Garis merah menyatakan diameter daun

Berdasarkan diameter yang telah dibahas, lebar objekdapat


diperoleh.Sebagai contoh, perhatikan Gambar 8.14. Pada contoh tersebut, lebar
adalah garis terpanjang yang menghubungkan dua piksel di tepi objek yang tegak
lurus terhadap panjang maksimum pada objek. Setelah dua titik dengan jarak
terpanjang diperoleh, gradien garis yang melalui kedua piksel tersebut dihitung
dengan menggunakan rumus:

( )
1 = (!
! )
(8.3)
Operasi pada Citra Biner 321

Selanjutnya, garis yang tegak lurus dengan garis dengan gradien sebesar grad1
mempunyai gradien sebesar:

#
2=−
$%&'#
(8.4)

Persoalan berikutnya adalah mencari jarak terbesar antara dua piksel pada kontur
daun yang mempunyai gradien sama dengan grad2. Namun, dalam praktiknya
toleransi sebesar 10% perlu diberikan karena sangat sulit untuk mendapatkan garis
yang tepat sama dengan grad2, terutama kalau objek berukuran kecil.

panjang

lebar

Gambar 8.14Panjang dan lebar objek

Implementasi perhitungan panjang dan lebar objek dapat dilihat pada


program berikut.

Program : peroleh_lebar.m
322 Pengolahan Citra, Teori dan Aplikasi

function [panjang, lebar, x1, y1, x2, y2, x3, ...


y3, x4, y4] = peroleh_lebar(BW)
% PEROLEH_LEBAR Digunakan untuk memperoleh panjang dan
% lebar objek yang terdapat pada
% citra biner BW.
% Hasil:
% panjang = panjang objek
% lebar = lebar objek
% (x1,y1,x2,y2) = menyatakan posisi lebar objek
% (x3,y3,x4,y4) = menyatakan posisi panjang objek

U = get_contour(BW);
n = length(U);
jarak_maks = 0;
piksel1 = 0;
piksel2 = 0;
for p=1 : n-1
for q=p+1 : n
jarak = sqrt((U(p,1)-U(q,1)) ^ 2 + ...
(U(p,2)-U(q,2)) ^ 2);
if jarak > jarak_maks
jarak_maks = jarak;
piksel1 = p;
piksel2 = q;
end
end
end

y1 = U(piksel1, 1);
x1 = U(piksel1, 2);
y2 = U(piksel2, 1);
x2 = U(piksel2, 2);

panjang = jarak_maks;

% Cari dua titik terpanjang yang tegak lurus dengan garis


terpanjang

maks = 0;
posx3 = -1;
posx4 = -1;
posy3 = -1;
posy4 = -1;

if (x1 ~= x2) && (y1 ~= y2)


% Kedua titik tidak pada kolom atau baris yang sama
grad1 = (y1 - y2) / (x1 - x2);
grad2 = -1/grad1;

for p=1:n-1
for q=p+1:n
x3 = U(p, 2); y3 = U(p, 1);
x4 = U(q, 2); y4 = U(q, 1);
pembagi = (x4 - x3);
if pembagi == 0
continue;
end;

grad3 = (y4-y3)/(x4-x3);
Operasi pada Citra Biner 323

if abs(grad3-grad2) < 0.1 * abs(grad2)


jarak = sqrt((x3-x4)^2+(y3-y4)^2);
if jarak > maks
maks = jarak;

posx3 = x3;
posx4 = x4;
posy3 = y3;
posy4 = y4;
end
end
end
end
else
if (y1 == y2)
% kalau kedua titik pada baris yang sama
grad1 = 0;
grad2 = inf;

for p=1:n-1
for q=p+1:n
x3 = U(p,2); y3 = U(p, 1);
x4 = U(q,2); y4 = U(q, 1);
deltax = (x4 - x3);
if (deltax < 0.01) || (deltax > 0.01)
continue;
end;

jarak = sqrt((x3-x4)^2+(y3-y4)^2);
if jarak > maks
maks = jarak;

posx3 = x3;
posx4 = x4;
posy3 = y3;
posy4 = y4;
end
end
end
else
% kalau kedua titik pada kolom yang berbeda
grad1 = inf;
grad2 = 0;

for p=1:n-1
for q=p+1:n
x3 = U(p,2); y3 = U(p, 1);
x4 = U(q,2); y4 = U(q, 1);
deltay = (y3 - y4);
if (deltay < 1.0) || (deltay > 1.0)
continue;
end

jarak = sqrt((x4-x3)^2+(y4-y3)^2);
if jarak > maks
maks = jarak;

posx3 = x3;
324 Pengolahan Citra, Teori dan Aplikasi

posx4 = x4;
posy3 = y3;
posy4 = y4;
end
end
end
end
end

x3 = posx3;
y3 = posy3;
x4 = posx4;
y4 = posy4;

lebar = maks;

Akhir Program

Contoh penggunaan fungsiperoleh_lebar dapat dilihat di bawah ini:

>>close all;
>>Daun = imread('C:\Image\daun_bin.png');
>>[d,l,x1,y1,x2,y2,x3,y3,x4,y4]=peroleh_lebar(Daun
);
>>imshow(Daun);
>>Xp=[x1 x2];
>>Yp=[y1 y2];
>>Xl=[x3 x4];
>>Yl=[y3 y4];
>>line(Xl,Yl, 'Color','r')
>>line(Xp,Yp, 'Color','r')

Hasilnya ditunjukkan pada Gambar 8.15.


Operasi pada Citra Biner 325

Gambar 8.15Contoh yang menunjukkan


panjang dan lebar daun

8.10Fitur Menggunakan Perimeter, Luas, dan Diameter

Fitur seperti perimeter, luas, dan diameter seperti yang telah dibahas tidak
dapat digunakan secara mandiri sebagai fitur identifikasi objek.Fitur seperti itu
dipengaruhi oleh ukuran objek.Nah, agar tidak bergantung penyekalaan, beberapa
fitur dapat diturunkan dari ketiga fitur tersebut.Contoh dapat dilihat di bawah ini.

Kebulatanbentukadalah perbandingan antara luas objek dan kuadrat


perimeter, yang dinyatakan dengan rumus seperti berikut:

/(0)
()* + (,) = 4.
1 (0)
(8.5)
326 Pengolahan Citra, Teori dan Aplikasi

Hasilnya berupa nilai < 1.Nilai 1 menyatakan bahwa objek R berbentuk


lingkaran.Kadang fitur ini dinamakan kekompakan (Lee dan Chen,
2003).Contoh dapat dilihat pada Gambar 18.16.

Fitur alternatif yang menggunakan perbandingan antara luas dan perimeter


dapat dilihat berikut ini (Rangayyan, 2005).

45/
23 = 1 −
1
(8.6)

Berdasarkan rumus di atas, nilai kekompakan berkisar antara 0 sampai


dengan 1.Nilainya berupa nol kalau objek berbentuk lingkaran.

Kerampingan bentuk adalah perbandingan antara lebar dengan panjang,


yang dinyatakan dengan rumus seperti berikut:

8 9&%
67 = :&;<&;$ (8.7)

denganpanjang adalah panjang objek dan lebar adalah lebar objek. Fitur
ini terkadang disebut sebagai rasio aspek (Wu, dkk., 2007). Dengan
menggunakan fitur ini, objek yang gemuk dan yang kurus dapat dibedakan
(lihat Gambar 8.17).
Operasi pada Citra Biner 327

Gambar 8.16Kebulatan bentuk membedakan bentuk daun


yang kurus dan yang gemuk

Gambar 8.17Kerampingan bentuk membedakan bentuk daun


yang kurus dan yang membulat

Berikut adalah contoh fungsi yang digunakan memperoleh kebulatan.


328 Pengolahan Citra, Teori dan Aplikasi

Program : peroleh_kebulatan.m

function rasio = peroleh_kebulatan(BW)


% PEROLEH_KEBULATAN Untuk memperoleh rasio kebulatan milik objek
% yang terdapat pada citra biner BW

p = perim2(BW);
a = luas2(BW);

rasio = 4 * pi * a / (p^2);

Akhir Program

Contoh penggunaan fungsi peroleh_kebulatan:

>> Daun1=imread('C:\Image\adv.png');
>>peroleh_kebulatan(Daun1)
ans =0.28708
>> Daun2=imread('C:\Image\aw.png');
>>peroleh_kebulatan(Daun2)
ans =0.66130
>>

Adapun contoh berikut menunjukkan implementasi fungsi yang dipakai untuk


menghitung kerampingan objek.

Program : peroleh_kerampingan.m

function rasio = peroleh_kerampingan(BW)


% PEROLEH_KERAMPINGAN Untuk memperoleh rasio kerampingan
% milik objekyang terdapat pada citra biner BW

[panjang, lebar] = peroleh_lebar(BW);


Operasi pada Citra Biner 329

rasio = lebar / panjang;

Akhir Program

Contoh penggunaan fungsi peroleh_kerampingan:

>> Daun1=imread('C:\Image\adv.png');
>>peroleh_kerampingan(Daun1)
ans =0.14605
>> Daun2=imread('C:\Image\aw.png');
>>peroleh_kerampingan(Daun2)
ans =0.76921
>>

8.11Pusat Massa dan Fitur Menggunakan Pusat Massa

Pusat massa atau sentroid(centroid) lazim ditemukan dengan


menggunakan nilai rerata koordinat setiap piksel yang menyusun
objek.Algoritmanya sebagai berikut.

ALGORITMA 8.9 – Estimasi diameter bentuk

Masukan:
• f (m,n): Citra masukan berukuran m baris dan n kolom

Keluaran:
• pusat_x dan pusat_y

1. pusat_x← 0
2. pusat_y← 0
3. luas ← 0
4. FOR q = 1 to m
FOR p = 1 to n
IF F(q, p) = 1
luas ←luas + 1
pusat_x←pusat_x + p
pusat_y←pusat_y + q
END-IF
END-FOR
END-FOR

5. pusat_x←pusat_x / luas
330 Pengolahan Citra, Teori dan Aplikasi

6. pusat_y←pusat_y / luas

Berikut adalah implementasi untuk memperoleh pusat massa.

Program : centroid.m

function [pusat_x, pusat_y] = centroid(BW)


% CENTROID Untuk memperoleh pusat massa sebuah objek
% yang terletak pada citra biner BW

[tinggi, lebar] = size(BW);

pusat_x = 0;
pusat_y = 0;
luas = 0;
for q = 1 : tinggi
for p = 1 : lebar
if BW(q, p) == 1
luas = luas + 1;
pusat_x = pusat_x + p;
pusat_y = pusat_y + q;
end
end
end

pusat_x = pusat_x / luas;


pusat_y = pusat_y / luas;

Akhir Program

Contoh penggunaan fungsi centroid:

>> Daun=imread('C:\Image\daun_bin.png');
>> [x, y] = centroid(Daun);
>>imshow(Daun);
>> [panjang, lebar] = size(Daun);
>>line([0 lebar], [round(y)round(y)],’Color’,’b’)
>>line([round(x)round(x)], [0 panjang],’Color’,’b’)
>>
Operasi pada Citra Biner 331

Pada contoh di atas, line digunakan untuk membuat garis tegak dan garis datar
yang melewati pusat massa dan berwarna biru.Hasilnya dapat dilihat pada
Gambar 8.18.

Pusat massa

Gambar 8.18Contoh untuk menunjukkan centroid

Pusat massa banyak digunakan untuk memperoleh fitur lebih lanjut.


Beberapa contoh dapat dilihat di bawah ini.

Pusat massa untuk memperoleh fitur dispersi (dibahas pada Subbab 8.12).
Menghitung jarak terpanjang antara pusat massa dan titik dalam kontur
(Dmax).
Menghitung jarak terpendek antara pusat massa dan titik dalam kontur
(Dmin).
332 Pengolahan Citra, Te
Teori dan Aplikasi

Menghitung jjarak rata-rata antara pusat massa dan titik


itik dalam kontur
(Dmean).
Histogram jara
arak antara pusat massa dan titik dalam kontur.
ur.
=>?@ =>?@ =>AB
, ,
=>AB =>D?B =>D?B
Perbandingan:
an:

Contoh program
ram yang memanfaatkan beberapa fitur yang
ng memanfaatkan
pusat massa dapat dili
ilihat di bawah ini.

Program : pusat.m

function [] = puusat(BW)
% PUSAT Contoh un
ntuk menguji beberapa fitur yang
% menggunakan pusat massa. BW = Citra biner

[px, py] = centro


oid(BW);
U = inbound_traci
ing(BW);
U(length(U),:) = []; % Hapus elemen terakhir

rerata = 0;
terkecil = 999999
999;
terbesar = 0;
jum_piksel = leng
gth(U);
for j = 1 : jum_p
piksel
panjang = sqr
rt((U(j,1)-py)^2 + (U(j,2)-px)^2);
rerata = rera
ata + panjang;

if panjang > terbesar


terbesar = panjang;
end

if panjang < terkecil


terkecil = panjang;
end
end

rerata = rerata / jum_piksel;

terbesar
terkecil
dmaxmin = terbesa
ar / terkecil;
dmaxmean = terbes
sar / rerata;
dminmean = terkec
cil / rerata;

disp(sprintf('max
x/min = %f', dmaxmin));
disp(sprintf('max
x/mean = %f', dmaxmean));
disp(sprintf('min
n/mean = %f', dminmean));
Operasi pada Citra Biner 333

Akhir Program

Contoh pemakaian fungsipusat:

>> Daun1=imread('C:\Image\adv.png');
>> Daun2=imread('C:\Image\aw.png');
>>pusat(Daun1)
terbesar = 499.18
terkecil = 64.493
max/min = 7.740069
max/mean = 1.994929
min/mean = 0.257741
>>
>> pusat(Daun2)

terbesar = 137.58

terkecil = 79.565

max/min = 1.729221

max/mean = 1.399380

min/mean = 0.809255

>>

8.12 Fitur Dispersi

Untuk bentuk yang tidak teratur (atau biasa disebut bentuk tidak kompak),
Nixon dan Aguado (2002) menyarankan penggunaan fitur dispersi.Sebagai
contoh, terdapat tiga bentuk seperti terlihat pada Gambar 8.19.Penggunaan
kekompakan bentuk untuk objek pada Gambar 8.19(c) sebagai diskriminator tidak
tepat.Mereka menyarankan penggunaan dispersi pada bentuk yang tidak teratur,
karena dispersi sangat tepat untuk bentuk seperti itu.
334 Pengolahan Citra, Te
Teori dan Aplikasi

(b) Teratu
atur (c) Teratur (a) Tidak
k teratur

Gambar 8.19
8 Kekompakan objek pada berbagai beentuk

Berdasarkan definisi
d Chen di tahun 1995 (Nixon dann Aguado, 2002),
dispersi (atau juga dis
disebut ketidakteraturan) diukur sebagai perban
andingan panjang
chord utama terhadap
dap area objek. Bila dinyatakan dalam rumus
us berupa seperti
berikut:

G HIJ ((O(!A !̅ ) P( A L) )
E(F) =
Q(R)
(8.8)

dengan ( ̅ , L) adalahh titik


t pusat massa area A(S) dan A(S) sendirii m
menyatakan luas
objek. Alternatif yang
ng kedua, dispersi dinyatakan sebagai rasio ra
radius maksimum
terhadap radius minim
imum, yang dinyatakan dengan rumus seperti
ti berikut:
b

HIJ ((O(!A !̅ ) P( A L) )
E,(F) =
HMN ((O(!A !̅ ) P( A L) )
(8.9)

Fungsi bernam
ama dispersi berikut dapat digunakan unt
ntuk memperoleh
fitur kedua dispersi di depan.

Program : dispersi.m

function [d1, d2]


] = dispersi(BW)
% DISPERSI Contoh
h untuk menguji beberapa fitur yang
% menggunakan pusat massa. BW = Citra biner

[px, py] = centro


oid(BW);
U = inbound_traci
ing(BW);
Operasi pada Citra Biner 335

U(length(U),:) = []; % Hapus elemen terakhir

rerata = 0;
terkecil = 99999999;
terbesar = 0;
jum_piksel = length(U);
for j = 1 : jum_piksel
panjang = sqrt((U(j,1)-py)^2 + (U(j,2)-px)^2);
rerata = rerata + panjang;

if panjang > terbesar


terbesar = panjang;
end

if panjang < terkecil


terkecil = panjang;
end
end

a = perim2(BW);
d1 = pi * terbesar / a;
d2 = terbesar / terkecil;

Akhir Program

Contoh pemakaian fungsi dispersi:

>> Daun1 = imread('C:\Image\adv.png');


>> Daun2 = imread('C:\Image\aw.png');
>> [d1, d2] = dispersi(Daun1)
d1 =0.78285
d2 = 7.7401
>> [d1, d2] = dispersi(Daun2)
d1 = 0.57999
d2 =1.7292
>>

8.13 Pelabelan Objek

Citra biner seringkali memperlihatkan sejumlah objek.Sebagai contoh,


perhatikan Gambar 8.20. Pada gambar tersebut terdapat 6 objek.Nah, bagaimana
336 Pengolahan Citra, Teori dan Aplikasi

membuat aplikasi yang dapat menghitung jumlah objek?Jawabannya adalah


melalui pelabelan objek.

Gambar 8.20Citra dengan enam objek

Pelabelan terhadap objek sesungguhnya berupa tindakan untuk


memberikan label yang berbeda (berupa nomor) pada setiap objek.
Pemrosesannya dapat dilaksanakan pada citra biner. Ketentuan yang dilakukan
sebagai berikut:

0 7 * * + ( *
S( , ) = T 1 7 * * + 7 Y (8.10)
2,3, … * ( * W(X

Contoh berikut memberikan gambaran tentang hasil pelabelan citra biner di


Gambar 8.20.
Operasi pada Citra Biner 337

Gambar 8.21Pelabelan pada citra biner

Objek yang diberi label akan terlihat jelas jika nilai nol dihilangkan. Hal seperti
itu terlihat pada Gambar 8.22.

Gambar 8.22Objek-objek citra yang telah diberi label


338 Pengolahan Citra, Teori dan Aplikasi

Cara yang umum digunakan untuk melakukan pelabelan adalah melalui


metode pembanjiran (flood filling). Tiga cara untuk melakukan pembanjiran
dibahasoleh Burger & Burge (2008), yaitu sebagai berikut.

Pembanjiran secara rekursif: Pendekatan ini dapat diterapkan dengan


bahasa pemrograman yang mendukung proses rekursif.
Pembanjiran melalui Depth-first: Teknik ini memerlukan struktur data
tumpukan untuk melaksanakan pembanjiran.
Pembanjiran melalui Breadth-first: Teknik ini memerlukan struktur data
antrian untuk melaksanakan pembanjiran.

Secara umum, proses pelabelan dilakukan melalui algoritma berikut.

ALGORITMA 8.10 – Melakukan pelabelan area pada citra


biner
Masukan:
• f (M,N): Citra masukan berukuran M baris dan N kolom
Keluaran:
• g (M, N): Hasil citra yang telah diberi label

1. g ← f
2. label ← 2
3. FOR baris ← 1 TO M
4. FOR kolom ← 1 TO N
5. IF g(baris, kolom) = 1
6. banjiri(g, baris, kolom, label)
7. label ←label + 1
8. END-IF
9. END-FOR
10. END-FOR
Operasi pada Citra Biner 339

11. RETURN g

Algoritma di atas melibatkan fungsi bernama banjiri. Fungsi tersebut akan


diwujudkan dengan tiga cara.
Dengan menggunakan pendekatan 4-ketetanggaan, pembanjiran secara
rekursif dapat dituangkan dalam bentuk algoritma seperti berikut.

ALGORITMA 8.11 – Pelabelan suatu area secara rekursif

banjiri(f, i, j, label):
Masukan:
• f (M,N): Citra masukan berukuran M baris dan N kolom
• i dan j menyatakan baris dan kolom sebagai biji pembanjiran
terhadap area
• label menyatakan label untuk area
Keluaran:
• f (M, N): Hasil citra yang telah diberi label

1. IF koordinat (i, j) berada dalam citra dan f(i, j) = 1


2. f(i, j) ← label
3. banjiri( f, i-1, j, label)
4. banjiri( f, i+1, j, label)
5. banjiri( f, i, j-1, label)
6. banjiri( f, i, j+1, label)
7. END-IF

Perhatikan bahwa fungsi banjiri memanggil empat fungsi banjiri.Keadaan


itulah yang menyatakan bahwa fungsi banjiri adalah fungsi rekursif (fungsi
yang memanggil dirinya sendiri).
Pembanjiran melalui depth-first(mendalam dulu) memiliki algoritma
seperti berikut.
340 Pengolahan Citra, Teori dan Aplikasi

ALGORITMA 8.12 – Pelabelan suatu area dengan pendekatan


mendalam dulu

banjiri(f, i, j, label):
Masukan:
• f (M,N): Citra masukan berukuran M baris dan N kolom
• i dan j menyatakan baris dan kolom sebagai biji pembanjiran
terhadap area
• label menyatakan label untuk area
Keluaran:
• f (M, N): Hasil citra yang telah diberi label

1. Menciptakan tumpukan kosong T


2. Menaruh koordinat (i,j) ke tumpukan sebagai biji (push(T, (i,j))
3. WHILE tumpukan T tidak kosong
4. Mengambil sebuah elemen dari tumpukan T ( (y,x) ← pop(T))
5. IF koordinat (y, x) berada dalam citra dan f(i, j) = 1
6. f(y, x) ← label
7. push(S, (y-1, x))
8. push(S, (y+1, x))
9. push(S, (y, x-1))
10. push(S, (y, x+1))
11. END-IF
12. END-WHILE

Untuk mewujudkan Algoritma 8.12, dibutuhkan struktur data bernama tumpukan


(stack).Di dalam struktur data tumpukan, push berguna untuk memasukkan data
ke dalam tumpukan, sedangkan pop digunakan untuk mengambil data dari
tumpukan.Perlu diketahui, tumpukan adalah struktur data yang mempunyai sifat
LIFO (Last-In First-Out). Artinya, data yang dimasukkan terakhir kali akan
diambil pertama kali.
Operasi pada Citra Biner 341

Adapun algoritma pembanjiran melalui breadth-first(melebar dulu) berupa


seperti berikut.

ALGORITMA 8.13 – Pelabelan suatu area dengan pendekatan melebar


dulu

banjiri(f, i, j, label):
Masukan:
• f (M,N): Citra masukan berukuran M baris dan N kolom
• i dan j menyatakan baris dan kolom sebagai biji pembanjiran
terhadap area
• label menyatakan label untuk area
Keluaran:
• f (M, N): Hasil citra yang telah diberi label

1. Menciptakan antrean kosong A


2. Menaruh koordinat (i,j) ke antrean sebagai biji (insert(A, (i,j))
3. WHILE antrean A tidak kosong
Mengambil sebuah elemen dari antrean A ( (y,x) ← remove(A))
IF koordinat (y, x) berada dalam citra dan f(i, j) = 1
f(y, x) ← label
insert(A, (y-1, x))
insert(A, (y+1, x))
insert(A, (y, x-1))
insert(A, (y, x+1))
END-IF
END-WHILE
4. RETURN f(M,N)

Untuk mewujudkan Algoritma 8.13, dibutuhkan struktur data bernama antrean


(queue). Di dalam struktur data antrean, insert berguna untuk memasukkan
data ke dalam antrean, sedangkan remove digunakan untuk mengambil data dari
342 Pengolahan Citra, Te
Teori dan Aplikasi

antrean. Perlu diketa


tahui, tumpukan adalah struktur data yang m
mempunyai sifat
FIFO (First-In First
st-Out). Artinya, data yang dimasukkan per
ertama kali akan
diambil pertama kali.
li.
Berdasarkan ketiga
k jenis pendekatan pembanjiran terse
rsebut, Burger &
Burge (2008) menyat
yatakan bahwa hanya pembanjiran melalui breadth-first
bre yang
secara praktis m
memberikan hasil yang terbaik.Pemba
banjiran secara
rekursifumumnysnya
ya memiliki kendala terhadap penggunaan tum
tumpukan (stack),
yang biasanya sang
ngat terbatas pada bahasa pemrograman tertentu.Adapun
pembanjiran menggun
unakan depth-first mempunyai kelemahan pad
ada eksekusi yang
sangat lama. Meskii faktanya
f seperti itu, pembanjiran melalui breadth-first
b pun
memakan waktu yan
ang sangat lama bila ukuran citra melebihi 50x50
5 piksel dan
mengandung objek ya
yang berbentuk kompleks.

Itulahh sebabnya, disarankan untuk mempelajarii algoritma


a yang
lain, untuk
un mendapatkan komputasi yang efisien.. S
Sebagai contoh,
pada Octave
O dan MATLAB terdapat fungsi bwlabe
bel yang berguna
untukk melakukan pelabelan objek. Kode fungsi
si tersebut dapat
dipelaj
lajari untuk memungkinkan penulisan kodee dengan bahasa
pemrog
rograman yang lain.

Sebagai con
ontoh, akan diberikan implementasi aalgoritma yang
menggunakan pendek
ekatan breadth-first. Kodenya seperti berikut.

Program : labeli.m

function G = labe
eli(F)
% Memberi label pada
p area di dalam citra biner F
% dengan meng
ggunakan 4-ketetanggan
% Hasil berupa ci
itra G

% Bentuk Antrean awal


Operasi pada Citra Biner 343

Maks_antre = 50000;
Antrean = cell(Maks_antre,1);
depan = 1;
belakang = 1;

G = double(F); % Agar bisa diisi dengan nilai selain 0 dan 1


[m, n] = size(G);
label = 2;
for i=1 : m
for j=1 : n
if G(i, j) == 1
% Kosongkan antrean
depan = 1;
belakang = 1;

% Bentuk simpul dan masukkan ke dalam antrean


simpul.y = i;
simpul.x = j;

if belakang == Maks_antre
if depan == 1
error('Kapasitas antrian penuh');
else
Antrean{obj.belakang} = simpul;
belakang = 1;
end
else
if belakang + 1 == depan
error('Kapasitas antrian penuh');
else
Antrean{belakang} = simpul;
belakang = belakang + 1;
end
end

while belakang ~= depan % Selama antrean tidak kosong


%Ambil dan hapus data pada Antrean

simpul = Antrean{depan};
if depan == 50000
depan = 1;
else
depan = depan + 1;
end

if simpul.x > 0 && simpul.x <= n && ...


simpul.y > 0 && simpul.y <= m && ...
G(simpul.y, simpul.x) == 1
G(simpul.y, simpul.x) = label;

x = simpul.x; y = simpul.y;

simpul.y = y-1; simpul.x = x;


% Sisipkan ke Antrean
if belakang == Maks_antre
if depan == 1
error('Kapasitas antrian penuh');
else
Antrean{obj.belakang} = simpul;
344 Pengolahan Citra, Teori dan Aplikasi

belakang = 1;
end
else
if belakang + 1 == depan
error('Kapasitas antrian penuh');
else
Antrean{belakang} = simpul;
belakang = belakang + 1;
end
end

simpul.y = y+1; simpul.x = x;


% Sisipkan ke Antrean
if belakang == Maks_antre
if depan == 1
error('Kapasitas antrian penuh');
else
Antrean{obj.belakang} = simpul;
belakang = 1;
end
else
if belakang + 1 == depan
error('Kapasitas antrian penuh');
else
Antrean{belakang} = simpul;
belakang = belakang + 1;
end
end

simpul.y = y; simpul.x = x-1;


% Sisipkan ke Antrean
if belakang == Maks_antre
if depan == 1
error('Kapasitas antrian penuh');
else
Antrean{obj.belakang} = simpul;
belakang = 1;
end
else
if belakang + 1 == depan
error('Kapasitas antrian penuh');
else
Antrean{belakang} = simpul;
belakang = belakang + 1;
end
end

simpul.y = y; simpul.x = x+1;


% Sisipkan ke Antrean
if belakang == Maks_antre
if depan == 1
error('Kapasitas antrian penuh');
else
Antrean{obj.belakang} = simpul;
belakang = 1;
end
else
if belakang + 1 == depan
error('Kapasitas antrian penuh');
Operasi pada Citra Biner 345

else
Antrean{belakang} = simpul;
belakang = belakang + 1;
end
end
end
end

label = label + 1;
end
end
end

Akhir Program

Contoh:

>> A = [
0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
0 1 1 1 1 1 1 0 0 0 1 0 0 0 0 0 1 1 0 0 0 0 0 0
0 1 1 1 1 1 1 0 0 1 1 1 0 0 0 0 0 1 1 0 0 0 0 0
0 1 1 1 1 1 1 0 1 1 1 1 1 0 0 0 0 0 1 1 0 0 0 0
0 1 1 1 1 1 1 0 0 1 1 1 0 0 0 0 0 0 0 1 1 0 0 0
0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 1 1 1 0
0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 0 0 0
0 0 0 0 0 0 0 1 1 0 0 0 0 0 0 0 0 0 1 1 0 0 0 0
0 0 0 0 0 0 0 1 1 0 0 0 0 0 0 0 0 1 1 0 0 0 0 0
0 0 0 0 1 1 1 1 1 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0
0 0 0 0 1 1 1 1 1 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 1 1 0 0 0 0 1 1 1 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 1 1 0 0 0 0 0 1 1 1 0 0 0 0 1 1 0
0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 1 0 0 1 1 0 0
0 0 0 0 0 0 0 0 1 1 1 1 0 0 0 0 1 1 1 1 1 0 0 0
1 1 1 1 1 1 1 1 1 1 1 1 0 0 0 0 0 0 1 1 0 0 0 0
1 1 1 1 1 1 1 1 1 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 ];
>> B = labeli(A)

Hasil B dapat dilihat pada Gambar 8.21.


346 Pengolahan Citra, Teori dan Aplikasi

Latihan

1. Jelaskan bahwa fitur suatu objek dapat diperoleh melalui citra biner.
2. Apa yang dimaksud dengan kontur?
3. Pada CD yang tersedia bersama buku ini terdapat citra gambar bernama fork-
3.gif. Kenakan fungsi tepibiner terhadap citra tersebut untuk memperoleh
tepinya. Perlu diperhatikan, citra tersebut bukan berupa citra biner. Jika
perintah Anda benar, Anda akan memperoleh hasil seperti berikut:

4. Jelaskan perbedaan antara kontur internal dan kontur eksternal.


5. Gambarkan kontur eksternal untuk citra seperti berikut dengan menggunakan:
(a) 4-ketetanggaan
(b) 8-ketetanggaan.

0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0
0 0 1 1 1 0 0 0 0
0 0 1 1 1 1 1 0 0
0 0 0 1 1 1 0 0 0
0 0 1 1 1 1 0 0 0
0 0 1 1 0 1 1 0 0
0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0
Operasi pada Citra Biner 347

6. Apa fungsi algoritma Moore?


7. Berapa kode rantai untuk gambar yang tertera pada soal Nomor 5?
8. Apakah objek dengan ukuran dan bentuk yang sama tetapi mempunyai posisi
yang berbeda (objek yang mengalami translasi) memiliki kode rantai yang
sama? Jelaskan!
9. Apa sebenarnya pengertian perimeter itu?
10. Jelaskan kehadiran √2pada Persamaan 8.2.
11. Luas suatu objek dapat diperoleh dengan menghitung jumlah piksel dalam
objek. Tuliskan algoritma untuk menghitung luas dengan cara seperti itu,
dengan asumsi citra berukuran m x n.

12. Pendekatan yang lain untuk menghitung luas suatu objek dilakukan melalui
kode rantai dengan ketentuan seperti berikut.

Kode 0: Area = Area + Y


Kode 1: Area = Area + (Y + 0.5)
Kode 2: Area = Area + 0
Kode 3: Area = Area – (Y + 0,5)
Kode 4: Area = Area - Y
Kode 5: Area = Area – (Y + 0,5)
Kode 6: Area = Area + 0
Kode 7: Area = Area + (Y + 0,5)

Berapakah luas objek yang terdapat pada citra berikut?


348 Pengolahan Citra, Teori dan Aplikasi

0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0
0 0 1 1 1 0 0 0 0
0 0 1 1 1 1 1 0 0
0 0 0 1 1 1 1 0 0
0 0 1 1 1 1 1 0 0
0 0 1 1 0 1 0 0 0
0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0

13. Jelaskan fitur-fitur berikut:


(a) kebulatan
(b) kekompakan
(c) kerampingan

14. Apa yang dimaksud dengan centroid? Apa kegunaannya?


15. Apa yang dimaksud dengan panjang chord utama dalam dispersi? Kalau perlu,
gambarkan.
16. Terdapat citra seperti berikut.

Bagaimana hasil pelabelan atas objek-objek yang terdapat di dalamnya?


BAB 9
Pengolahan
Citra Berwarna

Setelah bab ini berakhir, diharapkan pembaca memahami


berbagai bahasan berikut dan mampu mempraktikkan
berbagai hal yang terkait dengan materi bersangkutan.
Dasar Warna
Ruang Warna
Ruang Warna RGB
Ruang Warna CMY/CMYK
Ruang Warna YIQ
Ruang Warna YCbCr
Ruang Warna HSI, HSV, dan HSL
Ruang Warna CIELAB
Memperoleh Statistika Warna
Mengatur Kecerahan dan Kontras
Menghitung Jumlah Warna
Aplikasi Pencarian Citra Berdasarkan Warna
Dominan
350 Pengolahan Citra Teori dan Aplikasi

9.1 Dasar Warna


Manusia sebenarnya melihat warna adalah karena cahaya yang dipantulkan
oleh objek. Dalam hal ini, spektrum cahaya kromatis berkisar antara 400-700 nm
(Zhou,dkk., 2010). Istilah kromatis berarti kualitas warna cahaya yang ditentukan
oleh panjang gelombang.
Karakteristik persepsi mata manusia dalam yang membedakan antara satu
warna dengan warna yang lain berupahue, saturation, dan brightness.

Hue merujuk ke warna yang dikenal manusia, seperti merah dan hijau.
Properti ini mencerminkan warna yang ditangkap oleh mata manusia yang
menanggapi berbagai nilai panjang gelombang cahaya. Sebagai contoh, bila
mata menangkap panjang gelombang antara 430 dan 480 nanometer, sensasi
yang diterima adalah warna biru, sedangkan jika panjang gelombang berkisar
antara 570 sampai dengan 600 nm, warna yang terlihat adalah kuning (Crane,
1997), sedang campuran merah dan hijau terlihat kuning.
Saturation menyatakan tingkat kemurnian warna atau seberapa banyak cahaya
putih yang tercampur dengan hue. Setiap warna murni bersaturasi 100% dan
tidak mengandung cahaya putih sama sekali. Dengan kata lain, suatu warna
murni yang bercampur dengan cahaya putih memiliki saturasi antara 0 dan
100%.
Brightness atau kadang disebut lightness (kecerahan) menyatakan intensitas
pantulan objek yang diterima mata. Intensitas dapat dinyatakan sebagai
perubahan warna putih menuju abu-abu dan terakhir mencapai ke warna
hitam, atau yang dikenal dengan istilah aras keabuan.

Perlu diketahui, istilah kromatik berarti gabungan antara hue dan saturation dan
istilah akromatik merujuk ke kecerahan.

9.2 Ruang Warna


Gonzalez & Woods (2002) mendefinisikan ruang warna(atau kadang
disebut sistem warna atau model warna) sebagai suatu spesifikasi sistem koordinat
dan suatu subruang dalam sistem tersebut dengan setiap warna dinyatakan dengan
satu titik di dalamnya. Tujuan dibentuknya ruang warna adalah untuk
memfasilitasi spesifikasi warna dalam bentuk suatu standar. Ruang warna yang
paling dikenal pada perangkat komputer adalah RGB, yang sesuai dengan watak
manusia dalam menangkap warna. Namun, kemudian dibuat banyak ruang warna,
antara lain HSI, CMY, LUV, dan YIQ.

9.2.1 Ruang Warna RGB


Ruang warna RGB biasa diterapkan pada monitor CRT dan kebanyakan
sistem grafika komputer. Ruang warna ini menggunakan tiga komponen dasar
Pengolahan Citra Berwarna 351

yaitu merah (R), hijau (G), dan biru (B). Setiap piksel dibentuk oleh ketiga
komponen tersebut. Model RGB biasa disajikan dalam bentuk kubus tiga dimensi,
dengan warna merah, hijau, dan biru berada pada pojok sumbu (Gambar 9.1).
Warna hitam berada pada titik asal dan warna putih berada di ujung kubus yang
berseberangan. Gambar 9.2 memperlihatkan kubus warna secara nyata dengan
resolusi 24 bit. Perlu diketahui, dengan menggunakan 24 bit, jumlah warna
mencapai 16.777.216.

(0,0,1)

Biru Cyan

Putih
Magenta
(0,1,0)
Aras
keabuan

G
Hitam
Hijau
Merah

Kuning
(1,0,0)
R

Gambar 9.1 Skema ruang warna RGB dalam bentuk kubus

Biru

Magenta
Cyan

Hijau

Merah
Kuning

Gambar 9.2Kubus warna dengan 24 bit


352 Pengolahan Citra Teori dan Aplikasi

RGB biasa digunakan karena kemudahan dalam perancangan hardware,


tetapi sebenarnya tidak ideal untuk beberapa aplikasi. Mengingat warna merah,
hijau, dan biru sesungguhnya terkorelasi erat, sangat sulit untuk beberapa
algoritma pemrosesan citra (Crane, 1997). Sebagai contoh, kebutuhan untuk
memperoleh warna alamiah seperti merah dengan menggunakan RGB menjadi
sangat kompleks mengingat komponen R dapat berpasangan dengan G dan B,
dengan nilai berapa saja. Hal ini menjadi mudah jika menggunakan ruang warna
HLS ataupun HSV.

9.2.2 Ruang Warna CMY/CMYK


Model warna CMY (cyan, magenta, yellow) mempunyai hubungan dengan
RGB sebagai berikut:

1
= 1 −
1
(9.1)

Dalam hal ini, R, G, dan B berupa nilai warna yang telah dinormalisasi, dengan
jangkauan [0, 1].
Pada CMY, warna hitam diperoleh jika C, M, dan Y bernilai sama. Namun,
pada aplikasi printer, warna hitam ditambahkan tersendiri sehingga membentuk
CMYK, dengan K menyatakan warna hitam. Alasannya, kalau ada warna hitam,
warna dapat diambilkan secara langsung dari tinta hitam, tanpa perlu mencampur
dengan warna lain. Lagipula, tinta warna hitam lebih murah daripada tinta
berwarna dan paling sering digunakan terutama untuk teks.

Kuning
Merah Kuning Hijau

Putih Merah Hijau


Hitam
Magenta Cyan
Magenta Cyan
Biru Biru

(a) Penjumlahan warna pada sistem RGB (b) Pengurangan warna pada sistem CMY

Gambar 9.3Warna-warna lain dapat dibentuk melalui


kombinasi tiga warna dasar
Pengolahan Citra Berwarna 353

Perlu diketahui, konversi dari CMY ke CMYK dapat menggunakan


berbagai cara perhitungan. Salah satu rumusyang digunakan sebagai berikut
(Crane, 1997):

K = min(C, M, Y) (9.2)
C’ = C - K (9.3)
M’ = M - K (9.4)
Y’ = Y - K (9.5)

Dengan pendekatan seperti itu, salah satu dari C’, M’, atau Y’ akan bernilai 0.
Namun, ada pula yang menggunakan rumus seperti berikut (Dietrich, 2003):

K = min(C, M, Y) (9.6)
C = (C – K)/(1-K) (9.7)
M = (M – K) (1-K) (9.8)
Y = (Y – K) (1-K) (9.9)

Dalam hal ini, jika K = 1, C=Y=K=0.


Selain itu, pendekatan yang lain terdapat pada Pratt (2001). Rumus yang
digunakan berupa:

Kb = min(1-R, 1-G, 1-B) (9.10)


C = 1 - R - uKb (9.11)
M = 1 – G - uKb (9.12)
Y = 1 – B - uKb (9.13)
K = bKb (9.14)

Dalam hal ini, 0 < u < 1 dan 0 < b < 1,0.


Contoh konversi dari RGB ke CMYK ditunjukkan di bawah ini.

Program : RGBkeCMY.m

function [C,M,Y,K] = RGBkeCMY(R,G,B)


% RGBkeCMY digunakan untuk mengonversi RGB ke CMYK
% Berdasarkan Pratt (2001)

% Normalisasi RGB ke [0, 1]


R = double(R);
G = double(G);
B = double(B);

if max(max(R)) > 1.0 || max(max(G)) > 1.0 || ...


max(max(B)) > 1.0
354 Pengolahan Citra Teori dan Aplikasi

R = double(R) / 255;
G = double(G) / 255;
B = double(B) / 255;
end

u = 0.5;
b = 1;
[tinggi, lebar] = size(R);
for m=1: tinggi
for n=1: lebar
Kb = min([(1-R(m,n)) (1-G(m,n)) (1-B(m,n))]);
if Kb == 1
C(m,n) = 0;
M(m,n) = 0;
Y(m,n) = 0;
else
C(m,n) = (1.0 - R(m,n) - u * Kb);
M(m,n) = (1.0 - G(m,n) - u * Kb);
Y(m,n) = (1.0 - B(m,n) - u * Kb);
K(m,n) = b * Kb;
end
end
end

% Konversikan ke jangkauan [0,255]


C = uint8(C * 255);
M = uint8(M * 255);
Y = uint8(Y * 255);
K = uint8(K * 255);

Akhir Program

Contoh di atas didasarkan pada Persamaan 9.10 hingga 9.14. Masukan R, G, dan
B dapatberjangkauan [0, 1] ataupun [0, 255]. Fungsi RGBkeCMYdengan
sendirinya akan menormalisasi R,G,B sehingga berjangkauan [0, 1]. Hasil C,M,Y,
dan K akan diatur berjangkauan [0, 255]. Contoh penggunaan pada satu piksel:

>> [C,M,Y,K]=RGBkeCMY(171, 215, 170)


C =64
M =20
Y =65
K =40
>>

Contoh konversi untuk seluruh citra diperlihatkan berikut ini.

>>Img=imread('C:\Image\lapangan.png');
>> [C,M,Y,K]=RGBkeCMY(Img(:,:,1),Img(:,:,2),Img(:,:,3));
>>
Pengolahan Citra Ber
erwarna 355

Pada contoh di aatas, Img(:,:,1),Img(:,:,2),Img(:,:,3) secara ra berturut-turut


menyatakan kompone nen R, G, dan B. Dengan cara seperti itu,, C, M, Y, dan K
berupa matriks yangg masing-masing
m menyatakan komponen C, M, Y, dan K.
Konversi dari CM
CMY ke RGB pada dasarnya dapat dilakukan an dengan mudah,
dengan mengacu pada
ada Persamaan9.11 hingga 9.14. Implementasin
sinya dapat dilihat
pada contoh berikut.

Program : CMYkeRGB.m

function [R,G,B] = CMYkeRGB(C,M,Y,K)


% CMYkeRGB diguna
akan untuk mengonversi CMYK ke RGB
% Berdasarkan Pratt (2001)
% Dasar: b=1 dan
d u = 0,5

% Normalisasi CMY
Y ke [0, 1]
C = double(C);
M = double(M);
Y = double(Y);
K = double(K);

if max(max(C)) > 1.0 || max(max(M)) > 1.0 || ...


max(max(Y)) > 1.0 || max(max(K)) > 1.0
C = double(C)
) / 255;
M = double(M)
) / 255;
Y = double(Y)
) / 255;
K = double(K)
) / 255;
end

u = 0.5;
b = 1;
[tinggi, lebar] = size(C);
for m=1: tinggi
for n=1: leba
ar

Kb = K(m,,n) / b;
if Kb == 1
R(m,n
n)=0;
G(m,n
n)=0;
B(m,n
n)=0;
else
R(m,n
n) = 1 - (C(m, n) + u * Kb);
G(m,n
n) = 1 - (M(m, n) + u * Kb);
B(m,n
n) = 1 - (Y(m, n) + u * Kb);
end
end
end

% Konversikan ke jangkauan [0,255]


R = uint8(R * 255
5);
G = uint8(G * 255
5);
B = uint8(B * 255
5);
356 Pengolahan Citra Teori dan
an Aplikasi

Akhir Program

Contoh:

>> [R,G,B]=C
CMYkeRGB(64,20,65,40)
R =171
G =215
B =170
>>

9.2.3 Ruang Warnaa Y


YIQ
Ruang warna YIQ, yang juga dikenal dengan nama ruan ang warna NTSC,
dirumuskan oleh NT NTSC ketika mengembangkan sistem televi evisi berwarna di
Amerika Serikat. Padada model ini, Y disebut luma(yang menyataka
kan luminans) dan
I serta Q disebut chrom
roma. Konversi YIQ berdasarkan RGB sebagai ai berikut:

0,299
299 0,587 0,114
= 0,596
596 −0,274 −0,322
0,211
211 −0,523 0,312
(9.2)

Komposisi RGB untutuk Y secara statistis optimal untuk ditampilkan


kan pada penerima
TV hitam-putih.
Matriks yang beri
erisi koefisien konversi mempunyai ciri-ciri seb
ebagai berikut:
1) jumlah elemen
en dalam baris pertama bernilai 1;
2) jumlah koefis
fisien elemen dalam baris kedua maupun baris ris ketiga bernilai
nol.

000 0,956
1,000 0,621
Adapun konve
versi RGB dari YIQ sebagai berikut:

= 1,000
000 −0,272 −0,647
1,000
000 −1,106 1,703
(9.3)

Contoh berikutt menunjukkan


m suatu fungsi yang ditujukan untuk
u menangani
konversi dari RGB ke YIQ.

Program : RGBkeYIQ.m

function [Y, I, Q]
Q = RGBkeYIQ(R,G,B)
% RGBkeYIQ diguna
akan untuk mengonversi RGB ke YIQ

% Normalisasi RGB
B ke [0, 1]
R = double(R);
G = double(G);
Pengolahan Citra Ber
erwarna 357

B = double(B);

if max(max(R)) > 1.0 || max(max(G)) > 1.0 || ...


max(max(B)) > 1.0
0
R = double(R)
) / 255;
G = double(G)
) / 255;
B = double(B)
) / 255;
end

[tinggi, lebar] = size(R);


for m=1: tinggi
for n=1: leba
ar
Y(m,n)=0.
.299*R(m,n)+0.587*G(m,n)+0.114*B(m,n)
);
I(m,n)=0.
.596*R(m,n)-0.274*G(m,n)-0.322*B(m,n)
);
Q(m,n)=0.211*R(m,
,n)-0.523*G(m,n)+0.312*B(m,n);
end
end

% Konversikan ke jangkauan [0,255]


Y = uint8(Y * 255
5);
I = uint8(I * 255
5);
Q = uint8(Q * 255
5);

Akhir Program

Contoh penggunaan fungsiRGBkeYIQ:


f

>> [Y,I,Q]=RGBk
keYIQ(171, 20, 250)
Y =91
I =16
Q =104
>>

Fungsi kebalikanannya, yaitu untuk melakukan konversi dar


ari YIQ ke RGB
ditunjukkan berikutt in
ini.

Program : YIQkeRGB.m

function [R, G, B]
B = YIQkeRGB(Y,I,Q)
% YIQkeRGB diguna
akan untuk mengonversi YIQ ke RGB

% Normalisasi YIQ
Q ke [0, 1]
Y = double(Y);
I = double(I);
Q = double(Q);

if max(max(Y)) > 1.0 || max(max(I)) > 1.0 || ...


max(max(Q)) > 1.0
0
358 Pengolahan Citra Teori dan Aplikasi

Y = double(Y) / 255;
I = double(I) / 255;
Q = double(Q) / 255;
end

[tinggi, lebar] = size(Y);


for m=1: tinggi
for n=1: lebar
R(m,n) = Y(m,n)+0.956*I(m,n) + 0.621 * Q(m,n);
G(m,n) = Y(m,n)-0.272 *I(m,n) - 0.647 * Q(m,n);
B(m,n) = Y(m,n)-1.106 * I(m,n) + 1.703 * Q(m,n);
end
end

% Konversikan ke jangkauan [0,255]


R = uint8(R * 255);
G = uint8(G * 255);
B = uint8(B * 255);

Akhir Program

Contoh penggunaan fungsi YIQkeRGB:

>> [Y,I,Q]=YIQkeRGB(48, 16, 43)


Y =90
I = 16
Q =104
>>

9.2.4 Ruang Warna YCbCr


Ruang warna YCbCr biasa digunakan pada video digital. Pada ruang
warna ini, komponen Y menyatakan intensitas, sedangkan Cb dan Cr menyatakan
informasi warna. Proses konversi dari RGB dilakukan dengan beberapa cara.
Contoh berikut didasarkan pada rekomendasi CCIR 601-1 (Crane, 1997):

= 0,29900 + 0,58700 + 0,11400


= −0,16874 − 0,33126 + 0,5000
(9.4)

= +0,5000 − 0,41869 − 0,08131


(9.5)
(9.6)

Adapun pengonversian dari YCbCr ke RGB sebagai berikut:

= + 1.40200
= − 0,34414 − 0,71414
(9.7)

= + 1,77200
(9.8)
(9.9)
Pengolahan Citra Ber
erwarna 359

Contoh fungsi yang y digunakan untuk melakukan konvers


rsi dari RGB ke
YCbCr dapat dilihatt bberikut ini.

Program : RGBkeYCB.m

function [Y, Cb, Cr] = RGBkeYCB(R,G,B)


% RGBkeYCB diguna
akan untuk mengonversi RGB ke YCbCr

% Normalisasi RGB
B ke [0, 1]
R = double(R);
G = double(G);
B = double(B);

if max(max(R)) > 1.0 || max(max(G)) > 1.0 || ...


max(max(B)) > 1.0
R = double(R)
) / 255;
G = double(G)
) / 255;
B = double(B)
) / 255;
end

[tinggi, lebar] = size(R);


for m=1: tinggi
for n=1: leba
ar
Y(m,n)=0.
.299*R(m,n)+0.587*G(m,n)+ 0.114*B(m,n
n);
Cb(m,n)=-
-0.1687*R(m,n)-0.33126*G(m,n)+0.5*B(m
m,n);
Cr(m,n)=0
0.5*R(m,n)-0.41869*G(m,n)-0.08131*B(m
m,n);
end
end

Y = Y * 255;
Cb = Cb * 255;
Cr = Cr * 255;

Akhir Program

Contoh penggunaan fungsi


f RGBkeYCB:

>> [Y,Cb,C
Cr]=RGBkeYCB(9, 16, 250)
Y =40.5830
0
Cb = 118.1
1815
Cr =-22.52
265
>>

Adapun fungsi yang


ya digunakan untuk mengonversi dari YCbCr ke RGB dapat
dilihat di bawah ini.
360 Pengolahan Citra Teori dan
an Aplikasi

Program : YCBkeRGB.m

function [R, G, B]
B = YCBkeRGB(Y,Cb,Cr)
% YCBkeRGB diguna
akan untuk mengonversi YCbCr ke RGB

% Normalisasi Y, Cb, Cr ke [0, 1]


Y = double(Y);
Cr = double(Cr);
Cb = double(Cb);

if max(max(Y)) > 1.0 || max(max(Cb)) > 1.0 || ...


max(max(Cr)) > 1.0
Y = double(Y)
) / 255;
Cr = double(C
Cr) / 255;
Cb = double(C
Cb) / 255;
end

[tinggi, lebar] = size(Y);


for m=1: tinggi
for n=1: leba
ar
R(m,n) = Y(m,n) + 1.402 * Cr(m,n);
G(m,n)= Y(m,n)-0.34414*Cb(m,n)-0.71414*Cr(m,n
Y n);
B(m,n)= Y(m,n)
Y + 1.7720 * Cb(m,n);
end
end

R = uint8(R * 255
5);
G = uint8(G * 255
5);
B = uint8(B * 255
5);

Akhir Program

Contoh penggunaan:

>> [R,G,B]=
=YCBkeRGB(40.5830, 118.1815, -22.
.5265)
R =9
G = 16
B =250
>>

9.2.5 Ruang Warnaa HSI, HSV, dan HSL


HSV dan HS SL merupakan contoh ruang warna yang me merepresentasikan
warna seperti yang dilihat
d oleh mata manusia. H berasal dari
ri kata “hue”, S
berasal dari “saturati
ation”, L berasal dari kata “luminance”, I berasal
b dari kata
“intensity”, dan V ber
erasal dari “value”.
Pengolahan Citra Berwarna 361

Ruang warna HLS terkadang disebut HSL, sedangkan HSV


terkadang dinamakan HSB, dengan B berasal dari kata
“brightness”.

Gambar 9.4 Ruang warna HSV


(Sumber: MATLAB)

Model HSV, yang pertama kali diperkenalkan A. R. Smith pada tahun 1978,
ditunjukkan pada Gambar 9.4. Untuk mendapatkan nilai H, S, V berdasarkan R,
G, dan B, terdapat beberapa cara. Cara yang tersederhana (Acharya& Ray, 2005)
adalah seperti berikut.

= tan !((%$))((%&)*
"($%&)
(9.10)

+ = 1−
,-. ((,$,&)
/
(9.11)

0=
()$)&
"
(9.12)

Namun, cara ini membuat hue tidak terdefinisikan kalau S bernilai nol. Cara
kedua terdapat pada Acharya& Ray (2005). Rumus-rumus yang digunakan
sebagai berikut:

1= , 2 = ,3=
( $ &
(()$)&) (()$)&) (()$)&)
(9.13)
362 Pengolahan Citra Teori dan
an Aplikasi

0 = max (1, 2, 3)
3 (9.14)

0, jika V = 0
+=6 G
1− , 0 F 0
,-.(( ,7 7, ) (9.15)
/

0, HIJK + = 0
;
, HIJK 0 = 1
<=∗((7% )
9
G
?∗/
?
=
: 60 ∗ @@2 + ?∗/ L , HIJK 0 = 2
% (9.16)
9
860 ∗ @@4 + ?∗/ L , HIJK 0 = 3
%7

= H + 360 jika H
360 M0 (9.17)

Implementasi ber
erikut didasarkan pada rumus-rumus di atas.

Program : RGBkeHSV.m

function [H,S,V] = RGBkeHSV(R,G,B)


% RGBkeHSV diguna
akan untuk mengonversi RGB ke HSV.
% Algoritma be
erdasarkan Acharya & Ray (2005)

% Normalisasi RGB
B ke [0, 1]
R = double(R);
G = double(G);
B = double(B);

if max(max(R)) > 1.0 || max(max(G)) > 1.0 || ...


max(max(B)) > 1.0
R = double(R)
) / 255;
G = double(G)
) / 255;
B = double(B)
) / 255;
end

[tinggi, lebar] = size(R);


for m=1: tinggi
for n=1: leba
ar
minrgb = min([R(m,n) G(m,n) B(m,n)]);
maxrgb = max([R(m,n) G(m,n) B(m,n)]);
V(m,n) = maxrgb;
delta = maxrgb
m - minrgb;

if maxrgbb == 0
S(m,n
n) = 0;
else
S(m,n
n) = 1 - minrgb / maxrgb;
end

if S(m,n)) == 0
H(m,n
n) = 0;
else
Pengolahan Citra Ber
erwarna 363

SV = S(m,n) * V(m,n);

if R((m,n) == maxrgb
% Di antara kuning dan magenta
H
H(m,n) = (G(m,n)-B(m,n)) / SV;
elseiif G(m,n) == maxrgb
% Di antara cyan dan kuning
H
H(m,n) = 2 + (B(m,n)-R(m,n)) / SV;
else
% Di antara magenta dan cyan
H
H(m,n) = 4 + (R(m,n)-G(m,n)) / SV;
end

H(m,n
n) = H(m,n) * 60;
if H(
(m,n) < 0
H
H(m,n) = H(m,n)+360;
end
end
end
end

% Konversikan ke jangkauan [0, 255] atau [0, 360]


H = uint8(H * 255
5/360);
S = uint8(S * 255
5);
V = uint8(V * 255
5);

Akhir Program

Proses untuk men


engonversi HSV ke RGB dapat dilihat di bawa
wah ini.

Program : HSVkeRGB.m

function [R,G,B] = HSVkeRGB(H,S,V)


% HSVkeRGB diguna
akan untuk mengonversi HSV ke RGB

% Normalisasi SV ke [0, 1] dan H ke [0, 360]


H = double(H);
S = double(S);
V = double(V);

if max(max(H)) > 1.0 || max(max(S)) > 1.0 || ...


max(max(V)) > 1.0
H = double(H)
) / 255 * 360;
S = double(S)
) / 255;
V = double(V)
) / 255;
end

[tinggi, lebar] = size(H);


for m=1: tinggi
for n=1: leba
ar
if S(m,n)
) == 0
R(m,n
n) = V(m,n);
364 Pengolahan Citra Teori dan Aplikasi

G(m,n) = V(m,n);
B(m,n) = V(m,n);
else
% S != 0

% Menghitung posisi sektor (0 s/d 5)


H(m,n) = H(m,n) / 60;
sektor = floor(H(m, n));
faktor = H(m,n) - sektor;
p = V(m,n) * (1 - S(m,n));
q = V(m,n) * (1 - S(m,n) * faktor);
t = V(m,n) * (1 - S(m,n) * (1 - faktor));

switch sektor
case 0
R(m,n) = V(m,n);
G(m,n) = t;
B(m,n) = p;
case 1
R(m,n) = q;
G(m,n) = V(m,n);
B(m,n) = p;
case 2
R(m,n) = p;
G(m,n) = V(m,n);
B(m,n) = t;
case 3
R(m,n) = p;
G(m,n) = q;
B(m,n) = V(m,n);
case 4
R(m,n) = t;
G(m,n) = p;
B(m,n) = V(m,n);
otherwise % case 5
R(m,n) = V(m,n);
G(m,n) = p;
B(m,n) = q;
end
end
end
end

R = uint8(R * 255);
G = uint8(G * 255);
B = uint8(B * 255);

Akhir Program

Berikut adalah contoh pemanggilan fungsi RGBkeHSV dan HSVkeRGB :

>> [H,S,V]=RGBkeHSV(100, 120, 80)


H =64
S =85
Pengolahan Citra Berwarna 365

V =120
>> [R,G,B]=HSVkeRGB(64, 85, 120)
R = 100
G =120
B =80
>>

Gambar 9.5Model HSI

Gambar 9.5 memperlihatkan ruang warna HSI. Konversi dari RGB keHSI
dilakukan melalui rumus berikut (Gonzalez & Woods, 2002):

0, HIJK ≤ G
=N
360 − P, HIJK F
(9.18)

Pada rumus di atas, H menyatakan hue. Adapunθ diperoleh melalui rumus berikut:

P = QRS %T UX((%$)Z ((%&)($%&)Y[/Z \


T/WX((%$))((%&)Y
(9.19)
366 Pengolahan Citra Teori dan Aplikasi

Selanjutnya, komponen saturation dihitung dengan menggunakan rumus:

+ = 1− Xmin ( , , )Y
"
(()$)&)
(9.20)

dan komponen intensitas diperoleh melalui:

= "( + + )
T
(9.21)

Untuk memperoleh RGB berdasarkan HSI, diperlukan beberapa aturan.


Apabila H berada dalam sektor RG (0o< H < 120o), komponen R, G, dan B
dihitung dengan menggunakan rumus-rumus berikut:

= (1 − +) (9.22)
= !1 + ]^_ (<=a %`)*
? ]^_ `
(9.23)
= 3 − ( + )) (9.24)

Apabila H berada di dalam sektor GB (120o< H < 240o), komponen R, G, dan B


dihitung dengan menggunakan rumus-rumus berikut:

= − 120
= (1 − +)
(9.25)
(9.26)
= !1 + *
? ]^_ `
]^_ (<=a %`)
(9.27)
= 3 − ( + )) (9.28)

Apabila H berada di dalam sektor GB (240o< H < 360o), komponen R, G, dan B


dihitung dengan menggunakan rumus-rumus berikut:

= − 240
= (1 − +)
(9.29)
(9.30)
= !1 + *
? ]^_ `
]^_ (<=a %`)
(9.31)
= 3 − ( + )) (9.32)

Perlu diketahui, mengingat nilai pada HSI berada di dalam jangkauan [0,
1], maka untuk mendapatkan nilai H yang berkisar antara 0o-360o, H perlu
dikalikan terlebih dulu dengan 360. Dengan demikian, jangkauan H berada dalam
[0, 360].
Contoh berikut merupakan perwujudan fungsi yang ditujukan untuk
melakukan konversi dari RGB ke HSI.
Pengolahan Citra Ber
erwarna 367

Program : RGBkeHSI.m

function [H,S,I] = RGBkeHSI(R,G,B)


% RGBkeHSI diguna
akan untuk mengonversi RGB ke HSI.

% Normalisasi RGB
B ke [0, 1]
R = double(R);
G = double(G);
B = double(B);

if max(max(R)) > 1.0 || max(max(G)) > 1.0 || ...


max(max(B)) > 1.0
R = double(R)
) / 255;
G = double(G)
) / 255;
B = double(B)
) / 255;
end

[tinggi, lebar] = size(R);


for m=1: tinggi
for n=1: leba
ar
minrgb = min([R(m,n) G(m,n) B(m,n)]);
I(m,n) = (R(m,n) + G(m,n) + B(m,n)) / 3.0;

if R(m,n)) == G(m,n) && G(m,n) == B(m,n)


S(m,n
n) = 0;
H(m,n
n) = 0;
else
S(m,n
n) = 1 - 3 * minrgb / ...
(R(m,n)+G(m,n)+B(m,n));

y = (R(m,n)-G(m,n)+R(m,n)-B(m,n))/2;
(
x = (R(m,n)-G(m,n))*(R(m,n)-G(m,n))
( + ...
.
(
(R(m,n)-B(m,n)) * (G(m,n)-B(m,n));
x = sqrt(x);
s
sudutt = acos(y/x) * 180/pi;
if B((m,n) > G(m,n)
H
H(m, n) = 360 - sudut;
else
H
H(m,n) = sudut;
end
end
end
end

% Konversikan ke jangkauan [0, 255] dan [0, 360]


H = uint8(H * 255
5/360);
S = uint8(S * 255
5);
I = uint8(I * 255
5);

Akhir Program
368 Pengolahan Citra Teori dan
an Aplikasi

Adapun fungsi HSIk


keRGB ditujukan untuk mengonversi data pad
ada ruang HSI ke
RGB. Implementasiny
inya seperti berikut.

Program : HSIkeRGB.m

function [R,G,B] = HSIkeRGB(H,S,I)


% HSIkeRGB diguna
akan untuk mengonversi HSI ke RGB.

% Normalisasi HSI
I ke [0, 1]
H = double(H);
S = double(S);
I = double(I);

if max(max(H)) > 1.0 || max(max(S)) > 1.0 || ...


max(max(I)) > 1.0
H = double(H)
) / 255 * 360;
S = double(S)
) / 255;
I = double(I)
) / 255;
end

[tinggi, lebar] = size(H);


for m=1: tinggi
for n=1: lebaar
if I(m,n)) == 0
R(m,n
n) = 0;
G(m,n
n) = 0;
B(m,n
n) = 0;
elseif S((m,n) == 0
R(m,n
n) = I(m,n);
G(m,n
n) = I(m,n);
B(m,n
n) = I(m,n);
else
if H(
(m,n) < 0
H
H(m,n) = H(m,n) + 360.0;
end

skala
a = 3 * I(m,n);
if H(
(m,n) <= 120
s
sudut1 = H(m,n) * 0.017453292;
sudut2 = (60 - H(
(m,n)) * 0.017453292;
B
B(m,n) = (1 - S(m,n)) / 3;
R
R(m,n) = (1 + (S(m,n) * cos(sudut1)/.
...
cos(sudut2))) / 3;
G
G(m,n) = 1 - R(m,n) - B(m,n);

B(m,n) = B(m,n) *
B skala;
R
R(m,n) = R(m,n) * skala;
G
G(m,n) = G(m,n) * skala;
elsei
if H(m,n) <= 240
H
H(m,n) = H(m,n) - 120;

sudut1 = H(m,n) * 0.017453292;


s
s
sudut2 = (60 - H(m,n)) * 0.017453292;
;
Pengolahan Citra Berwarna 369

R(m,n) = (1 - S(m,n)) / 3;
G(m,n) = (1 + (S(m,n) * cos(sudut1)/...
cos(sudut2))) / 3;
B(m,n) = 1 - R(m,n) - G(m,n);

R(m,n) = R(m,n) * skala;


G(m,n) = G(m,n) * skala;
B(m,n) = B(m,n) * skala;
else
H(m,n) = H(m,n) - 240;

sudut1 =
H(m,n) * 0.017453292;
sudut2 =
(60 - H(m,n)) * 0.017453292;
G(m,n) =
(1 - S(m,n)) / 3;
B(m,n) =
(1 + (S(m,n) * cos(sudut1)/...
cos(sudut2))) / 3;
R(m,n) = 1 - G(m,n) - B(m,n);

G(m,n) = G(m,n) * skala;


B(m,n) = B(m,n) * skala;
R(m,n) = R(m,n) * skala;

end
end
end
end

% Konversikan ke jangkauan [0, 255]


R = uint8(R * 255);
G = uint8(G * 255);
B = uint8(B * 255);

Akhir Program

Contoh penggunaan HSIkeRGB dan RGBkeHSI ditunjukkan di bawah ini.

>> [H,S,I]=HSIkeRGB(156, 146, 140)


H =0.2347
S =0.4759
I =0.9365
>>
>> [R,G,B]=HSIkeRGB(156, 146, 140)
R =60
G =121
B =239
>>
370 Pengolahan Citra Teori dan Aplikasi

Putih

Hijau Kuning

Merah

Hijau
Magenta

Hitam

H
S

Gambar 9.6Model HSL

Model ruang HSL diperlihatkan pada Gambar 9.6. Besaran kecerahan


(dinamakan lightness)disimbolkan dengan L. Perhitungan komponen H, S, dan L
berdasarkan komponen R,G, dan B adalah seperti berikut (Agoston, 2005).

bcd = min ( , , )
bef = max ( , , )
(9.33)

g=
(9.34)
hijk )hilm
W
0, =
(9.35)

;
bcd bef
, g ≤ 0,5
hijk %hilm
+= hijk )hilm G
:
8W%(hijk )hnop ) , g F 0,5
hijk %hilm
(9.36)

qrstu rts, bcd = bef


;
, = bef
$%&
9 hijk %hilm
= 2 + &%( , = G
: bef
(9.37)
hijk %hilm
9
84 + hijk %hilm , vwxvJ yKIwwzK
(%$
Pengolahan Citra Ber
erwarna 371

= { 60
|IJK M 0 }KJK
}KJK = + 360
(9.38)
(9.39)

Fungsi yang ditujukan


d untuk mengonversi dari RGB ke H
HSL dapat dilihat
di bawah ini.

Program : RGBkeHSL.m

function [H,S,L] = RGBkeHSL(R,G,B)


% RGBkeHSL diguna
akan untuk mengonversi RGB ke HSL.
% Berdasarkan algoritma Max K. Agoston (2005)

% Normalisasi RGB
B
R = double(R);
G = double(G);
B = double(B);

if max(max(R)) > 1.0 || max(max(G)) > 1.0 || ...


max(max(B)) > 1.0
R = double(R)
) / 255;
G = double(G)
) / 255;
B = double(B)
) / 255;
end

[tinggi, lebar] = size(R);


for m=1: tinggi
for n=1: leba
ar
minrgb = min([R(m,n) G(m,n) B(m,n)]);
maxrgb = max([R(m,n) G(m,n) B(m,n)]);

if maxrgbb == minrgb
S(m,n
n) = 0;
H(m,n
n) = 0; % Cek microsoft
else
L(m,n
n) = (minrgb + maxrgb) / 2;
d = (maxrgb
( - minrgb);

if L((m,n) <= 0.5


S
S(m,n) = d / (maxrgb + minrgb);
else
S
S(m,n) = d / (2 - minrgb - maxrgb);
end

% Tenntukan hue
if R((m,n) == maxrgb
% Warna antara kuning dan magenta
H
H(m,n) = (G(m,n)-B(m,n))/d;
elseiif G(m,n) == maxrgb
% Warna antara cyan dan kuning
H
H(m,n) = 2+(B(m,n)-R(m,n))/d;
else
372 Pengolahan Citra Teori dan
an Aplikasi

% warna antara magenta dan cyan


H
H(m,n) = 4+(R(m,n)-G(m,n))/d;
end

H(m,n
n) = H(m,n) * 60;
if H(
(m,n) < 0
H
H(m,n) = H(m,n) + 360;
end
end
end
end

% Konversikan ke jangkauan [0, 255] atau [0, 360]


H = uint8(H * 255
5/360);
S = uint8(S * 255
5);
L = uint8(L * 255
5);

Akhir Program

Adapun fungsi yangg dditujukan untuk mengonversi dari HSL ke RGB


RG dapat dilihat
di bawah ini.

Program : HSLkeRGB.m

function [R,G,B] = HSLkeRGB(H,S,L)


% HSLkeRGB diguna
akan untuk mengonversi HSL ke RGB.
% Berdasarkan algoritma Max K. Agoston (2005)

% Normalisasi HSL
L
H = double(H);
S = double(S);
L = double(L);

if max(max(H)) > 1.0 || max(max(S)) > 1.0 || ...


max(max(L)) > 1.0
H = double(H)
) / 255 * 360;
S = double(S)
) / 255;
L = double(L)
) / 255;
end

[tinggi, lebar] = size(H);


for m=1: tinggi
for n=1: lebaar
if L(m,n)) <= 0.5
v = L(m,n)
L * (1 + S(m,n));
else
v = L(m,n)
L + S(m,n) - L(m,n) * S(m,n);
end

if v == 0
R(m,n
n) = 0;
Pengolahan Citra Berwarna 373

G(m,n) = 0;
B(m,n) = 0;
else
terkecil = 2 * L(m,n) - v;
sv = (v - terkecil) / v;
if H(m,n) == 360
H(m,n) = 0;
else
H(m,n) = H(m,n) / 60;
end

sektor = floor(H(m,n)); % 0-5


frak = H(m,n) - sektor;
vsf = v * sv * frak;
mid1 = terkecil + vsf;
mid2 = v - vsf;
switch sektor
case 0
R(m,n) = v;
G(m,n) = mid1;
B(m,n) = terkecil;
case 1
R(m,n) = mid2;
G(m,n) = v;
B(m,n) = terkecil;
case 2
R(m,n) = terkecil;
G(m,n) = v;
B(m,n) = mid1;
case 3
R(m,n) = terkecil;
G(m,n) = mid2;
B(m,n) = v;
case 4
R(m,n) = mid1;
G(m,n) = terkecil;
B(m,n) = v;
case 5
R(m,n) = v;
G(m,n) = terkecil;
B(m,n) = mid2;
end
end
end
end

% Konversikan ke jangkauan [0, 255]


R = uint8(R * 255);
G = uint8(G * 255);
B = uint8(B * 255);

Akhir Program

Contoh penggunaan RGBkeHSL dan HSLkeRGB:


374 Pengolahan Citra Teori dan Aplikasi

>> [H,S,L]=RGBkeHSL(60, 120, 240)


H =156
S =219
L = 150
>>
>>[R,G,B]=HSLkeRGB(156, 219, 150)
R =60
G =119
B =240
>>

9.2.6 Ruang Warna CIELAB


CIELAB adalah nama lain dari CIE L*a*b*. Diagram kromasitas CIE
(Commission Internatiole de L’Eclairage) ditunjukkan pada Gambar 9.7. Pada
diagram tersebut, setiap perpaduan x dan y menyatakan suatu warna. Namun,
hanya warna yang berada dalam area ladam (tapal kuda) yang bisa terlihat. Angka
yang berada di tepi menyatakan panjang gelombang cahaya. Warna yang terletak
di dalam segitiga menyatakan warna-warna umum di monitor CRT, yang dapat
dihasilkan oleh komponen warna merah, hijau, dan biru.

Gambar 9.7Diagram kromasitas CIE


(Sumber: Russ, 2011)
Pengolahan Citra Ber
erwarna 375

Transformasi
si RGB ke CIELAB dimulai dengan melakuk
ukan perhitungan
sebagai berikut:

~ = 0,412453
412453 + 0,357580 + 0,180423
= 0,212671
212671 + 0,715160 + 0,072169
(9.40)

• = 0,019334
019334 + 0,119193 + 0,950227
(9.41)
(9.42)

Selanjutnya, L*a*b** ddidefinisikan sebagai berikut:

g∗ = 116€ ! * − 16


(9.43)
m

K ∗ = 500 @@€ !ƒ * − € !• *L
ƒ •
(9.44)
m m

3 ∗ = 200 @@€ ! * − € ! *L
• „
•m „m
(9.45)

Dalam hal ini, f(q) dihitung


dih seperti berikut:

‚ … , HIJK ‚ F 0,008856G
[

€(‚) = 6
7,787
787‚ + 16/116, vwxvJ zKw2 yKIw
(9.46)

Xn, Yn, Zn diperoleh melalui


m R=G=B=1 dengan jangkauan R,G, B berupa [0, 1].
Contoh untukk melakukan transformasi dari RGB ke CIEL
LAB ditunjukkan
di bawah ini.

Program : RGBkeLab.m

function [L,a,b] = RGBkeLab(R,G,B)


% RGBkeLab diguna
akan untuk mengonversi RGB ke CIELAB
% Nilai balik:
% L -> [1, 100
0]
% a dan b -> [
[-110,110]

R = double(R);
G = double(G);
B = double(B);

if max(max(R)) > 1.0 || max(max(G)) > 1.0 || ...


max(max(B)) > 1.0
0
R = double(R) / 255;
G = double(G) / 255;
B = double(B) / 255;
end
376 Pengolahan Citra Teori dan Aplikasi

% RGB to XYZ
Koef = [0.412453 0.357580 0.180423;
0.212671 0.715160 0.072169;
0.019334 0.119193 0.950227];

RGB = [R, G, B]';

XYZ = Koef * RGB;

% Peroleh Xq=X/Xn, Yq=Y/Yn, Zq=Z/Zn


% dengan R=G=B=1 untuk menghitung Xn, Yn, Zn
Xq = XYZ(1,:) / 0.950456;
Yq = XYZ(2,:);
Zq = XYZ(3,:) / 1.088754;

[tinggi, lebar] = size(B);


for m=1 : tinggi
for n=1 : lebar
fqx = fq(Xq(m, n));
fqy = fq(Yq(m, n));
fqz = fq(Zq(m, n));

L(m, n) = 116.0 * fqy - 16;


a(m, n) = 500.0 * (fqx - fqy);
b(m, n) = 200.0 * (fqy - fqz);
end
end

return

function hasil = fq(q)


% Untuk menghitung f(q)

if q > 0.008856
hasil = q ^(1/3);
else
hasil = 7.787*q + 16/116.0;
end

Akhir Program

Fungsi di atas dapat digunakan untuk menguji per piksel ataupun beberapa piksel.
Contoh berikut menunjukkan pengujian satu piksel dengan R=0,5, G=0,3, dan
B=0,1:

>> [L,A,B]=RGB2Lab(0.5,0.3,0.1)
L =64.0068
Pengolahan Citra Ber
erwarna 377

A =7.1133
B =36.8877
>>

Contoh lain:

>> [L,a,b]=R
RGBkeLab(127, 76, 25)
L =63.8471
a =7.1409
b =37.1270
>>

Contoh berikutt menunjukkan


m fungsi yang digunakan untukk m
mengonversikan
CIELAB ke RGB.

Program : LabkeRGB.m

function [R, G, B]
B = LabkeRGB(L, a, b)
% LabkeRGB Mengon
nversi CIELAB ke RGB

[tinggi, lebar] = size(L);

% Peroleh Xq=X/Xnn, Yq=Y/Yn, Zq=Z/Zn


for m=1 : tinggi
for n=1 : lebbar
fqy = (L((m, n) + 16) / 116.0;
fqx = a(mm, n) / 500.00 + fqy;
fqz = fqyy - b(m, n) / 200.0;

Xq(m, n) = peroleh_q(fqx);
Yq(m, n) = peroleh_q(fqy);
Zq(m, n) = peroleh_q(fqz);

end
end

% Hitung X, Y, da
an Z
XYZ(1,:) = Xq * 0.950456;
0
XYZ(2,:) = Yq;
XYZ(3,:) = Zq * 1.088754;
1

% XYZ to RGB
Koef = [ 3.240479
9 -1.537150 -0.498535;
-0.969256
6 1.875992 0.041556;
0.055648
8 -0.204043 1.057311];
RGB = Koef * XYZ;
;
R = uint8(RGB(1, :) * 255);
G = uint8(RGB(2, :) * 255);
B = uint8(RGB(3, :) * 255);

return

function q = pero
oleh_q(fq)
% Peroleh nilai q
378 Pengolahan Citra Teori dan Aplikasi

q = fq ^ 3;
if q > 0.008856
hasil = q;
else
q = (fq - 16 / 116.0) / 7.787;
end

Akhir Program

Contoh penggunaan LabkeRGB:

>> [R,G,B]=LabkeRGB(63.8471, 7.1409, 37.1270)


R = 127
G = 76
B = 25
>>

9.3 Memperoleh Statistika Warna


Fitur warna dapat diperoleh melalui perhitungan statistis seperti rerata,
deviasi standar, skewness, dan kurtosis (Martinez & Martinez, 2002). Sebagai
contoh, fitur-fitur tersebut dapat digunakan untuk kepentingan identifikasi
tanaman hias (Kadir, dkk., 2011b dan Kadir, dkk., 2011c). Perhitungan dikenakan
pada setiap komponen R, G. dan B.
Rerata memberikan ukuran mengenai distribusi dan dihitung dengan
menggunakan rumus:

1 M N
µ= ∑∑ Pij
MN i =1 j =1
(9.47)

Varians menyatakan luas sebaran distribusi. Akar kuadrat varians


dinamakan sebagai deviasi standar. Adapun rumus yang digunakan untuk
menghitungnya sebagai berikut:

M N
1
σ=
MN
∑∑ ( P
i =1 j =1
ij − µ )2 (9.48)

Skewnessatau kecondongan menyatakan ukuran mengenai


ketidaksimetrisan. Distribusi dikatakan condong ke kiri apabila memiliki nilai
skewness berupa bilangan negatif. Sebaliknya, distribusi dikatakan condong ke
kanan apabila memiliki nilai skewness berupa bilangan positif. Jika distribusi
simetris, koefisien skewness bernilai nol. Ilustrasi skewnessdapat dilihat pada
Gambar 9.8.Skewness dihitung dengan cara seperti berikut:
Pengolahan Citra Berwarna 379

M N

∑ ∑ (P
i =1 j =1
ij − µ )3
θ= (9.49)
MNσ 3

Distribusi condong Distribusi condong


ke kiri ke kanan

(a) Skewness negatif (b) Skewness nol (c) Skewness positif


θ<0 θ<0 θ<0

Gambar 9.8Skewness menggambarkan


kecondongan distribusi data

Kurtosis merupakan ukuran yang menunjukkan sebaran data bersifat


meruncing atau menumpul. Perhitungannya seperti berikut:

M N

∑∑ ( P
i =1 j =1
ij − µ )4
γ= −3 (9.50)
MNσ 4

Definisi di atas membuat distribusi normal standar memiliki kurtosis nol. Nilai
positif mengindikasikan bahwa distribusi bersifat lancip dan nilai negatif
menyatakan distribusi yang datar (lihat Gambar 9.9). Perlu diketahui, pada
Persamaan 9.47 hingga 9.50, M adalah tinggi citra, N menyatakan lebar citra, dan
Pij adalah nilai warna pada baris i dan kolom j.

Kurtosis = 0 Kurtosis > 0 Kurtosis < 0

Gambar 9.9Kurtosis menggambarkan


keruncingan distribusi normal

Contoh statwarna.m berikut mewujudkan fungsi yang dapat digunakan untuk


memperoleh statistika warna.
380 Pengolahan Citra Teori dan
an Aplikasi

Program : statwarna.m

function [stat] = statwarna(berkas)


% STATWARNA Mengh
hitung statistik warna pada citra RGB
B
% Masukan:
% berkas berup
pa citra warna
% Nilai balik ber
rupa statistik warna yang mencakup
% rerata, devi
iasi standar, kecondongan, dan
% kurtosis

RGB = double(imre
ead(berkas));
[m,n,d] = size(RG
GB);
if (d ~= 3)
disp('Citra harus
h berupa citra berwarna');
return;
end

% --- Peroleh war


rna
% Hitung warna ra
ata-rata R, G, dan B
jum_r=0;
jum_g=0;
jum_b=0;
jum_piksel = m * n;
for baris = 1:m
for kolom = 1:n
1
jum_r = jum_r + RGB(baris, kolom, 1);
jum_g = jum_g + RGB(baris, kolom, 2);
jum_b = jum_b + RGB(baris, kolom, 3);
end
end

% Hitung rerata
mean_r = jum_r / jum_piksel;
mean_g = jum_g / jum_piksel;
mean_b = jum_b / jum_piksel;

% Inisialisasi pe
erhitungan deviasi standar,
% skewness, da
an kurtosis
jum_dev_r = 0;
jum_dev_g = 0;
jum_dev_b = 0;

jum_skew_r = 0;
jum_skew_g = 0;
jum_skew_b = 0;

jum_cur_r = 0;
jum_cur_g = 0;
jum_cur_b = 0;

for baris = 1:m


for kolom = 1:n
1
jum_dev_r
r = jum_dev_r + ...
(RGB(
(baris, kolom,1) - mean_r)^2;
jum_dev_g
g = jum_dev_g + ...
Pengolahan Citra Berwarna 381

(RGB(baris, kolom,2) - mean_g)^2;


jum_dev_b = jum_dev_b + ...
(RGB(baris, kolom,3) - mean_b)^2;

jum_skew_r = jum_skew_r + ...


(RGB(baris, kolom,1) - mean_r)^3;
jum_skew_g = jum_skew_g + ...
(RGB(baris, kolom,2) - mean_g)^3;
jum_skew_b = jum_skew_b + ...
(RGB(baris, kolom,3) - mean_b)^3;

jum_cur_r = jum_cur_r + ...


(RGB(baris, kolom,1) - mean_r)^4;
jum_cur_g = jum_cur_g + ...
(RGB(baris, kolom,2) - mean_g)^4;
jum_cur_b = jum_cur_b + ...
(RGB(baris, kolom,3) - mean_b)^4;
end
end

% Hitung deviasi standar


dev_r = sqrt(jum_dev_r/jum_piksel);
dev_g = sqrt(jum_dev_g/jum_piksel);
dev_b = sqrt(jum_dev_b/jum_piksel);

% Hitung skewness
skew_r = jum_skew_r/ (jum_piksel * (dev_r^3));
skew_g = jum_skew_g/ (jum_piksel * (dev_g^3));
skew_b = jum_skew_b/ (jum_piksel * (dev_b^3));

% Hitung kurtosis
cur_r = jum_cur_r / (jum_piksel * (dev_r^4)) - 3;
cur_g = jum_cur_g / (jum_piksel * (dev_g^4)) - 3;
cur_b = jum_cur_b / (jum_piksel * (dev_b^4)) - 3;

% Tentukan keluaran
stat.mean_r = mean_r;
stat.mean_g = mean_g;
stat.mean_b = mean_b;

stat.dev_r = dev_r;
stat.dev_g = dev_g;
stat.dev_b = dev_b;

stat.skew_r = skew_r;
stat.skew_g = skew_g;
stat.skew_b = skew_b;

stat.cur_r = cur_r;
stat.cur_g = cur_g;
stat.cur_b = cur_b;

Akhir Program

Contoh pemakaian statwarna:


382 Pengolahan Citra Teori dan Aplikasi

>> S = statwarna('C:\Image\lapangan.png')
S =

scalar structure containing the fields:

mean_r = 124.19
mean_g = 116.05
mean_b = 115.10
dev_r = 61.079
dev_g = 64.549
dev_b = 66.176
skew_r = 0.86789
skew_g = 1.0295
skew_b = 1.1270
cur_r = -0.39905
cur_g = -0.31038
cur_b = -0.026880

>>
>> S = statwarna('C:\Image\innsbruckcity.png')
S =

scalar structure containing the fields:

mean_r = 114.17
mean_g = 116.22
mean_b = 117.40
dev_r = 79.905
dev_g = 83.627
dev_b = 88.439
skew_r = 0.36087
skew_g = 0.44561
skew_b = 0.46497
cur_r = -1.4307
cur_g = -1.4784
cur_b = -1.5103

>>

Perhatikan bahwa berdasarkan contoh di atas, kedua citra (lapangan.png dan


innsbruckcity.png) mempunyai statistika warna yang jauh berbeda. Perbedaan
seperti itulah yang dapat digunakan untuk membedakan antara satu citra dengan
citra yang lain.

9.4 Mengatur Kecerahan dan Kontras


Pada Bab 3 telah dijelaskan cara mengatur kontras dan kecerahan pada
citra berskala keabuan. Cara seperti itu, secara prinsip dapat diterapkan pada citra
Pengolahan Citra Berwarna 383

berwarna. Untuk melihat efek kecerahan dan kontras, cobalah beberapa perintah
berikut.

>>Img=imread('C:\Image\inns.png');
>>imshow(Img)
>>

Kode di atas digunakan untuk melihat citra inns.png (Gambar 9.10.(a)).


Selanjutnya,

>> C = Img + 30;


>>imshow(C)
>>

membuat citra dicerahkan sejauh 30. Hasilnya ditunjukkan pada Gambar 9.10(b).
Lalu, cobalah kode berikut:

>> K = 2 * C;
>>imshow(K)
>>

Hasilnya dapat dilihat pada Gambar 9.10(c). Hal yang menarik dapat diperoleh
dengan hanya memberikan kontras pada komponen R. Caranya:

>> K = C;
>> K(:,:,1) = 2 * K(:,:,1);
>>

Kode di atas mula-mula membuat K bernilai sama dengan C (efek pencerahan).


Selanjutnya,

K(:,:,1) = 2 * K(:,:,1);

membuat hanya komponen R saja yang dinaikkan dua kali. hasilnya ditunjukkan
pada Gambar 9.10(d).
384 Pengolahan Citra Teori dan
an Aplikasi

(a) Cit
itra inns.png (b) Efek pencerahan melalu
alui
C = Img + 30;

(c) Efek kontras dan


da pencerahan melalui (d) Efek pencerahan melalui C = Img + 30
C = 2 x (Img + 30) pada komponen R, G, dan B
dan kontras sebesar 2 kali han
anya pada
komponen R

Gambar 9.10Penc
ncerahan dan peningkatan kontras pada cit
citra berwarna

9.5 Menghitung Jum


mlah Warna
Berapa jumlah
lah warna yang menyusun suatu citra? Bila terd
erdapat kebutuhan
seperti itu, jumlah wa
warna dapat dihitung dengan memanfaatkan ffungsi jumwarna
berikut.

Program : jumwarna.m

function [jumlah]
] = jumwarna(berkas)
% JUMWARNA Menghi
itung jumlah warna pada citra RGB
% Masukan:
% berkas berup
pa citra warna
% Nilai balik ber
rupa jumlah warna

RGB = double(imre
ead(berkas));
Pengolahan Citra Berwarna 385

[m,n,d] = size(RGB);

if (d ~= 3)
disp('Citra harus berupa citra berwarna');
return;
end

RGB = double(RGB);
Data = zeros(1, m * n); % Array kosong

jum = 0;
for i=1:m
for j=1:n
jum = jum + 1;

r = RGB(i,j,1);
g = RGB(i,j,2);
b = RGB(i,j,3);

Data(jum) = bitshift(r,16) + bitshift(g, 8) + b;


end
end

% Urutkan data pada array Data


Data = sort(Data);

% Hitung jumlah warna


jwarna = 1;
for i = 1 : jum - 1
if Data(i) ~= Data(i+1)
jwarna = jwarna + 1;
end
end

jumlah = jwarna;

Akhir Program

Penghitungan warna dilakukan dengan mula-mula menyusun komponen R,


G, dan B untuk setiap piksel menjadi sebuah nilai dengan komposisi seperti
terlihat pada Gambar 9.11. Untuk keperluan seperti itu, maka:

• G perlu digeser ke kiri sebanyak 8 bit dan


• R perlu digeser ke kiri sebanyak 16 bit.

Pada Octave dan MATLAB, penggeseran bit dilakukan melalui fungsi bitshift.
386 Pengolahan Citra Teori dan Aplikasi

Bit

23 16 15 8 7 0

R G B

Gambar 9.11Komposisi R, G, dan B dalam sebuah nilai

Setelah nilai gabungan R, G, dan B terbentuk dan diletakkan ke


larikData, isi larik tersebut diurutkan. Pengurutan tersebut dimaksudkan untuk
mempermudah penghitungan jumlah warna. Implementasi penghitungan pada
data yang telah urut seperti berikut:

jwarna = 1;
for i = 1 : jum - 1
if Data(i) ~= Data(i+1)
jwarna = jwarna + 1;
end
end

Berdasarkan kode di atas, nilai jwarna dinaikkan sebesar satu sekiranya suatu
nilai dan nilai berikutnya tidak sama.
Contoh penggunaan fungsi jumwarna:

>>C=jumwarna('C:\Image\lapangan.png')
C =92475
>>

Hasil di atas menyatakan bahwa jumlah warna yang terkandung pada


lapangan.png adalah92.475.

9.6 Aplikasi Pencarian Citra Berdasarkan Warna Dominan


Contoh aplikasi penentuan warna dominanpada daun dibahas oleh Kadir
(2011d). Dengan mengacu tulisan dalam artikel tersebut, contoh aplikasi pada
pencarian citra berdasarkan warna dominan akan dijelaskan pada subbab ini.
Model yang sederhana akan diimplementasikan dalam bentuk program.
Agar pencarian menurut warna dominan seperti merah atau hijau dapat
dilakukan, setiap piksel yang menyusun citra harus dapat dipetakan ke dalam
warna alamiah semacam merah atau hijau. Hal ini dapat dilakukan kalau ruang
warna yang digunakan berupa HSV. Pada sistem HSV, komponen hue sebenarnya
Pengolahan Citra Berwarna 387

menyatakan warna seperti yang biasa dipahami oleh manusia. Younes, dkk. (2007)
membuat model fuzzy untuk menyatakan warna seperti terlihat pada Gambar 9.12.

Gambar 9.12Dimensi H
(Sumber: Younes, dkk., 2007)

Berdasarkan Gambar 9.12, dimungkinkan untuk menerapkan fuzzy logic


untuk menentukan suatu area warna beserta derajat keanggotaannya. Model
tersebut didasarkan pada sumbu melingkar pada komponen Hue (H). Mengingat
warna merah berada pada nilai H sama dengan nol, maka jangkauan warna merah
berada di sekitar angka 0 dan 255.
Dua jenis fungsi keanggotaan fuzzy yang digunakanpada Gambar 9.12
berbentuk segitiga dan trapesium dan digambarkan kembali pada Gambar 9.13.
Berdasarkan Gambar 9.13 tersebut, fungsi keangotaan berbentuk segitiga
didefinisikan sebagai berikut:

0 x ≤ a,
( x − a ) /(b − a )
 a < x ≤ b,
Λ ( x; a , b , c ) =  (9.51)
(c − x ) /(c − b) b < x ≤ c,
0 x>c

1 1

0 0
a b c a b c d

(a) Bentuk segitiga (b) Bentuk trapesium

Gambar 9.13Fungsi keanggotan berbentuk segitiga dan trapesium


388 Pengolahan Citra Teori dan Aplikasi

Adapun fungsi keanggotaan berbentuk trapesium didefnisikan sebagai


berikut:

0 x ≤ a,
( x − a) /(b − a ) a < x ≤ b,

Π ( x; a, b, c) = 1 b < x ≤ c, (9.52)
(c − x) /(c − b) c < x ≤ d,

0 x>d

Khusus untuk warna hitam, putih, dan abu-abu dilakukan penanganan


secara khusus, yaitu dengan memperhatikan komponen S dan V. Sebagaimana
tersirat pada Gambar 9.4, warna hitam diperoleh manakala V bernilai 0 dan warna
putih diperoleh ketika S bernilai 0. Warna abu-abu diperoleh ketika S bernilai
rendah. Semakin rendah nilai S maka warna abu-abu semakin terlihat tua. Secara
garis besar, proses untuk memasukkan setiap piksel ke dalam suatu kategori warna
(merah, hijau, dsb.) dilaksanakan melalui mekanisme seperti terlihat pada Gambar
9.14.

Citra berwarna

Citra biner

Hitung jumlah derajat keanggotaan


untuk setiap warna dengan menghitung
piksel pada citra berwarna yang nilai
pada citra biner berupa 1

Gambar 9.14 Skema pemrosesan keanggotaan warna

Citra biner digunakan untuk menentukan area pada citra berwarna yang diproses
khusus yang merupakan bagian daun. Dalam hal ini bagian yang berisi daun akan
Pengolahan Citra Berwarna 389

bernilai 1 pada citra biner dan 0 untuk latarbelakang.Selanjutnya,nilai H, S, V


digunakan untuk menentukan kelompok warna piksel. Sebagai contoh, fungsi
untuk menentukan warna hijau didefinisikan sebagai berikut:

function derajat=f_green(h, s, v)
if (h==0) && (s==0)
derajat = 0.0;
else
derajat = f_trapesium(43,65,105,128, h);
end;

Dalam hal ini, f_trapesium adalah fungsi untuk mengimplementasikan Gambar


9.13(b). Definisinya seperti berikut:

function derajat=f_trapesium(a,b,c,d,h)

if (h>a) && (h<b)


derajat=(h-a)/(b-a);
else
if (h>c) && (h<d)
derajat=(d-h)/(d-c);
else
if (h>=b) && (h<=c)
derajat=1.0;
else
derajat = 0.0;
end
end
end
end

Pemrosesan yang dilakukan pada Gambar 9.14 kotak terbawah yaitu


menghitung nilai untuk setiap komponen warna:

ℎIHKv = ∑•%T
cŒ= ∑ŠŒ= €_21‰‰w( cŠ , +cŠ , 0cŠ )
‹%T

}‰1Kℎ = ∑•%T
cŒ= ∑ŠŒ= €_1‰Ž( cŠ , +cŠ , 0cŠ )
‹%T

JvwIw2 = ∑•%T
cŒ= ∑ŠŒ= €_z‰yyR•( cŠ , +cŠ , 0cŠ )
(9.53)
‹%T

dst.
390 Pengolahan Citra Teori dan
an Aplikasi

Setelah seluruh piks


iksel pada daun diproses, setiap warna akan
ak menyimpan
komponen warna pada pa daun. Dengan demikian, warna yangg memiliki nilai
tertinggi menyatakann warna dominan pada daun.
Selanjutnya, query
q warna dominan dilakukan melalui

•K1wK ŽR}wIwK
ŽR}wIwKw = max(hijau, merah, kuning)
‚v‰1z(•K1wK
•K1wK): •K1wK ŽR}wIwKw = warna

Jadi, untuk semua citr


itra yang warna dominannya sama dengan war
arna yang diminta
dalam query akan dita
itampilkan.
Implementasi
si fungsi cariwarna yang ditujukan untuk uk mencari warna
dominan dapat dilihat
at berikut ini.

Program : cariwarna.m

function [Hasil] = cariwarna(warna, lokdir)


% CARIWARNA Digun
nakan untuk mencari gambar yang beradda
% pada folder
r lokdir
% dan memilik
ki warna dominan sesuai
% dengan argu
umen warna
% Keluaran:
% Hasil = berisi nama-nama warna yang dicari

if (strcmp(warna,,'merah')) || ...
(strcmp(warna,
,'biru')) || ...
(strcmp(warna,
,'cyan')) || ...
(strcmp(warna,
,'hijau')) || ...
(strcmp(warna,
,'magenta')) || ...
(strcmp(warna,
,'jingga')) || ...
(strcmp(warna,
,'merah muda')) || ...
(strcmp(warna,
,'ungu')) || ...
(strcmp(warna,
,'putih')) || ...
(strcmp(warna,
,'hitam')) || ...
(strcmp(warna,
,'abu-abu')) || ...
(strcmp(warna,
,'kuning'))
disp('Tunggu..
..');
else
disp(['Untuk sementara warna yang bisa dipakai: '
'...
'merah,
, biru, cyan, hijau, magenta, jingga,
, ' ...
'merah muda, ungu, ' ...
'putih hitam abu-abu kuning']);
return;
end

berkas = dir(lokd
dir);

jum=0;
indeks=0;
for i=3:length(be
erkas)
Pengolahan Citra Berwarna 391

nama_file = sprintf('%s/%s',lokdir, berkas(i).name);


disp(berkas(i).name);
Img = imread(nama_file);
[tinggi, lebar, dim] = size(Img);

% Mengantisipasi warna hitam, putih, dan abu-abu


% yang homogen dan selalu dianggap
% berdimensi satu pada Octave
if dim == 1
Img(:,:,2) = Img(:,:,1);
Img(:,:,3) = Img(:,:,1);
end

% Konversi ke HVS
[H,S,V] = RGBkeHSV(Img(:,:,1),Img(:,:,2),Img(:,:,3));

H = double(H);
S = double(S);
V = double(V);

mem_val = 0.0;

anggota_merah = 0.0;
anggota_biru = 0.0;
anggota_cyan = 0.0;
anggota_hijau = 0.0;
anggota_magenta = 0.0;
anggota_oranye = 0.0;
anggota_pink = 0.0;
anggota_ungu = 0.0;
anggota_putih = 0.0;
anggota_hitam = 0.0;
anggota_abu_abu = 0.0;
anggota_kuning = 0.0;

for y=1: tinggi


for x=1: lebar
h = H(y,x);
s = S(y,x);
v = V(y,x);

mem_val = f_red(h,s,v);
if mem_val > 0
anggota_merah = anggota_merah + mem_val;
end

mem_val = f_blue(h,s,v);
if mem_val > 0
anggota_biru = anggota_biru + mem_val;
end

mem_val = f_cyan(h,s,v);
if mem_val > 0
anggota_cyan = anggota_cyan + mem_val;
end

mem_val = f_green(h,s,v);
if mem_val > 0
anggota_hijau = anggota_hijau + mem_val;
392 Pengolahan Citra Teori dan Aplikasi

end

mem_val = f_magenta(h,s,v);
if mem_val > 0
anggota_magenta = anggota_magenta + mem_val;
end

mem_val = f_orange(h,s,v);
if mem_val > 0
anggota_oranye = anggota_oranye + mem_val;
end

mem_val = f_yellow(h,s,v);
if mem_val > 0
anggota_kuning = anggota_kuning + mem_val;
end

mem_val = f_pink(h,s,v);
if mem_val > 0
anggota_pink = anggota_pink + mem_val;
end

mem_val = f_purple(h,s,v);
if mem_val > 0
anggota_ungu = anggota_ungu + mem_val;
end

mem_val = f_white(h,s,v);
if mem_val > 0
anggota_putih = anggota_putih + mem_val;
end

mem_val = f_black(h,s,v);
if mem_val > 0
anggota_hitam = anggota_hitam + mem_val;
end

mem_val = f_gray(h,s,v);
if mem_val > 0
anggota_abu_abu = anggota_abu_abu + mem_val;
end
end
end

maks = max( ...


[anggota_merah anggota_biru anggota_cyan anggota_hijau ...
anggota_magenta anggota_oranye anggota_pink ...
anggota_ungu anggota_putih anggota_abu_abu ...
anggota_hitam anggota_kuning]);

% Memperoleh hasil yang memenuhi warna permintaan

if strcmp(warna,'merah')
if maks == anggota_merah
jum = jum +1 ;
Hasil{jum}.nama = nama_file;
Hasil{jum}.bobot = anggota_merah;
end
elseif strcmp(warna,'biru')
Pengolahan Citra Berwarna 393

if maks == anggota_biru
jum = jum +1 ;
Hasil{jum}.nama = nama_file;
Hasil{jum}.bobot = anggota_biru;
end
elseif strcmp(warna,'cyan')
if maks == anggota_cyan
jum = jum +1 ;
Hasil{jum}.nama = nama_file;
Hasil{jum}.bobot = anggota_cyan;
end
elseif strcmp(warna,'hijau')
if maks == anggota_hijau
jum = jum +1 ;
Hasil{jum}.nama = nama_file;
Hasil{jum}.bobot = anggota_hijau;
end
elseif strcmp(warna,'magenta')
if maks == anggota_magenta
jum = jum +1 ;
Hasil{jum}.nama = nama_file;
Hasil{jum}.bobot = anggota_magenta;
end
elseif strcmp(warna,'jingga')
if maks == anggota_oranye
jum = jum +1 ;
Hasil{jum}.nama = nama_file;
Hasil{jum}.bobot = anggota_oranye;
end
elseif strcmp(warna,'pink')
if maks == anggota_pink
jum = jum +1 ;
Hasil{jum}.nama = nama_file;
Hasil{jum}.bobot = anggota_pink;
end
elseif strcmp(warna,'ungu')
if maks == anggota_ungu
jum = jum +1 ;
Hasil{jum}.nama = nama_file;
Hasil{jum}.bobot = anggota_ungu;
end
elseif strcmp(warna,'putih')
if maks == anggota_putih
jum = jum +1 ;
Hasil{jum}.nama = nama_file;
Hasil{jum}.bobot = anggota_putih;
end
elseif strcmp(warna,'hitam')
if maks == anggota_hitam
jum = jum +1 ;
Hasil{jum}.nama = nama_file;
Hasil{jum}.bobot = anggota_hitam;
end
elseif strcmp(warna,'abu-abu')
if maks == anggota_abu_abu
jum = jum +1 ;
Hasil{jum}.nama = nama_file;
Hasil{jum}.bobot = anggota_abu_abu;
end
394 Pengolahan Citra Teori dan Aplikasi

elseif strcmp(warna,'yellow')
if maks == anggota_kuning
jum = jum + 1 ;
Hasil{jum}.nama = nama_file;
Hasil{jum}.bobot = anggota_kuning;
end
end
end

% Lakukan pengurutan secara descending


for p = 2: jum
x = Hasil{p};

% Sisipkan x ke dalam data[1..p-1]


q = p - 1;
ketemu = 0;

while ((q >= 1) && (~ketemu))


if (x.bobot > Hasil{q}.bobot)
Hasil{q+1} = Hasil{q};
q = q - 1;
else
ketemu = 1;
end

Hasil{q+1} = x;
end
end

% Menampilkan maksimum 24 warna

if jum>24
jum = 24;
end

if jum >= 20
m=5; n=5;
else
if jum>=16
m=5; n=4;
else
m=4; n=4;
end
end

if jum>0
close;
figure(1);
for i=1:jum
% Tampilkan citra dan nama depan file
nama = Hasil{i}.nama;
subplot(m,n,i);
Citra = imread(nama);
imshow(Citra);
[pathstr, name, ext] = fileparts(nama);
title([name ext]);
end
end
Pengolahan Citra Berwarna 395

return

% -----------------------------------------
% Bagian untuk menghitung keanggotaan fuzzy
% -----------------------------------------

function derajat=f_red(h, s, v)
if (h==0) && (s==0)
derajat = 0.0;
else
derajat = f_segitiga_kanan(0,21, h) + ...
f_segitiga_kiri(234,255, h);
end

function derajat=f_green(h, s, v)
if (h==0) && (s==0)
derajat = 0.0;
else
derajat = f_trapesium(43,65,105,128, h);
end;

function derajat=f_yellow(h, s,v)


if (h==0) && (s==0)
derajat = 0.0;
else
derajat = f_segitiga(21,43, 65, h);
end

function derajat=f_blue(h, s,v )


if (h==0) && (s==0)
derajat = 0.0;
else
derajat = f_trapesium(128,155,180,191, h);
end;

function derajat=f_purple(h,s,v)
if (h==0) && (s==0)
derajat = 0.0;
else
derajat = f_segitiga(180,191,213, h);
end

function derajat=f_cyan(h,s,v)
if (h==0) && (s==0)
derajat = 0.0;
else
derajat = f_segitiga(105,128,155, h);
end;

function derajat=f_orange(h,s,v)
if (h==0) && (s==0)
derajat = 0.0;
else
derajat = f_segitiga(0,21,43, h);
end;

function derajat=f_magenta(h,s,v)
if (h==0) && (s==0)
derajat = 0.0;
396 Pengolahan Citra Teori dan Aplikasi

else
derajat = f_segitiga(191,213,234, h);
end

function derajat=f_pink(h,s,v)
if (h==0) && (s==0)
derajat = 0.0;
else
derajat = f_segitiga(213,234,255, h);
end;

function derajat=f_white(h, s,v )


if (s <= 10) && (v>=250)
derajat = 1.0;
else
derajat = 0.0;
end;

function derajat=f_gray(h, s,v )


if (h==0) && (s==0) && (v>=15) && (v<250)
derajat = 1.0;
else
derajat = 0.0;
end;

function derajat=f_black(h, s,v )


if (h==0) && (s==0) && (v<15)
derajat = 1.0;
else
derajat = 0.0;
end;

function derajat=f_trapesium(a,b,c,d,h)

if (h>a) && (h<b)


derajat = (h-a)/(b-a);
else
if (h>c) && (h<d)
derajat = (d-h)/(d-c);
else
if (h>=b) && (h<=c)
derajat = 1.0;
else
derajat = 0.0;
end
end
end

function derajat=f_segitiga(a,b,c,h)

if h==b
derajat = 1.0;
else
if (h>a) && (h<b)
derajat = (h-a)/(b-a);
else
if (h>b) && (h<c)
derajat = (c-h)/(c-b);
else
Pengolahan Citra Berwarna 397

derajat = 0.0;
end
end
end

function derajat=f_segitiga_kiri(a,b,h)
if h==b
derajat=1.0;
else
if (h>a) && (h<b)
derajat = (h-a)/(b-a);
else
derajat = 0.0;
end
end

function derajat=f_segitiga_kanan(a,b,h)
if h==a
derajat=1.0;
else
if (h>a) && (h<b)
derajat = (b-h)/(b-a);
else
derajat = 0.0;
end
end

Akhir Program

Untuk keperluan mempraktikkan program cariwarna.m,


diperlukanuntuk menyalin isi subfolder Warna yang terdapat pada
fileunduhan (di bawah folder Image) ke dalam folder C:\Image.
Dengan demikian, pada C:\Image terdapat subfolder Warna.

Contoh penggunaan cariwarna:

>>cariwarna('biru', 'C:\Image\Warna')

Perintah di atas digunakan untuk mencari semua gambar yang berada dalam
folder C:\Image\Warna yang memiliki warna dominan berupa biru. Hasilnya
ditunjukkan pada Gambar 9.15, sedangkan Gambar 9.16 memberikan contoh hasil
kalau warna yang dicari adalah putih. Latarbelakang biru pada gambar tersebut
diperoleh melalui perintah:

set(gcf, 'Color', 'b')


398 Pengolahan Citra Teori dan Aplikasi

Gambar 9.15Hasil pencarian warna dominan biru

Gambar 9.16 Hasil pencarian warna dominan putih


Pengolahan Citra Berwarna 399

Latihan

1. Jelaskan istilah-istilah berikut:


(a) hue
(b) saturation
(c) brightness

2. Apa perbedaan CMY dan CMYK?

3. Kapan ruang warna seperti HSV bermanfaat?

4. Apakah ruang warna HIS, HSV, dan HSL itu sama? Kalau berbeda, di mana
perbedaannya?

5. Jelaskan penggunaan statistik mean,standard deviation, skewness, dan kurtosis


pada warna.

6. Mengapa fuzzy logic cocok diterapkan pada komponen hue (H)?

7. Jelaskan kode berikut:

function derajat=f_trapesium(a,b,c,d,h)
if (h>a) && (h<b)
derajat=(h-a)/(b-a);
else
if (h>c) && (h<d)
derajat=(d-h)/(d-c);
else
if (h>=b) && (h<=c)
derajat=1.0;
else
derajat = 0.0;
end
end
end

8. Jelaskan pula kode berikut:

function derajat=f_green(h, s, v)
400 Pengolahan Citra Teori dan Aplikasi

if (h==0) && (s==0)


derajat = 0.0;
else
derajat = f_trapesium(43,65,105,128, h);
end;

9. Kelemahan dari cariwarna.m terletak pada langkah yang selalu menghitung


komposisi warna untuk setiap file citra setiap kali terdapat permintaan suatu
warna. Langkah yang lebih baik adalah melakukan perhitungan komposisi
warna sekali saja dan kemudian hasilnya diletakkan dalam suatu file. Dalam
hal ini, perintah save bisa dipakai. Selanjutnya, query terhadap warna dapat
dlakukan secara langsung melalui file tersebut. Cobalah untuk
mengimplementasikannya.

10. Ada kemungkinan warna yang mendominasi suatu citra lebih dari satu warna.
Sebagai contoh, sebuah citra berisi warna merah dan putih dengan komposisi
yang sama. Kembangkan program pencari warna dominan yang bisa
mengantisipasi hal seperti itu.
BAB 10
Segmentasi
Citra

Setelah bab ini berakhir, diharapkan pembaca dapat


memahami berbagai istilah berikut dan juga dapat
mempraktikkan beberapa penerapannya.
Segmentasi citra
Deteksi garis
Deteksi tepi
Peng-ambangandwi-aras
Peng-ambangan global Vs. lokal
Peng-ambangan aras-jamak
Peng-ambangan dengan metode Otsu
Peng-ambangan adaptif
Peng-ambangan berdasarkan entropi
Segmentasi warna
402 Pengolahan Citra : Teori dan Aplikasi

10.1 Pengantar Segmentasi Citra

Segmentasi citra merupakan proses yang ditujukan untuk mendapatkan


objek-objek yang terkandung di dalam citra atau membagi citra ke dalam
beberapa daerah dengan setiap objek atau daerah memiliki kemiripan atribut. Pada
citra yang mengandung hanya satu objek, objek dibedakan dari latarbelakangnya.
Contoh ditunjukkan pada Gambar 10.1.Pada citra yang mengandung sejumlah
objek, proses untuk memilah semua objek tentu saja lebih kompleks.Contoh
penerapan segmentasi yaitu untuk membuat“Magic Wand”, yang biasa terdapat
pada perangkat pengedit foto.Contoh pada Gambar 10.2 menunjukkan
penggunaan “Magic Wand” pada Adobe Photoshop.Contoh tersebut
memperlihatkan pemilihan area yang ditandai dengan warna khusus.

(b) Citra daun (a) Hasil segmentasi dalam


bentuk biner

Gambar 10.1 Pemisahan objek daun terhadap latarbelakang


Segmentasi Citra 403

Area ini diperoleh


melalui “Magic Wand”

Gambar 10.2Pemilihan citra berdasarkan warna,


yang intinya diperoleh melalui segmentasi.
Bagian terpilih ditandai dengan garis terputus-putus

Gambaran berbagai aplikasi segmentasi serta acuan yang digunakan dapat


dilihat pada Tabel 10.1. Secara prinsip, segmentasi dilakukan untuk mendapatkan
objek yang menjadi perhatian.

Tabel 10.1Aplikasi segmentasi pada citra


Objek Citra Kegunaan Acuan yang
Segmentasi Digunakan
Mobil Mobil, jalan, dan Pelacakan mobil Gerakan dan
latarbelakang warna
Struktur Foto satelit Pengklasifikasian Tekstur dan
permukaan bumi area warna
Wajah orang Kerumunan orang Pengenalan wajah Warna, bentuk,
di pasar dan tekstur
Apel Kumpulan apel Pemilahan buah apel Bentuk, warna,
pada ban berjalan berdasarkan ukuran ukuran

Segmentasi juga biasa dilakukan sebagai langkah awal untuk


melaksanakan klasifikasi objek. Gambar 10.3 menperlihatkkan hal ini. Setelah
segmentasi citra dilaksanakan, fitur yang terdapat pada objek diambil. Sebagai
404 Pengolahan Citra : Teori dan Aplikasi

contoh, fitur objek dapat berupa perbandingan lebar dan panjang objek, warna
rata-rata objek, atau bahkan tekstur pada objek. Selanjutnya, melalui
pengklasifikasi, jenis objek dapat ditentukan. Sebagai contoh, pengklasifikasi
menyatakan bahwa daun termasuk golonganAglaonema.
Teknik segmentasi citra didasarkan pada dua properti dasar nilai aras
keabuan: ketidaksinambungan dan kesamaan antarpiksel. Pada bentuk yang
pertama, pemisahan citra didasarkan pada perubahan mendadak pada aras
keabuan. Contoh yang menggunakan pendekatan seperti itu adalah detektor garis
dan detektor tepi pada citra. Cara kedua didasarkan pada kesamaan antarpiksel
dalam suatu area (Acharya dan Ray, 2005). Termasuk dalam cara kedua ini yaitu:
peng-ambangan berdasarkan histogram;
pertumbuhan area;
pemisahan dan penggabungan area;
pengelompokan atau pengklasifikasian;
pendekatan teori graf;
pendekatan yang dipandu pengetahuan atau berbasis aturan.

Berdasarkan teknik yang digunakan, segmentasi dapat dibagi menjadi empat


kategori berikut(Rangayyan, 2005):
1) teknik peng-ambangan;
2) metode berbasis batas;
3) metode berbasis area;
4) metode hibrid yang mengombinasikan kriteria batas dan area.
Segmentasi Citra 405

Citra masukan

Segmentasi
Citra

Objek daun
Ekstraksi
Fitur

Fitur-fitur
pada daun
Pengklasifikasi

Jenis tanaman

Gambar 10.3Segmentasi sebagai langkah awal


sistem klasifikasi

10.2Deteksi Garis

Deteksi garispada citra dapat diperoleh melalui penggunaan “cadar”


(mask)dengan contoh tercantum pada Gambar 10.4 (Gonzalez & Woods, 2002).
Cadar (a) berguna untuk memperoleh garis horizontal, cadar (b) untuk
mendapatkan garis yang berorientasi 45o, cadar (c) untuk memperoleh garis tegak,
dan cadar (d) untuk mendapatkan garis yang berorientasi -45o.

−1 −1 −1 −1 −1 2 −1 2 −1 2 −1 −1
2 2 2 −1 2 −1 −1 2 −1 −1 2 −1
−1 −1 −1 2 −1 −1 −1 2 −1 −1 −1 2

(a) (b) (c) (d)

Gambar 10.4Empat pasang cadar untuk mendeteksi keberadaan garis


406 Pengolahan Citra : Teori
Te dan Aplikasi

Fungsi deteks
ksi berikut berguna untuk menguji cadar-cada
dar yang terdapat
pada Gambar 10.4. Fungsi
F tersebut sekaligus dapat dipakai untuk
uk menguji cadar-
cadar yang lain.

Program : deteksi.m

function [G] = deeteksi(F, H, potong, pembulatan)


% DETEKSI Melakukkan operasi korelasi kernel H dengan citra F
% H harus memppunyai tinggi dan lebar ganjil
% Argumen potoong bersifat opsional. Apabila
% bernilai true, bagian citra yang tidak diprosses
% akan dipootong. Bawaan = false
% Argumen pembbulatan bersifat opsional.
% Apabila bernilai
b true, pembulatan dengan uint
t8
% tidak dillakukan. Bawaan = true
%
% Hasil: citra G

if nargin < 3
potong = fals
se;
end

if nargin < 4
pembulatan = true;
end

[tinggi_f, lebar_
_f] = size(F);
[tinggi_h, lebar_
_h] = size(H);

if rem(lebar_h,2)
) == 0 || rem(tinggi_h,2) == 0
disp('Lebar dan
d tinggi H harus ganjil');
return;
end

m2 = floor(tinggi
i_h/2);
n2 = floor(lebar_
_h/2);

% Menentukan ukur ran hasil beserta


% penentu ofseet koordinat
if potong == true e
sisi_m2 = m2;;
sisi_n2 = n2;;
G = zeros(tinnggi_f - 2 * m2, lebar_f - 2 * n2);
else
sisi_m2 = 0;
sisi_n2 = 0;
G = zeros(sizze(F));
end

F2=double(F);
Segmentasi Citra 407

for y=m2+1 : tinggi_f-m2


for x=n2+1 : lebar_f-n2
% Pelaksanaan korelasi F(baris, kolom)
jum = 0;
for p=-m2 : m2
for q=-n2 : n2
jum = jum + H(p+m2+1,q+n2+1) * ...
F2(y+p, x+q);
end
end

G(y - sisi_m2, x - sisi_n2) = jum;


end
end

if pembulatan == true
G = uint8(G);
end

Akhir Program

Dengan fungsi di atas, bagian pinggir citra yang tidak diproses akan
dibuang sekiranya argumen ketiga tidak diberikan atau diberi nilai false. Dengan
demikian, ukuran G akan dipengaruhi oleh ukuran H. Nilai true pada argumen
ketiga akan membuat bagian tepi yang tidak diproses berwarna hitam, membentuk
seperti bingkai. Argumen keempat digunakan untuk menentukan eksekusi uint8
atau tidak. Dalam banyak hal, argumen keempat tidak perlu disebutkan karena
umumnya memang hasil deteksi tepi akan memotong nilai yang di bawah nol dan
yang di atas 255. Namun, di belakang akan ada aplikasi yang memerlukan fungsi
deteksi tetapi tanpa perlu melakukan pemotongan seperti itu.
Contoh berikut menunjukkan penggunaan deteksi untuk mendapatkan
garis tegak:

>> H1=[-1 -1 -1; 2 2 2; -1 -1 -1];


>> Img=imread('C:\Image\jaring.png');
>> G=deteksi(Img, H1); imshow(G,[0 1])
>>

Hasil deteksi garis dapat dilihat pada Gambar 10.5(b). Terlihat bahwa garis
vertikal tidak tampak. Namun, garis miring dan mendatar tetap terdeteksi.
408 Pengolahan Citra : Teori dan Aplikasi

(a) Citra jaring.png (b) Hasil deteksi garis horizontal

Gambar 10.5Contoh deteksi garis horizontal

Gambar 10.6 memperlihatkan perbedaan hasil yang menggunakan masing-masing


satu dari keempat cadar yang tercantum di Gambar 10.4.
Segmentasi Citra 409

Gambar 10.6Contoh hasil deteksi garis untuk empat arah yang berbeda
terhadapgambar pada Gambar 10.5(a)

Deteksi garis juga dapat diperoleh melalui transformasi Hough.


Transformasi tersebut dibahas, misalnya, oleh Davies (1990).
410 Pengolahan Citra : Teori dan Aplikasi

10.3Deteksi Tepi

Deteksi tepi berfungsi untuk memperoleh tepi objek. Deteksi tepi


memanfaatkan perubahan nilai intensitas yang drastis pada batas dua area.
Definisi tepi di sini adalah “himpunan piksel yang terhubung yang terletak pada
batas dua area” (Gonzalez & Woods, 2002). Perlu diketahui, tepi sesungguhnya
mengandung informasi yang sangat penting. Informasi yang diperolehdapat
berupa bentuk maupun ukuran objek.
Umumnya, deteksi tepi menggunakan dua macam detektor, yaitu detektor
baris (Hy) dan detektor kolom (Hx). Beberapa contoh yang tergolong jenis ini
adalaah operator Roberts, Prewitt, Sobel, dan Frei-Chen.
Deteksi tepi dapat dibagi menjadi dua golongan. Golongan pertama
disebut deteksi tepi orde pertama, yang bekerja dengan menggunakan turunan
atau diferensial orde pertama. Termasuk kelompok ini adalahoperator Roberts,
Prewitt, dan Sobel. Golongan kedua dinamakan deteksi tepi orde kedua, yang
menggunakan turunan orde kedua. Contoh yang termasuk kelompok ini
adalahLaplacian of Gaussian (LoG).
Tabel 10.2 memberikan definisi turunan orde pertama dan kedua baik pada
bentuk yang kontinu maupun diskret. Bentuk diskret sangat berguna untuk
melakukan deteksi tepi. Adapun Gambar 10.7 menunjukkan hubungan antara
fungsi citra dan deteksi tepi orde pertama dan orde kedua. Perlu diketahui, terkait
dengan turunan, tepi sesungguhnya terletak pada:
nilai absolut maksimum pada turunan pertama;
persilangan nol (zero-crossing) pada turunan kedua.

Tabel 10.2Turunan orde pertama dan kedua pada


bentuk kontinu dan diskret

, +∆ ,
Turunan Bentuk kontinu Bentuk diskret
lim

f(y,x+1)f(y,x)
∆ →
+∆ , ,
lim

f(y+1,x)f(y,x)
∆ →
∇ ,
,
[f(y, x+1)f(y,x),
f(y+1,x)f(y,x)]
, +∆ ,
lim
f(y,x+1)- 2f(y,x)+f(y,x-1)
∆ → ∆
Segmentasi Citra 411

Turunan Bentuk kontinu Bentuk diskret


+∆ , ,
lim
f(y+1,x) -2f(y,x)+f(y-1,x)

∆ → ∆
∇ ,
+
f(y,x+1)+f(y,x-1) -
4f(y,x)+f(y+1,x)+f(y-1,x)

(a) Fungsi citra

Nilai maksimum

Batas
(b) Deteksi tepi
derivatif orde pertama

a b

Persilangan nol
(zero-crossing)
2

2
(c) Deteksi tepi
derivatif orde kedua

Gambar 10.7Deteksi tepi orde pertama dan orde kedua pada arah x
412 Pengolahan Citra : Teori dan Aplikasi

Apabila profil citra mempunyai tepi dengan bentuk tanjakan


(ramp), fungsi dan turunannya ditunjukkan berikut ini.

Profil aras
keabuan

Turunan
pertama

Turunan
kedua

Profil citra dapatberupa tepi dengan bentuk atap, garis, undakan,


atau tanjakan.

Tepi
tanjakan

Tepi garis

Tepi
undakan

Tepi atap

Contoh pada Gambar 10.7(a) menunjukkan keadaan fungsi intensitas citra


f(y,x) pada arah x dengan bentuk tepi tanjakan yang landai. Gambar 10.7(b)
menunjukkan keadaan turunan pertama pada arah x. Puncak pada Gambar 10.7(b)
menyatakan letak tepi pada turunan pertama, sedangkan persilangan nol pada
Gambar 10.7(c) menyatakan letak tepi pada turunan kedua. Apabila nilai batas
dikenakan pada turunan pertama, puncak tidak lagi menjadi tepi. Akibatnya,
terdapat dua nilai yang memenuhi (yaitu a dan b). Kedua nilai tersebut akan
menjadi piksel-piksel tepi. Berbeda halnya pada turunan kedua, tepi akan selalu
berupa satu piksel. Hal itu terlihat pada perpotongan fungsi turunan kedua dengan
sumbu x. Akibatnya, ketebalan tepi akan selalu berupa satu piksel.
Segmentasi Citra 413

Untukk memahami profil citra yang berhubunga


gan dengan tepi,
perhati
atikan matriks yang berukuran 4 x 6 berikut.

168 168 168 0 0 0


168 168 168 0 0 0'
168 168 168 0 0 0
168 168 168 0 0 0

Pada contoh
c tersebut perubahan nilai dari sisi ki
kiri (168) ke sisi
kanann (0) sangat drastis, tidak bertahap. Profil citra
tra tersebut berupa
tepi undakan.
un Adapun matriks berikut mengandung
ng tepi tanjakan:

168 168 168 138 87 30 0 0 0


168 168 168 138 87 30 0 0 0
168 168 168 138 87 30 0 0 0

Perhati
atikan, terjadi perubahan nilai secara bertahapp dari transisi 168
ke 0.

Contoh
toh dalam bentuk citra:

tepi
pi undakan tepi tanjakan

Deteksi tepi de
dengan turunan orde pertama dilakukan denga
gan menggunakan
operator gradien. Ope
perator gradien didefinisikan sebagai vektor

%
"# $ % $ ' (10.1)
414 Pengolahan Citra : Teori dan Aplikasi

Besaran vektor dihitung menggunakan rumus

0/ 0/
∇ $ *+, ∇f $ .% +% / $2 + 3 (10.2)

Namun, untuk alasan penyederhanaan komputasi, operasi akar ditiadakan


sehingga besaran vektor tersebut dihampiri melalui

∇ ≈% +% (10.3)

Perlu diketahui, besaran gradien sering disebut sebagai “gradien” saja.


Adapun turunan orde kedua yang biasa digunakan dalam pengolahan citra
dihitung dengan menggunakan Laplacian. Perhitungannya seperti berikut:

∇ , $ +
5 , 5 ,
5 5
(10.4)

• Cadar yang digunakan pada deteksi tepi dalam buku ini telah
disesuaikan agar proses terhadap citra dapat dilakukan secara
korelasi (bukan konvolusi). Itulah sebabnya, ada kemungkinan
cadar yang digunakan pada buku ini berbeda dengan cadar di
literatur lain.

• Berbagai teknik deteksi tepi bekerja dengan cara yang berbeda.


Masing-masing memiliki kekuatan (Crane, 1997). Itulah
sebabnya, eksperimen pada suatu aplikasi dengan menggunakan
berbagai teknik deteksi tepi perlu dilakukan untuk mendapatkan
hasil yang terbaik.
Segmentasi Citra 415

10.3.1 Operator Rob


oberts

Operator Robe
berts,yang pertama kali dipublikasikan pada ta
tahun 1965,terdiri
atas dua filter berukur
uran 2x2. Ukuran filter yang kecil membuatt kkomputasi sangat
cepat. Namun, keleb
ebihan ini sekaligus menimbulkan kelemaha
han, yakni sangat
terpengaruh oleh dera
erau. Selain itu, operator Roberts memberikann tanggapan yang
lemah terhadap tepi,
i, kecuali
k kalau tepi sangat tajam (Fisher,dkk.,., 2003).
2

x x+1

y z1 z2 1 0 0 -1

y+1 z3 z4 0 -1 1 0

(a) Posisi pada citra f (b) Gx (c) Gy

Gambar 10.8O
Operator Roberts (b) dan (c) serta posisi pada
pa citra f

Bentuk opera
rator Roberts ditunjukkan pada Gambar 10.8.
10 Misalkan, f
adalah citra yang akan
ak dikenai operator Roberts. Maka, nilai ooperator Roberts
pada (y, x) didefinisik
sikan sebagai

6 , $ 7 80 − 89 + 8: − 8 (10.5)

Dalam hal ini, z1 = f(yy, x), z2 = f(y, x+1), z3 = f(y+1, x), dan z4 = ff(y+1, x+1).
Fungsi roberts
s berikut berguna untuk memperoleh tepi pada
pad citra berskala
keabuan.

Program : roberts.m

function [G] = rooberts(F)


% ROBERTS Pemerollehan tepi objek pada citra F
% melalui operrator Roberts
% Hasil: citra G

[m, n] = size(F);
;
416 Pengolahan Citra : Teori dan Aplikasi

F=double(F);
for y=1 : m-1
for x=1 : n-1

G(y, x) = sqrt((F(y,x)-F(y+1,x+1))^2 + ...


(F(y+1,x)-F(y,x+1))^2) ;
end
end

G = uint8(G);

Akhir Program

Contoh penggunaan fungsi roberts:

>> Img=rgb2gray(imread('C:\Image\mainan.png'));
>> G=roberts(Img);
>> imshow(G)
>>

Hasil deteksi tepi pada citra mainan.png dapat dilihat pada Gambar 10.9.
Segmentasi Citra 417

(a) Citra mainan.png

(b) Hasil deteksi tepi dengan operator Roberts

Gambar 10.9 Pengenaan operator Roberts pada citra mainan.png

10.3.2 Operator Prewitt

Operator Prewittdikemukakan oleh Prewitt pada tahun 1966.Bentuknya


terlihat pada Gambar 10.10. Untuk mempercepat komputasi, bagian yang bernilai
nol tidak perlu diproses. Oleh karena itu, perhitungan dengan operator Prewitt
ditulis menjadi

6 , $ sqrt((f(y-1,x-1)+f(y,x-1)+f(y+1,x-1) -
f(y-1,x+1)-f(y,x+1)-f(y+1,x+1))^2 + (10.6)
(f(y+1,x-1)+ f(y+1,x) + f(y+1,x+1) -
f(y-1,x-1) - f(y-1,x) - f(y-1,x+1))^2))
418 Pengolahan Citra : Teori
Te dan Aplikasi

x-1 x x+1

y-1 z1 z2 z3 1 0 -1 -1 -1 -1

y z4 z5 z6 1 0 -1 0 0 0

y+1 z7 z8 z9 1 0 -1 1 1 1

(a) Posisi
isi pada citra f (b) Gx (c) Gy

Gambar 10.10
10Operator Prewitt (b) dan (c) serta posisi pada
pa citra f

Fungsi prew
witt berikut berguna untuk melakukan pen
engujian operator
Prewitt terhadap citra
tra berskala keabuan.

Program : prewitt.m

function [G] = prrewitt(F)


% PREWITT Pemerollehan tepi objek pada citra F
% melalui operrator Prewitt
% Hasil: citra G

[m, n] = size(F);
;

F=double(F);
G=zeros(m,n);
for y=2 : m-1
for x=2 : n-11
G(y, x) = sqrt((F(y-1,x-1) + F(y,x-1) + F(y+1 1,x-1) - ...
F(y,
,x) - F(y,x+1) - F(y+1,x+1))^2 + ...
(F(y
y+1,x-1)+ F(y+1,x) + F(y+1,x+1) - ....
F(y-
-1,x-1) - F(y-1,x) - F(y-1,x+1))^2) ;
end
end

G = uint8(G);

Akhir Program

Contoh penggunaan fungsi


f prewitt:

>>Img = rgb2
2gray(imread('C:\Image\mainan.png'))
);
Segmentasi Citra 419

>> G=prewitt(Img);
>> imshow(G)
>>

Hasil deteksi tepi pada citra mainan.png dapat dilihat pada Gambar 10.11.

Gambar 10.11 Hasil deteksi tepi dengan operator Prewitt. Hasil tepi lebih
tegas daripada hasil dengan operator Roberts
420 Pengolahan Citra : Teori dan Aplikasi

Fungsi deteksi dapat digunakan untuk mengamati efek cadar Gx


dan Gy pada operator Prewitt secara individual. Contoh
penggunaannya seperti berikut:

>>Img = rgb2gray(imread('C:\Image\mainan.png'));
>> Gx = [ 1 0 -1; 1 0 -1; 1 0 -1];
>> G = deteksi(Img, Gx); imshow(G)
>>

Hasilnya seperti berikut:

10.3.3 Operator Sobel

Operator Sobel dapat dilihat pada Gambar 10.12. Operator Sobel lebih
sensitif terhadap tepi diagonal daripada tepi vertikal dan horizontal Hal ini
berbeda dengan operator Prewitt, yang lebih sensitif terhadap tepi vertikal dan
horizontal (Crane, 1997).
Segmentasi Citra 421

x-1 x x+1

y-1 z1 z2 z3 -1 0 1 1 2 1

y z4 z5 z6 -2 0 2 0 0 0

y+1 z7 z8 z9 -1 0 1 -1 -2 -1

(a) Posisi
isi pada citra f (b) Gx (c) Gy

Gambar 10.122Operator Sobel (b) dan (c) serta posisi dala


alam citra f

Fungsi sobel
l berikut berguna untuk melakukan pengujian
ian operator Sobel
terhadap citra berskal
ala keabuan.

Program : sobel.m

function [G] = soobel(F)


% SOBEL Pemerolehhan tepi objek pada citra F
% melalui operrator Sobel
% Hasil: citra G

[m, n] = size(F);
;

F=double(F);
G=zeros(m,n);
for y=2 : m-1
for x=2 : n-11
G(y, x) = sqrt(...
(F(y
y-1,x+1)+2*F(y,x+1)+F(y+1,x+1) - ...
F(y-
-1,x-1)-F(y,x-1)-F(y+1,x-1))^2 + ...
(F(y
y-1,x-1)+2*F(y-1,x)+F(y-1,x+1) - ...
F(y+
+1,x-1)-2*F(y+1,x)-F(y+1,x+1))^2) ;
end
end

G = uint8(G);

Akhir Program

Contoh penggunaan fungsi


f sobel:

>>Img = rgb2
2gray(imread('C:\Image\mainan.png'))
);
422 Pengolahan Citra : Teori dan Aplikasi

>> G=sobel(Img);
>> imshow(G)
>>

Hasil deteksi tepi pada citra mainan.png dapat dilihat pada Gambar 10.13.

Gambar 10.13Hasil deteksi tepi dengan operator Sobel

10.3.4 Operator Frei-Chen

Operator Frei-Chen(kadang disebut operator isotropik) ditunjukkan pada


Gambar 10.14. Operator ini mirip dengan operator Sobel, dengan setiap angka 2
diganti menjadi √2.
x-1 x x+1

y-1 z1 z2 z3 -1 0 1 1 √2 1

y z4 z5 z6 -√2 0 √2 0 0 0

y+1 z7 z8 z9 -1 0 1 -1 -√2 -1

(a) Posisi pada citra f (b) Gx (c) Gy

Gambar 10.14Operator Frei-Chen (b) dan (c) serta posisi dalam citra f
Segmentasi Citra 423

Fungsi freic
chen berikut berguna untuk melakukan pen
engujian operator
Frei-Chen terhadap citra
ci berskala keabuan.

Program : freichen.m

function [G] = frreichen(F)


% FREICHEN Pemeroolehan tepi objek pada citra F
% melalui operrator Frei-Chen
% Hasil: citra G

[m, n] = size(F);
;

akar2 = sqrt(2);
F=double(F);
G=zeros(m,n);
for y=2 : m-1
for x=2 : n-11
G(y, x) = sqrt(...
(F(y
y-1,x+1)+akar2*F(y,x+1)+F(y+1,x+1) - ...
F(y-
-1,x-1)-F(y,x-1)-F(y+1,x-1))^2 + ...
(F(y
y-1,x-1)+akar2*F(y-1,x)+F(y-1,x+1) - ...
F(y+
+1,x-1)-akar2*F(y+1,x)-F(y+1,x+1))^2)) ;
end
end

G = uint8(G);

Akhir Program

Contoh penggunaan fungsi


f freichen:

>>Img = rgb2
2gray(imread('C:\Image\mainan.png'))
);
>> G=freiche
en(Img);
>> imshow(G)
)
>>

Hasil deteksi tepi pad


ada citra mainan.png dapat dilihat pada Gamba
bar 10.15.
424 Pengolahan Citra : Teori dan Aplikasi

Gambar 10.15Hasil deteksi tepi dengan operator Frei-Chen

Gambar 10.16 memperlihatkan perbedaan secara visual hasil deteksi tepi


dengan menggunakan operator Roberts, Prewitt, Sobel, danFrei-Chen. Perlu
diketahui, hasil pada gambar tersebut masih berskala keabuan. Untuk menjadi
citra biner, perlu dilakukan peng-ambangan yang mulai dibahas pada Subbab
10.4. Contoh hasil peng-ambangan dapat dilihat pada Gambar 10.17.
Segmentasi Citra 425

(a) Operator Roberts (b) Operator Prewitt

(c) Operator Sobel (d) Operator Frei-Chen

Gambar 10.16Perbedaan hasil deteksi tepi dengan


menggunakan keempat macam operator

(a) Hasil deteksi tepi dengan (b) Hasil setelah peng-ambangan


(a) Hasil deteksi
operator tepi dengan
Roberts dengan nilai ambang 20
operator Roberts

Gambar 10.17Contoh hasil deteksi tepi dan peng-ambangan

10.3.5 Operator Laplacian

Operator Laplacian merupakan contoh operator yang berdasarkan pada


turunan kedua.Operator ini bersifat omnidirectional, yakni menebalkan bagian
tepi ke segala arah. Namun, operator Laplacian memiliki kelemahan, yakni peka
terhadap derau,memberikan ketebalan ganda, dan tidak mampu mendeteksi arah
tepi (Gonzalez & Woods, 2002). Contoh cadar ditunjukkan pada Gambar 10.18.
426 Pengolahan Citra : Teori
Te dan Aplikasi

x-1 x x+1

y-1 z1 z2 z3 0 -1 0 -1 -1 -1

y z4 z5 z6 -1 4 -1 -1 8 -1

y+1 z7 z8 z9 0 -1 0 -1 -1 -1

(a) Posisi
isi pada citra f (b) #1 (c) #2

Gambar 10.18 Operator Laplacian

Berdasarkan cadar
c #1 pada Gambar 10.18(b), nilai ope
perator Laplacian
pada (y, x) didefinisik
sikan sebagai

< , $4 , −> − 1, + , −1 +
, +1 + + 1, ? (10.7)

Fungsi lapl
lacian2 berikut berguna untuk melaku
kukan pengujian
operator Laplacianter
terhadap citra berskala keabuan dengan men
enggunakan cadar
#2yang tertera pada G
Gambar 10.18(c).

Program : laplacian2.m

function [G] = laaplacian2(F)


% LAPALACIAN2 Pemmerolehan tepi objek pada citra F
% melalui operrator Laplacian #1
% Hasil: citra G

[m, n] = size(F);
;
G=zeros(m,n); % Semua berisi nol

F=double(F);
for y=2 : m-1
for x=2 : n-11
G(y, x) = 8 * F(y,x) - ...
(F(y
y-1,x)+ F(y,x-1)+F(y,x+1)+F(y+1,x) + ...
F(y
y-1,x-1)+ F(y-1,x+1)+F(y+1,x-1)+F(y+1
1,x+1));
Segmentasi Citra 427

end
end

G = uint8(G);

Akhir Program

Contoh penggunaan fungsi laplacian2:

>>Img = rgb2gray(imread('C:\Image\mainan.png'));
>> G=laplacian2(Img);
>> imshow(G)
>>

Hasil deteksi tepi pada citra mainan.png dapat dilihat pada Gambar 10.19.

Gambar 10.19Hasil deteksi tepi


menggunakan operator Laplacian #2

10.3.6 Operator Laplacian of Gaussian

Deteksi tepi orde kedua yang makin kurang sensitif terhadap derau
adalahLaplacian of Gaussian (LoG). Hal ini disebabkan penggunaan fungsi
428 Pengolahan Citra : Teori dan Aplikasi

Gaussianyang memuluskan citra dan berdampak pada pengurangan derau pada


citra. Akibatnya, operator mereduksi jumlah tepi yang salah terdeteksi (Crane,
1997). Menurut Fisher, dkk. (2003), operator LoG diperoleh melalui
konvolusi dengan
G H5 IJ5
@A% , $− D 21 − 3F
0 5E 5
5K5
BC C5
(10.8)

Fungsi di atas disebut sebagai filter topi Meksiko (the Mexican hat filter) karena
bentuknya seperti topi yang biasa dikenakan orang Meksiko (lihat Gambar 10.20).
Dalam hal ini, semakin besar nilai σ, semakin besar pula cadar yang
diperlukan.Contoh cadar berukuran 5 x 5 yang mewakili operator LoG
ditunjukkan pada Gambar 10.21 (Gonzalez & Woods, 2002).

Dalam praktik, terdapat berbagai variasi rumus yang digunakan


dalam LoG. Gonzalez dan Woods (2002) menggunakan rumus
seperti berikut:
+ −M G H5 IJ5
@A% , $ −L NF 5K5
M9
Nixon dan Aguido (2002) menggunakan rumus:

1 + G H5 IJ5
@A% , $ L − 2N F 5K5
M M

Adapun Crane (1997) menggunakan rumus:

1 + G H5 IJ5
@A% , $ L1 − NF 5K5
OM 9 2M
Segmentasi Citra 429

Gambar 10.20Fungsi LoG(y, x)berdasarkan Fisher,dkk. (2003)

0 0 -1 0 0

0 -1 -2 -1 0

-1 -2 16 -2 -1

0 -1 -2 -1 0

0 0 -1 0 0

Gambar 10.21 Contoh operator LoG

Contoh penggunaanLoG:

>>Img = rgb2gray(imread('C:\Image\mainan.png'));
>> H = [ 0 0 -1 0 0
0 -1 -2 -1 0
-1 -2 16 -2 -1
0 -1 -2 -1 0
0 0 -1 0 0];
>> G=deteksi(Img, H); imshow(G)
>>

Hasil deteksi tepi pada citra mainan.png dapat dilihat pada Gambar 10.22.
430 Pengolahan Citra : Teori dan Aplikasi

Gambar 10.22Contoh hasil deteksi tepi dengan LoG

Nixon & Aguado (2002) memberikan cara yang dapat digunakan untuk
memperoleh cadar LoG berdasarkan nilai σ dan ukuran. Cara tersebut tertuang
dalam algoritma berikut.

ALGORITMA 10.1 – Memperoleh cadar LoG

Masukan:
• Ukuran : ukuran cadar
• σ: Deviasi standar

Keluaran:
• h (M, N): Cadar LoG

cadarLoG(ukuran, σ):
1. cx ←floor((ukuran-1) / 2)
2. cy ← cx
3. jum ← 0
4. FORy←0 TO ukuran -1
FORx ← 0TO ukuran -1
nx ← x – cx
ny ← y – cy
Segmentasi Citra 431

G QH5 I QJ5
nilai ←C5 2 − 23 F
0 P 5E P 5
5K5
C5
h(y+1, x+1)
x+ ←nilai
jum ← jum + nilai
END--FOR
END-F FOR
5. // Laku
kukan normalisasi
FOR y ← 1 TO ukuran
FOR
OR y ← 1 TO ukuran
h x) ← h(y, x) / jum
h(y,
END
ND-FOR
END-F FOR
6. RETUR URN h

Pada algoritma di atas,


ata normalisasi dilakukan agar jumlah koefi
efisien pada cadar
bernilai 1. Implement
ntasi perolehan cadar LoG dapat dilihat pada cadarLoG.m.
ca

Program : cadarLoG.m

function [H] = ca
adarLoG(ukuran, sigma)
% CADARLOG Mengha
asilkan cadar LoG berdasarkan
% Nixon dan Aguido
A (2002)
% Masukan:
% ukuran : uk
kuran cadar
% sigma : Dev
viasi standar
% Keluaran : H = cadar LoG

cx = floor((ukura
an-1) / 2);
cy = cx;

jum = 0;
H = zeros(ukuran,, ukuran);
for y=0 : ukuran--1
for x=0 : ukuuran -1
nx = x - cx;
ny = y - cy;

nilai = 1 / (sigma ^ 2) * ...


((nx^2 + ny^2)/(sigma^2)-2) * ...
exp((-nx^2 - ny^2) / (2 * sigma^2))
);
H(y+1, x+
+1) = nilai;
jum = jum
m + nilai;
end
end

% Lakukan normaliisasi
for y=1 : ukuran
432 Pengolahan Citra : Teori dan Aplikasi

for x=1 : ukuran


H(y,x) = H(y,x) / jum;
end
end

Akhir Program

Contoh penggunaan cadarLoG untuk memperoleh cadar LoG berukuran


7 x 7 dengan σ = 0,6 :

>> cadarLoG(7, 0.6)


ans =

-0.0000 -0.0000 -0.0002 -0.0008 -0.0002 -0.0000 -0.0000


-0.0000 -0.0029 -0.1085 -0.3335 -0.1085 -0.0029 -0.0000
-0.0002 -0.1085 -2.0930 -1.8361 -2.0930 -0.1085 -0.0002
-0.0008 -0.3335 -1.8361 18.9348 -1.8361 -0.3335 -0.0008
-0.0002 -0.1085 -2.0930 -1.8361 -2.0930 -0.1085 -0.0002
-0.0000 -0.0029 -0.1085 -0.3335 -0.1085 -0.0029 -0.0000
-0.0000 -0.0000 -0.0002 -0.0008 -0.0002 -0.0000 -0.0000

>>

Adapun contoh berikut untuk memperoleh cadar LoG berukuran 7 x 7 dengan σ =


1:

>> cadarLoG(7, 1)
ans =

-0.0385 -0.3221 -1.0499 -1.5146 -1.0499 -0.3221 -0.0385


-0.3221 -2.1404 -4.7962 -5.2717 -4.7962 -2.1404 -0.3221
-1.0499 -4.7962 0 11.8132 0 -4.7962 -1.0499
-1.5146 -5.2717 11.8132 38.9532 11.8132 -5.2717 -1.5146
Segmentasi Citra 433

-1.0499 -4.7962 0 11.8132 0 -4.7962 -1.0499


-0.3221 -2.1404 -4.7962 -5.2717 -4.7962 -2.1404 -0.3221
-0.0385 -0.3221 -1.0499 -1.5146 -1.0499 -0.3221 -0.0385

>>

Cadar LoG akan bermanfaat untuk kepentingan pemrosesan dengan operator


Marr-Hildreth, yang dibahas pada Bagian 10.4.10.

10.3.7 Operator Difference of Gaussian

Mengingat LoG memerlukan komputasi yang besar, Difference of Gaussian


(DoG) biasa digunakan sebagai hampiran terhadap LoG. Fungsi DoGberupa

G H5 IJ5 G H5 IJ5
5 5
RA% . $ −
T 5KU T 5K5
CU 5 C5 5
(10.9)

Terlihat bahwa DoG dilaksanakan dengan melakukan konvolusi citra dengan


sebuah cadar yang merupakan hasil pengurangan dua buah cadar Gaussian
dengan nilai σ yang berbeda.Gambar 10.23 menunjukkan dua cadar yang dapat
digunakan untuk melaksanakan DoG (Crane, 1997).
434 Pengolahan Citra : Teori dan Aplikasi

0 0 -1 -1 -1 0 0
0 -2 -3 -3 -3 -2 0
-1 -3 5 5 5 -3 -1
-1 -3 5 16 5 -3 -1
-1 -3 5 5 5 -3 -1
0 -2 -3 -3 -3 -2 0
0 0 -1 -1 -1 0 0

(a) Cadar berukuran 7 x 7

0 0 0 -1 -1 -1 0 0 0
0 -2 -3 -3 -3 -3 -3 -2 0
0 -3 -2 -1 -1 -1 -2 -3 0
-1 -3 -1 9 9 9 -1 -3 -1
-1 -3 -1 9 9 9 -1 -3 -1
-1 -3 -1 9 9 9 -1 -3 -1
0 -3 -2 -1 -1 -1 -2 -3 0
0 -2 -3 -3 -3 -3 -3 -2 0
0 0 0 -1 -1 -1 0 0 0

(b) Cadar berukuran 9 x 9

Gambar 10.23Contoh cadar DoG

Contoh penggunaan DoG:

>>Img = rgb2gray(imread('C:\Image\mainan.png'));
>> H = [ 0 0 -1 -1 -1 0 0
0 -2 -3 -3 -3 -2 0
-1 -3 5 5 5 -3 -1
-1 -3 5 16 5 -3 -1
-1 -3 5 5 5 -3 -1
0 -2 -3 -3 -3 -2 0
0 0 -1 -1 -1 0 0 ];
>> G=deteksi(Img, H); imshow(G)
>>

Hasil deteksi tepi pada citra mainan.png dapat dilihat pada Gambar 10.24.
Segmentasi Citra 435

Gambar 10.24Hasil deteksi tepi menggunakan DoG

10.3.9 Operator Canny

Operator Canny, yang dikemukakan oleh John Canny pada tahun 1986,
terkenal sebagai operator deteksi tepi yang optimal.Algoritma ini memberikan
tingkat kesalahan yang rendah, melokalisasi titik-titik tepi (jarak piksel-piksel tepi
yang ditemukan deteksi dan tepi yang sesungguhnya sangat pendek), dan hanya
memberikan satu tanggapan untuk satu tepi.
Terdapat enam langkah yang dilakukan untuk mengimplementasikan
deteksi tepi Canny (Green, 2002). Keenam langkah tersebut dijabarkan berikut
ini.

Langkah 1:
Pertama-tama dilakukan penapisan terhadap citra dengan tujuan untuk
menghilangkan derau. Hal ini dapatdilakukan dengan menggunakan filter
Gaussian dengan cadar sederhana. Cadar yang digunakan berukuran jauh lebih
kecil daripada ukuran citra. Contoh ditunjukkan pada Gambar 10.25.
436 Pengolahan Citra : Teori dan Aplikasi

2 4 5 4 2

4 9 12 9 4

1 / 115 5 12 15 12 5

4 9 12 9 4

2 4 5 4 2

Gambar 10.25Contoh cadar Gaussian dengan theta = 1,4

Langkah 2:
Setelah penghalusan gambar terhadap derau dilakukan, dilakukan proses
untuk mendapatkan kekuatan tepi (edge strength). Hal ini dilakukan dengan
menggunakan operator Gaussian.
Selanjutnya, gradien citra dapat dihitung melalui rumus:

G = Gx + G y (10.10)

Langkah 3:
Langkah ketiga berupa penghitungan arah tepi. Rumus yang digunakan
untuk keperluan ini:

theta = tan-1(Gy, Gx) (10.11)

Langkah 4:
Setelah arah tepi diperoleh, perlu menghubungkan antara arah tepi dengan
sebuah arah yang dapat dilacak dari citra. Sebagai contoh, terdapat susunan piksel
berukuran 5x5 seperti terlihat pada Gambar 10.26. Dengan melihat piksel “a”
tampak bahwa a hanya memiliki 4 arah berupa 0o, 45o, 90o, dan 135o.
Segmentasi Citra 437

X X X X X
X X X X X
X X a X X
X X X X X
X X X X X
Gambar 10.26Matriks piksel berukuran 5x5

Selanjutnya, arah tepi yang diperoleh akan dimasukkan ke dalam salah satu
kategori dari keempat arah tadi berdasarkan area yang tertera pada Gambar 10.27.
Berikut adalah aturan konversi yang berlaku:
0 ( H)  ( HI) 
45 yi = f ∑wij xj 
( H)

 j 
arah =  (10.12)
90 y = f (T)  w (TH) y (H) 
135 i ∑ ij j 
j 

90o
135o 45o

Gambar 10.27Area untuk mengonversi arah tepi ke dalam


kategori salah satu dari arah 0o, 45o, 90o, dan 135o

Semua arah tepi yang berkisar antara 0 dan 22,5 serta 157,5 dan 180 derajat
(warna biru) diubah menjadi 0 derajat. Semua arah tepi yang berkisar antara 22,5
dan 67,5 derajat (warna kuning) diubah menjadi 45 derajat. Semua arah tepi yang
438 Pengolahan Citra : Teori dan Aplikasi

berkisar antara 67,5 dan 112,5 derajat (warna merah) diubah menjadi 90 derajat.
Semua arah tepi yang berkisar antara 112,5 dan 157,5 derajat (warna hijau) diubah
menjadi 135 derajat.

Langkah 5
Setelah arah tepi diperoleh, penghilangan non-maksimum dilaksanakan.
Penghilangan non-maksimum dilakukan di sepanjang tepi pada arah tepi dan
menghilangkan piksel-piksel (piksel diatur menjadi 0) yang tidak dianggap
sebagai tepi. Dengan cara seperti itu, diperoleh tepi yang tipis.

Langkah 6:
Langkah keenam berupa proses yang disebut hysteresis. Proses ini
menghilangkan garis-garis yang seperti terputus-putus pada tepi objek. Caranya
adalah dengan menggunakan dua ambang T1 dan T2. Lalu, semua piksel citra
yang bernilai lebih besar daripada T1 dianggap sebagai piksel tepi. Selanjutnya,
semua piksel yang terhubung dengan piksel tersebut dan memiliki nilai lebih
besar dari T2 juga dianggap sebagai piksel tepi.
Bagian penting yang perlu dijelaskan adalah penghilangan non-maksimum
dan peng-ambangan histeresis. Penghilangan non-maksimum dilakukan dengan
mula-mula menyalin isi larikGrad (yang berisi besaran gradien) ke Non_max.
Selanjutnya, penghilangan non-maksimum dilaksanakan dengan memperhatikan
dua titik tetangga yang terletak pada arah tepi (yang tersimpan dalam Theta).
Misalnya, arah tepi adalah 0. Apabila titik yang menjadi perhatian mempunyai
koordinat (r, c), dua titik tetangga berupa (r, c-1) dan (r, c+1). Apabila gradien titik
perhatian lebih besar daripada gradien kedua tetangga, nilainya akan
dipertahankan. Sebaliknya, jika nilai titik perhatian lebih kecil daripada nilai salah
satu atau kedua gradien tetangga, nilainya akan diabaikan (diubah menjadi nol).
Seluruh kemungkinan proses seperti itu dijabarkan dalam Gambar 10.28.
Segmentasi Citra 439

Arah tepi 0o: Arah tepi 45o: i-1, j+1


i, j-1 i, j i, j+1

i, j

i+1, j-1
if (Grad(i,j) <= Grad(i,j+1)) || ...
(Grad(i,j)<= Grad(i,j-1))
Non_max(i,j) = 0; if (Grad(i,j) <= Grad(i-1,j+1)) || ...
end (Grad(i,j) <= Grad(i+1,j-1))
Non_max(i,j) = 0;
end

Arah tepi 90o: i-1, j Arah tepi 135o: i-1, j-1

i, j i, j

i, j+1 i, j+1

if (Grad(i,j) <= Grad(i+1,j) ) || ... if (Grad(i,j) <= Grad(i+1,j+1)) || ...


(Grad(i,j) <= Grad(i-1,j)) (Grad(i,j) <= Grad(i-1,j-1))
Non_max(i,j) = 0; Non_max(i,j) = 0;
end end

Gambar 10.28Penghilangan non-maksimum

Peng-ambangan histeresis dilakukan dengan melibatkan dua ambang T1


(ambang bawah) dan ambang T2 (ambang atas). Nilai yang kurang dari T1 akan
diubah menjadi hitam (nilai 0) dan nilai yang lebih dari T2 diubah menjadi putih
(nilai 255). Lalu, bagaimana nilai yang lebih dari atau sama dengan T1 tetapi
kurang dari T2? Oleh karena itu, untuk sementara nilai pada posisi seperti itu
diberi nilai 128, yang menyatakan nilai abu-abu atau belum jelas, akan dijadikan 0
atau 255.
Selanjutnya, dilakukan pengujian untuk mendapatkan kondisi seperti
tercantum pada Gambar 10.29. Apabila kondisi seperti itu terpenuhi, angka 128
diubah menjadi 255. Proses pengujian seperti itu dilakukan sampai tidak ada lagi
perubahan dari nilai 128 menjadi 255. Tahap selanjutnya, semua piksel yang
bernilai 128 yang tersisa diubah menjadi nol.
440 Pengolahan Citra : Teori
Te dan Aplikasi

j-1 j j+1
i-1 255 255 255 255 255 255

i 255 128 255 255 255 255

i+1 255 255 255 255 255 255

Gambar 10.29
.29Pengujian untuk mengubah nilai 128 men
enjadi 255

Implementasi ooperator Cannydapat dilihat pada cann


nny.m. Sejumlah
keterangan diberikann pada skrip, untuk menjelaskan kode.

Program : canny.m

function [K] = caanny(F, ambang_bawah, ambang_atas)


% CANNY Pemerolehhan tepi objek pada citra F
% melalui operrator Canny
% Masukan:
% ambang_bawahh = batas bawah untuk ambang histeres
sis
% Nilai bawaan 011
% ambang_atas = batas atas untuk ambang histeresiss
% Nilai bawaan 0,3
% Hasil: citra G

% Menentukan nila
ai ambang bawaan
if nargin < 2
ambang_bawah = 0.1;
end

if nargin < 2
ambang_atas = 0.3;
end

% Kernel Gaussian
ns
HG = [ 2 4 5 4 2
4 9 12 9 12
5 12 15 12
2 5
4 9 12 9 12
2 4 5 4 2 ] / 115.0;
[hHG, wHG] = size
e(HG);
h2 = floor(hHG / 2);
w2 = floor(wHG / 2);

% Kenakan operasi
i Gaussian
G = double(deteks
si(F, HG, true));

% Pastikan hasiln
nya berada antara 0 sampai dengan 255
5
[m, n] = size(G);
;
Segmentasi Citra 441

for i = 1 : m
for j = 1 : n
G(i, j) = round(G(i, j));

if G(i, j) > 255


G(i, j) = 255;
else
if G(i, j) < 0
G(i, j) = 0;
end
end
end
end

% Kenakan perhitungan gradien dan arah tepi


Theta = zeros(m, n);
Grad = zeros(m, n);
for i = 1 : m-1
for j = 1 : n-1
gx = (G(i,j+1)-G(i,j) + ...
G(i+1,j+1)-G(i+1,j)) / 2;
gy = (G(i,j)-G(i+1,j) + ...
G(i,j+1)-G(i+1,j+1)) / 2;
Grad(i, j) = sqrt(gx.^2 + gy.^2);
Theta(i,j) = atan2(gy, gx);
end
end

% Konversi arah tepi menjadi 0, 45, 90, atau 135 derajat


[r c] = size (Theta);

if Theta < 0
Theta = Theta + pi; % Jangkauan menjadi 0 s/d pi
end

for i = 1 : r
for j = 1 : c
if (Theta(i,j) < pi/8 || Theta(i,j) >= 7/8*pi)
Theta(i,j) = 0;
elseif (Theta(i,j)>=pi/8 && Theta(i,j) < 3*pi/8 )
Theta(i,j) = 45;
elseif (Theta(i,j) >=3*pi/8 && Theta(i,j) < 5*pi/8 )
Theta(i,j) = 90;
else
Theta(i,j) = 135;
end
end
end

% penghilangan non-maksimum
Non_max = Grad;

for i = 1+h2 : r-h2


for j = 1+w2 : c-h2
if Theta(i,j) == 0
if (Grad(i,j) <= Grad(i,j+1)) || ...
(Grad(i,j)<= Grad(i,j-1))
Non_max(i,j) = 0;
end
442 Pengolahan Citra : Teori dan Aplikasi

elseif Theta(i,j) == 45
if (Grad(i,j) <= Grad(i-1,j+1)) || ...
(Grad(i,j) <= Grad(i+1,j-1))
Non_max(i,j) = 0;
end
elseif Theta(i,j) == 90
if (Grad(i,j) <= Grad(i+1,j) ) || ...
(Grad(i,j) <= Grad(i-1,j))
Non_max(i,j) = 0;
end
else
if (Grad(i,j) <= Grad(i+1,j+1)) || ...
(Grad(i,j) <= Grad(i-1,j-1))
Non_max(i,j) = 0;
end
end
end
end

% Pengambangan histeresis
ambang_bawah = ambang_bawah * max(max(Non_max));
ambang_atas = ambang_atas * max(max(Non_max));

Histeresis = Non_max;

% ----- Penentuan awal untuk memberikan nilai


% ----- 0, 128, dan 255
for i = 1+h2 : r-h2
for j = 1+w2 : c-w2
if (Histeresis(i,j) >= ambang_atas)
Histeresis(i,j) = 255;
end

if (Histeresis(i,j) < ambang_atas) && ...


(Histeresis(i,j) >= ambang_bawah)
Histeresis(i,j)= 128;
end

if (Histeresis(i,j) < ambang_bawah)


Histeresis(i,j) = 0;
end
end
end

% ----- Penggantian angka 128 menjadi 255


% ----- Berakhir kalau tidak ada lagi yang berubah
ulang = true;
while ulang
ulang = false;
for i = 1+h2 : r-h2
for j = 1+w2 : c-w2
if (Histeresis(i,j) == 128)
if (Histeresis(i-1, j-1) == 255) && ...
(Histeresis(i-1, j) == 255) && ...
(Histeresis(i, j+1) == 255) && ...
(Histeresis(i, j-1) == 255) && ...
(Histeresis(i, j+1) == 255) && ...
(Histeresis(i+1, j-1) == 255) && ...
(Histeresis(i+1, j) == 255) && ...
Segmentasi Citra 443

(Histeresis(i+1, j+1) == 255)


Histeresis(i,j) = 255;

ulang = true; % Ulang pengujian


end
end
end
end
end

% ----- Penggantian angka 128 menjadi 0


% ----- untuk yang tersisa
for i = 1+h2 : r-h2
for j = 1+w2 : c-w2
if (Histeresis(i,j) == 128)
Histeresis(i,j) = 0;
end
end
end

% Buang tepi
for i = 1+h2 : r-h2
for j = 1+w2 : c-w2
K(i-1,j-1) = Histeresis(i,j);
end
end

Akhir Program

Contoh penggunaan fungsi canny:

>> Img=imread('C:\Image\lena256.png');
>> G = canny(Img, 0.05, 0.15); imshow(G)
>>

Contoh di atas menggunakan peng-ambangan berupa 0,05 untuk batas bawah dan
0,15 untuk batas atas. Hasilnya dapat dilihat pada Gambar 10.30.
444 Pengolahan Citra : Teori dan Aplikasi

(a) Citra lena256.tif (b) Efek Gaussian (c) Besaran gradien

(d) Penghilangan non-maksimum (e) Hasil operator Canny

Gambar 10.30Contoh hasil antara hingga hasil akhir


padapengenaan operator Canny

10.3.10 Operator Zero-Crossing

Operator zero-crossing atau dikenal dengan nama lain yaitu operator Marr-
Hildrethsebenarnya adalah operatorLoGyang dilengkapi dengan upaya untuk
menemukan zero crossing. Zero-crossing menyatakan tanda perubahan pada tepi-
tepi dalam citra. Sebagaimana telah dibahas di depan, zero-crossing merupakan
perpotongan dengan sumbu X pada turunan kedua (Gambar 10.7). Operasi inilah
yang membuat operator Marr-Hildreth mampu menghasilkan kurva yang tertutup,
yang tidak dapat dipenuhi oleh operator Canny.
Ada beberapa teknik yang dapat digunakan untuk melakukan pemrosesan
zero-crossing, misalnya seperti yang dibahas pada Crane (1997) atau pada Nixon
dan Aguido (2002). Algoritma yang didasarkan pada Nixon dan Aguido dapat
dilihat berikut ini.
Segmentasi Citra 445

ALGORITMA 10.2 – Memproses zero crossing

Masukan:
• g: Citra hasil pemrosesan LoG, berukuran MxN
• ukuran : Ukuran cadar
• σ: Deviasi standar

Keluaran:
• k: citra hasil pemrosesan operator Marr-Hildreth

zerocross(g, ukuran, σ) :
1. // Bentuk larik k yang seluruhnya bernilai 0
FOR y ← 1 TO M
FOR y ← 1 TO M
k(y, x) ← 0
END
END

2. FOR y ← 2TO M-1


FOR kolom ← 2TO N-1
bag1← rerata(g(x-1, y-1), g(x, y), g(x-1, y-1), g(x, y))
bag2← rerata(g(x, y-1), g(x+1, y), g(x, y-1), g(x+1, y))
bag3← rerata(g(x, y-1), g(x+1, y), g(x+1, y-1), g(x+1, y))
bag4← rerata(g(x, y), g(x+1, y+1), g(x, y), g(x+1, y+1))

terbesar ← max(bag)
terkecil ← min(bag)

IF (terbesar > 0) AND (terkecil < 0)


k(y,x) ← 255
END-IF
END-FOR
END-FOR

3. RETURN k

Implementasi operator zero-crossing dapat dilihat pada zerocross.m.


Proses zero-crossingyang digunakan pada algoritma di depan dilaksanakan
dengan memanfaatkan jendela berukuran 3 x 3. Setiap piksel yang diperoleh
melalui operasi Laplacian dikenai jendela tersebut. Adapun perhitungan yang
dilakukan adalah dengan mula-mula menghitung nilai rerata dari empat bagian
(masing-masing berukuran 2 x 2) seperti yang diperlihatkan pada Gambar 10.31.
Berdasarkan keempat bagian tersebut, nilai terbesar dan nilai terkecil diperoleh.
446 Pengolahan Citra : Teori
Te dan Aplikasi

Piksel yang nilai terb


erbesarnya melebihi nol dan nilai terkecilnyaa kurang dari nol
akan dijadikan sebaga
gai tepi (diberi nilai 255).

Bagian 1 Bagian
ian 3

Bagian 2 Bagian
n4

Piksel pusat dalam


d
jendela 3 x 3

Gam
mbar 10.31Area untuk deteksizero-crossingg
pada jendela berukuran 3 x 3

Implementasi
si operator Marr-Hilbreth ditunjukkan di bawa
wah ini.

Program : zerocross.m

function [K] = zeerocross(F, ukuran, sigma)


% ZEROCROSS Pemerrolehan tepi objek pada citra F
% melalui operrator Marr-Hildreth
% Hasil: citra K

H = cadarLoG(ukur
ran, sigma);
pembulatan = fals
se;
potong = true;
G = deteksi(F, H,
, potong, pembulatan);

% Proses zero croossing


K = zeros(size(G)));
[m, n] = size(K);;
for y=2 : m-1
for x=2: n-1
jum = 0;
Segmentasi Citra 447

for p = x-1 : x
for q = y-1 : y
jum = jum + G(q,p);
end
end
rerata0 = jum / 4;

jum = 0;
for p = x-1 : x
for q = y : y+1
jum = jum + G(q,p);
end
end
rerata1 = jum / 4;

jum = 0;
for p = x : x+1
for q = y-1 : y
jum = jum + G(q,p);
end
end
rerata2 = jum / 4;

jum = 0;
for p = x : x+1
for q = y : y+1
jum = jum + G(q,p);
end
end
rerata3 = jum / 4;

terbesar = max([rerata0 rerata1 rerata2 rerata3]);


terkecil = min([rerata0 rerata1 rerata2 rerata3]);
if (terbesar > 0) && (terkecil < 0)
K(y,x) = 255;
end
end
end

return

Akhir Program

Contoh penggunaan fungsi zerocross:

>> Img=imread('C:\Image\lena256.png');
>> G = zerocross(Img, 7,1); imshow(G)
>>
448 Pengolahan Citra : Teori dan Aplikasi

Lima contoh hasil pemrosesan dengan operator Harr-Hildrethdengan nilai σ


berbeda dapat dilihat pada Gambar 10.32.

(a) Citra lena256.tif (b) Zero crossing 7 x 7, σ=1 (c) Zero crossing 7 x 7, σ=0.6

(d) Zero crossing 9 x 9, σ=1 (e) Zero crossing 9 x 9, σ=0.6 (e) Zero crossing 9 x 9, σ=0.5

Gambar 10.32Hasil penerapan operator Marr-Hilldreth pada lena256.png

Contoh berikut menunjukkan penggunaan fungsi zerocross pada citra


bangunan2.png:

>> Img=imread('C:\Image\bangunan2.png');
>> G=zerocross(Img,7,1); imshow(G)
>>

Hasilnya ditunjukkan pada Gambar 10.33.


Segmentasi Citra 449

(a) Citra bangunan2.png

(b) Hasil operator Marr-Hilldreth

Gambar 10.33Operator Marr-Hilldreth pada bangunan2.png

Apabila dikehendakiuntuk menggunakan σ yang besar, ukuran


cadar juga perlu diperbesar. Sebagai pedoman kasar, ukuran cadar
yang diperlukan sebesar round(6 σ) + 1 .
450 Pengolahan Citra : Teori dan Aplikasi

10.3.11 Operator Gradien Kompas

Operator gradien kompas adalah jenis operator yang mencari tepi dengan
menggunakan delapan arah mata angin. Prosesnya adalah melakukan konvolusi
terhadap citra dengan menggunakan 8 cadar. Hasil operasinya berupa nilai
maksimum dari kedelapan konvolusi. Empat contoh operator beserta delapan
cadar masing-masing dapat dilihat pada Gambar 10.34 (Crane, 1997).

Prewitt Kirsch Robinson Robinson


3-level 5-level

1 1 −1 5 −3 −3 1 0 −1 1 0 −1
1 −2 −1 5 0 −3 1 0 −1 2 0 −2
Timur
1 1 −1 5 −3 −3 1 0 −1 1 0 −1
H1

1 −1 −1 −3 −3 −3 0 −1 −1 0 −1 −2
1 −2 −1 5 0 −3 1 0 −1 1 0 −1
Timur Laut
1 1 −1 5 5 −3 1 1 0 2 1 0
H2

−1 −1 −1 −3 −3 −3 −1 −1 −1 −1 −2 −1
1 −2 1 −3 0 −3 0 0 0 0 0 0
Utara
1 1 1 5 5 5 1 1 0 1 2 −1
H3

−1 −1 1 −3 −3 −3 1 1 −1 −2 −1 0
−1 −2 1 −3 0 5 1 −2 −1 −1 0 1
Barat Laut
1 1 1 −3 5 5 1 1 −1 0 1 2
H4

−1 1 1 −3 −3 5 −1 0 1 −1 0 1
−1 −2 1 −3 0 5 −1 0 1 −2 0 2
Barat
−1 1 1 −3 −3 −3 −1 0 1 −1 0 1
H5

1 1 1 −3 5 5 0 1 1 0 1 2
−1 −2 1 −3 0 5 −1 0 1 −1 0 1
Barat Daya
−1 −1 1 −3 −3 −3 −1 −1 0 −2 −1 0
H6

1 1 1 5 5 5 1 1 1 1 2 1
1 −2 1 −3 0 −3 0 0 0 0 0 0
Selatan
−1 −1 −1 −3 −3 −3 −1 −1 −1 −1 −2 −1
H7

1 1 1 5 5 −3 1 1 0 2 1 0
−1 −2 1 5 0 −3 1 0 −1 1 0 −1
Tenggara
−1 −1 1 −3 −3 −3 0 −1 −1 0 −1 −2
H8

Gambar 10.34Operator gradien kompas

Fungsi kompas berikut berguna untuk melakukan pengujian operator


gradien kompas terhadap citra berskala keabuan dengan menggunakan cadar
yang tertera pada Gambar 10.35.
Segmentasi Citra 451

Program : kompas.m

function [G] = koompas(F, jenis)


% KOMPAS Melakukaan operasi dengan operator kompas
% Argumen F beerupa citra berskala keabuan dan
% jenis berupaa tipe operator
% 1 = Prewitt
% 2 = Kirsch
% 3 = Robinsonn 3-level
% 4 = Robinsonn 4-level
%
% Hasil: citra G

if nargin < 2
jenis = 1;
end

% Operator kompas
s
Prewitt1 = [1 1 -1;1
- -2 -1;1 1 -1];
Prewitt2 = [1 -1 -1;1 -2 -1;1 1 -1];
Prewitt3 = [-1 -1
1 -1;1 -2 1;1 1 1];
Prewitt4 = [-1 -1
1 1;-1 -2 1;1 1 1];
Prewitt5 = [-1 1 1;-1 -2 1;-1 1 1];
Prewitt6 = [1 1 1;-1
1 -2 1;-1 -1 1];
Prewitt7 = [1 1 1;1
1 -2 1;-1 -1 -1];
Prewitt8 = [1 1 1
1;-1 -2 1;-1 -1 1];

Kirsch1 = [5 -3 -3;5
- 0 -3;5 -3 -3];
Kirsch2 = [-3 -3 -3;5 0 -3; 5 5 -3];
Kirsch3 = [-3 -3 -3;-3 0 -3;5 5 5];
Kirsch4 = [-3 -3 -3;-3 0 5;-3 5 5];
Kirsch5 = [-3 -3 5;-3 0 5;-3 -3 -3];
Kirsch6 = [-3 5 5;-3
5 0 5;-3 -3 -3];
Kirsch7 = [5 5 5;
;-3 0 -3;-3 -3 -3];
Kirsch8 = [5 5 -3
3;5 0 -3;-3 -3 -3];

Robinson3_1 = [1 0 -1;1 0 -1;1 0 -1];


Robinson3_2 = [0 -1 -1;1 0 -1;1 1 0];
Robinson3_3 = [-1
1 -1 -1;0 0 0;1 1 0];
Robinson3_4 = [1 1 -1;1 -2 -1;1 1 -1];
Robinson3_5 = [-1
1 0 1;-1 0 1;-1 0 1];
Robinson3_6 = [0 1 1;-1 0 1;-1 -1 0];
Robinson3_7 = [1 1 1;0 0 0;-1 -1 -1];
Robinson3_8 = [1 1 0;1 0 -1;0 -1 -1];

Robinson5_1 = [1 0 -1;2 0 -2;1 0 -1];


Robinson5_2 = [0 -1 -2;1 0 -1;2 1 0];
Robinson5_3 = [-1
1 -2 -1;0 0 0;1 2 -1];
Robinson5_4 = [-2
2 -1 0;-1 0 1;0 1 2];
Robinson5_5 = [-1
1 0 1;-2 0 2;-1 0 1];
Robinson5_6 = [0 1 2;-1 0 1;-2 -1 0];
Robinson5_7 = [1 2 1;0 0 0;-1 -2 -1];
Robinson5_8 = [2 1 0;1 0 -1;0 -1 -2];
452 Pengolahan Citra : Teori dan Aplikasi

Prewitt(:,:,1) = Prewitt1;
Prewitt(:,:,2) = Prewitt2;
Prewitt(:,:,3) = Prewitt3;
Prewitt(:,:,4) = Prewitt4;
Prewitt(:,:,5) = Prewitt5;
Prewitt(:,:,6) = Prewitt6;
Prewitt(:,:,7) = Prewitt7;
Prewitt(:,:,8) = Prewitt8;

Kirsch(:,:,1) = Kirsch1;
Kirsch(:,:,2) = Kirsch2;
Kirsch(:,:,3) = Kirsch3;
Kirsch(:,:,4) = Kirsch4;
Kirsch(:,:,5) = Kirsch5;
Kirsch(:,:,6) = Kirsch6;
Kirsch(:,:,7) = Kirsch7;
Kirsch(:,:,8) = Kirsch8;

Robinson3(:,:,1) = Robinson3_1;
Robinson3(:,:,2) = Robinson3_2;
Robinson3(:,:,3) = Robinson3_3;
Robinson3(:,:,4) = Robinson3_4;
Robinson3(:,:,5) = Robinson3_5;
Robinson3(:,:,6) = Robinson3_6;
Robinson3(:,:,7) = Robinson3_7;
Robinson3(:,:,8) = Robinson3_8;

Robinson5(:,:,1) = Robinson5_1;
Robinson5(:,:,2) = Robinson5_2;
Robinson5(:,:,3) = Robinson5_3;
Robinson5(:,:,4) = Robinson5_4;
Robinson5(:,:,5) = Robinson5_5;
Robinson5(:,:,6) = Robinson5_6;
Robinson5(:,:,7) = Robinson5_7;
Robinson5(:,:,8) = Robinson5_8;

% Tentukan operator yang dipakai


if jenis == 1
Opr = Prewitt;
elseif jenis == 2
Opr = Kirsch;
elseif jenis == 3
Opr = Robinson3;
elseif jenis == 4
Opr = Robinson5;
else
error('Operator kedua: 1 s/d 4');
end

% Lakukan proses konvolusi


F = double(F);
[m, n] = size(F);
for y=2 : m-1
for x=2 : n-1
% Pelaksanaan konvolusi
for i=1 : 8
Grad(i) = Opr(1,1,i) * F(y+1, x+1) + ...
Opr(1,2,i) * F(y+1, x) + ...
Opr(1,3,i) * F(y+1, x-1) + ...
Segmentasi Citra 453

Opr(2,1,i) * F(y, x+1) + ...


Opr(2,2,i) * F(y, x) + ...
Opr(2,3,i) * F(y, x-1) + ...
Opr(3,1,i) * F(y-1, x+1) + ...
Opr(3,2,i) * F(y-1, x) + ...
Opr(3,3,i) * F(y-1, x-1);
end

maks = max(Grad);
G(y-1, x-1) = maks;
end
end

G = uint8(G);

Akhir Program

Contoh penggunaan fungsi kompas:

>>Img = rgb2gray(imread('C:\Image\mainan.png'));
>> G=kompas(Img, 1);
>> imshow(G)
>>

Angka 1 pada pemanggilan fungsi kompas menyatakan bahwa operator yang


dipakai adalah Prewitt. Angka yang dapat digunakan pada argumen kedua berupa
1, 2 ,3, atau 4, dengan ketentuan sebagai berikut:

1 = Prewitt
2 = Kirsch
3 = Robinson 3-level
4 = Robinson 4-level

Gambar 10.35 memperlihatkan contoh hasil deteksi tepi dengan keempat operator
tersebut.
454 Pengolahan Citra : Teori dan Aplikasi

(a) Prewitt (b) Kirsch

(c) Robinson 3-level (c) Robinson 5-level

Gambar 10.35Hasil deteksi tepi dengan operator gradien kompas

10.4 Peng-ambangan Dwi-Aras

Segmentasi yang paling sederhana dilaksanakan dengan menggunakan


ambang intensitas. Nilai yang lebih kecil daripada nilai ambang diperlakukan
sebagai area pertama dan yang lebih besar daripada atau sama dengan nilai
ambang dikelompokkan sebagai area yang kedua. Dalam hal ini, salah satu area
tersebut berkedudukan sebagai latarbelakang. Cara seperti itulah yang disebut
peng-ambangan dwi-aras (bi-level thresholding) atau terkadang dinamakan peng-
ambangan intensitas. Secara matematis, hal itu dinyatakan dengan

1, YZ[Y\ , ≥ ^`
W , $ $X
0, YZ[Y\ , <^
(10.13)

Pada rumus di atas, T menyatakan ambang intensitas. Dalam praktik, nilai 1 atau 0
pada Persamaan 10.13dapat dipertukarkan.
Peng-ambangan intensitas biasa digunakan untuk memisahkan tulisan
hitam yang berada di atas secarik kertas putih. Namun, perlu diketahui, peng-
ambangan ini mempunyai kelemahan,yaitu:
Segmentasi Citra 455

1) tidak mem
mperlihatkan hubungan spasial antarpiksel;
2) sensitif ter
terhadap pencahayaan yang tidak seragam;
3) hanya ber
erlaku untuk keadaan yang ideal (misalnya
ya, latarbelakang
hitam dann objek berwarna putih).

(a) ipomo
oea.png (b) Histogram citra

Gam
ambar 10.36Citra daun dan histogramnya

Salah satu car


ara untuk menentukan nilai ambang adalah dengan
memperhatikan histo
stogram citra. Sebagai contoh, perhatikann Gambar 10.36.
Berdasarkan histogram
ram, pemisahan dapat dilakukan dengan memiilih nilai ambang
pada bagian lembah.
h. Sebagai contoh, nilai di sekitar 100 dapat digunakan
dig sebagai
nilai ambang. Untukk mengujinya,
m mula-mula siapkan skrip berikut
ut.

Program : ambang.m

function [G] = am
mbang(F, t)
% AMBANG Menentuk
kan nilai ambang yang digunakan
% untuk melak
kukan pengambangan
% F = Citra berskala
b keabuan
% t = nilai ambang
a
%
% Keluaran: G = Citra
C biner

[m, n] = size(F);
;
for i=1 : m
for j=1:n
456 Pengolahan Citra : Teori dan Aplikasi

if F(i,j) <= t
G(i,j) = 0;
else
G(i,j) = 1;
end
end
end

Akhir Program

Contoh peng-ambangan dengan nilai ambang sebesar 100:

>> Img=imread('C:\Image\ipomoea.png');
>> G=ambang(Img, 100);
>> imshow(1-G)
>>

Penggunaan 1-G dalam imshow ditujukan untuk membalik nilai 1 dan 0. Dengan
ungkapan tersebut, bagian daun akan diberi nilai 1 (putih). Contoh hasilnya dapat
dilihat pada Gambar 10.37.

(a) ipomoea.tif (b) Hasil pengambangan

Gambar 10.37Hasil pembalikan latarbelakang dan objek

Persoalan utama dalam peng-ambangan intensitas terletak pada penentuan


nilai ambang (T) secara otomatis. Salah satu cara yang dilakukan adalah dengan
menentukan nilai ambang iteratif secara interaktif (Gonzalez & Woods, 2002;
Segmentasi Citra 457

Acharya & Ray, 2005). Algoritma untuk menentukan T secara iteratif adalah
seperti berikut.

ALGORITMA 10.3 – Memperoleh nilai ambang secara iteratif

Masukan:
• f (M,N): Citra berskala keabuan berukuran M baris dan N
kolom
Keluaran:
• nilai ambang T

ambang_adaptif(f):
1. Pilihlah satu nilai untuk menentukan nilai ambang (T ← To).
2. Bagilah citra menjadi dua bagian dengan menggunakan T
sebagai nilai ambang.

a Ea
3. Hitunglah nilai rata-rata pada kedua area (µ1 dan µ2).
4. Hitunglah nilai ambang: T ← U 5
5. Ulangi langkah 2 sampai dengan 4 sampai tidak ada
perubahan nilai T.
6. RETURN T

Peng-ambangan iteratif dikenal juga dengan sebutan peng-


ambangan optimal.

Algoritma peng-ambangan iteratif dituangkan dalam bentuk program seperti


berikut.

Program : titeratif.m

function [t1] = titeratif(F)


% TITERATIF Menentukan nilai ambang yang digunakan
% untuk melakukan pengambangan
% F = Citra berskala keabuan
%
458 Pengolahan Citra : Teori dan Aplikasi

% Keluaran: G = Citra biner

[m, n] = size(F);

F = double(F);

t0 = 127;
while true
rata_kiri = 0;
rata_kanan = 0;
jum_kiri = 0;
jum_kanan = 0;

for i=1 : m
for j=1 : n
if F(i, j) <= 127
rata_kiri = rata_kiri + F(i,j);
jum_kiri = jum_kiri + 1;
else
rata_kanan = rata_kanan + F(i,j);
jum_kanan = jum_kanan + 1;
end
end
end

rata_kiri = rata_kiri / jum_kiri;


rata_kanan = rata_kanan / jum_kanan;

t1 = (rata_kiri + rata_kanan) / 2.0;


if (t0 - t1) < 1
break; % Keluar dari while
end

t0 = t1;
end

t1 = floor(t1);

Akhir Program

Pengujian fungsi titeratif dapat dilihat di bawah ini.

>> Img=imread('C:\Image\ipomoea.png');
>> t = titeratif(Img)
t =130
>> G = ambang(Img, t);
>>imshow(1-G)
>>
Segmentasi Citra 459

Hasil di atas menyatakan bahwa nilai ambang yang dihasilkan oleh fungsi titeratif
adalah 130. Penggunaan 1-G dalam imshowadalah untuk membalik nilai 1 dan 0.
Nilai 1 menjadi 0 dan nilai 0 menjadi 1. Dengan ungkapan tersebut, bagian daun
akan diberi nilai 1 (putih). Contoh hasilnya dapat dilihat pada Gambar 10.38.

(a) ipomoea.tif (b) Hasil peng-ambangan

Gambar 10.38Contoh hasil peng-ambangan secara iteratif

10.5 Peng-ambangan Global Vs. Lokal

Terkait dengan nilai ambang yang digunakan pada segmentasi citra,


terdapat istilah peng-ambangan global dan peng-ambangan lokal. Pengertiannya
sebagai berikut.
Apabila nilai ambang t bergantung hanya pada satu nilai aras keabuan f(y,
x), peng-ambangan disebut sebagai global. Dalam hal ini, semua piksel
dalam citra akan ditentukan oleh satu nilai ambang t.
Peng-ambangan disebut lokal kalau nilai ambang t bergantung pada f(y, x)
dan g(y, x) dengan g(y,x) menyatakan properti citra lokal pada titik (y, x).
Dalam hal ini, properti citra lokal dapat diperoleh melalui statisti
(misalnya rerata tetangga di sekitar titik (y, x) ). Dengan kata lain, nilai
ambang untuk setiap piksel ditentukan oleh nilai piksel tetangga. Dengan
demikian, nilai ambang untuk piksel masing-masing belum tentu sama.
460 Pengolahan Citra : Teori dan Aplikasi

10.6 Peng-ambangan Aras-jamak

Pada peng-ambangan beraras-jamak (multilevel thresholding), citra dibagi


menjadi beberapa bagian dengan menggunakan beberapa nilai ambang, Cara
seperti itu dilakukan kalau pada histogram terdapat puncak-puncak yang
membedakan antara satu objek terhadap yang lain. Sebagai contoh, perhatikan
Gambar 10.39(a) dan kemudian lihatlah pada histogram yang terdapat pada
Gambar 10.39(b).

Objek
lingkaran
T1 T2
Objek kotak

(a) benda.png (b) Histogram

Gambar 10.39Contoh citra dengan beberapa puncak dan


lembah yang terpisah

Contoh berikut menunjukkan algoritma yang digunakan pada peng-ambangan


aras-jamak yang menggunakan dua buah nilai ambang.

ALGORITMA 10.3 – Segmentasi dengan peng-ambangan aras-


jamak

Masukan:
• f(MxN): Citra berskala keabuan (berukuran MxN)

Keluaran:
• g (M, N): Citra biner

ambang_aras_jamak(ukuran, σ):
FOR y ←1 TO ukuran -1
FOR x ← 1 TO ukuran -1
nx ← x – cx
ny ← y – cy
Segmentasi Citra 461

G QH5 I QJ5
←C5 2 − 23 F
0 P 5E P 5
5K5
C5
n
nilai
hh(y+1, x+1) ← nilai
ju ← jum + nilai
jum
END
ND-FOR
END-FFOR
7. RETUR
URN g

Implementasi berdasa
sarkan algoritma di atas dapat dilihat di bawah
ah ini.

Program : arasjamak.m

function [G] = ar
rasjamak(F, t1, t2)
% Pengambanan den
ngan dua nilai ambang
% F = Citra berskala
b keabuan
% t1 = nilai ambang bawah
% t2 = nilai ambang atas
%
% Keluaran: G = Citra
C biner

[m, n] = size(F);;
for i=1 : m
for j=1:n
if F(i,j)) <= t1 || F(i,j) >= t2
G(i,j
j) = 0;
else
G(i,j
j) = 1;
end
end
end

Akhir Program

Contoh penggunaan fungsi


f arasjamak:

>> Img=imr
read('C:\Image\benda.png');
>> G=arasj
jamak(Img, 50, 100); imshow(G);
;
>>
462 Pengolahan Citra : Teori dan Aplikasi

Hasilnya dapat dilihat pada Gambar 10.40(b). beberapa contoh penggunaan nilai
ambang yang lain dapat dilihat pada Gambar 10.40(c) hingga 10.40(f).

(a) benda.png (b) Nilai ambang t1=50 dan t2=100

(c) Nilai ambang t1=175 dan t2=200 (d) Nilai ambang t1=220 dan t2=230

(e) Nilai ambang t1=235 dan t2=250 (f) Nilai ambang t1=220 dan t2=250

Gambar 10.40Hasil penerapan nilai ambang jamak

Contoh lain dapat dilihat di bawah ini:

>> Img=imread('C:\Image\ipomoea.png');
>> G=arasjamak(Img, 50, 100); imshow(G);
>>
Segmentasi Citra 463

Hasilnya dapat dilihat pada Gambar 10.41(b). Terlihat bahwa dengan cara seperti
itu, bayangan daun dapat dihilangkan.

(a) ipomoea.png (b) Pengambangan t1=50, t2=100

Gambar 10.41Contoh peng-ambangan aras jamak pada ipomoea.png

10.7 Peng-ambangan dengan Metode Otsu

Metode Otsu dipublikasikan oleh Nobuyuki Otsu pada tahun 1979. Metode
ini menentukan nilai ambang dengan cara membedakan dua kelompok, yaitu
objek dan latarbelakang, yang memiliki bagian yang saling bertumpukan,
berdasarkan histogram (lihat Gambar 10.42).

Nilai ambang (t)

Kelas 1 Kelas 2

Gambar 10.42 Penentuan nilai ambang


untuk memperoleh hasil yang optimal

Prinsip metode Otsu dijelaskan berikut ini. Pertama-tama, probabilitas nilai


intensitas i dalam histogram dihitung melalui
464 Pengolahan Citra : Teori dan Aplikasi

b c $ , b c ≥ 0, ∑0gh b c $ 1
Pd
e
(10.14)

dengan nimenyatakan jumlah piksel berintensitas i dan N menyatakan jumlah


semua piksel dalam citra. Jika histogram dibagi menjadi dua kelas (objek dan
latarbelakang), pembobotan pada kedua kelas dinyatakan sebagai berikut:

i0 [ $ ∑jkl0 b c (10.15)
i [ $ ∑mkljE0 b c $ 1 − i0 [ (10.16)

Dalam hal ini, L menyatakan jumlah aras keabuan. Rerata kedua kelas dihitung
melalui:

*0 [ $ ∑jkl0 c. b c /n0 [ (10.17)


* [ $ ∑jkl0 c. b c /n [ (10.18)

Varians kedua kelas dinyatakan dengan rumus:

M0 [ $ ∑jkl0 1 − *0 .
o k
pU j
(10.19)

M [ $ ∑mkljE0 1 − * .
o k
p5 j
(10.20)

Varians total dapat dinyatakan dengan

M [ $ Mp [ + Mq [ (10.21)

Dalam hal ini, Mp dinamakan sebagai within-class variance (WCV) dan Mq


disebut sebagai between-class variance (BCV). WCV dapat dinyatakan dengan

Mp [ $ n0 [ . M0 [ + n [ .M [ (10.22)

Rumus di atas menunjukkan bahwa WCV adalah jumlah varians kelas secara
individual yang telah diboboti dengan probabilitas kelas masing-masing. Adapun
BCV dinyatakan dengan
Segmentasi Citra 465

Mq [ $ n0 . >*0 [ − * r ? + n . >* [ − * r ? (10.23)

dalah rerata total (* r $ ∑e


Dalam hal ini, mT ada kl0 c. b c ).

Nilai ambang optimum


o dapat diperoleh dengan dua cara
ra. Cara pertama
dilaksanakan dengan
an meminimumkan WCV. Cara kedua dilaks
aksanakan dengan
memaksimumkan BC
CV. Namun, berdasarkan kedua cara tersebut,
t, cara yang kedua
lebih menghemat kom
omputasi.
Implementasi ber
berikut didasarkan pada Persamaan 10.23. Skkrip ditulis tanpa
memperhatikan optim
timasi komputasi. Pendekatan lain, yangg memperhatikan
kecepatan komputasi,
si, dapat dilihat pada Demirkaya, dkk. (2009).

Program : otsu.m

function [ambang]
] = otsu(F)
% OTSU Memperoleh
h nilai ambang menggunakan metode Ots
su
% F = Citra be
erskala keabuan

[m, n] = size(F);
;
jum_piksel = m * n;

% Kosongkan histo
ogram
for i=1 : 256
h(i) = 0;
end

% Hitung histogra
am
for i=1 : m
for j=1 : n
intensita
as = F(i,j);
h(intensi
itas+1) = h(intensitas+1) + 1;
end
end

% Hitung p(i)
for i=1 : 256
p(i) = h(i) / jum_piksel;
end

% Hitung rerata total


t
mT = 0;
for i=1 : 256
mT = mT + i * p(i);
end
466 Pengolahan Citra : Teori dan Aplikasi

% Hitung t optimal
ambang = 0;
varMaks = 0;
for t=0 : 255
% Hitung w1(t)
w1 = 0.0;
for i=1 : t
w1 = w1 + p(i+1);
end

% Hitung w2(t)
w2 = 0.0;
for i=t+1 : 255
w2 = w2 + p(i+1);
end

% Hitung m1
m1 = 0;
for i=0 : t
if w1 > 0
m1 = m1 + i * p(i+1)/w1;
end
end

% Hitung m2
m2 = 0;
for i=t+1 : 255
if w2 > 0
m2 = m2 + i * p(i+1)/w2;
end
end

% Hitung BCV
bcv = w1 * (m1 - mT)^2 + w2 * (m2 - mT)^2;

if bcv > varMaks


varMaks = bcv;
ambang = t;
end
end

Akhir Program

Contoh:

>> Img=imread('C:\Image\ipomoea.png');
>> t=otsu(Img)
t =130
>>
Segmentasi Citra 467

Hasil dengan mengg


ggunakan pendekatan Otsu tidak berbeda den
engan hasil yang
menggunakan peng-aambangan iteratif.

ve menyediakan fungsi bawaan bernama gra


Octave raythresh, yang
diimpl
plementasikan dengan menggunakan metode Otsu.
O

10.8Peng-ambangan
an Adaptif

Peng-ambangan
an adaptif (adaptive thresholding) merupakann peng-ambangan
yang menggunakan nnilai ambang lokal, yang dihitung secara ada
daptif berdasarkan
statistika piksel-pikse
ksel tetangga. Hal ini didasarkan kenyataann bahwa bagian-
bagian kecil dalam citra
c mempunyai iluminasi yang sama, sehin
hingga lebih tepat
kalau nilai ambangg dihitung berdasarkan bagian-bagian kecill dalam
d citra dan
bukan berdasarkan se
seluruh piksel dalam citra.
Ada tiga pend
ndekatan yang biasa digunakan untuk mew
ewujudkan peng-
ambangan ini. Pend
ndekatan pertama menggunakan statistika rerata terhadap
intensitas lokal. Terka
kadang, nilai yang konstan ikut dilibatkan. Rumusnya
Ru sebagai
berikut.

∑ J,H ∈u k,ss
^$ −w
ev
(10.24)

Dalam hal ini, W meenyatakan jendela pada citra, NW menyataka


kan jumlah piksel
dalam jendela, dan C menyatakan suatu konstanta.
Contoh fungsi
gsi yang menggunakan pendekatan rerata dapa
pat dilihat berikut
ini.

Program : adapmean.m
468 Pengolahan Citra : Teori dan Aplikasi

function [G] = adapmean(F, w, c)


% ADAPMEAN Melakukan pengambangan adaptif dengan menggunakan
% mean.
% F = Citra berskala keabuan
% w = ukura jendela
% c = nilai konstan
%
% Hasil: citra G

if nargin == 0
disp('Penggunaan adapmean(Citra, ukuran, konstanta');
return;
end

if nargin == 1
w = 2;
c = 0;
end

if nargin == 2
c = 0;
end

% Lakukan pemrosesan citra


[m, n] = size(F);

delta = floor(w/2);

if c < 0
G = zeros(m, n); % Diasumsikan berlatarbelakang 0
else
G = ones(m, n); % Diasumsikan berlatarbelakang 1
end

F=double(F);
for y=1+delta : m-delta
for x=1+delta : n-delta
rerata = 0.0;
jum = w * w;
for p=1 : w
for q=1 : w
rerata = rerata + F(y-round(w/2)+p, ...
x-round(w/2)+q);
end
end

rerata = floor(rerata / jum) - c;

if F(y,x) >= rerata


G(y, x) = 1;
else
G(y, x) = 0;
end
end
end
Segmentasi Citra 469

Akhir Program

Contoh penggunaan fungsi adapmeaan:

>> Img=imread('C:\Image\ipomoea.png');
>> G=adapmean(Img, 3, -4); imshow(G)
>>

Berbagai contoh pengaturan argumen kedua (w) dan argumen ketiga (c)
ditunjukkan pada Gambar 10.43.
470 Pengolahan Citra : Teori dan Aplikasi

(a) Citra ipomoea.tif (b) w = 2, c = 0

(c) w = 2, c = -2 (d) w = 3, c = -4

(f) w = 7, c = -5 (e) w = 10, c = 5

Gambar 10.43 Efek peng-ambangan adaptif dengan


menggunakan nilai mean dengan berbagai ukuran jendela w dan
nilai ambang c

Pendekatan peng-ambangan adaptif yang kedua menggunakan statistika


median. Secara matematis, pendekatan ini dapat ditulis menjadi

^ $ *F c+Z , , , ∈n −w (10.25)
Segmentasi Citra 471

Dalam hal ini, W m


menyatakan jendela pada citra, NW menyatak
akan jumlah citra
dalam jendela, dan C menyatakan suatu nilai yang konstan. Implementasinya
I
dapat dilihat pada kod
ode berikut.

Program : adapmedian.m

function [G] = addapmedian(F, w, c)


% ADAPMEDIAN Melaakukan pengambangan adaptif dengan me
enggunakan
% median.
% F = Citra berskala
b keabuan
% w = ukura jendela
j
% c = nilai konstan
k
%
% Hasil: citra G

if nargin == 0
disp('Penggun
naan adapmean(Citra, ukuran, konstant
ta');
return;
end

if nargin == 1
w = 2;
c = 0;
end

if nargin == 2
c = 0;
end

% Lakukan pemrose
esan citra
[m, n] = size(F);
;

delta = floor(w/2
2);

if c < 0
G = zeros(m, n); % Diasumsikan berlatarbelakang
g 0
else
G = ones(m, n);
n % Diasumsikan berlatarbelakang
g 1
end

Nilai = []; % Kosongkan array untuk median

for y=1+delta : m-delta


m
for x=1+delta
a : n-delta
rerata = 0.0;
jum = w * w;
pencacah = 0;
for p=1 : w
for q=1
q : w
472 Pengolahan Citra : Teori dan Aplikasi

pencacah = pencacah + 1;
Nilai(pencacah) = F(y-round(w/2)+p, ...
x-round(w/2)+q);
end
end

% Urutkan hasil
Urut = sort(Nilai);
median = Urut(floor(pencacah/2)) - c;

if F(y,x) >= median


G(y, x) = 1;
else
G(y, x) = 0;
end
end
end

Akhir Program

Contoh penggunaan fungsiadapmedian:

>> Img=imread('C:\Image\ipomoea.png');
>> G=adapmedian(Img, 10, 5); imshow(G)
>>

Efek berbagai pengaturan terhadap w dan c dapat dilihat pada Gambar 10.44.
Segmentasi Citra 473

(a) Citra ipomoea.tif (b) w = 4, c = 0

(c) w = 13, c = 2 (d) w = 3, c = -4

(f) w = 7, c = -5 (e) w = 10, c = 5

Gambar 10.44 Efek peng-ambangan adaptif dengan


menggunakannilai median dengan berbagai ukuran jendela dan
konstanta yang berbeda

Pendekatan peng-ambangan adaptif yang ketiga menggunakan statistika


maksimum dan minimum, yang dinyatakan dengan rumus

^$
xy , , , ∈p E xkP , , , ∈p
(10.26)
474 Pengolahan Citra : Teori
Te dan Aplikasi

Dalam hal ini, W menyatakan


me jendela pada citra, NWmenyataka
kan jumlah piksel
dalam jendela. Implem
lementasinya sebagai berikut.

Program : adapmaxmin.m

function [G] = addapmaxmin(F, w, c)


% ADAPMAXMIN Melaakukan pengambangan adaptif dengan me
enggunakan
% maximum dann minumum.
% F = Citra berskala
b keabuan
% w = ukura jendela
j
% c = nilai konstan
k
%
% Hasil: citra G

if nargin == 0
disp('Penggun
naan adapmean(Citra, ukuran, konstant
ta');
return;
end

if nargin == 1
w = 2;
c = 0;
end

if nargin == 2
c = 0;
end

% Lakukan pemrose
esan citra
[m, n] = size(F);
;

delta = floor(w/2
2);

if c < 0
G = zeros(m, n); % Diasumsikan berlatarbelakang
g 0
else
G = ones(m, n);
n % Diasumsikan berlatarbelakang
g 1
end

for y=1+delta : m-delta


m
for x=1+delta
a : n-delta
rerata = 0.0;
terbesar = 0.0;
terkecil = 0.0;
jum = w * w;
pencacah = 0;
for p=1 : w
for q=1
q : w
p
pencacah = pencacah + 1;
Segmentasi Citra 475

nilai= F(y-round(w/2)+p, ...


x-round(w/2)+q);
if nilai > terbesar
terbesar = nilai;
end

if nilai < terkecil


terkecil = nilai;
end
end
end

rerata = floor((terbesar - terkecil) / 2) - c;


if F(y,x) >= rerata
G(y, x) = 1;
else
G(y, x) = 0;
end
end
end

Akhir Program

Contoh penggunaan fungsiadapmaxmin:

>> Img=imread('C:\Image\ipomoea.png');
>> G=adapmaxmin(Img, 10, -30); imshow(G)
>>

Gambar 10.45 memperlihatkan berbagai efek nilai w (ukuran jendela) dan c


(konstanta pengurang).
476 Pengolahan Citra : Teori dan Aplikasi

(a) Citra ipomoea.tif (b) w = 2, c = -50

(c) w = 4, c = -25 (d) w = 4, c = -25

(f) w = 10, c = -10 (e) w = 10, c = -30

Gambar 10.45 Efek peng-ambangan adaptif dengan


menggunakannilai maksimum dan minimum dengan berbagai ukuran
jendela dan konstanta yang berbeda

Penggunaan peng-ambangan adaptif pada citra berisi teks dapat dilihat di


bawah ini.

>> Img=imread('C:\Image\maryamah.png');
>> G=adapmean(Img, 13, 15); imshow(G);
Segmentasi Citra 477

>>

Seperti terlihat pada Gambar 10.46(a), pencahayaan pada citra berisi teks tidak
merata. Akibatnya, terdapat teks yang mengandung latarbelakang lebih gelap
daripada bagian yang lain. Beberapa contoh penggunaan parameter berbeda dan
hasil masing-masing dapat dilihat pada Gambar 10.46(b), 10.46(c), dan 10.46(d).
Sebagai perbandingan, apabila peng-ambangan aras-jamak digunakan, diperoleh
hasil seperti terlihat pada Gambar 10.47.

(a) Citra maryamah.png (b) w = 13, c = 15

(c) w = 3, c = 5 (d) w = 7, c = 10

Gambar 10.46Contoh penerapan peng-ambangan adaptif


menggunakan rerata pada citra teks
dengan latar belakang tidak merata
478 Pengolahan Citra : Teori dan Aplikasi

(a) Citra maryamah.png

(a) Pengambangan aras-jamak (b) Pengambangan aras-jamak


dengan t1=140, t2=200 dengan t1=140, t2=220

Gambar 10.47 Hasil peng-ambangan aras-jamak


terhadap citra maryamah.png

10.9 Peng-ambangan Berdasarkan Entropi

Entropi adalah istilah yang diperkenalkan oleh Shannon, yang menyatakan


sebuah ukuran informasi yang terkandung di dalam citra. Entropi telah digunakan
dalam peng-ambangan untuk memperoleh nilai ambang yang optimal. Kapur,
Sahoo, dan Wang memperkenalkan penggunaan entropi dalam peng-ambangan di
tahun 1985 (Acharya dan Ray, 2005). Namun, sesungguhnya Kapur dkk.
mengemukan metode yang diusulkan tersebut sebagai koreksi terhadap artikel
yang ditulis oleh peneliti bernama Pun, yang dipublikasikan pada tahun 1980
(Demirkaya, 2009).
Metode peng-ambangan berbasis entropi yang dikemukakan oleh Kapur dkk.
dapat dijelaskan sebagai berikut. Misalkan, f1, f2, …, fn adalah frekuensi pada citra
beraras keabuan. Maka,

b c $ d
, ∑mz0
kl k $1 c $ 0,1,2, … , @ − 1
e
(10.27)

Dalam hal ini, N adalah jumlah piksel citra, dan Lmenyatakanjumlah aras
keabuan. Selanjutnya, apabila t adalah nilai ambang, entropi latarbelakang adalah:
Segmentasi Citra 479

|} [ $ − ∑jkl . ln
o k o k
~‚ j ~‚ j
(10.28)

dan entropi objek ada


dalah:

|• [ $ − ∑mz0 . ln
o k o k
kljE
E0 ~ j ~„ j
(10.29)

Dalam hal ini,

€} [ $ ∑jkl b c , €• [ $ ∑mz0
kljE0 b c

(10.30)

Jumlah Hb dan Ho din


inyatakan dengan ψ(t). Jadi,

ψ t $ − ∑jkl <Z − ∑mz0 <Z


o k o k o k o k
~‚ j ~‚ j kljE0 ~„ j ~„ j
(10.31)

Optimalisasi dilakuka
kan dengan memaksimalkan fungsi ψ(t).
Implementasi pe
peng-ambangan berbasis entropi Kapur dapat
pat dilihat berikut
ini.

Program : kapur.m

function [ambang]
] = tentropi(F)
% TENTROPI Memper
roleh nilai ambang menggunakan
% metode entr
ropi Kapur
% berdasarkan rumus pada Acharya dan Ray (2005)
% F = Citra be
erskala keabuan

F = double(F);
[m, n] = size(F);
;
jum_piksel = m * n;

% Kosongkan histo
ogram
for i=1 : 256
h(i) = 0.0;
end
480 Pengolahan Citra : Teori dan Aplikasi

% Hitung histogram
for i=1 : m
for j=1 : n
intensitas = F(i,j);
h(intensitas+1) = h(intensitas+1) + 1;
end
end

% Hitung p(i)
for i=1 : 256
p(i) = h(i) / jum_piksel;
end

% Hitung t optimal
ambang = 0;
varMaks = 0;
for t=0 : 255
% Hitung Pb(t)
pbt = 0.0;
for i=0 : t
pbt = pbt + p(i+1);
end

% Hitung Po(t)
pot = 0;
for i=t+1 : 255
pot = pot + p(i+1);
end

% Hitung Hb(t)
hbt = 0;
for i = 0 : t
if p(i+1) ~= 0
hbt = hbt + p(i+1) / pbt * log(p(i+1) / pbt);
end
end

hbt = -hbt;

% Hitung Hb(t)
hot = 0;
for i = t+1 : 255
if p(i+1) ~= 0
hot = hot + p(i+1) / pot * log(p(i+1) / pot);
end
end

hot = -hot;

% Hitung w(t)
wt = hot + hbt;

if wt > varMaks
varMaks = wt;
ambang = t;
end
end
Segmentasi Citra 481

Akhir Program

Contoh penggunaan fungsi kapur:

>> Img=imread('C:\Image\ipomoea.png');
>> t=kapur(Img); G=ambang(Img, t); imshow(G)
>>

Gambar 10.48(c) menunjukkan hasil perintah di atas. Pada gambar tersebut,


terlihat perbedaanempat citra setelah mengalami peng-ambangan dengan Otsu dan
Kapur.
482 Pengolahan Citra : Teori dan Aplikasi

(a) benda.png (b) Otsu (c) Entropy (Kapur)

(d) benda.png (e) Otsu (f) Entropy (Kapur)

(g) sidikjari.png (h) Otsu (i) Entropy (Kapur)

(j) gedung.tif (k) Otsu (l) Entropy (Kapur)

Gambar 10.48Perbandingan peng-ambangan dengan Otsu dan Kapur

Peng-ambangan berbasis entropi yang lain dikemukakan oleh Renyi


(Acharya dan Ray, 2005). Rumus yang digunakan seperti berikut:


|} [ $ <Z 2∑jkl 3
0 o k
0z… ~‚ j
(10.32)
Segmentasi Citra 483


|• [ $ <Z 2∑mz0 3
0 o k
0z… kljE0 0z~„ j
(10.33)

Notasi yang digunaka


kan pada Persamaan 10.32 dan 10.33 sama sep
eperti rumus yang
digunakan pada entr
ntropi Kapur. Parameter ρberguna untuk memperoleh
m nilai
ambang terbaik.
Implementasi
si peng-ambangan yang didasarkan Renyii dapat
d dilihat di
bawah ini.

Program : renyi.m

function [ambang]
] = renyi(F, rho)
% RENYI Memperole
eh nilai ambang menggunakan metode en
ntropi Renyi
% berdasarkan rumus pada Acharya dan Ray (2005)
% F = Citra be
erskala keabuan

F = double(F);
[m, n] = size(F);
;
jum_piksel = m * n;

% Kosongkan histo
ogram
for i=1 : 256
h(i) = 0.0;
end

% Hitung histogra
am
for i=1 : m
for j=1 : n
intensita
as = F(i,j);
h(intensi
itas+1) = h(intensitas+1) + 1;
end
end

% Hitung p(i)
for i=1 : 256
p(i) = h(i) / jum_piksel;
end

% Hitung t optimaal
ambang = 0;
varMaks = 0;
for t=0 : 255
% Hitung Pb(tt)
pbt = 0.0;
for i=0 : t
pbt = pbt + p(i+1);
end

% Hitung Hb(t
t)
484 Pengolahan Citra : Teori dan Aplikasi

hbt = 0;
for i = 0 : t
if pbt ~= 0
hbt = hbt + (p(i+1) / pbt) ^ rho;
end
end

if hbt == 0
hbt = 0;
else
hbt = 1 / (1 - rho) * log(hbt);
end

% Hitung Ho(t)
hot = 0;
for i = t+1 : 255
hot = hot + (p(i+1) / 1-pbt) ^ rho;
end

if hot == 0
hot = 0;
else
hot = 1 / (1 - rho) * log(hot);
end

% Hitung w(t)
wt = hot + hbt;

if wt > varMaks
varMaks = wt;
ambang = t;
end
end

Akhir Program

Contoh penggunaan fungsi renyi:

>> Img = imread('C:\Image\ipomoea.png');


>> t = renyi(Img, 0.05); G = ambang(Img, t);
>> imshow(G)
>>
Contoh hasil penerapan berbagai parameter ρ ditunjukkan pada Gambar 10.49.
Segmentasi Citra 485

(a) Citra ipomoea.tif (b) ρ = 0,05

(c) ρ = 0,5 (d) ρ = 0,6

Gambar 10.49Peng-ambangan dengan entropi Renyi

10.10 Segmentasi Warna

Segmentasi warna dapatdilakukan pada ruang warna HLS. Kemudian,


dengan berpedoman pada susunan warna sesuai dengan Gambar 9.12, dilakukan
pengubahan warna Hue yang berdekatan dengan warna yang menjadi pusat dalam
fungsi keanggotaan fuzzy. Sebagai contoh, warna hijau dengan H = 80 akan
diubah menjadi 85 dan warna kuning dengan H = 40 diubah menjadi 45. Adapun
nilai pada komponen L dan S disederhanakan menjadi tiga nilai, yaitu 0, 128, dan
255. Warna yang mungkin timbul ada dua belas buah, yaitu merah, jingga, kuning,
hijau, cyan, biru, ungu, magenta, merah muda, hitam, putih, dan abu-abu.
Selanjutnya, warna HLS diubah kembali ke RGB. Implementasinya seperti
berikut.
486 Pengolahan Citra : Teori
Te dan Aplikasi

Program : segwarna.m

function [RGB] = segwarna(nama_file)


% SEGWARNA Diguna
akan untuk melakukan segmentasi citra
a
% berdasarkan war
rna
% F = citra berwarna
b
% Keluaran:
% G = citra berwarna
b yang telah disegmentasi

Img=imread(nama_f
file);
[tinggi, lebar, dim]
d = size(Img);
if dim < 3
error('Masuka
an harus berupa citra berwarna');
end

% Konversi ke HVS
S
[H,S,L] = RGBkeHS
SL(Img(:,:,1),Img(:,:,2),Img(:,:,3));
;

for y=1: tinggi


for x=1: leba
ar
h = H(y,x
x);

% Ubah waarna
if h < 111
h = 0;
0
elseif h < 32
h = 21;
2
elseif h < 54
h = 43;
4
elseif h < 116
h = 85;
8
elseif h < 141
h = 128;
1
elseif h < 185
h = 170;
1
elseif h < 202
h = 191;
1
elseif h < 223
h = 213;
2
elseif h < 244
h = 234;
2
else
h = 0;
0
end

% Ubah ko
omponen H
H(y,x) = h;

% Ubah ko
omponen S
if S(y,x)
) >= 200
S(y,x)
) = 255;
elseif S(
(y,x) <= 20
S(y,x
x) = 0;
Segmentasi Citra 487

else
S(y,x) = 128;
end

% Ubah komponen L
if L(y,x) >= 200
L(y,x) = 255;
elseif L(y,x) <= 20
L(y,x) = 0;
else
L(y,x) = 128;
end
end
end

[R, G, B] = HSLkeRGB(H, S, L);


RGB(:,:,1) = R;
RGB(:,:,2) = G;
RGB(:,:,3) = B;
return

Akhir Program

Contoh penggunaan fungsi segwarna:

>> G=segwarna('C:\Image\bangunan.png'); imshow(G)


>>

Hasilnya dapat dilihat pada Gambar 10.50. Dua contoh lain hasil pemrosesan
dengan segwarna dapat dilihat pada Gambar 10.51.
488 Pengolahan Citra : Teori dan Aplikasi

Gambar 10.50Hasil segmentasi warna terhadap citra bangunan.png


Segmentasi Citra 489

(a) Citra lapangan.png (b) Hasil segmentasi lapangan.png

(c) Citra mainan.png (d) Hasil segmentasi mainan.png

(e) Citra inns.png (f) Hasil segmentasi inns.png

Gambar 10.51Contoh lain hasil segmentasi warna dengan segwarna


490 Pengolahan Citra : Teori
Te dan Aplikasi

Contoh aplika
kasi segmentasi warna dengan menggunakann segwarna dapat
dilihat pada skrip segdaun.m.
se Suatu daun dipotret dengan lata
tarbelakang putih
(Gambar 10.52(a)).. H
Hasilnya, latarbelakang tidak putih diakibatk
tkan pencahayaan
yang tidak baik. Selanjutnya,
S citra disegmentasi dengan fu
fungsi segwarna.
Hasilnya ditunjukkan
an pada Gambar 10.52(b). Terlihat bahwa la
latarbelakang ada
yang berwarna hitam
am, abu-abu, dan putih. Nah, selanjutnya de
dengan membuat
warna abu-abu dan hitam
h menjadi putih maka bagian daun dip
iperoleh (Gambar
10.52(c)).

Program : segdaun.m

% SEGDAUN Contoh eksperimen untuk memisahkan daun


% yang dipotre
et dengan latarbelakang putih
% tetapi penca
ahayaan tidak sempurna

close all;
ge\ficus.png';
berkas = 'C:\Imag

G = imread(berkas
s);
figure(1); imshow
w(G)

G = segwarna(berk
kas);
figure(2); imshow
w(G)

H = G;
[m, n, dim] = siz
ze(H);

for i=1: m
for j=1:n

% Buang warna
w abu-abu
if H(i,j,
,1) == 128 && H(i,j,2) == 128 && H(i,
,j,3) == 128
H(i,j
j,1) = 255;
H(i,j
j,2) = 255;
H(i,j
j,3) = 255;
end

% Buang warna
w hitam
if H(i,j,
,1) == 0 && H(i,j,2) == 0 && H(i,j,3)
) == 0
H(i,j
j,1) = 255;
H(i,j
j,2) = 255;
H(i,j
j,3) = 255;
end
end
end
Segmentasi Citra 491

figure(3); imshow
w(H)
clear G H;

Akhir Program

Apabila skrip di atass dijalankan akan muncul tiga jendela. Jendel


ela pertama berisi
citra asli. Jendela ked
edua berisi hasil pemrosesan dengan segwarna
rna. Jendela ketiga
berisi hasil setelah wa
warna abu-abu dan hitam diubah menjadi putih
ih.

(a) Citra ficus.png


ng (b) Hasil segwarna (c) Warna abu-aabu dan
hitam diuba
bah menjadi putih

Gambar 10.52Segmentasi daun

Segmentasi ju
juga dapat dilakukan melalui perantaraan citr
itra biner. Contoh
ditunjukkan pada skri
krip segdaun2.m.

Program : segdaun2.m

% SEGDAUN2 Contoh
h segmentasi daun melalui citra biner
r

\Image\ficus.png');
RGB = imread('C:\
[m,n,dim] = size(
(RGB);

% Konversi ke cit
tra berskala keabuan
for baris=1 : m
for kolom=1 : n
r = RGB(b
baris,kolom,1);
492 Pengolahan Citra : Teori dan Aplikasi

g = RGB(baris,kolom,2);
b = RGB(baris,kolom,3);
kelabu = r * 0.2989 + g * 0.5870 + b * 0.1140;
A(baris,kolom) = kelabu;
end
end

figure(1); imshow(A);

A = double(A);

% Lakukan penghalusan dengan rerata


for baris=2 : m-1
for kolom=2 : n-1
jum = A(baris-1, kolom-1)+ ...
A(baris-1, kolom) + ...
A(baris-1, kolom-1) + ...
A(baris, kolom-1) + ...
A(baris, kolom) + ...
A(baris, kolom+1) + ...
A(baris+1, kolom-1) + ...
A(baris+1, kolom) + ...
A(baris+1, kolom+1);

B(baris, kolom) = jum/9;


end
end

B = uint8(B);

% Gunakan pengambangan otsu


t = otsu(B);
t = t + 13; % Koreksi ambang. Sesuaikan dengan kebutuhan
C = ambang(B, t);

% Lakukan operasi morfologi opening


H = ones(3);
D = opening(C, H);
figure(2); imshow(C);

% Atur bagian tepi berwarna putih


% sebagai kompnesasi bagian
% yang tidak diproses sewaktu
% melakukan pemerataan nilai
for baris=1 : m
D(baris,1) = 1;
D(baris,n) = 1;
end

for kolom=1 : n
D(1,kolom) = 1;
D(m,kolom) = 1;
end

figure(3); imshow(D);

% Kosongkan bagian latarbelakang


% untuk mendapatkan bagian daun
E = RGB;
Segmentasi Citra 493

for baris=1 : m
for kolom=1 : n
if D(baris, kolom) == 1
E(baris,kolom,1) = 255;
E(baris,kolom,2) = 255;
E(baris,kolom,3) = 255;
end
end
end

figure(4); imshow(E);

clear RGB A B C D E H;

Akhir Program

Proses untuk mendapatkan daun ditunjukkan pada gambar berikut.

(a) Citra ficus.png (b) Konversi ke abu-abu (c) citra biner

(d) Morfologi opening (e) Hasil segmentasi

Gambar 10.53 Urutan segmentasi daun melalui citra biner


494 Pengolahan Citra : Teori dan Aplikasi

Latihan

1. Apa yang disebut dengan segementasi?


2. Apa hubungan tool seperti ‘Magic Wand’ dengan segmentasi?
3. Berdasarkan teknik yang digunakan, segmentasi dapat dibagi menjadi empat
kategori. Apa saja dan berikan penjelasan secara singkat.
4. Apa yang dimaksud dengan deteksi tepi? Sebutkan paling tidak empat
operator yang terkait dengan deteksi tepi.
5. Jelaskan pengertian gradien.
6. Sebutkan contoh deteksi tepi orde kedua. Apa kelebihan deteksi tepi orde
kedua dibandingkan dengan orde pertama?
7. Apa kegunaan operator Canny?
8. Apa keunikan operator zero-crossing dibandingkan dengan operator seperti
Sobel dan Prewitt?
9. Apa yang dimaksud dengan operator Kompas?
10. Jelaskan istilah-istilah berikut.
(a) Peng-ambangan dwi-aras
(b) Peng-ambangan aras-jamak
(c) Peng-ambangan optimal
(d) Peng-ambangan iteratif
(e) Peng-ambangan global
(f) Peng-ambangan lokal
(g) Peng-ambangan adaptif

11. Berikan contoh yang tergolong sebagai peng-ambangan secara entropi.


12. Pada fileyang disediakan untuk buku ini, terdapat file bernama empatbola.png,
yang isinya seperti berikut.
Segmentasi Citra 495

Tugas Anda adala


alah membuat suatu fungsi yang menerimaa masukan
m berupa
sebuah warna. Sebagai
S contoh, apabila Anda menyertakan
an warna “biru”
sebagai argumen,
n, citra hanya akan menampilkan bola yang ber
erwarna biru.
496 Pengolahan Citra : Teori dan Aplikasi
BAB 11
Restorasi
Citra

Setelah bab ini berakhir, diharapkan pemakai memahami


berbagai hal berikut yang berhubungan dengan restorasi
citra dan mampu mempraktikkannya.
Restorasi citra
Derau dalam citra
Jenis derau
Penghilangan derau
Penghilangan derau di kawasan frekuensi
Filter inversi
Filter Wiener
Ukuran keberhasilan penghilangan derau
498 Pengolahan Citra Teori dan Aplikasi

11.1 Pengantar Restorasi Citra

Istilah restorasi mempunyai perbedaan makna dengan peningkatan


citra.Peningkatan citra (image enhancement) merupakan istilah yang menyatakan
usaha untuk membuat gambar agar lebih baik dari sudut pandang
pengolahnya.Hal ini dilakukan misalnya melalui pengubahan kontras dan
kecerahan. Berbeda dengan peningkatan citra, restorasi citra merupakan
prosesuntuk membuat citra yang kualitasnya turun akibat adanya tambahan derau
agar menjadi mirip dengan keadaan aslinya. Itulah sebabnya, pembahasan
restorasi akan dimulai dengan pembahasan derau.

11.2 Derau dalam Citra

Derau sesungguhnya adalah komponen dalam citra yang tidak


dikehendaki.Dalam praktik, kehadiran derau tidak dapat dihindari.Sebagai contoh,
derau Gaussian biasa muncul pada sebarang isyarat.Derau putih (white noise)
biasa menyertai pada siaran televisi yang berasal dari stasiun pemancar yang
lemah.Derau butiran biasa muncul dalam film-film fotografi.Derau yang
dinamakan ‘garam dan merica’ sering mewarnai citra.Derau garam berwarna putih
dan derau garam berwarna hitam.Gambar 11.1 menunjukkan efek derau dalam
isyarat satu-dimensi.

Isyarat asli
Isyarat asli + derau

Derau

Gambar 11.1Derau pada isyarat satu dimensi


Restorasi Citra 499

Derau dapat dikelompokkan menjadi empat kelas (Acharya dan Ray,


2005).

1. Derau tambahan(additive noise): Derau ini biasa muncul karena sensor yang
bekerja tidak sempurna dan memberikan isyarat tambahan terdistribusi
Gaussian, yang tidak bergantung pada isyarat asli. Isyarat yang dihasilkan
dapat dinyatakan secara matematis seperti berikut:

. = . + . (11.1)

Dalam hal ini, g(.) menyatakan isyarat yang telah terkena derau, f(.)
menyatakan citra asli, dan d(.) menyatakan derau.
2. Derau perkalian (multiplicative noise): Derau perkalian biasa terjadi pada
filem fotografi. Deraunya biasa disebut sebagai derau bercak (speckle noise).
Secara matematis, isyarat yang terkena derau perkalian dapat ditulis seperti
berikut:

. = . ∗ . (11.2)

Dalam hal ini, g(.) menyatakan isyarat yang telah terkena derau, f(.)
menyatakan citra asli, dan d(.) menyatakan derau.

3. Derau impuls (impulse noise): Sensor ataupun saluran data terkadang


memberikan derau berbentuk biner (0 atau 1). Derau seperti itu dimodelkan
sebagai berikut:

. = 1− ∗ . + ∗ . (11.3)

Dalam hal ini, g(.) menyatakan isyarat yang telah terkena derau, f(.)
menyatakan citra asli, d(.) menyatakan derau, dan p menyatakan parameter
biner yang nilainya berupa 0 atau 1. Berdasarkan rumus di atas, isyarat asli
akan hilang saat p bernilai 1.
500 Pengolahan Citra Teori dan Aplikasi

4. Derau kuantisasi (quantization noise): Derau kuantisasi termasuk sebagai


derau yang bergantung pada isyarat. Hal ini terjadi saat kuantisasi terhadap
isyarat dilakukan sebelum dikonversi menjadi isyarat digital. Derau ini dapat
mengakibatkan detail citra hilang.

11.3 Jenis Derau

Jenis derau yang umum bervariasiGaussian atau impuls. Namun, berbagai


mode derau yang lain terkadang dibicarakan dalam ranah pengolahan citra dengan
tujuan untuk menurunkan kualitas citra untuk kepentingan khusus pengujian
proses penghilangan derau.

11.3.1 Derau Gaussian

Derau Gaussianadalah model derau yang memiliki fungsi kerapatan


probabilitas (probability density function/ PDF) yang diberikan oleh
kurvaGaussian. PDF yang mewakili sifat paling acak dalam bentuk satu dimensi
seperti berikut:



(11.4)

Dalam hal ini, µ adalah nilai rerata dan σ adalah deviasi standar (atau akar
varians) variabel random.PDF-nya ditunjukkan pada Gambar 11.2.
Restorasi Citra 501

p(z)

1
√2

0,607
√2

z
µ-σ µ µ+σ

Gambar 11.2Fungsi kepadatan probabilitas derau Gaussian

Derau Gaussian dapat dilakukan dengan menggunakan fungsi pembangkit


bilangan acak.Sebagai contoh, pada Octave terdapat fungsi bernama randn yang
berguna untuk menghasilkan bilangan acak yang terdistribusi secara normal
dengan nilai berkisar antara 0 dan 1. Nah, rumus untuk mendapatkan derau
Gaussian yang acak dengan deviasi standar sebesarσ dan rerata sama dengan µ
adalah seperti berikut:

= ! ! ∗ + # (11.5)

Apabila µ berupa nol, rumus di atas dapat disederhanakan menjadi d = randn * σ.


Contoh penambahan derau pada citra berskala keabuan ditunjukkan pada
fungsi drgaussian. Argumen pertama berupa citra berskala keabuan. Argumen
kedua bersifat opsional dan menyatakan nilai deviasi standar. Nilai bawaannya
berupa 1. Argumen ketiga bersifat opsional dan menyatakan nilai rerata. Nilai
bawaannya berupa 0.
502 Pengolahan Citra Teori
Te dan Aplikasi

Program : drgaussian.m

function [G] = dr
rgaussian(F, sigma, mu)
% DRGAUSSIAN Meng
ghasilkan citra yang telah diberi der
rau
% menggunakan Gaussian.
% F = citra be
erskala keabuan
% sigma = stan
ndar deviasi fungsi Gaussian
% mu = rerata fungsi Gaussian

if nargin < 3
mu = 0; % Nil
lai bawaan mu
end

if nargin < 2
sigma = 1; % Nilai bawaan deviasi standar
end

[m, n] = size(F);
;

F = double(F);
for i=1 : m
for j=1 : nc
derau = randn
r * sigma + mu;
G(i,j) = round(F(i, j) + derau);

if G(i,j)
) > 255
G(i,j
j) = 255;
elseif G(
(i,j) < 0
G(i,j
j) = 0;
end
end
end

G = uint8(G);

Akhir Program

Contoh pengg
ggunaan fungsi drgaussian ditunjukkan dii bawah
b ini.

read('C:\Image\innsbruck.png');
>> Img=imr ;
>>imshow(I
Img)
>> G = drg
gaussian(Img, 50); imshow(G)
>>
Restorasi Citra 503

Pada contoh di atas, σ yang digunakan sebesar 50. Tiga contoh hasil penambahan
derau Gaussian pada citra Innsbruck.png ditunjukkan pada Gambar 11.3.

(a) Citra Innsbruck.png (b) σ = 10

(c) σ = 25 (d) σ = 50

Gambar 11.3 Derau Gaussian untuk tiga nilai deviasi standar (σ)

Cara seperti di atas berlaku untuk citra berskala keabuan. Kalau dikehendaki,
derau Gaussian juga dapat diterapkan pada citra berwarna. Dalam hal ini, derau
perlu ditambahkan ke komponen R, G, dan B masing-masing. Contoh penerapan
derau Gaussian ditunjukkan pada Gambar 11.4.
504 Pengolahan Citra Teori
Te dan Aplikasi

(a) Citra ba
bangunan.png (b) σ = 10

(c) σ = 150 (d) σ = 150

bar 11.4Derau Gaussian pada citra berwarn


Gamb rna

Apabila tidak
ak tersedia fungsi yang menghasilkan bilan
angan acak yang
terdistribusi secara nnormal, fungsi pembangkit bilangan acak ya
yang terdistribusi
seragam dapat diguna
nakan. Pada Octave dan MATLAB, tersedia fu
fungsi seperti itu,
yaitu rand. Adapun im
implementasinya seperti berikut.

Program : drgaussian2.m

function [G] = drrgaussian2(F, sigma, mu)


% DRGAUSSIAN Mengghasilkan citra yang telah diberi der
rau
% menggunakan Gaussian.
%
% Berdasarkan kode
% Harley R. Myyler dan Arthur R. Weeks, 1993
%
% F = citra beerskala keabuan
% sigma = stanndar deviasi fungsi Gaussian
% mu = rerata

if nargin < 3
mu = 0;
Restorasi Citra 505

end

if nargin < 2
sigma = 10;
end

[m, n] = size(F);

F = double(F);
for i=1 : m
for j=1 : n
derau = sqrt(-2 * sigma * sigma * log(1 - rand));
theta = rand * 1.9175345E-4 - 3.14159265;
derau = derau * cos(theta);
derau = derau + mu;

G(i,j) = round(F(i, j) + derau);

if G(i,j) > 255


G(i,j) = 255;
elseif G(i,j) < 0
G(i,j) = 0;
end
end
end

G = uint8(G);

Akhir Program

11.3.2 Derau Garam dan Merica (Salt & Pepper Noise)

Derau garam dan merica biasa dinamakan sebagai derau impuls positif dan
negatif, derau tembakan, atau derau biner. Derau ini biasa disebabkan oleh
gangguan yang tiba-tiba dan tajam pada proses perolehan isyarat citra. Bentuknya
berupa bintik-bintik hitam atau putih di dalam citra. Gambar 11.5 menunjukkan
contoh derau garam dan merica dengan berbagai nilai densitas derau. Derau
garam dan merica, sering muncul pada citra yang diperoleh melalui kamera.
506 Pengolahan Citra Teori dan Aplikasi

(a) Citra Innsbruck.png (b) Probabilitas = 0,01

(c) Probabilitas = 0,05 (d) Probabilitas = 0,2

Gambar 11.5Contoh derau garam dan merica


untuk berbagai nilai probabilitas

Algoritma untuk membangkitkan derau garam dan merica dapat dilihat di


bawah ini.

ALGORITMA 1.1 – Membangkitkan derau garam dan merica

Masukan:
• f : Citra berskala keabuan berukuran M x N
• p : Probabilitas pembangkitan derau (0 s/d 1)

Keluaran:
• g : Citra yang telah ditambahi dengan derau

derauImpuls(f, p):
1. Salin citra f ke g
Restorasi Citra 507

2. FOR y ←1 TO M
FOR
OR x ← 1 TO N
nilai_acak
ak←pembangkit_random
IF nilai_ac
acak < p / 2
g(y, x) ← 0 // merica (berwarna hitam)
EL
ELSE
IF nilai_acak > p / 2 AND nilai_acak <= p
g(y, x) ← 255 // Garam (berwarna putih
tih)
END
E
END-IF
END
ND-FOR
END-F FOR

3. RETUR
URN g

Skrip untuk membuat


at derau impuls ditunjukkan di bawah ini.

Program : drimpuls.m

function [G] = dr
rimpuls(F, probabilitas)
% DRIMPULS Mengha
asilkan citra yang telah diberi derau
u
% menggunakan fungsi impuls.
% F = citra be
erskala keabuan
% probabilitas
s = Probabilitas kemunculan derau
% (0 s/d 1)

if nargin < 2
probabilitas = 0.05; % Nilai bawaan
end;

if probabilitas < 0 || probabilitas > 1


error('Nilai probabilitas harus antara 0 s/d 1');
;
end

[m, n] = size(F);
;

G = double(F);
for i=1 : m
for j=1 : n
nilai_aca
ak = rand;

if nilai_
_acak <= probabilitas / 2
G(i,j
j) = 0;
elseif (n
nilai_acak > probabilitas / 2) && ...
.
(n
nilai_acak <= probabilitas)
G(i,j
j) = 255;
end
end
508 Pengolahan Citra Teori dan Aplikasi

end

G = uint8(G);

Akhir Program

Contoh untuk menambahkan derau impuls pada citra:

>> Img=imread('C:\Image\innsbruck.png');
>>imshow(Img)
>> G = drimpuls(Img, 0.005); imshow(G)
>> imshow(Img)
>>

11.3.3 Derau Eksponensial

Derau eksponensial (terkadang dinamakan derau eksponensial negatif)


merupakan jenis derau yang dihasilkan oleh laser yang koheren ketika citra
diperoleh. Oleh karena itu, derau ini sering disebut sebagai bercak laser (Myler
and Weeks, 1993). PDF-nyaberupa

, (!)(* 0 ≤
%&'
< ~.
=$
0, < 0
(11.6)

Dalam hal ini, z adalah nilai aras keabuan I dan a>0. Reratanya berupa

#=
&
(11.7)

dan varians berupa

=& (11.8)

Adapun bentuk PDFdapat dilihat pada Gambar 11.16.


Restorasi Citra 509

p(z)

Gambar 11.6 Fun


ungsi kepadatan probabilitas derau ekspone
nensial negatif

Pembangkit dera
erau eksponensial dilakukan dengan meng
nggunakan rumus
(Gonzalez, dkk., 2004
04):

= − ln 1 − !
&
(11.9)

Dalam hal ini, randd adalah pembangkit bilangan acak yang bersifat
b seragam.
Implementasinya dap
apat dilihat di bawah ini.

Program : dreksponensial.m

function [G] = dr
reksponensial(F, a)
% DREKSPONENSIAL Menghasilkan citra yang telah diberi
i derau
% menggunakan fungsi eksponensial negatif.
%
% Berdasarkan kode
% Rafael C. Go
onzales, Richard E. Woods, dan
510 Pengolahan Citra Teori dan Aplikasi

% Steven L. Eddins, 2004


%
% F = citra berskala keabuan
% varians = varians yang dikehendaki

if nargin ~= 2
error('Penggunaan: dreksponensial(F, a)');
end

if a <= 0
error('Parameter berupa sebarang bilangan > 0');
end

[m, n] = size(F);

F = double(F);
G = zeros(m, n);
for i=1 : m
for j=1 : n
derau = -1/a * log(1 - rand);

G(i,j) = round(F(i,j) + derau);


if G(i,j) > 255
G(i,j) = 255;
end
end
end

G = uint8(G);

Akhir Program

Contoh penggunaan fungsi dreksponensial:

>> Img=imread('C:\Image\innsbruck.png');
>> G = dreksponensial(Img, 100); imshow(G)
>>

Beberapa contoh hasil penerapan derau eksponensial negatif dapat dilihat pada
Gambar 11.17.
Restorasi Citra 511

(a) Citra Innsbruck.tif (b) a = 0,1

(c) a = 0,07 (d) a = 0,01

Gambar 11.7Contoh derau eksponensial negatif

11.3.4 Derau Gamma

Derau gamma(atau kadang disebut Erlang) merupakan efek penapisan


lolos-rendah terhadap citra yang mengandung derau eksponensial sebagai hasil
pengambilan citra yang teriluminasi oleh laser yang koheren (Myler dan Weeks,
1993).PDF derau Gamma didefinisikan sebagai berikut (Gonzalez dan Woods,
2002):

&2 3 2 4
1 = 5% !
%&3
(11.10)

Dalam hal ini, x adalah nilai aras keabuan, a>0, b berupa bilangan bulat positif,
dan tanda ! menyatakan faktorial. Rerata dan varians berupa:
512 Pengolahan Citra Teori dan Aplikasi

5
#=
&
(11.11)

dan

5
=
&
(11.12)

p(x)

7
0,607 8−1 8−1
7= − 8−1
8−1 !

(b-1)/a x

Gambar 11.8 Fungsi kepadatan probabilitas derau Gamma

Pembangkit bilangan acak untuk membangkitkan derau gamma berupa


(Gonzalez,dkk., 2004):

1 = 9 + 9 + ⋯ + 95 (11.13)

Dalam hal ini, E adalah bilangan random eksponensial dengan parameter a.


Implementasinya dapat dilihat berikut ini.
Restorasi Citra 513

Program : drgamma.m

function [G] = drrgamma(F, a, b)


% DRGAMMA Mengha asilkan citra yang telah diberi derauu
% menggunakan fungsi Gamma.
%
% Berdasarkan
% Rafael C. Goonzales, Richard E. Woods, dan
% Steven L. Edddins, 2004
%
% F = citra beerskala keabuan
% a dan b = arrgumen untuk menentukan bentuk kurva
% a > 0 dan b bilangan bulat positif

if nargin ~= 3
error('Penggu
unaan: drgamma(F, a, b)');
end

if (a <= 0) || (a
a ~= round(a))
error('Argume
en kedua harus berupa integer > 0');
end

if b < 1 || (b ~=
= round(b))
error('Argume
en ketiga harus berupa integer > 0');
;
end

[m, n] = size(F);
;

alpha = b;
varians = b / (a * a);
p = sqrt(varians * a ) / 2.0;

F = double(F);
for i=1 : m
for j=1 : n
k = -1 / a;
derau = 0;
0
for p=1 : b
derau
u = derau + k * log(1 - rand);
end

G(i,j) = round(F(i,j)+derau);

if G(i,j)
) > 255
G(i,j
j) = 255;
end
end
end

G = uint8(G);

Akhir Program
514 Pengolahan Citra Teori dan Aplikasi

Contoh penggunaan fungsi drgamma:

>> Img=imread('C:\Image\innsbruck.png');
>> G = drgamma(Img, 1,20); imshow(G)
>>

Beberapa contoh hasil penerapan derau gamma dapat dilihat pada Gambar 11.9.

(a) Citra Innsbruck.png (b) a = 1, b = 20

(c) a = 4, b = 120 (d) a = 1, b = 50

Gambar 11.9Contoh derau gamma

11.3.4 Derau Rayleigh

Derau Rayleigh mempunyai PDF seperti berikut:


Restorasi Citra 515

− % '%& /5
, ≥ .
1 = 1 = ;5
0, <0
(11.14)

Dalam hal ini, x adalah nilai aras keabuan. Rerata dihitung dengan menggunakan
rumus

#=> / 2 (11.15)

dan varians berupa

5 ?%
=
?
(11.16)

Bentuk PDF-nya dapat dilihat pada Gambar 11.10.Derau Rayleigh biasa muncul
pada jangkauan radar dan citra bergerak (Myler dan Weeks, 1993).

p(x)

2
0,607@
8

8
+@
2

Gambar 11.10 Fungsi kepadatan probabilitas derau Rayleigh

Pembangkit bilangan acak diperoleh melalui (Gonzales, dkk., 2004):


516 Pengolahan Citra Teori
Te dan Aplikasi

= + >8 ln 1 − ! (11.17)

Implementasi untuk membangkitkan


m derau Rayleigh dapat dilihatt ddi bawah ini.

Program : drrayleigh.m

function [G] = dr
rrayleigh(F, a, b)
% DRRAYLEIGH Meng
ghasilkan citra yang telah diberi der
rau
% menggunakan fungsi Rayleigh.
%
% Berdasarkan kode
% Rafael C. Go
onzales, Richard E. Woods, dan
% Steven L. Ed
ddins, 2004
%
% F = citra be
erskala keabuan
% a dan b = pa
aramater untuk menentukan fungsi Rayl
leigh

if nargin ~= 3
error('Penggu
unaan: drrayleigh(F, a, b)');
end

if a <= 0 || b <=
= 0
error('Parame
eter a atau b berupa sebarang bilanga
an > 0');
end

[m, n] = size(F);
;

F = double(F);
G = zeros(m, n);
for i=1 : m
for j=1 : n
derau = a + sqrt(-b * log(1 - rand));

G(i,j) = round(F(i,j) + derau);


if G(i,j)
) > 255
G(i,j
j) = 255;
end
end
end

G = uint8(G);

Akhir Program

Contoh pengg
ggunaan fungsi drrayleigh:
Restorasi Citra 517

>> Img=imread('C:\Image\innsbruck.png');
>> G = drrayleigh(Img, 10, 90); imshow(G)
>>

Beberapa contoh hasil penerapan derau Rayleigh dapat dilihat pada Gambar 11.11.

(a) Citra Innsbruck.png (b) a = 10, b = 90

(c) a = 1, b = 300 (d) a = 10, b = 490

Gambar 11.11Contoh derau Rayleigh

11.3.6 Derau Uniform

Derau uniformyaitu dengan peluang sama tinggi memiliki PDF seperti


berikut:

, AB* ≤ 1 ≤ 8 .
1 =; 5%&
1, (!)(* C B!!D
(11.18)
518 Pengolahan Citra Teori dan Aplikasi

Rerata pada fungsi tersebut berupa

&E5
#= (11.19)

Varians-nya berupa

5%&
= (11.20)

Bentuk PDF ditunjukkan pada Gambar 11.12.

p(x)

1
8−

8
x

Gambar 11.12 Fungsi kepadatan probabilitas derau uniform

Pembangkit bilangan acak dapat dihitung melalui rumus (Gonzalez, dkk., 2004):

= + 8− ∗ ! (11.21)

Implementasi untuk membangkitkan derau uniformdapat dilihat di bawah ini.


Restorasi Citra 519

Program : druniform.m

function [G] = dr
runiform(F, a, b)
% DRRAYLEIGH Meng
ghasilkan citra yang telah diberi der
rau
% uniform.
%
% Berdasarkan kode
% Rafael C. Go
onzales, Richard E. Woods, dan
% Steven L. Ed
ddins, 2004
%
% F = citra be
erskala keabuan
% a dan b = pa
aramater untuk menentukan fungsi Rayl
leigh

if nargin ~= 3
error('Penggu
unaan: drrayleigh(F, a, b)');
end

if a <= 0 || b <=
= 0
error('Parame
eter a atau b berupa sebarang bilanga
an > 0');
end

[m, n] = size(F);
;

F = double(F);
G = zeros(m, n);
for i=1 : m
for j=1 : n

derau = a + (b-a) * rand;

G(i,j) = round(F(i,j) + derau);


if G(i,j)
) > 255
G(i,j
j) = 255;
elseif G(
(i,j) < 0
G(i,j
j) = 0;
end
end
end

G = uint8(G);

Akhir Program

Contoh pengg
ggunaan fungsi druniform:

read('C:\Image\innsbruck.png');
>> Img=imr ;
>> G = dru
uniform(Img, 1800, 0); imshow(G
G)
520 Pengolahan Citra Teori dan Aplikasi

>>

Beberapa contoh hasil penerapan derau uniform dapat dilihat pada Gambar 11.13.

(a) Citra Innsbruck.png (b) a = 10, b = 30

(c) a = 10, b = 50 (d) a = 10, b = 100

Gambar 11.13Contoh derau uniform

11.3.7 Derau Periodis

Derau periodis biasa terjadi karena interferensi listrik maupun


elektromekanis selama citra diakuisisi. Derau ini biasanya berbentuk sinusoidal.
Sifat periodisdapat berbentuk statisioner yaitu memiliki amplitudo, frekuensi, dan
fase yang tetap, tetapi dapat juga nonstasioner dengan nilai amplitudo, frekuensi,
dan fase berubah di sepanjang area citra.
Restorasi Citra 521

(a) Citra panta


tai.png (b) a = 10, bx = 3,, by
b =4

(c) a = 10, bx
x = -3, by = 4 (d) a = 20, bx = 10, by = 10

Gambar 11.14Citra
11 dengan derau berupa gelombang
ng sinus

Gambar 11.14
14 menunjukkan contoh citra yang telah diberi
ri tambahan derau
periodis berbentuk sinus.
s Tambahan derau seperti itu dapat dilakukan
di dengan
menggunakan fungsi
si drperiodik. Implementasi fungsi tersebu
but dapat dilihat di
bawah ini.

Program : drperiodik.m

function [G] = dr
rperiodik(F, a, bx, by)
% DRPERIODIK Meng
ghasilkan citra yang teklah ditambahi
i
% derau period
dis.
%
% F = Citra be
erskala keabuan
% b = penegas derau (1, 2, 3, ...)
% ax dan ay me
enentukan kemiringan derau
522 Pengolahan Citra Teori dan Aplikasi

if nargin < 4
a = 3; bx = 3; by = 5;
end

[m, n] = size(F);
for i=1:m
for j=1:n
X(i,j) = j;
Y(i,j) = i;
end
end

derau = a * sin(X/bx + Y/by) + 1;

G = uint8(double(F) + derau);

Akhir Program

Contoh penggunaan fungsi drperiodik:

>> Img=imread('C:\Image\pantai.png');
>> G=drperiodik(Img, 20, 10, 10); imshow(G)
>>

Contoh berikut menggunakan pemanggilan fungsi drperiodik dua arah:

>> Img=imread('C:\image\absam.png');
>> G=drperiodik(Img,10,1,50000);
>> G=drperiodik(G,10,50000,1); imshow(G)
>>
Restorasi Citra 523

Gambar 11.15Hasil pengenaan drperiodik dua arah

11.4 Penghilangan Derau

Derau yang ditambahkan ke dalam citra umumnya memiliki spektrum


frekuensi yang lebih tinggi daripada komponen citra (Pratt, 2001). Oleh karena
itu, filter lolos-rendah dapat digunakan untuk menghilangkan derau.
Secara prinsip, penghilangan derau dapat dilakukan dengan pendekatan
yang linear ataupun nonlinear. Penghilangan derau secara linear dapat dilakukan
baik pada kawasan spasial maupun frekuensi. Termasuk pemrosesan pada
kawasan spasial yaitu penggunaan filter lolos-rendah (Pratt, 2001) ataupun filter
rerata aritmetik, filter rerata harmonik, dan filter rerata kontraharmonik (Gonzalez
dan Woods, 2002). Pada kawasan frekuensi, filter seperti homomorfik ataupun
filter lolos-rendah Butterworthdapat digunakan (Pratt, 2001).

11.4.1 Filter Lolos-Rendah

Penghilangan derau dengan filter lolos-rendah umumnya di ranah spasial


dilakukan dengan menggunakan cadar (biasa disebut tanggapan impuls)
524 Pengolahan Citra Teori dan Aplikasi

berukuran 3x3. Contoh ditunjukkan pada Gambar 11.16. Pada cadar tersebut,
semua koefisien telah dinormalisasi sehingga total nilai koefisien adalah 1. Cadar
pada Gambar 11.16(b) dan 11.16(c) adalah contoh cadar yang memiliki
tanggapan impuls seperti berikut:

1 8 1
F = G8 8 8H
1 8 1
(11.22)

1 1 1
1
F = 9 G1 1 1H
1 1 1
(a)

1 1 1
1
F = 10 G1 2 1H
1 1 1
(b)

1 2 1
1
F = 16 G2 4 2H
1 2 1
(c)

Gambar 11.16Cadar filter lolos-rendah

Contoh pengenaan filter lolos-rendah pada citra yang telah diberi derau
ditunjukkan pada Gambar 11.17. Pelaksanaan penapisan dapat dilakukan dengan
melakukan konvolusi antara citra dan cadar. Contoh untuk melakukan operasi
penghilangan derau Gaussiandengan menggunakan cadar filter lolos-rendah
ditunjukkan berikut ini.

>> Img=imread('C:\Image\boneka.png');
>> H=[1 1 1; 1 1 1; 1 1 1] / 9
H =

0.1111 0.1111 0.1111


0.1111 0.1111 0.1111
0.1111 0.1111 0.1111
Restorasi Citra 525

>> G=drgaussian(Img, 5);


>> K=uint8(konvolusi(G,H)); imshow(K)
>>

Contoh hasil ditunjukkan pada Gambar 11.17(b).


526 Pengolahan Citra Teori dan Aplikasi

(a) Citra boneka.png yang telah


diberi derau Gaussian

1 1 1
1
9
G1 1 1H
1 1 1
(b)

1 1 1
1
10
G1 2 1H
1 1 1
(c)

1 2 1
1
16
G2 4 2H
1 2 1
(d)

Gambar 11.17 Contoh efek filter lolos-rendah


pada citra boneka yang mengandung derau Gaussian

11.4.2 Filter Rerata Aritmetik

Filter rerata aritmetik (arithmetic mean filter) dilakukan dengan


melakukan perhitungan rerata nilai pada suatu jendela berukuran m x n dan
Restorasi Citra 527

hasilnya digunakan sebagai nilai piksel pada citra keluaran. Dengan demikian,
jika g menyatakan citra yang terkena derau dan K adalah citra yang deraunya telah
dihilangkan, hubungan kedua fungsi tersebut dapat ditulis menjadi

K D, 1 = ∑ P,Q ∈STU ,O
LM
(11.23)

Filter ini cocok untuk menghilangkan derau uniform dan Gaussian, tetapi akan
sedikit mengaburkan citra.
Dalam praktik, pendekatan rerata di atas dapat dilakukan melalui
konvolusi antar g dan cadar H ataupun tanpa konvolusi. Dalam hal ini, semua

LM
koefisien dalam cadar H bernilai . Filter rerata aritmetik tidak lain adalah filter

pemerataan yang dibahas di Bagian 4.3.2. Gambar 11.18 menunjukkan gambaran


perhitungan untuk memperoleh nilai rerata yang diberikan ke K D, 1 . Adapun
Gambar 11.19 menunjukkan contoh citra yang telah diberi derau dan hasil
pemrosesan dengan rerata aritmetik.

g K
x x

7 5 7
y 3 2 6 y 5
1 4 7

2+6+7+4+1+3+7+5+7 42
= = 4,6667 ≈ 5
9 9

Gambar 11.18Contoh pemrosesan dengan filter rerata aritmetik

Contoh berikut merupakan perwujudan untuk melakukan penapisan dengan


filter rerata aritmetik.
528 Pengolahan Citra Teori
Te dan Aplikasi

Program : filarithmean.m

function [G] = fi
ilarithmean(F, ukuran)
% FILARITHMEAN Me
elakukan penghilangan derau dengan
% menggunakan
n filter rerata aritmetik
% F = Citra berskala
b keabuan
% ukuran = uk
kuran jendela
% G = Citra hasil
h pemrosesan

if nargin < 2
ukuran = 3;
end
[m, n] = size(F);
;

setengah = floor((ukuran / 2);


F = double(F);
G = zeros(m-2*settengah, n-2*setengah);
for i=1+setengah : m-setengah
for j=1+setenngah: n-setengah
jum = 0;
for p = -setengah
- : setengah
for q = -setengah : setengah
j
jum = jum + F(i+p, j+q);
end
end

ngah, j-setengah) = jum / (ukuran * u


G(i-seten ukuran);
end
end

G = uint8(G);

Akhir Program

Contoh pengg
ggunaan fungsi filarithmean:

>> Img=imr
read('C:\Image\pantai.png');
>>G=drgaus
ssian(Img, 10);
>> K=filar
rithmean(G); imshow(K);
>>

Ukuran jendela dapa


pat ditentukan secara bebas dan terarah, m
misalnya, seperti
berikut:
Restorasi Citra 529

>> K=filarithmean(G, 5);

Pada contoh di atas, ukuran jendela adalah 5 x 5.


Efek pererataan dengan filter rerata aritmetik diperlihatkan pada Gambar
11.19 dan Gambar 11.20. Gambar 11.20 menunjukkan bahwa filter rerata
aritmetik gagal mengatasi derau merica jika ukuran jendela yang digunakan kecil.

(a) Citra pantai.png yang telah diberi (b) Filter rerata aritmetika 3 x 3
derau Gaussian dengan σ = 10

(c) Filter rerata aritmetika 5 x 5 (d) Filter rerata aritmetika 9 x 9

Gambar 11.19 Contoh efek filter rerata aritmetik


pada citra yang telah diberi derau Gaussian
530 Pengolahan Citra Teori dan Aplikasi

(a) Citra pantai.png yang telah diberi (b) Filter rerata aritmetika 3 x 3
derau garam dan merica, p = 0,01

(c) Filter rerata aritmetika 5 x 5 (d) Filter rerata aritmetika 9 x 9

Gambar 11.20 Contoh efek filter rerata aritmetik


pada citra yang telah diberi derau garam dan merica

11.4.3 Filter Rerata Harmonik

Filter rerata harmonik (harmonic mean filter),yang termasuk dalam


golongan filter nonlinear, biasa digunakan untuk mengatasi derau Gaussian. Pada
derau garam danmerica, filter ini dapat digunakan untuk menghilangkan derau
garam, tetapi akan gagal kalau diterapkan pada derau merica (Gonzalez dan
Woods, 2002).
Operasi dengan filter ini dilakukan dengan menggunakan rumus

K D, 1 = LM
4
∑ Z,[ ∈\TU
(11.24)
Y Z,[
Restorasi Citra 531

Sebagai contoh, perh


erhitungan dengan rumus di atas ditunjukkan
kan pada Gambar
11.21.

g K
x x

7 5 7
y 3 2 6 y 3
1 4 7

9
1 1 1 1 1 1 1 1 1 = 3,1266 ≈ 3
+ + + + + + + +
2 6 7 4 1 3 7 5 7

Gambar 11.211 Contoh perhitungan dengan filter rerataa harmonik


h

Contoh berikutt merupakan


m perwujudan untuk melakukan penapisan
pe dengan
filter rerata harmonik.
ik.

Program : filharmonik.m

function [G] = fi
ilharmonik(F, ukuran)
% FILHARMONIK Mel
lakukan penghilangan derau dengan
% menggunakan
n filter rerata harmonik
% F = Citra berskala
b keabuan
% ukuran = uk
kuran jendela
% G = Citra hasil
h pemrosesan

if nargin < 2
ukuran = 3;
end
[m, n] = size(F);
;

setengah = floor(
(ukuran / 2);
F = double(F);
G = zeros(m-2*set
tengah, n-2*setengah);
for i=1+setengah : m-setengah
532 Pengolahan Citra Teori dan Aplikasi

for j=1+setengah: n-setengah


jum = 0;
for p = -setengah : setengah
for q = -setengah : setengah
jum = jum + 1 / F(i+p, j+q);
end
end

G(i-setengah, j-setengah) = (ukuran * ukuran) / jum;


end
end

G = uint8(G);

Akhir Program

Contoh penggunaan fungsi filharmonik:

>> Img=imread('C:\Image\pantai.png');
>>G=drgaussian(Img, 10);
>> K=filharmonik(G); imshow(K);
>>

Ukuran jendela dapat ditentukan, misalnya, seperti berikut:

>> K=filharmonik(G, 5);

Pada contoh di atas, ukuran jendela adalah 5 x 5.


Efek filter rerata harmonik diperlihatkan pada Gambar 11.22 dan Gambar
11.23. Gambar 11.23 menunjukkan bahwa filter rerata harmonik tidak dapat
mengatasi derau merica. Bintik warna putih dapat dihilangkan, tetapi bintik warna
hitam justru lebih ditonjolkan.
Restorasi Citra 533

(a) Citra kartun.tif yang telah diberi (b) Filter rerata harmonik 3 x 3
derau Gaussian, σ = 10

(c) Filter rerata harmonik 5 x 5 (d) Filter rerata harmonik 9 x 9

Gambar 11.22 Contoh efek filter rerata harmonik


pada citra yang diberi derau Gaussian
534 Pengolahan Citra Teori dan Aplikasi

(a) Citra kartun.png yang telah diberi (b) Filter rerata harmonik 3 x 3
derau garam dan merica, p = 0,01

(c) Filter rerata harmonik 5 x 5 (d) Filter rerata harmonik 9 x 9

Gambar 11.23 Contoh efek filter rerata harmonik


pada citra yang diberi derau garam dan merica

11.4.4 Filter Rerata Kontraharmonik

Penapisan dengan filter rerata kontraharmonik (contraharmonic mean


filter) dilaksanakan dengan menggunakan rumus berikut:

∑ Z,[ ∈\TU ] P,Q ^_4


K D, 1 =
∑ Z,[ ∈\TU ] P,Q ^
(11.25)

Dalam hal ini, Q dinamakan orde filter.


Filter rerata kontraharmonik cocok digunakan untuk menghilangkan derau
garam dan merica, tetapi tidak dapat dilakukan sekaligus. Dalam hal ini, nilai Q
positif berguna untuk menghilangkan derau merica dan nilai Q negatif berguna
Restorasi Citra 535

untuk membuang de
derau garam (Gonzalez dan Woods, 2002).. Sebagai
S contoh,
perhitungan pada filte
lter rerata kontraharmonik ditunjukkan pada Gambar
Ga 11.24.

g fK
x x

7 5 7
y 3 2 6 y 6
1 4 7

Q=1

22 +62 +72 +42 +12 +39 +72 +52 +72 238


= = 5,6667 ≈ 6
2
2+6+7+4+1+3+7+5+7 42

Gambar 11.24Ilus
ustrasi perhitungan dengan filter rerata kon
ontraharmonik

Contoh berikutt merupakan


m perwujudan untuk melakukan pe
penapisan dengan
filter rerata kontraharm
armonik.

Program : filkontra.m

function [G] = fi
ilkontra(F, ukuran, orde)
% FILKONTRA Melak
kukan penghilangan derau dengan
% menggunakan
n filter rerata kontraharmonik
% F = Citra berskala
b keabuan
% ukuran = uk
kuran jendela
% orde = orde
e filter
% G = Citra hasil
h pemrosesan

if nargin < 2
ukuran = 3;
end

if nargin < 3
orde = 2;
end

[m, n] = size(F);
;
536 Pengolahan Citra Teori dan Aplikasi

setengah = floor(ukuran / 2);


F = double(F);
G = zeros(m-2*setengah, n-2*setengah);
for i=1+setengah : m-setengah
for j=1+setengah: n-setengah
atas = 0;
bawah = 0;
for p = -setengah : setengah
for q = -setengah : setengah
atas = atas + F(i+p, j+q)^orde;
bawah = bawah + F(i+p, j+q)^(orde-1);
end
end

G(i-setengah, j-setengah) = atas / bawah;


end
end

G = uint8(G);

Akhir Program

Contoh penggunaan fungsi filkontra:

>> Img=imread('C:\Image\boneka.png');
>> G=drgaussian(Img, 5);
>> K=filkontra(G,3); imshow(K);
>>

Ukuran jendela dapat ditentukan. Misalnya, seperti berikut:

>> K=filkontra(G, 5);

Pada contoh di atas, ukuran jendela adalah 5 x 5.


Efek pererataan dengan filter rerata kontraharmonik diperlihatkan pada
Gambar 11.25 dan Gambar 11.26. Pada Gambar 11.26, salah satu derau garam
atau merica dapat dihilangkan dengan mengatur nilai orde filter berupa bilangan
positif atau negatif.
Restorasi Citra 537

(a) Citra boneka.png yang telah diberi (b) Filter rerata kontraharmonik 3 x 3
derau Gaussian, σ = 10 Orde = 2

(c) Filter rerata kontraharmonik 5 x 5 (d) Filter rerata kontraharmonik 3 x 3


Orde = 2 Orde = 10

Gambar 11.25Contoh efek filter rerata kontraharmonik


pada citra boneka yang diberi derau Gaussian
538 Pengolahan Citra Teori dan Aplikasi

(a) Citra boneka.png yang telah diberi (b) Filter rerata kontraharmonik 3 x 3
derau garam dan merica, p =0,01 Orde = 2 (Menghilangkan merica)

(c) Filter rerata kontraharmonik 3 x 3


Orde = -2 (menghilangkan garam)

Gambar 11.26Contoh efek filter rerata kontraharmonik


pada citra boneka yang diberi derau garam dan merica

11.4.5 Filter Rerata Yp

Filter rerata Yp (Yp mean filter) adalah jenis filter nonlinear yang
didefinisikan sebagai berikut (Myler dan Weeks, 1993):

∑ Z,[ ∈\TU ] P,Q ^


K D, 1 = b
4/^

L M
(11.26)

Dalam hal ini, parameter Q menentukan orde filter, m dan n menyatakan ukuran
jendela. Filter ini berguna untuk menghilangkan derau Gaussian.
Contoh berikut merupakan perwujudan untuk melakukan penapisan dengan
filter rerata Yp.
Restorasi Citra 539

Program : filyp.m

function [G] = fi
ilyp(F, ukuran, orde)
% FILYP Melakukan
n penghilangan derau dengan
% menggunakan
n filter rerata Yp
% F = Citra berskala
b keabuan
% ukuran = uk
kuran jendela
% orde = orde
e filter
% G = Citra hasil
h pemrosesan

if nargin < 2
ukuran = 3;
end

if nargin < 3
orde = 2;
end

[m, n] = size(F);
;

setengah = floor((ukuran / 2);


F = double(F);
G = zeros(m-2*settengah, n-2*setengah);
for i=1+setengah : m-setengah
for j=1+setenngah: n-setengah
jum = 0;
for p = -setengah
- : setengah
for q = -setengah : setengah
j
jum = jum + F(i+p, j+q)^orde / (ukura
an * ukuran);
end
end

ngah, j-setengah) = jum ^ (1/orde);


G(i-seten
end
end

G = uint8(G);

Akhir Program

Contoh pengg
ggunaan fungsi filyp:

>> Img=imr
read('C:\Image\innsbruck.png');
;
>> G=drgau
ussian(Img, 10);
>> K=filyp
p(G,3,2); imshow(K);
540 Pengolahan Citra Teori dan Aplikasi

>>

Ukuran jendela dapat ditentukan, misalnya seperti berikut:

>> K=filyp(G, 5);

Pada contoh di atas, ukuran jendela adalah 5 x 5.


Efek pererataan dengan filter rerata Yp diperlihatkan pada Gambar 11.27.

(a) Citra innsbruck.png yang telah (b) Filter rerata Yp 3 x 3, Orde = 2


diberi derau Gaussian

(c) Filter rerata Yp 5 x 5, Orde = 5 (d) Filter rerata Yp 9 x 9, Orde = -5

Gambar 11.27Contoh efek filter rerata Yp


pada citra yang diberi derau Gaussian

11.4.6 Filter Median

Sebagaimana telah dijelaskan pada Bagian 4.3.3, filter median dapat


dipakai untuk menghilangkan derau dalam citra. Filter ini menggunakan nilai
Restorasi Citra 541

median piksel-piksel di dalam jendela sebagai keluaran K. Jadi, filter median dapat
ditulis sebagai berikut:

K D, 1 = c B ! P,Q ∈STU ,O (11.27)

Ilustrasi filter median ditunjukkan pada Gambar 11.28.

g Kf
x x

7 5 7
y 3 2 6 y 5
1 4 7

Pengurutan

1, 2, 3, 4, 5, 6, 7, 7, 7

1 2 3 4 5 6 7 8 9 Indeks

Median (di tengah)

Gambar 11.28 Contoh filter median

Filter median cocok dipakai untuk menghilangkan derau impuls dan derau
eksponensial negatif. Contoh diperlihatkan pada Gambar 11.29.
542 Pengolahan Citra Teori
Te dan Aplikasi

(a) Citra innsbruck.ppng yang telah diberi (b) Filter median


ian 3 x 3
derau garam dannm merica, σ = 10

(c) Filter me
median 5 x 5 (d) Filter median
an 9 x 9

Gambar 11.29Efek
ek penghilangan derau impuls menggunakan
an filter median

Contoh berikutt merupakan


m perwujudan untuk melakukan pe
penapisan dengan
filter median.

Program : filmed.m

function [G] = filmed(F, ukuran)


% FILMED Melaku
ukan penghilangan derau dengan
% menggunak
kan filter median.
% F = Citra
a berskala keabuan
% ukuran = ukuran jendela
% orde = or
rde filter
% G = Citra
a hasil pemrosesan
Restorasi Citra 543

if nargin < 2
ukuran = 3;
end

[m, n] = size(F);

setengah = floor(ukuran / 2);


F = double(F);
G = zeros(m-2*setengah, n-2*setengah);
Nilai = zeros(1,ukuran * ukuran);

for i=1+setengah : m-setengah


for j=1+setengah: n-setengah
indeks = 1;
for p = -setengah : setengah
for q = -setengah : setengah
Nilai(indeks) = F(i+p, j+q);
indeks = indeks + 1;
end
end

indeks = indeks - 1; % jumlah data

% Urutkan data pada array Nilai


for p = 2: indeks
x = Nilai(p);

% Sisipkan x ke dalam data[1..p-1]


q = p - 1;
ketemu = 0;

while ((q >= 1) && (~ketemu))


if (x < Nilai(q))
Nilai(q+1) = Nilai(q);
q = q - 1;
else
ketemu = 1;
end

Nilai(q+1) = x;
end
end

% Gunakan nilai median


G(i-setengah, j-setengah) = …
Nilai(floor(ukuran * ukuran/2) + 1);
end
end
544 Pengolahan Citra Teori dan Aplikasi

G = uint8(G);

Akhir Program

Contoh penggunaan fungsi filmed:

>> Img=imread('C:\Image\innsbruck.png');
>> G=drimpuls(Img, 0.01); imshow(G)
>> K=filmed(G); imshow(K);
>>

Ukuran jendela dapat ditentukanseperti berikut:

>> K=filmed(G, 5);

Pada contoh di atas, ukuran jendela adalah 5 x 5.


Contoh filter median pada citra yang tidak diberi derau dapat dilihat pada
Gambar 11.30. Tampak bahwa tekstur agak melembut. Sebagai akibatnya, detail
pada citra agak tersamarkan.
Restorasi Citra 545

(a) Citra boneka.png

(b) Filter median 3 x 3

Gambar 11.30Efek filter median pada citra yang tidak diberi derau

11.4.7 Filter Max

Filter maxatau filter maksimum adalah filter yang mencari nilai tertinggi
pada jendela dan menggunakannya sebagai nilai untuk citra keluaran. Rumusnya
sebagai berikut:
546 Pengolahan Citra Teori
Te dan Aplikasi

K D, 1 = c 1 P,Q ∈STU ,O (11.28)

Filter max berguna


ber untuk mendapatkan bagian cerah pad
ada citra. Sebagai
akibatnya, dengann menggunakan filter ini, derau merica dapat
disingkirkan.Sebagai
ai contoh, perhitungan pada filter max diberika
kan pada Gambar
11.31.

g Kf
x x

7 5 7
y 3 2 6 y 7
1 4 7

Bilangan
terbesar

Gambar 11.31Ilustrasi filter max

Contoh berikutt merupakan


m perwujudan untuk melakukan pe
penapisan dengan
filter max.

Program : filmax.m

function [G] = fi
ilmax(F, ukuran)
% FILMAX Melakuka
an penghilangan derau dengan
% menggunakan
n filter max.
% F = Citra berskala
b keabuan
% ukuran = uk
kuran jendela
% orde = orde
e filter
% G = Citra hasil
h pemrosesan

if nargin < 2
ukuran = 3;
end

[m, n] = size(F);
;
Restorasi Citra 547

setengah = floor(ukuran / 2);


G = zeros(m-2*setengah, n-2*setengah);

for i=1+setengah : m-setengah


for j=1+setengah: n-setengah
maks = 0;
for p = -setengah : setengah
for q = -setengah : setengah
if F(i+p,j+q) > maks
maks = F(i+p,j+q);
end
end
end

G(i-setengah, j-setengah) = maks;


end
end

G = uint8(G);

Akhir Program

Contoh penggunaan fungsi filmax:

>> Img=imread('C:\Image\innsbruck.png');
>> G=drimpuls(Img, 0.01);
>> K=filmax(G); imshow(K);
>>

Ukuran jendela dapat ditentukan seperti berikut:

>> K=filmax(G, 5);

Pada contoh di atas, ukuran jendela adalah 5 x 5.


Efek filter maxterhadap citra yang mengandung derau garam dan merica
diperlihatkan pada Gambar 11.32.Penerapan filter max terhadap citra yang tidak
diberi efek derau ditunjukkan pada Gambar 11.33.
548 Pengolahan Citra Teori dan Aplikasi

(a) Citra innsbruck.png yang telah diberi (b) Filter max 3 x 3


derau garam dan merica, σ = 10

(c) Filter max 5 x 5 (d) Filter i 9 x 9

Gambar 11.32 Efek filter max pada citra yang diberi


derau impulsif (garam dan merica)
Restorasi Citra 549

(a) Citra boneka.png

Warna hitam
berkurang

(b) Filter max 3 x 3

Gambar 11.33Efek filter max pada citra yang tidak diberi derau
550 Pengolahan Citra Teori
Te dan Aplikasi

11.4.8 Filter Min

Filter minatau
au filter minimum adalah filter yang mencar
ari nilai terendah
pada jendela dan men
enggunakannya sebagai nilai untuk citra kelu
luaran. Rumusnya
sebagai berikut:

K D, 1 = cB! P,Q ∈STU ,O (11.29)

Filter min bergunaa untuk mendapatkan bagian tergelap dalam


am citra. Sebagai
hasilnya, dengan men
enggunakan filter ini, derau garam dapat disin
ingkirkan.Sebagai
contoh, perhitungan ppada filter min ditunjukkan pada Gambar 11.3
.34.

g fK
x x

7 5 7
y 3 2 6 y 1
1 4 7

Bilangan
terkecil

Gambar 11.34 Ilustrasi filtermin

Contoh berikutt merupakan


m perwujudan untuk melakukan pe
penapisan dengan
filter min.

Program : filmin.m

function [G] = fi
ilmin(F, ukuran)
% FILMIN Melakuka
an penghilangan derau dengan
% menggunakan
n filter min.
% F = Citra berskala
b keabuan
% ukuran = uk
kuran jendela
Restorasi Citra 551

% orde = orde filter


% G = Citra hasil pemrosesan

if nargin < 2
ukuran = 3;
end

[m, n] = size(F);

setengah = floor(ukuran / 2);


G = zeros(m-2*setengah, n-2*setengah);

for i=1+setengah : m-setengah


for j=1+setengah: n-setengah
terkecil = 255;
for p = -setengah : setengah
for q = -setengah : setengah
if terkecil > F(i+p,j+q)
terkecil = F(i+p,j+q);
end
end
end

G(i-setengah, j-setengah) = terkecil;


end
end

G = uint8(G);

Akhir Program

Contoh penggunaan fungsi filmin:

>> Img=imread('C:\Image\boneka.png');
>> K=filmin(Img); imshow(K);
>>

Hasilnya ditunjukkan pada Gambar 11.35.


Ukuran jendela dapat ditentukan seperti berikut:

>> K=filmin(G, 5);


552 Pengolahan Citra Teori dan Aplikasi

(a) Citra boneka.tif


Warna hitam
bertambah

(b) Filter min 3 x 3

Gambar 11.35Efek filter min pada citra yang tidak diberi derau
Restorasi Citra 553

11.4.9 Filter Titik-Te


Tengah

Filter titik-ten
engah (midpoint filter) adalah filter yang menc
encari nilai tengah
pada jendela dan me
menggunakannya sebagai nilai keluaran. Filt
ilter cocok untuk
menangani derau Gau
aussian ataupun uniform. Rumusnya sebagai berikut:
b

L&3 Z,[ ∈\TU d] P,Q eELfM Z,[ ∈\TU d] P,Q e


K D, 1 = (11.30)

Sebagai contoh, perh


erhitungan pada filtertitik tengah ditunjukkan
an pada Gambar
11.36.

g Kf
x x

7 5 7
y 3 2 6 y 4
1 4 7

Maks
aksimum = 7

Minim
inimum = 1

Titik
itik tengah
t = (maksimum + minimum) / 2 = 4

G
Gambar 11.36Ilustrasi filter titik tengah

Contoh berikutt merupakan


m perwujudan untuk melakukan pe
penapisan dengan
filter titik tengah.

Program : filmid.m
554 Pengolahan Citra Teori dan Aplikasi

f function [G] = filmid(F, ukuran)


% FILMID Melakukan penghilangan derau dengan
% menggunakan filter titik tengah.
% F = Citra berskala keabuan
% ukuran = ukuran jendela
% orde = orde filter
% G = Citra hasil pemrosesan

if nargin < 2
ukuran = 3;
end

[m, n] = size(F);

setengah = floor(ukuran / 2);


G = zeros(m-2*setengah, n-2*setengah);

for i=1+setengah : m-setengah


for j=1+setengah: n-setengah
terkecil = 255;
terbesar = 0;
for p = -setengah : setengah
for q = -setengah : setengah
if terkecil > F(i+p,j+q)
terkecil = F(i+p,j+q);
end

if terbesar < F(i+p,j+q)


terbesar = F(i+p,j+q);
end
end
end

G(i-setengah, j-setengah) = round(...


(terbesar + terkecil) / 2);
end
end

G = uint8(G);

Akhir Program

Contoh penggunaan fungsi filmid:

>> Img=imread('C:\Image\innsbruck.png');
>> G=drgaussian(Img, 10);
>> K=filmid(G,3,2); imshow(K);
>>
Restorasi Citra 555

Ukuran jendela dapat ditentukanseperti berikut:

>> K=filmid(G, 5);

Pada contoh di atas, ukuran jendela adalah 5 x 5.


Efek filter titik tengah diperlihatkan pada Gambar 11.37.

(a) Citra innsbruck.png yang telah (b) Filter titik tengah 3 x 3


diberi derau Gaussian, σ = 10

(c) Filter titik tengah 5 x 5 (d) Filter titik tengah 9 x 9

Gambar 11.37Contoh efek filter titik tengah

11.5 Penghilangan Derau di Kawasan Frekuensi

Derau periodisdapat dihilangkan atau dikurangi dengan menggunakan


penapisan di kawasan frekuensi. Dalam hal ini, filter yang dapat digunakan yaitu
band-reject, band-pass, dan notch (Gonzalez dan Woods, 2002). Namun, dari
ketiga filter tersebut, filter notch mempunyai karakteristik yang menarik, karena
556 Pengolahan Citra Teori dan Aplikasi

dapat dipakai untuk menghapus derau periodis pada citra. Filter notch berguna
untuk menolak atau meloloskan frekuensi-frekuensi pada suatu frekuensi pusat.
Filter ini sebenarnya adalah filter band-reject yang memiliki pita sempit (bentuk
filter band-reject ditunjukkan pada Gambar 11.38).
Amplitudo

Amplitudo
Frekuensi Frekuensi

(b) Filter band-reject (a) Filter band-pass


Gambar 11.38Filter band-reject dan filter band-pass

Derau yang bersifat berulang seringkali terlihat sebagai bintik yang cerah
pada citra kawasan frekuensi dibandingkan pada citra aslinya. Sebagai contoh
dapat dilihat pada Gambar 11.39(d), yang ditandai dengan lingkaran merah. Nah,
apabila bintik-bintik seperti itu dihilangkan, derau pun akan tereduksi. Hal itu
ditunjukkan pada Gambar 11.39(e).
Restorasi Citra 557

(a) Citra absam.png (b) Spektrum citra absam.png

(c) Citra diberi derau periodis (d) Bintik cerah

(e) Hasil penapisan (f) Bintik cerah dihapus

Gambar 11.39Ilustrasi penghilangan derau periodis di kawasan frekuensi

Fungsi bernama filnotch berikut berguna untuk mendapatkan fungsi


transfer yang akan melakukan penghapusan pada frekuensi tertentu.
558 Pengolahan Citra Teori
Te dan Aplikasi

Program : filnotch.m

function H = filnnotch(a, b, d0, x, y, n)


% FILNOTCH Digun nakan untuk memperoleh fungsi transfe
er
% filter notchh
% Masukan:
% a = tinggii
% b = lebar
% d0 - menenntukan frekuensi yang akan dihapus
% n = orde filter
f
% Keluaran:
% H - Fungsi transfer
t filter notch
% ------------------------------------------------

% Menentukan n ka
alau n tidak disebutkan
if nargin < 6
n = 1;
end

% Menentukan jang
gkauan frekuensi u dan v
u = 0:(a - 1);
v = 0:(b - 1);

% Hitung indeks untuk


u meshgrid
idx = find(u > b/
/2);
u(idx) = u(idx) - b;
idy = find(v > a/
/2);
v(idy) = v(idy) - a;

% Peroleh array meshgrid


m
[V, U] = meshgrid
d(v, u);

% Hitung jarak D(
(v,u)
D = sqrt(V.^2 + U.^2);
U

% Hitung fungsi transfer


t filter lolos-rendah
% dengan mengg
gunakan Butterworth
Hlpf = 1./(1 + (D
D./d0) .^ (2*n));

% Peroleh fungsi transfer filter lolos-tinggi


Hhpf = 1 - Hlpf;

% Lakukan pengges
seran secara melingkar
H = circshift(Hhp
pf, [y-1 x-1]);

Akhir Program
Restorasi Citra 559

Contoh pengg
ggunaan fungsi filnotch:

>> filnotch(
(5,5,10,1, 160)
ans =
0.009901 0.019608 0.047619 0.047619 0.019608
0.038462 0.047619 0.074074 0.074074 0.047619
0.038462 0.047619 0.074074 0.074074 0.047619
0.009901 0.019608 0.047619 0.047619 0.019608
0.000000 0.009901 0.038462 0.038462 0.009901

>>

Pada contoh di atas,

ukuran fungsi
si transfer yang dihasilkan berukuran 5x5 (nil
nilai aktual berupa
ukuran citra ya
yang telah diperluas di bagian kanan dan bawa
wah);
radius frekuen
ensi sebesar 10;
posisi x sebe
besar 1 dan posisi y sebesar 160, yang menyatakan
me pusat
frekuensi.

Dengan berbekal
al filter notch, penghapusan derau periodis dilakukan
di dengan
cara seperti yang ditu
tunjukkan pada skrip berikut.

Program : filterper.m

% FILTERPER Mengu
urangi derau periodis.
% Spesifik pa
ada citra absam dengan
% tambahan de
erau seperti terlihat di bawah ini.

close all;
\Image\absam.png');
Img = imread('C:\
[a, b] = size(Img
g);

% Kenakan derau vertikal


v dan horizontal
CitraBerderau = drperiodik(Img,10,1,10000000);
d
560 Pengolahan Citra Teori dan Aplikasi

CitraBerderau = drperiodik(CitraBerderau,10,100000,-1);

% Tampilkan citra yang berderau


figure, imshow(CitraBerderau);

% Menentukan ukuran baru untuk perluasan citra


r = nextpow2(2 * max(a, b));
p = 2 ^ r;
q = p;

% Buat filter notch


H1 = filnotch(p, q, 10, 1, 165);
H2 = filnotch(p, q, 10, 165, 1);
H3 = filnotch(p, q, 10, 1, 860);
H4 = filnotch(p, q, 10, 862, 1);

% Hitung FFT
F = fft2(double(CitraBerderau),p,q);

% Kenakan keempat filter notch


F_frek = F .* H1 .* H2 .* H3 .* H4;

% Ubah ke kawasan spasial


F_hasil = real(ifft2(F_frek));

% Buang tambahan pada baris dan kolom


F_hasil = F_hasil(1:size(CitraBerderau,1), ...
1:size(CitraBerderau,2));
figure, imshow(F_hasil,[]);

% Tampilkan citra berderau


Fc=fftshift(F);
Fcf=fftshift(F_frek);

% Menampikan spektrum citra asli dan citra hasil penapisan


S1=log(1+abs(Fc));
S2=log(1+abs(Fcf));
figure, imshow(S1,[])
figure, imshow(S2,[])

Akhir Program

Kunci penghilangan derau periodis terletak pada kode berikut:

H1 = filnotch(p, q, 10, 1, 165);


H2 = filnotch(p, q, 10, 165, 1);
H3 = filnotch(p, q, 10, 1, 860);
H4 = filnotch(p, q, 10, 862, 1);
Restorasi Citra 561

Dalam hal ini, p dan q menyatakan tinggi dan lebar citra setelah diperluas.
Berdasarkan keempat fungsi transfer tersebut, konvolusi pada kawasan frekuensi
dilakukan melalui:

F_frek = F .* H1 .* H2 .* H3 .* H4;

Nah, yang menjadi perhatian di sini adalah: “Bagaimana menentukan nilai


koordinat frekuensi pada H1 hingga H4?” Jawabannya, pusat frekuensi masing-
masing diperoleh dengan menentukan letak bintik cerah yang ditandai dengan
lingkaran merah pada Gambar 11.39(d). Untuk menentukan lokasi frekuensi
tersebut, peranti pada jendela yang dihasilkan imshow dapat dimanfaatkan.
Caranya, pada MATLAB, letakkan penunjuk mouse ke ikon yang ditunjukkan
pada Gambar 11.40. Selanjutnya, klik pada bintik cerah yang lokasinya ingin
diketahui. Langkah ini akan memunculkan tampilan semacam berikut:

. Lalu, catatlah nilai X dan Y-nya. Kemudiaan, lakukan


pula pencatatan frekuensi (0,0) yang terletak di tengah. Catat pula nilai X dan Y-
nya. Pada Octave, letakkan penunjuk mouse pada bintik cerah. Dengan sendirinya,
nilai X dan Y ditampilkan di bagian bawah.
562 Pengolahan Citra Teori dan Aplikasi

Gambar 11.40Ikon untuk memulai pencarian lokasi bintik cerah

Perhitungan selanjutnya yang perlu dilakukan adalah dengan


memperhatikan letak kuadran dari bintik cerah. Perhatikan Gambar 11.41. Apabila
bintik cerah berada di Kuadran I, perhitungan untuk mendapatkan pusat frekuensi
sebagai berikut:

1̅ = 1 − 1h, Di = D + (11.31)

Perhitungan untuk mendapatkan pusat frekuensi di kuadran II sebagai berikut:

1̅ = 1 − 1h, Di = D − Dh (11.32)

Perhitungan untuk mendapatkan pusat frekuensi di kuadran III sebagai berikut:

1̅ = 1 + O Di = D − Dh (11.33)
Restorasi Citra 563

Perhitungan untuk mendapatkan pusat frekuensi pada kuadran IV sebagai berikut:

1̅ = 1 + O Di = D + (11.34)

Kuadran IV Kuadran I

(x4,y4) Frekuensi
(x4,y3) (0,0)

Kuadran III (x0,y0) Kuadran II


p

(x2,y2)
(x1,y1)
Bintik cerah

Gambar 11.41Kuadran penentuan pusat frekuensi bintik cerah

11.6 Filter Inversi

Sebagaimana telah diketahui, pada kawasan frekuensi, suatu citra ditapis


dengan menggunakan rumus seperti berikut:

j = k. F (11.35)

Dalam hal ini, G adalah hasil penapisanpada DFT, F adalah DFT citra asal, dan H
adalah DFT filter. Secara matematis, Persamaan 11.35 dapat ditulis menjadi

k = j/F (11.36)

Persamaan di atas menyatakan bahwa apabila G dan H diketahui, F dapat


dihitung. Namun, dalam praktik, apakah persamaan seperti itu bermakna? Untuk
mengetahui jawabannya, cobalah untuk mempraktikkan perintah-perintah berikut:
564 Pengolahan Citra Teori dan Aplikasi

>>inversi('C:\Image\pantai.png',0.3);
>>

Angka 0.3 pada perintah di atas dipakai untuk mengatur ambang frekuensi pada
penapisan dengan filter lolos-rendah Butterworth. Hasilnya ditunjukkan pada
Gambar 11.42. Gambar 11.42(c) menunjukkan bahwa dengan menggunakan filter
inversi dimungkinkan untuk mendapatkan citra asli dengan hasil yang bagus.
Namun, jika ambang frekuensi diubah menjadi 0,1, hasilnya menjadi tidak cocok
lagi (Gambar 11.42(e)) meskipun citra hasil penapisan lolos-rendah masih terlihat
bagus. Hal inilah yang mengisyaratkan bahwa penggunaan filter inversi terlalu
riskan. Kegagalan seperti pada Gambar 11.42(e) terjadi manakala terdapat
elemen-elemen di dalam matriks Butterworth yang bernilai sangat kecil.
Karena bersifat sebagai pembagi, nilai yang sangat kecil akan menimbulkan hasil
berupa nilai yang sangat besar, yang akan mendominasi keluaran.
Restorasi Citra 565

(a) Citra pantai.png (b) Hasil penapisan dengan ambang


frekuensi = 0,3

(c) Hasil filter inversi gambar b

(d) Hasil penapisan dengan ambang (e) Hasil filter inversi gambar d
frekuensi = 0,15

Gambar 11.42Gambaran filter inversi

Perlu diketahui, kode fungsi inversi adalah seperti berikut.


566 Pengolahan Citra Teori
Te dan Aplikasi

Program : inversi.m

function [Fb] = inversi(berkas,


i d)
% INVERSI Digunak
kan untuk melihat efek inversi
% penapisan citra
c pada kawasan frekuensi.
% Argumen ber
rkas adalah nama berkas yang diuji,
% sedangkan d menentukan ambang frekuensi.

Img=imread(berkas
s);
[a,b] = size(Img)
);

% Peroleh ukuran untuk kepentingan perluasan citra


r = nextpow2(2 * max(a, b));
p = 2 ^ r;
q = p;

% Proses untuk me
emperoleh citra yang ditapis
Ff = fft2(Img,p,q
q);
H = fillrb(Img, d,
d 2);
Fh = Ff .* H;

Fa = abs(ifft2(Fh
h));
Fa=uint8(255*mat2
2gray(Fa));
Fa = Fa(1:a, 1:b)
);

% Menggunakan cit
tra yang ditapis untuk kepentingan in
nversi
Fi = fft2(Fa,p,q)
) ./ H;
Fb = abs(ifft2(Fi
i));
Fb=uint8(255*mat2
2gray(Fb));
Fb = Fb(1:a, 1:b)
);

% Tampilkan citra
a asli dan hasil pemrosesan
close all;
figure, imshow(Im
mg);
figure, imshow(Fa
a);
figure, imshow(Fb
b);

Akhir Program

Fungsi inversi meme


merlukan fungsi lain yaitu fillrb, yang kodenya
k seperti
berikut.
Restorasi Citra 567

Program : fillrb.m

function H=fillrb
b(F, d0, n)
% FILLRB Digunaka
an untuk membentuk fungsi transfer
% filter lolos
s-rendah Butterworth.
% F = citra be
erskala keabuan
% d0 = ambang frekuensi (0 s/d 1)
% n = orde fil
lter

[a, b] = size(F);
; %Peroleh ukuran citra

% Menentukan ukur
ran baru untuk perluasan citra
r = nextpow2(2 * max(a, b));
p = 2 ^ r;
q = p;

% Menentukan jang
gkauan frekuensi u dan v
u = 0:(p - 1);
v = 0:(q - 1);

% Hitung indeks untuk


u meshgrid
idx = find(u > q/
/2);
u(idx) = u(idx) - q;
idy = find(v > p/
/2);
v(idy) = v(idy) - p;

% Peroleh array meshgrid


m
[V, U] = meshgrid
d(v, u);

% Hitung jarak D(
(v,u)
D = sqrt(V.^2 + U.^2);
U

% Menentukan n ka
alau n tidak disebutkan
if nargin == 2
n = 1;
end

ambang = d0 * p; % Hitung frekuensi ambang


H = exp(-(D.^2) ./
. (2 * ambang ^ 2));

Akhir Program

11.7Filter Wiener

Contoh padaa filter inversi di depan mengabaikan derau


au. Apabila derau
disertakan, Persamaan
aan 11.35 perlu diubah menjadi

j = k. F + l (11.37)
568 Pengolahan Citra Teori dan Aplikasi

dengan D adalah derau. Selanjutnya, persamaan di atas dapat ditulis menjadi

m%n
k= o
(11.38)

Persamaan di atas menunjukkan bahwa persoalan untuk mendapatkan citra asli


tidak hanya melibatkan permasalahan pembagian dengan filter H tetapi juga
permasalahan untuk mengatasi derau. Kenyataannya, derau dapat membuat filter
inversi tidak berguna manakala derau mendominasi keluaran.
Untuk mengurangi sensitivitas derau pada filter inversi, berbagai
pendekatan untuk melakukan restorasi citra telah dilakukan. Secara umum,
pendekatan tersebut dinamakan sebagai filter least square. Salah satu filter yang
tergolong sebagai filter least square yaitu filter Wiener atau terkadang disebut
sebagai filter minimum mean square error.
Filter Wiener yang diusulkan pertama kali oleh N. Wiener pada tahun 1942
dilaksanakan dengan meminimumkan kesalahan kuadrat rerata antara citra ideal
dan citra terestorasi. Apabila f adalah citra ideal dan fK adalah citra terestorasi,
kesalahan kuadrat reratanya berupa

pq9 = 9r B, A − K B, A s ≈ tu ∑t
fw ∑vw
u
B, A − K B, A (11.39)

dengan M adalah tinggi citra dan N adalah lebar citra. Solusi atas problem di atas
dikenal dengan nama filter Wiener. Dalam kawasan frekeuensi, solusi untuk filter
Wiener berupa (McAndrew, 2004):

{ k|
|o f,v |
k B, A ≈ xo f,v |o f,v | Ez
B, A (11.40)

dengan K adalah suatu konstanta. Nilai konstanta tersebut dipakai untuk


melakukan hampiran terhadap derau. Sebagai contoh, jika varians (σ2) derau
diketahui, K dapat diisi dengan σ2. Jika varians tidak diketahui, nilai K harus
dicoba-coba untuk mendapatkan hasil yang terbaik.
Restorasi Citra 569

DiOctave, Pe
Persamaan 11.40dapat dihitung dengan mudah.
m Contoh
ditunjukkan pada skri
krip berikut.

Program : filwien.m

function [Fb] = filwien(berkas,


f d, k)
% FILWIEN Digunakkan untuk melihat efek filter Wiener
% Argumen berrkas adalah nama berkas yang diuji,
% d menentukaan ambang frekuensi, dan k adalah
% kosntanta.

Img=imread(berkas
s);
[a,b] = size(Img)
);

% Peroleh ukuran untuk kepentingan perluasan citra


r = nextpow2(2 * max(a, b));
p = 2 ^ r;
q = p;

% Proses untuk me
emperoleh citra yang ditapis
Ff = fft2(Img,p,q
q);
H = fillrb(Img, d,
d 2);
Fh = Ff .* H;

Fa = abs(ifft2(Fh
h));
Fa=uint8(255*mat2
2gray(Fa));
Fa = Fa(1:a, 1:b)
);

% Menggunakan cit
tra yang ditapis untuk kepentingan in
nversi
Fi = fft2(Fa,p,q)
) .* abs(H).^2 ./ (abs(H) .^ 2 + k) .
./ H;
Fb = abs(ifft2(Fi
i));
Fb=uint8(255*mat2
2gray(Fb));
Fb = Fb(1:a, 1:b)
);

% Tampilkan citra
a asli dan hasil pemrosesan
close all;
figure, imshow(Im
mg);
figure, imshow(Fa
a);
figure, imshow(Fb
b);

Akhir Program

Skrip di atass adalah hasil modifikasi atas inversi.m. Per


erbedaan pertama
terletak pada keberada
adaan argumen k. Perbedaan kedua terletak pad
ada pernyataan

Fi = fft2(Fa
a,p,q) .* abs(H).^2 ./ (abs(H) .^ 2 + k) ./ H;
570 Pengolahan Citra Teori
Te dan Aplikasi

Pernyataan di atas ada


dalah implementasi Persamaan 11.40.
Contoh pengg
ggunaan fungsi filwien ditunjukkan di bawaah ini:

>> filwien
n('C:\Image\pantai.png',0.17, 1);
1

Perhatikan bahwa den


engan menggunakan nilai 0.17, filter inversii gagal
g melakukan
restorasi, tetapi filterr Wiener dapat melakukan restorasi.

11.8 Ukuran Keberh


rhasilan Penghilangan Derau

Pengamatan bbaik tidaknya suatu pendekatan untuk mela


elakukan restorasi
citra biasa dilakukann dengan menggunakan mata. Namun, cara se
seperti itu bersifat
subjektif. Agar biasa
sa diukur secara kuantitatif, keberhasilan pen
enghilangan derau
dapat dilakukan denga
gan menggunakan

pq9 = ∑t
f
fw ∑u
vw & B, A − 5 B, A
tu
(11.41)

Dalam hal ini, fa adal


alah citra sebelum terkena derau dan fb adalah
ah citra yang telah
direstorasi. Semakinn kecil
k nilai MSE, kinerja restorasi citra semaki
akin baik.
Contoh beriku
kut adalah implementasi untuk menghitung MS
SE.

Program : msecitra.m

function [nilai] = msecitra(F1, F2)


% MSECITRA Diguna
akan untuk menghitung MSE (mean squar
re error)
% citra F1 da
an F2.

[a1, b1] = size(F


F1);
[a2, b2] = size(F
F2);

if (a1 == a2) || (b1 == b2)


Fa = double(F
F1); Fb = double(F2);
else
deltaA = abs(
(a1-a2);
deltaB = abs(
(b1-b2);
if rem(deltaA
A,2)==1 || rem(deltaB,2)==1
Restorasi Citra 571

error('Ukuran kedua citra tidak cocok');


end

deltaA = abs(floor((a1-a2) / 2));


deltaB = abs(floor((b1-b2) / 2));

if (a1-a2 > 0) && (b1-b2 > 0)


m = a2; n = b2;
Fa = double(F1(1+deltaA:a1-deltaA, …
1+deltaB:b1-deltaB));
Fb = double(F2);
else
m = a1; n = b1;
Fa = double(F1);
Fb = double(F2(1+deltaA:a2-deltaA, …
1+deltaB:b2-deltaB));
end
end

nilai = 0;
for i=1 : m
for j=1 : n
nilai = nilai + (Fa(i,j) - Fb(i,j))^2;
end
end

nilai = nilai / (m * n);

Akhir Program

Berikut adalah contoh untuk menghitung MSE citra asli dan citra hasil restorasi:

>> Img=imread('C:\Image\pantai.png');
>> G=drgaussian(Img,3,10);
>> K=filarithmean(G,3);
>> msecitra(Img,K)
ans =140.39
>>

Contoh di atas digunakan untuk merestorasi citra pantai.png yang dikenai derau
Gaussian dengan jendela 3 x 3 dan σ = 10. Selanjutnya, citra yang ternau derau
tersebut ditapis dengan filter rerata aritmetik. Hasilnya (K) dibandingkan dengan
citra asli (Img).
572 Pengolahan Citra Teori dan Aplikasi

Latihan

1. Jelaskan perbedaan antara peningkatan citra dengan restorasi citra.

2. Sebutkan empat jenis derau menurut kelas dan berikan penjelasan secara
singkat masing-masing.

3. Gambarkan fungsi kerapatan probabilitas untuk derau-derau berikut.

(a) Derau Gaussian

(b) Derau eksponensial negatif

(c) Derau Gamma

(d) Derau Raylight

4. Apa yang disebut dengan derau-derau berikut?

(a) Derau “Garam dan Merica”

(b) Derau periodis.

5. Gonzalez dan Wood mendefinisikan derau Gamma sebagai berikut

&2 3 2 4
1 = %&3
5% !

Adapun Myler dan Weeks mendefinisikan sebagai:

1 α%
1 = %3/&
α−1 ! α

Tunjukkan bahwa kedua rumus tersebut sebenarnya sama saja.

6. Jelaskan bahwa derau eksponensial merupakan bentuk khusus untuk derau


Gamma, yakni jika b = 1.
Restorasi Citra 573

7. Tunjukkan bahwa pernyataan berikut benar, “Filter Wiener tidak lain adalah
filter inversi jika K pada Persamaan 11.40 berupa nol”. Buktikan pula dengan
memberikan nilai K sama dengan nol pada saat menguji filtrwien.

8. Berikan derau Gaussian pada citra boneka.png dengan σ = 10 dan ukuran


jendela 3 x 3. Kemudian, cobalah hilangkan derau dengan menggunakan filter
median, max, min, titik tengah, rerata aritmetik, dan rerata Yp. Manakah yang
terbaik berdasarkan ukuran MSE?

9. Jelaskan bahwa pemanggilan

msecitra(Img,K)

dan

msecitra(K,Img)

memberikan hasil yang sama.


574 Pengolahan Citra Teori dan Aplikasi
BAB 12
Ekstraksi
Fitur Bentuk dan
Kontur

Setekah bab ini berakhir, diharapkan pembaca


mendapatkan berbagai bahasan yang berhubungan
dengan pemerolehan fitur bentuk dan kontur serta mampu
mempraktikkannya.
Ekstraksi fitur
Tanda-tangan Kontur
DeskriptorFourier
Sifat bundar
Convex hull dan soliditas
Momen spasial dan momen pusat
Momen invariant
Momen jarak ke pusat
Momen Zernike
Polar Fourier Transform
Kotak pembatas
576 Pengolahan Citra Teori dan Aplikasi

12.1 Pengantar EkstraksiFitur


Beberapa fitur berdasarkan bentuk dan kontur telah dibahas pada Bab 8.
Sebagai contoh, fitur kekompakan diperoleh melalui perimeter dan luas objek.
Beberapa fitur lain yang telah dikupas antara lain berupa dispersi dan
kerampingan.
Pada bab ini, beberapa fitur lain yang terkait dengan bentuk dan kontur
akan dibahas. Fitur-fitur yang dimaksud antara lain tanda tangan kontur,
deskriptorFourier, dan momen Zernike. Namun, sebelum membahas fitur-fitur
tersebut, dua pengertian dasar akan dibahas, yaitu bentuk, deskriptor dan fitur.
Definisi bentuk menurut D.G. Kendall (Stegmann dan Gomez, 2002) adalah
infomasi geometris yang tetap ketika efek lokasi, skala, pemutaran dilakukan
terhadap sebuah objek (lihat Gambar 12.1). Deskriptoradalah seperangkat
parameter yang mewakili karakteristik tertentu objek, yang dapat digunakan untuk
menyatakan fitur objek. Adapun fitur dinyatakan dengan susunan bilangan yang
dapat dipakai untuk mengidentifikasi objek.

Gambar 12.1Objek yang sama melalui efek penyekalaan (b),


translasi (c), dan pemutaran (d)

Fitur-fitur suatu objek mempunyai peran yang penting untuk berbagai


aplikasi berikut.

1. Pencarian citra: Fitur dipakai untuk mencari objek-objek tertentu yang berada
di dalam database.
Pemerolehan Fitur Bentuk dan Kontur 577

2. Penyederhanaan dan hampiran bentuk: Bentuk objek dapat dinyatakan dengan


representasi yang lebih ringkas.
3. Pengenalan dan klasifikasi: Sejumlah fitur dipakai untuk menentukan jenis
objek. Sebagai contoh, fitur citra daun digunakan untuk menentukan nama
tanaman.

Untuk kepentingan aplikasi yang telah disebutkan, fitur hendaknya efisien.


Fitur yang efisien perlu memenuhi sifat-sifat penting berikut (Mingqiang, dkk.,
2008).

1. Teridentifikasi: Fitur berupa nilai yang dapat digunakan untuk membedakan


antara suatu objek dengan objek lain. Jika kedua fitur tersebutdidampingkan,
dapat ditemukan perbedaan yang hakiki. Hal ini sama seperti kalau dilakukan
oleh manusia secara visual.
2. Tidak dipengaruhi oleh translasi, rotasi, dan penyekalaan: Dua objek yang
sama tetapi berbeda dalam lokasi, arah pemutaran, dan ukuran tetap dideteksi
sama.
3. Tidak bergantung padaaffine: Pengertian affine telah dibahas pada Bab 5.
Idealnya, efek affine tidak mempengaruhi fitur.
4. Tahan terhadap derau: Fitur mempunyai sifat yang andal terhadap derau atau
cacat data. Sebagai contoh, daun yang sama tetapi salah satu sedikit robek
tetap dikenali sebagai objek yang sama.
5. Tidak bergantung pada tumpang-tindih: Apabila objek sedikit tertutupi oleh
objek lain, fitur bernilai sama dengan kalau objek itu terpisah.
6. Tidak bergantung secara statistis: Dua fitur harus tidak bergantung satu
dengan yang lain secara statistik.

12.2 Tanda-Tangan Kontur

Tanda-tangan konturdidefinisikan sebagai

= − ̅ + − (12.1)
578 Pengolahan Citra Teori dan Aplikasi

Dalam hal ini, ( , ̅ ) menyatakan pusat massa kontur, yang diperoleh melalui
rumus

= ∑ , = ∑ (12.2)

dengan n=1,2,3,….,N. Ilustrasi tanda-tangan kontur ditunjukkan pada Gambar


12.1.

d(1)
d(2)
d(n) d(3)

d(4)
, ̅

Gambar 12.2Tanda-tangankontur diperoleh dengan mula-mula


menghitung jarak antara pusat massa dan beberapa titik pada kontur

Contoh tanda-tangan empat objek ditunjukkan pada Gambar 12.2.


Gambar 12.2(b) dan 12.2(d) menunjukkan bahwa translasi menghasilkan bentuk
grafik tanda-tangan yang sama. Gambar 12.2(f) menunjukkan bahwa hasil rotasi
membuat bentuk tanda tangan tergeser, sedangkan Gambar 12.2(h) menyatakan
sedikit perbedaan pada objek membuat tanda tangan ikut berubah. Hal ini
menunjukkan bahwa tanda-tangan kontur peka terhadap derau pada tepi objek.
Pemerolehan Fitur Bentuk dan Kontur 579

(a) Citra ikan-1.png (b) Tanda-tangan ikan-1.png

(c) Citra ikan-2.png (d) Tanda-tangan ikan-2.png

(e) Citra ikan-4.png (f) Tanda-tangan ikan-4.png

(g) Citra ikan-5.png (h) Tanda-tangan ikan-5.png

Gambar 12.3 Contoh tanda-tangan empat citra ikan

Dalam praktik, titik-titik yang digunakan untuk memperoleh d(1)


dilakukan dengan memindai kontur dari arah kiri dan atas. Titik pada kontur yang
ditemukan pertama kali akan dipakai untuk menghitung d(1). Langkah
selengkapnya diperlihatkan pada algoritma berikut.
580 Pengolahan Citra Te
Teori dan Aplikasi

ALGORITMA
MA 10.1 – Memperoleh tanda-tangan objek

Masukan:
• f(M,N)
N) : citra biner berukuran M x N

Keluaran:
• jarak sebanyak
s piksel batas

tandatangan((BW):
←inbound_tracing(f)
1. batas←
2. jum← jumlah piksel batas
yp ←pusat massa objek dalam f
3. [xp, yp]
4. FOR pp←1 TO jum
←jarak antara piksel batas (batas(p)) dan
Jarak(p)←
titik pusat massa
END-F
FOR
5. RETUR
URN jarak

Fungsi yangg dapat digunakan untuk memperoleh tanda-tangan


tan dan
menampilkan hasilny
nya ditunjukkan berikut ini.

Program : tandatangan.m

function [Jarak] = tandatangan(BW)


% TANDATANGAN Dig
gunakan untuk memperoleh jarak-jarak antara
% piksel dala
am batas objek dri citra biner BW
% Keluaran: Jarak
J - Berisi sejumlah pasangan Y, X
% yang menyat
takan jarak

[m,n] = size(BW);
;
Batas = double(in
nbound_tracing(BW));

[jum, z] = size(B
Batas);
[pusat_x, pusat_y
y] = centroid(BW);
Pemerolehan Fitur Bentuk dan Kontur 581

Jarak = zeros(1,m);
for p=1 : jum
Jarak(p) = sqrt((Batas(p,1)-pusat_y)^2 + ...
(Batas(p,2)-pusat_x)^2);
end

% Plot jarak
X = 1: p;
plot(X, Jarak);

Akhir Program

Contoh untuk memperoleh tanda-tangan objek yang terdapat pada ikan-


1.png :

>> Img = im2bw(imread('C:\Image\ikan-1.png'), 0.5);


>> X = tandatangan(Img);
>>

Pada contoh di atas, im2bw dipakai untuk mengonversikan dari citra berskala
keabuan ke citra biner. Terakhir, X akan berisi jarak setiap piksel pada kontur dari
titik pusat massa.
Perlu diketahui, tanda-tangan yang telah dibahas di depan mempunyai sifat
yang hanya bebas dari translasi, tetapi tidak bebas dari rotasi ataupun
penyekalaan. Agar fitur yang didapatkan bebas dari rotasi dan penyekalaan, perlu
langkah lebih lanjut. Salah satu cara yang dapat dilakukan adalah dengan
memanfaatkan deskriptor Fourier.

12.3 Deskriptor Fourier

Deskriptor Fourier (Fourier Descriptor / FD) biasa dipakai untuk


menjabarkan bentuk dalam dua dimensi dengan menggunakan transformasi
Fourier. Deskriptor ini pertama kali dibahas pada tahun 1960 oleh Cosgriff
(Nixon dan Aguado, 2002). Dengan menggunakan deskriptorFourier, suatu
bentuk dapat dinyatakan dengan sejumlah bilangan (yaitu koefisien Fourier).
582 Pengolahan Citra Te
Teori dan Aplikasi

Berbagai aplika
ikasi telah menggunakan deskriptor Fourier,, antara lain oleh
Leon dan Sucar (200
000) untuk mengenali bayangan manusia sert
ertaZhang dan Lu
(2003) yang menggu
gunakannya untuk pencarian bentuk objek m
melalui beberapa
jenis tandatangan ben
entuk objek.
Konsep dasar
ar untuk mendapatkan deskriptor Fourier sangat
sa sederhana.
Pertama-tama, kontu
tur objek perlu didapatkan terlebih dahulu.
lu. Hal ini dapat
dilakukan dengan me
memanfaatkan fungsi inbound_tracing yang dibahas di
Bab 8. Selanjutny
nya, piksel-piksel di kontur tersebut di
ditransformasikan
menggunakan FFT. Implementasinya
Im ditunjukkan di bawah ini.

Program : perolehFD.m

function [F] = pe
erolehFD(Kontur)
% PEROLEHFD Mempe
eroleh deskriptor Fourier berdasarkan
n
% kontur suat
tu bentuk.
% Masukan: Ko
ontur = kontur objek
% Keluaran: F = deskriptor Fourier

jum = length(Kont
tur);

% Atur supaya jummlah elemen genap


if rem(jum, 2) === 1
Kontur = [Kont
tur; Kontur(1,:)];
end

% Peroleh bentuk Fourier kontur


K = Kontur(:, 2) - i * Kontur(:,1);
F = fft(K);

Akhir Program

Dasar yangg digunakan untuk memperoleh koefisien


en Fourieradalah
transformasi Fourier berdimensi satu. Transformasi Fourier diskre
kret berupa:

"# $%
= ∑ . exp ! & , = 0,1,2, … , + − 1 (12.3)
Pemerolehan Fitur Bentuk
Be dan Kontur 583

Nah, un dengan n = 0,1,2,..,N-1 dinamakan deskriptorFourier


ier untuk bentuk.
Dalam implementasi
asi di depan, transformasi Fourier dilaks
ksanakan dengan
menggunakan fungsi
si FFT yang disediakan di Octave danMATLAB
B.
Untuk mempra
praktikkan fungsi perolehFD, cobalah perint
intah berikut:

>> Img=im2bw
w(imread('C:\Image\ikan-5.png'), 0.5
5);
>> Kontur=in
nbound_tracing(Img);
>> F = perol
lehFD(Kontur);

Dengan cara sepertii iitu, F berisi koefisien-koefisien Fourier (desk


eskriptor Fourier).
Jumlahnya tentu saja
aja lebih kompak daripada ukuran citra ika
kan-5.png, karena
hanya sebanyak piks
ksel yang berada pada kontur objek. Hal ini ditunjukkan di
bawah ini:

>> length(
(F)
ans =544
>>
>> [m,n]=s
size(Img); m * n
ans =62500
0
>>

Jumlah data pada ccitra sebanyak 62500 buah, sedangkan jumlah


jum deskriptor
Fourier hanya 544.. Nilai
N 544 seperti itu pun masih dapat dikuran
angi. Hal ini akan
dijelaskan belakangan
an.
Koefisien-koe
oefisien yang tercatat dalam F dapat digunakan
di untuk
membentuk kontur ob
objek. Hal itu dapat ditangani oleh fungsi plo
otFD berikut.

Program : plotFD.m

function [] = plo
otFD(F)
% PLOTFD Menampil
lkan kontur berdasarkan deskriptor Fo
ourier.
% Masukan: F = Deskriptor Fourier
584 Pengolahan Citra Te
Teori dan Aplikasi

jum = length(F);
if jum > 0
G = ifft(F); % Transformasi balik
G = [G; G(1)]; % Tambahkan elemen pertama

plot(G);
axis off;
end

Akhir Program

Contoh penggunaan plotFD


p dapat dilihat di bawah ini:

>> plotFD(
(F)

Hasilnya ditunjukkan
an pada Gambar 12.4(b),yang menunjukkan kontur
ko objek.

(a) Cit
Citra asli (b) Hasil melalui deskripto
iptor Fourier

ourier
Gambarr 12.4Gambar kontur melaluideskriptorFou

Dalam praktik
tik, deskriptor sebanyak 544 pada contoh di
d depan terlalu
banyak kalau dijadik
ikan sebagai fitur objek. Oleh karena itu, ju
jumlah fitur yang
perlu dikurangi. Adap
apun cara yang digunakan untuk mereduksi deskriptor
de Fourier
dapat dilihat berikutt ini.
i

Program : fiturFourier.m
Pemerolehan Fitur Bentuk dan Kontur 585

function [G] = fiturFourier(F, n)

% FITURFOURIER Memperoleh fitur Fourier sebanyak n buah.


% Masukan:
% F : Deskriptor Fourier yang lengkap
% n : Jumlah fitur yang dikehendaki
% Keluaran:
% G : Deskriptor Fourier sebanyak n buah

jum = length(F);
if jum > n
K1 = fftshift(F);
delta = round((jum-n) / 2);
K2 = K1(1 + delta : n+delta);
G=ifftshift(K2);
else
G = F;
end

Akhir Program

Kode di atas hanya akan mengubah deskriptor Fourier kalau jumlah


elemen deskriptor semula melebihi jumlah deskriptor yang diminta (n). Pertama-
tama, fungsi fftshift mengubah susunan F menjadi K seperti yang diperlihatkan
pada Gambar 12.5. Selanjutnya,

delta = round((jum-n) / 2);


K2 = K1(1 + delta : n+delta);

digunakan untuk mengambil n elemen pada K1 dimulai dari 1 + delta hingga


n+delta. Hasilnya disusun ulang melalui fungsi ifftshift. Dengan cara seperti itu,
jumlah deskriptor yang semula sebanyakjumditurunkan menjadi n.
586 Pengolahan Citra Teori dan Aplikasi

K1 = fftshift(F) n=4
F K1 delta = (8-4)/2 =2
a + ib m + in 1 + delta
c + id o + ip
e + if q + ir
g + ih s + it
m + in a + ib
o + ip c + id
q + ir e + if
n + delta
s + it g + ih

8 elemen
a + ib q + ir
c + id s + it
q + ir a + ib
s + it c + id

G K2
K1 = ifftshift(F)

Gambar 12.5 Mekanisme penurunan jumlah deskriptor

Cara menggunakan fungsi fiturFourier dan hasil deskriptor yang


didapatkan ditunjukkan di bawah ini:

>> G = fiturFourier(F, 20);


>> plotFD(G)
>>

Contoh hasil pemilihan berbagai jumlah deskriptor Fourier ditunjukkan pada


Gambar 12.6. Sebagai contoh, dengan menggunakan seluruh deskriptor (n = 544),
citra yang dihasilkan adalah kontur objeknya (Gambar 12.6(b)). Manakala jumlah
deskriptor diturunkan menjadi 100, hasil kontur (Gambar 12.6(c)) masih
menyerupai kontur pada Gambar 12.6(a). Namun, gambar kontur akan terus
menjauh dari bentuk aslinya kalau n terlalu kecil.
Pemerolehan Fitur Bentuk dan Kontur 587

(a) Citra ikan-5.png (b) n = 544

(c) n = 100 (d) n = 50

(f) n = 25 (e) n = 20

(g) n = 15 (h) n = 10

Gambar 12.6 Jumlah deskriptor Fourier dan


pengaruh bentuk yang dihasilkan
588 Pengolahan Citra Te
Teori dan Aplikasi

Agar deskript
ptor Fourier mempunyai sifat yang bebas ter
terhadap translasi,
rotasi, penyekalaan,, dan
d letak awal kontur, perlu dilakukan norma
malisasi. Pertama-
tama yang perlu diket
ketahui, kecuali komponen DC (a0), semua koe
oefisien yang lain
tidak dipengaruhi oleh
ol translasi (Zhang, 2002). Oleh karenaa itu, komponen
a0dapat diabaikan. Agar
A bebas dari penyekalaan, semua koefisi
isien perlu dibagi
dengan a0. Selanjutny
tnya, berdasarkan kenyataan bahwa dalam kaw
kawasan frekuensi
ternyata rotasi hany
nya akan menyebabkan perbedaan dalam ffase, maka fase
diabaikan dengan han
anya menggunakan besaran koefisien. Kalauu kkoefisien setelah
pembagian dengan aomenjadibn, |bn| akan menghasilkan bes
esaran koefisien.
Implementasinya Dap
apat dilihat pada fungsi normalisasiFD berikut.
ber

Program : normalisasiFD.m

function [G] = no
ormalisasiFD(F)
% NORMALISASIFD Digunakan
D untuk melakukan normalisasi
i
% agar FD beb
bas dari transalasi, rotasi,
% penyekalaan
n, dan perubahaan titik awal.

G = F;

% Mengatur agar bebas


b terhadap penyekalaan
m = abs(G(1)); % Ambil komponen kedua
G = G ./ m; % Lakukan normalisasi

% Mengatur agar bebas


b rotasi dan perubahan titik awal
l
G = abs(G);

Akhir Program

Hasil
il normalisasiFD tidak dapat digun
unakan untuk
mereko
ekonstruksi kontur.
Pemerolehan Fitur Bentuk
Be dan Kontur 589

Untuk mengam
amati fitur yang dihasilkan dengannormalis
sasiFD, fungsi
amatiFD berikut dap
apat digunakan.

Program : amatiFD.m

function [] = ama
atiFD(berkas)
% AMATIFD Digunak
kan untuk mengamati deskriptor Fourie
er
% yang telah dinormalisasi.

Img = im2bw(imrea
ad(berkas),0.5);
K = inbound_traci
ing(Img);
F = perolehFD(K);
;
G = fiturFourier(
(F,30);
H = normalisasiFD
D(G);
bar(H);

Akhir Program

Contoh pengg
ggunaan fungsi amatiFD:

>>amatiFD(
('C:\Image\guppi-1.png');

Hasil pengamatan ber


erbagai citra diperlihatkan pada Gambar 12.7. Diagram batang
untuk ikan-1.png hingga
hin ikan-5.png menunjukkan bahwa adaa kemiripan pola,
sedangkan diagram batang untuk guppy-1.png menunjukkann ada perbedaan
dengan kelompok iikan-1.png hingga ikan-5.png. Perlu jug
uga diperhatikan,
koefisien paling kir
iri (a0) selalu bernilai 1 karena efek nor
ormalisasi. Itulah
sebabnya, nilai ini dapat
dap diabaikan dalam pembandingan dua objek
jek.
590 Pengolahan Citra Teori dan Aplikasi

(a) Citra ikan-1.png (b) FD ikan-1.png (c) Citra ikan-2.png (d) FD ikan-2.png

(e) Citra ikan-3.png (f) FD ikan-3.png (g) Citra ikan-4.png (h) FD ikan-4.png

(i) Citra ikan-5.png (j) FD ikan-5.png (k) Citra guppi-1.png (l) FD guppi-1.png

Gambar 12.7DeskriptorFourier yang telah dinormalisasi


untuk berbagai bentuk

12.4Sifat Bundar

Sifat bundar (circularity) adalah perbandingan antara rerata jarak


Euclidean dari sentroid terhadap tepi area dan deviasi standar jarak dari sentroid
ke tepi area. Secara matematis, sifat bundar dinyatakan sebagai berikut:

-.
,= (12.4)
/.

Dalam hal ini, µr berupa

01 = ∑ | , − 3 , ̅3 | (12.5)

dan σr berupa
Pemerolehan Fitur Bentuk
Be dan Kontur 591

41 = ∑ 5| , − 3 , ̅3 | − 01 6 (12.6)

Contoh fungsi
gsi berikut dimaksudkan untuk memperoleh fitur
fi sifat bundar.
Fungsi memerlukan masukan
m berupa citra biner.

Program : sifatbundar.m

function [c] = si
ifatbundar(BW)
% SIFATBUNDAR Dig
gunakan untuk memperoleh fitur sifat bundar.
% Masukan: BW
W adalah citra biner.

[px, py] = centro


oid(BW);

[m, n] = size(BW)
);
Kontur = inbound_
_tracing(BW);
% Hapus elemen te
erakhir
Kontur(length(Kon
ntur),:) = [];

jum =length(Kontu
ur);

% Hitung mu
total = 0;
for i=1 : jum
total = tota
al + sqrt( (Kontur(i,1)-py)^2 + ...
(Kontur(i,2)-px)^2);
end

mu = total / jum;
;

% Hitung sigma
total = 0;

for i=1 : jum


total = tota
al + (sqrt( (Kontur(i,1)-py)^2 + ...
(Kontur(i,2)-px)^2) - mu)) ^ 2;
end

sigma = total / jum;


j

c = mu / sigma;

Akhir Program
592 Pengolahan Citra Te
Teori dan Aplikasi

Contoh pemakaian fu
fungsi sifatbundar:
>> Img = im2
2bw(imread('C:\Image\guppi-1.png'), 0.5);
>> c = sifat
tbundar(Img)
c = 0.10620
0
>>
Fungsi im2bw dipe
iperlukan jika citra tidak berupa citra bin
iner. Tabel 12.1
memperlihatkan berba
rbagai objek dan nilai sifat bundarnya.

T
Tabel 12.1Sifat bundar berbagai objek
Objek Nilai Sifat Bundar
ar

0,20595
ikan
an-1.png

0,20595
ikan
an-2.png

0,31363
ikan
an-3.png

0,21497
ikan
an-4.png

0,22230
ikan
an-5.png

0,10620
gupp
ppi-1.png

0,10110

kun
unci.png
Pemerolehan Fitur Bentuk dan Kontur 593

12.5Convex Hull dan Soliditas

Convex hull dengan menggunakan morfologi telah dibahas di Bab


7.Namun, hasilnya belum seperti yang diharapkan. Convex hull yang ideal adalah
seperti karet gelang yang dipasang di tepi objek. Gambar menunjukkan bentuk
konveks dan tidak konveks. Suatu himpunan S di dalam bidang ℜ dinamakan
konveks jika di seluruh pasangan dua titik yang terkandung di dalamnya dibentuk
oleh garis yang seluruhnya berada dalam S. Dengan demikian, Gambar 12.8(b)
bukanlah bentuk konveks karena garis contoh menghasilkan titik di luar objek.

(a) Himpunan konveks (b) Bukan Himpunan konveks

Gambar 12.8Konveks dan bukan konveks

Salah satu algoritma yang digunakan untuk menangani perwujudan convex


hull adalah ‘Graham Scan’. Algoritma ini sangat efisien untuk menangani convex
hull baik untuk kurva tertutup ataupun piksel-piksel yang tersebar secara
individual, berapa pun jumlahnya (Goodrich dan Tamassia, 2002). Kinerjanya
sebesar O(n log n), dengan n adalah jumlah piksel yang akan dilingkupi oleh
sabuk. Tabel 12.2menunjukkan berbagai algoritma yang berhubungan dengan
convex hull. Beberapa algoritma dibahas oleh O’Rourke (1995).
594 Pengolahan Citra Teori dan Aplikasi

Tabel 12.2Berbagai algoritma convex hull


Algoritma Kinerja Penemu
Brute Force O(n4) dan O(n3) Tidak diketahui
Graham Scan O(n log n) Graham, 1972
Gift Wrapping O(nh) Jarvis, 1973
QuickHull O(nh) Eddy, 1977
Divide-and-Conquer O(n log n) Preparata & Hong, 1977
Monotone Chain O(n log n) Andrew, 1979
Incremental O(n log n) Kallay, 1984
Marriage-before- O(n log h) Kirkpatrick & Seidel,
Conquest 1986

Dasar untuk memperoleh convex hull pada algoritma Graham Scan dibagi
menjadi tiga tahap.

1. Perolehan titik p0di dalam himpunan P yang berisi kumpulan titik. Titik p0
ini biasa disebut sebagai titik jangkar atau pivot. Caranya adalah dengan
mencari titik yang mempunyai nilai ordinat Y terkecil. seandainya terdapat
beberapa nilai Y yang memenuhi hal itu, dicari nilai X yang paling kecil.
2. Penghitungan sudut semua titik di dalam P, selain p0 terhadap p0.
Kemudian, semua titik di dalam P selain p0 diurutkan secara radial
berlawanan dengan arah jarum jam.

p0
(Titik jangkar)

Gambar 12.9Penyiapan piksel di dalamconvex hull secara radial


berdasarkan titik jangkar
Pemerolehan Fitur Bentuk dan Kontur 595

3. Penyiapan sebuah tumpukan. Titik p0 dan titik pertama hasil pengurutan


diletakkan ke dalam tumpukan H. Kemudian, setiap titik tersisa pi diproses
dengan cara seperti berikut.
(a) Jika pi membentuk putaran ke kiri terhadap dua titik yang berada di
dalam tumpukan H, tambahkan pi ke H dan lanjutkan pemrosesan
untuk titik berikutnya.
(b) Untuk keadaan sebaliknya, ambil satu data dari tumpukan H.

Algoritma Graham Scan dapat dilihat berikut ini.

ALGORITMA 12.1 – Algoritma ‘Graham Scan’

Masukan:
• P = n piksel
Keluaran:
• Himpunan convex hull

GrahamScan(BW):
1. P0←Titik jangkar

2. P ← P0, P1, P2, P3,…,Pn-1 dengan P1 hingga Pn-1 telah


diurutkan secara radial. Selanjutnya, P akan diindeks dari 1
sampai dengan n
3. H ← Stack kosong
4. Push(H, p0)
5. Push(H, p1)
6. i ← 2
7. WHILE i < n
pa← puncak H
pb← puncak H

IF piberputar ke kanan(Pa, Pb)


Pop(H)
ELSE
Push(H, Pi)
i←i+1
END
END
8. RETURN H
596 Pengolahan Citra Teori dan Aplikasi

Gambar 12.10 memperlihatkan contoh pembentukan convex hull dengan


algoritma di atas. Gambar 12.10(a) menunjukkan keadaan awal ketika dua titik
pertama diproses diletakkan ke dalam tumpukan. Gambar 12.10(b) menunjukkan
ketika titik ketiga ditambahkan sebagai bagian dari convex hull. Hal ini terjadi
karena titik ketiga mengalami putaran ke kiri terhadap titik terakhir yang berada di
dalam tumpukan. Gambar 12.10(d) menunjukkan hasil ketika titik kelima
diproses. Perhatikan bahwa terjadi putaran ke arah kanan. Oleh karena itu, titik di
puncak tumpukan dikeluarkan dan digantikan dengan titik kelima tersebut.
Gambar 12.10(f) menunjukkan keadaan akhir, yaitu setelah semua titik diproses.
Dalam hal ini, titik terakhir tinggal dihubungkan ke titik jangkar.

(a) (b)

(c) (d)

(f)
(e)

Gambar 12.10Ilustrasi pembentukan convex hull


dengan menggunakan algoritma ‘Graham Scan’
Pemerolehan Fitur Bentuk
Be dan Kontur 597

Dalam praktik
tik, algoritma perlu dikembangkan lagi untuk
uk mengantisipasi
keadaan sejumlah titik
itik yang mempunyai sudut sama tetapi memili
iliki panjang yang
berbeda terhadap titik
tit jangkar (Gambar 12.11(a)). Tujuannya
ya adalah untuk
mempercepat proses
es pemindaian saat membentuk convex hull.. Dalam keadaan
seperti itu, hany
nya titik dengan panjang yang terbesar
t yang
dipertahankan.Implem
ementasi pembentukanconvex hull dengan meemperhatikan hal
seperti itu dapat diliha
ihat pada fungsi convexhull.

Dua titik mempunyai Titik dengan jarak


ja
sudut yang sama terpanjang dipe
pertahankan

(a) (b)

Gambar 12.11 Penghilangan


P titik-titik yang mempunyaii sudut
su sama,
dengan han
anya mempertahankan satu saja yang terpapanjang

Program : convexhull.m

function [CH] = convexhull2(Kontur)


c
% CONVEXHULL Digu
unakan untuk mendapatkan convex hull
% dari suatu
u objek menggunakan metode 'Graham Sccan'.
% Masukan: Kontur
K = kontur objek, yamg berdimenssi dua
% dengan kol
lom pertama berisi data Y dan
% kolom kedu
ua berisi data X.
% Keluaran: CH = Convex hull

jum = length(Kont
tur);

% Cari titik jang


gkar atau pivot
terkecil = 1;
for i=2 : jum
if Kontur(i,1
1) == Kontur(terkecil, 1)
if Kontur(
(i,2) < Kontur(terkecil, 2)
598 Pengolahan Citra Teori dan Aplikasi

terkecil = i;
else
if Kontur(i,1) < Kontur(terkecil, 1)
terkecil = i;
end
end
end
end

% Susun data dengan menyertakan sudut dan panjang,


% kecuali titik dengan posisi = terkecil
indeks = 0;
for i=1 : jum
if i == terkecil
continue;
end

indeks = indeks + 1;
Piksel(indeks).y = Kontur(i, 1);
Piksel(indeks).x = Kontur(i, 2);
Piksel(indeks).sudut = sudut(Kontur(terkecil,:), ...
Kontur(i,:));
Piksel(indeks).jarak = jarak(Kontur(terkecil,:), ...
Kontur(i,:));
end

jum_piksel = indeks;

% Lakukan pengurutan menurut sudut dan jarak


for p = 2: jum_piksel
x = Piksel(p);

% Sisipkan x ke dalam data[1..p-1]


q = p - 1;
ketemu = 0;

while ((q >= 1) && (~ketemu))


if x.sudut < Piksel(q).sudut
Piksel(q+1) = Piksel(q);
q = q - 1;
else
ketemu = 1;
end

Piksel(q+1) = x;
end
end

% Kalau ada sejumlah piksel dengan nilai sudut sama


% maka hanya yang jaraknya terbesar yang akan
% dipertahankan
Piksel = unik(Piksel);
jum_piksel = length(Piksel);

% Siapkan tumpukan
H = [];
top = 0;

% Proses pemindaian
Pemerolehan Fitur Bentuk dan Kontur 599

% Mula-mula sisipkan dua titik


top = top + 1;
H(top).y = Kontur(terkecil, 1);
H(top).x = Kontur(terkecil, 2);

top = top + 1;
H(top).y = Piksel(1).y;
H(top).x = Piksel(1).x;

i=2;
while i <= jum_piksel
titik.x = Piksel(i).x;
titik.y = Piksel(i).y;

% Ambil dua data pertama pada tumpukan H


% tanpa membuangnya

A.x = H(top).x;
A.y = H(top).y;

B.x = H(top-1).x;
B.y = H(top-1).y;

if berputar_ke_kanan(A, B, titik)
% Pop data pada tumpukan H
top = top - 1;
else
% Tumpuk titik ke tumpukan H
top = top + 1;
H(top).x = titik.x;
H(top).y = titik.y;

i=i+1;
end
end

% Ambil data dari tumpukan H


C = [];
indeks = 0;
while top ~= 0
indeks = indeks + 1;

% Pop data dari tumpukan H


C(indeks,2) = H(top).x;
C(indeks,1) = H(top).y;
top = top - 1;
end

% Balik urutannya
for i=1 : indeks
CH(indeks+1-i,1) = C(i,1);
CH(indeks+1-i,2) = C(i,2);
end

function [s] = sudut(T1, T2)


dy = T1(1,1)-T2(1,1);
dx = T1(1,2)-T2(1,2);
if dx == 0
600 Pengolahan Citra Teori dan Aplikasi

dx = 0.00000001;
end

s = atan(dy / dx);
if s < 0
s = s + pi;
end

function [j] = jarak(T1, T2)


j = (T1(1,1)-T2(1,1))^2 + (T1(1,2)-T2(1,2))^2;

function [stat] = berputar_ke_kanan(p1, p2, p3)


stat = ((p2.x - p1.x) * (p3.y - p1.y) - ...
(p3.x - p1.x) * (p2.y - p1.y)) > 0;

function [P] = unik(Piksel)


jum = length(Piksel);
sudut = -1;

% Tandai jarak dengan -1


% kalau titik tidak terpakai
for i=1 : jum
if sudut ~= Piksel(i).sudut
sudut = Piksel(i).sudut;
jarak = Piksel(i).jarak;
else
if jarak < Piksel(i).jarak
Piksel(i).jarak = -1;
end
end
end

indeks = 0;
for i=1 : jum
if Piksel(i).jarak ~= -1
indeks = indeks + 1;
P(indeks) = Piksel(i);
end
end

Akhir Program

Kode penting yang perlu diperhatikan pada fungsi di atas adalaj pada
fungsi berputar_ke_kanan. Fungsi itulah yang berperan untuk menentukan
suatu titik berada di kiri atau di kanan suatu garis dan tentu saja dapat digunakan
untuk menentukan arah putaran. Perhitungannya dilakukan melalui:

(p2.x - p1.x) * (p3.y - p1.y) - (p3.x - p1.x) * (p2.y - p1.y))


Pemerolehan Fitur Bentuk dan Kontur 601

Dalam hal ini, kemungkinan hasilnya ada tiga macam.

• Kemungkinan 1: Hasil bernilai 0, yang menyatakan bahwa titik p3


terletak satu garis dengan garis yang dibentuk oleh p1 dan p2.
• Kemungkinan 2: Hasil bernilai kurang dari 0, yang menyatakan bahwa
titik p3 terletak di sebelah kanan garis yang dibentuk oleh p1 dan p2.
• Kemungkinan 1: Hasil bernilai lebih dari 0, yang menyatakan bahwa titik
p3 terletak di kiri garis yang dibentuk oleh p1 dan p2.

p1 p1
p3

p2

p2 p3

(a) p3 di kiri garis. Dalam hal ini, p2 (b) p3 di kanan garis. Dalam hal ini,
berputar ke kanan untuk menuju p2 berputar ke kiri untuk
p3 menuju p3

Gambar 12.12Gambaran berputar ke kanan dan ke kiri

Selain itu, penanganan untuk menghapus titik yang terletak di sudut yang
sama, yang diilustrasikan di depan, dilakukan oleh fungsi unik. Fungsi itulah yang
menghasilkan satu titik dengan jarak terbesar sekiranya terdapat beberapa titik
yang memiliki sudut yang sama.
Contoh pengujian fungsi convexhull untuk membentuk convex hull
pada sejumlah titik diperlihatkan di bawah ini:

>> M=[1 1; 100 1; 100 100; 1 100; 1 10; 50 60; 34 40]


M =

1 1
100 1
602 Pengolahan Citra Te
Teori dan Aplikasi

100 100
0
1 100
0
1 10
0
50 60
0
34 40
0

>> H = conve
exhull(M)
H =

1 1
1 100
0
100 100
0
100 1

>>

Hasil H menunjukka
kan bahwa semua titik pada M terlingkupi ooleh sabuk yang
ditentukan oleh titik-ttitik (1,1), (1, 100), (100, 100), dan (100, 1).
Untuk mempe
permudah dalam mempraktikkan fungsi conv
vexhull, fungsi
bernama tesconve
exdapat digunakan. Fungsi ini mengasumsik
ikan bahwa citra
yang akan diprose
ses memiliki objek yang mudah dibe
ibedakan dengan
latarbelakangnya.

Program : tesconvex.m

function [] = tes
sconvex(berkas)
% TESCONVEX Digun
nakan untuk membuat convex hull
% pada objek.
.
% Masukan: Na
ama berkas yang berisi objek biner.

Img = im2bw(imreaad(berkas), 0.5e);


Kontur = inbound__tracing(Img);
K = convexhull(Koontur);
X = K(:,2);
Y = K(:,1);
X = [X; X(1)]; % Tambahkan elemen pertama di akhir
Y = [Y; Y(1)]; % Tambahkan elemen pertama di akhir
imshow(1-Img);
hold on;
plot(X, Y, 'r');
Pemerolehan Fitur Bentuk dan Kontur 603

hold off;

Akhir Program

Contoh penggunaan fungsi tesconvex:

>> tesconvex('C:\Image\guppi-1.png')

Hasilnya ditunjukkan pada Gambar 12.13. Garis berwarna merah menyatakan


convex hull.

Gambar 12.13Ikan guppy dan convex hull

Terkait dengan convex hull, terdapat fitur bernama konveksitas dan


soliditas (Russ, 2011). Definisinya sebagai berikut:

=>? @> >? A %B>AC


78 9:; < = (12.7)
=>? @> >? D#>A
GHIC D#>A
E8F < = (12.8)
GHIC A %B>AC

Berikut adalah fungsi yang berguna untuk memperoleh konveksitas objek.


604 Pengolahan Citra Te
Teori dan Aplikasi

Program : konveksitas.m

function [konv] = konveksitas(BW)


% KONVEKSITAS Ber
rguna untuk memperoleh konveksitas ob
bjek.
% Masukan: BW
W = Citra biner yang berisi objek.
% Keluaran: konv
k = nilai konveksitas

Kontur = inbound_
_tracing(BW);
CHull = convexhul
ll(Kontur);
X = CHull(:,2);
Y = CHull(:,1);
X = [X; X(1)];
Y = [Y; Y(1)];

perimeter_objek = perim2(BW);

% Hitung perimete
er konveks
perimeter_konveks
s = 0;
for i=2 : length(
(X)
perimeter_kon
nveks = perimeter_konveks + ...
sqrt((X(i
i)-X(i-1))^2 + (Y(i)-Y(i-1))^2);
end

% Peroleh rasio
konv = perimeter_
_konveks / perimeter_objek;

Akhir Program

Pada skrip di atas, perimeter objek dihitung dengan mema


manfaatkan fungsi
perim2, yang telah
lah dibahas di Bab 8. Perhitungan perimet
eter convex hull
dilaksanakan dengann menjumlahkan jarak antardua titik.
Contoh pengg
ggunaan fungsi konveksitas:

>> Img2= im2


2bw(imread('C:\Image\kunci.png'), 0.
.5);
>> konveksit
tas(Img2)
ans =0.73520
0
>>

Fungsi berikut
ut berguna untuk mendapatkan soliditas.
Pemerolehan Fitur Bentuk
Be dan Kontur 605

Program : soliditas.m

function [sol] = soliditas(BW)


% SOLIDITAS Bergu
una untuk memperoleh konveksitas obje
ek.
% Masukan: BW
W = Citra biner yang berisi objek.
% Keluaran: konv
k = nilai soliditas

Kontur = inbound_
_tracing(BW);
CHull = convexhul
ll(Kontur);
X = CHull(:,2);
Y = CHull(:,1);
X = [X; X(1)];
Y = [Y; Y(1)];

% Hitung luas pol


ligon yang dibentuk oleh convex hull
sigmaA = 0;
sigmaB = 0;
for i=2 : length(
(X)
sigmaA = sigm
maA + Y(i)*X(i-1);
sigmaB = sigm
maB + X(i)*Y(i-1);
end

delta = sigmaA - sigmaB;


luas_konveks = ab
bs(delta / 2.0);

luas_objek = luas
s2(BW);

% Peroleh rasio
sol = luas_objek / luas_konveks;

Akhir Program

Perhitungan luas
as objek dilakukan dengan memanfaatkan fung
ngsi luas2, yang
telah dibahas di Bab
ab 8. Perhitungan luas daerah convex hull dilakukan
di dengan
memanfaatkan piksel
el-piksel yang membentuk convex hull. Algor
oritmanya seperti
berikut (http://www.w
.wikihow.com/Calculate-the-Area-of-a-Polygo
gon).

ALGORITMA
MA 12.1 – Menghitung luas poligon

Masukan:
• P = P Piksel-piksel yang menyusun poligon yang
ya telah
tersusu
sun urut berlawanan arah jarum jam.
Keluaran:
606 Pengolahan Citra Teori dan Aplikasi

• Luas poligon

luasPoligon(P):
1. Tambahkan elemen pertama sebagai elemen terakhir pada P.
2. Lakukan penjumlahan terhadap semua perkalian antara nilai
X dengan nilai Y milik piksel berikutnya. Hasilnya berupa
sigmaA.
3. Lakukan penjumlahan terhadap semua perkalian antara nilai
Y dengan nilai X milik piksel berikutnya. Hasilnya berupa
sigmaB.
4. delta ← sigmaA – sigmaB
5. luas = |delta/2|
6. RETURN luas

Ilustrasi perkalian untuk mendapatkan sigmaA dan sigmaB ditunjukkan pada


Gambar 12.14.

(X, Y) (X, Y) (X, Y)

(a, b) (a, b) (a, b)

(c, d) S (c, d) (c, d)

(e, f) a (e, f) (e, f)


m
(g, h) a (g, h) (g, h)

(a, b) (a, b) (a, b)

sigma A = a x d + c x f + sigma B = b x c + d x e +
exh+gxb fxg+hxa
sigma A = a x d + c x f +
exh+gxb

Luas = |(sigma A – sigma B)/2|

Gambar 12.14Ilustrasi perkalian untuk mendapatkan sigma A dan sigma B

Contoh penggunaan fungsi soliditas:

>> Img2=im2bw(imread('c:\Image\guppi-1.png'), 0.5);


Pemerolehan Fitur Bentuk
Be dan Kontur 607

>> soliditas
s(Img2)
ans =0.79644
4
>>

Contoh pener
erapan fitur konveksitas dan soliditas padaa sejumlah objek
dapat dilihat pada Tab
abel 12.3.

Tabel
el 12.3Fitur yang memanfaatkan convex hul
ull
Objek
O Konveksitas Soliditas
tas
ika
kan-1.png

0.8930 0.8577

ika
kan-2.png

0.8930 0.8577

ika
kan-3.png

0.8925 0.8546

ika
kan-4.png

0.8840 0.8582

ika
kan-5.png

0.8276 0.8514

gup
uppi-1.png

0.7876 0.7964

kun
unci.png

0.7352 0.7147
608 Pengolahan Citra Te
Teori dan Aplikasi

12.6 Proyeksi

Proyeksi citra
itra adalah bentuk satu dimensi isi citra
ra yang dihitung
berdasarkan sumbu ko
koordinat. Definisinya sebagai berikut:

JK ? L = ∑# N L, ;# (12.9)

JB>? ; = ∑M
# N LA , ; (12.10)

Dalam hal ini, M ad


adalah tinggi citra dan N adalah lebar citra.. Definisi di atas
menyatakan bahwa proyeksi
p horizontal Phor(b) adalah jumlah nilai
n piksel pada
baris b citra, sedangka
kan Pver(k) adalah jumlah nilai piksel pada kolo
olom k citra.
Contoh fungsi
si untuk menangani proyeksi dapat dilihat dii bbawah ini.
Program : proyeksi.m

function [ProyHor
r, ProyVer]= proyeksi(F)
% PROYEKSI Memper
roleh proyeksi vertikal dan horizonta
al.
% Masukan: F = Citra berskala keabuan
% Keluaran: Pr
royHor = Proyeksi horizontal
% Pr
royVer = Proyeksi vertikal

[m, n] = size(F);
;
ProyHor = zeros(m
m,1);
ProyVer = zeros(n
n,1);

for y=1 : m
for x=1 : n
ProyHor(y
y) = ProyHor(y) + F(y,x);
ProyVer(x
x) = ProyVer(x) + F(y,x);
end
end

Akhir Program

Contoh penggunaan fungsi


f proyeksi:

>> Img2 = im
m2bw(imread('c:\Image\abjad.png'), 0.5);
0
>> [V,H]=pro
oyeksi(Img2);
Pemerolehan Fitur Bentuk dan Kontur 609

>>

Untuk mengamati V dan H, perintah bar dapat digunakan, misalnya bar(H).


Gambar 12.15menunjukkan hasil penyajian proyeksi vertikal dan horizontal.

Proyeksi horizontal

Proyeksi vertikal

Gambar 12.15Visualisasi proyeksi horizontal dan vertikal

Proyeksi biasa digunakan untuk identifikasi tulisan. Tammami, dkk. (2011)


memanfaatkan proyeksi vertikal bersama sejumlah fitur lain untuk mengenali
tulisan Arab. Pada Gambar 12.15, terlihat bahwa proyeksi horizontal dapat
digunakan untuk mengidentifikasi baris tulisan. Jeda yang panjang menunjukkan
pergantian baris (lihat Gambar 12.15). Burger dan Burke (2008) mengemukakan
bahwa untuk mengantisipasi tulisan yang bersumbu miring, proyeksi dapat
dilakukan melalui sumbu utama. Bahkan, dengan menggunakan sentroidsebagai
referensi, dimungkinkan untuk menghasilkan vektor yang tidak bergantung pada
rotasi.
610 Pengolahan Citra Teori dan Aplikasi

12.7Momen Spasial dan Momen Pusat

Momen spasial orde (m,n) didefinisikan sebagai berikut:

O # = ∑M
Q ∑P #
N , (12.11)

Dalam hal ini,

a) i, j = 0, 1, 2, …, dengan i j menyatakan orde momen;


b) M menyatakan jumlah kolom pada citra;
c) N menyatakan jumlah baris pada citra;
d) x adalah ordinat piksel;
e) y adalah absis piksel;
f) I(x,y) menyatakan intensitas piksel pada posisi(x,y).

Adapun momen pusat adalah momen spasial yang dihitung relatif terhadap pusat
massa. Jika pusat massa adalah ( , ̅ ), momen pusat ditulis seperti berikut:

0 # = ∑M
Q ∑P − ̅ − #
N , (12.12)

Momen di atas bersifat invariant (tidak terpengaruh) terhadap translasi. Dalam hal
ini, ̅ dan diperoleh melalui:

MRS M
̅= , = MSR (12.13)
MSS SS

Agar momen pusat bersifat bebas terhadap translasi, penyekalaan, dan


rotasi, maka momen perlu dinormalisasi. Momen pusat ternormalisasi berupa:

-UV Y#Y
ŋ # = W ,X = (12.14)
- SS

Implementasi moment pusat yang ternormalisasi, moment pusat, dan


momen spasial dapat dilihat pada fungsinormomen, momen_pusat, dan
momen_spasialberikut.
Pemerolehan Fitur Bentuk
Be dan Kontur 611

Program : normomen.m

function [hasil] = normomen(F, p, q)


% NORMOMEN Menghi
itung moment pusat ternormalisasi.
% Masukan: F = Citra biner.
% p dan q = orde momen.

F = double(F);
m00 = momen_spasi
ial(F, 0, 0);
normalisasi = m00
0 ^ ((p+q+2)/2.0);
hasil = momen_pus
sat(F, p, q) / normalisasi;

Akhir Program

Program : momen_pusat.m

function [hasil] = momen_pusat(F, p, q)

% MOMEN_PUSAT Men
nghitung momen pusat berorde p, q

[m, n] = size(F);
;
m00 = momen_spasi
ial(F, 0, 0);

xc = momen_spasia
al(F, 1, 0) / m00;
yc = momen_spasia
al(F, 0, 1) / m00;

mpq = 0;
for y=1 : m
for x=1 : n
if F(y,x)
) ~= 0
mpq = mpq + (x-xc)^p * (y-yc)^q;
end
end
end

hasil = mpq;

Akhir Program
612 Pengolahan Citra Te
Teori dan Aplikasi

Program : momen_spasial.m

function [hasil] = momen_spasial(F, p, q)

% MOMEN_SPASIAL Menghitung
M momen spasial berorde (p,q
q).

[m, n] = size(F);;
momenPQ = 0;
for y=1 : m
for x=1 : n
if F(y,x)) ~= 0
momen
nPQ = momenPQ + x^p * y^q;
end
end
end

hasil = momenPQ;

Akhir Program

Contoh pemakaian fu
fungsi normomen:

>> Img = im2


2bw(imread('C:\Image\ikan-1.png'), 0.5);
0
>> normomen(
(Img, 1, 0)
ans = -5.934
40e-016
>>

unakan untuk memperoleh ŋ


Contoh di atas digun (momen pusa
sat ternormalisasi
orde (1,0)). Adapu
pun momen pusat ternormalisasi untuk beberapa
b objek
ditunjukkan pada Tab
abel 12.4.

ur yang memanfaatkan momen pusat terno


Tabel 12.4Fitu normalisasi
Obje
bjek Fitur
ŋ = -0.0024 ŋ Z =-5.6067e-44
ŋ = 0.04578 ŋZ = 0.0132
ŋ = 0.1606 ŋ = -8.7615e--4
ŋ = 0.0024
ikan-1.png
Pemerolehan Fitur Bentuk
Be dan Kontur 613

ŋ = -0.0024 ŋ Z = -5.6067e--4
ŋ = 0.0458 ŋZ = 0.0132
ŋ = 0.1606 ŋ = -8.7615e--4
ŋ = 0.0024
ikan-2.png
ŋ = -0.0025 ŋ Z = -5.4819e--4
ŋ = 0.0456 ŋZ = 0.0132
ŋ = 0.1612 ŋ = -8.8123e--4
ŋ = 0.0024
ikan-3.png
ŋ = 0.0529 ŋ Z = 0.0031
ŋ = 0.0811 ŋZ = 0.0038
ŋ = 0.1251 ŋ = 0.0051
ŋ = 0.0054
ikan-4.png
ŋ = -0.0021 ŋ Z = -5.0026e--4
ŋ = 0.0463 ŋZ = 0.0135
ŋ = 0.1596 ŋ = -0.0010
ŋ = 0.0023
ikan-5.png
ŋ = 0.0370 ŋ Z = 0.0104
ŋ = 0.0706 ŋZ = -0.0449
ŋ = 0.1671 ŋ = 0.0080
ŋ = -0.0109
guppi-1.png
ŋ = -0.0032 ŋ Z = -0.0268
ŋ = 0.2029 ŋZ = -0.0016
ŋ = 0.0796 ŋ = 0.0012
ŋ = 0.0221
kunci.png

Hasil di Tabe
bel 12.4 menunjukkan bahwa momen pusa
sat ternormalisasi
memberikan hasil yang
yan berbeda saat ikan diputar (ikan-4.png). Namun,
N translasi
ataupun pengecilan m
menghasilkan nilai yang hampir sama. Unntuk objek yang
berbeda, terdapat perb
erbedaan yang cukup nyata.

12.8 Momen Invaria


iant

Fitur momen
en invariant bermanfaat untuk menyatakan
an objek dengan
memperhitungkan area
are objek. Fitur ini menggunakan dasar mom
omen pusat yang
ternormalisasi. Mom
men yang dihasilkan dapat digunakan untuk
un menangani
translasi, penyekalaa
aan, dan rotasi gambar. Penciptanya, Hu (Theodoridis
(T dan
Koutroumbas, 2006),, menciptakan tujuh momen invariant seperti
rti berikut.

∅ = ŋ +ŋ

∅ = ŋ −ŋ + 2ŋ
614 Pengolahan Citra Te
Teori dan Aplikasi

∅Z = ŋZ − 3ŋ + ŋ Z − 3ŋ (12.15)

∅\ = ŋZ + ŋ + ŋ Z +ŋ

∅] = ŋZ − 3ŋ ŋZ + ŋ 5 ŋZ + ŋ −3 ŋ +ŋ Z 6+

ŋ Z − 3ŋ ŋ Z +ŋ 5 ŋ Z +ŋ −3 ŋ + ŋZ 6

∅^ = ŋ −ŋ 5 ŋZ + ŋ − ŋ +ŋ Z 6+

4ŋ ŋZ + ŋ ŋ Z +ŋ

∅` = 3ŋ −ŋ Z ŋZ + ŋ 5 ŋZ + ŋ −3 ŋ +ŋ Z 6

ŋZ − 3ŋ ŋ +ŋ Z 5 ŋ Z +ŋ − 3 ŋZ + ŋ 6

Implementasi
si untuk menghitung ketujuh momen Hu ditunj
njukkan di bawah
ini.

Program : momenhu.m

function [Momen] = momenhu(F)


% MOMENHU Menghit
tung momen HU.
% Masukan: F = citra berskala keabuan
% Keluaran: Momen
M = 7 momen Hu

norm_20 = normome
en(F, 2, 0);
norm_02 = normome
en(F, 0, 2);
norm_11 = normome
en(F, 1, 1);
norm_30 = normome
en(F, 3, 0);
norm_12 = normome
en(F, 1, 2);
norm_21 = normome
en(F, 2, 1);
norm_03 = normome
en(F, 0, 3);

Momen.m1 = norm_2
20 + norm_02;

Momen.m2 = (norm_
_20 - norm_02)^2 + 4 * norm_11^2;

Momen.m3 = (norm_
_30 + 3 * norm_12)^2 + ...
(3 * norm_21 - no
orm_03)^2;

Momen.m4 = (norm_
_30 + norm_12)^2 + (norm_21 + norm_03
3)^2;
Pemerolehan Fitur Bentuk dan Kontur 615

Momen.m5 = (norm_30 - 3 * norm_12) * ...


(norm_30 + norm_12) * ...
((norm_30 + norm_12)^2 - 3 * ...
(norm_21 + norm_03)^2) + ...
(3 * norm_21 - norm_03) * (norm_21 + norm_03) * ...
(3 * (norm_30 + norm_12)^2 -(norm_21 + norm_03)^2);

Momen.m6 = (norm_20 - norm_02) * ...


((norm_30 + norm_12)^2 - ...
(norm_21 + norm_03)^2) + ...
4 * norm_11 * (norm_30 + norm_12) * ...
(norm_21 + norm_03);

Momen.m7 = (3 * norm_21 + norm_30) * ...


(norm_30 + norm_12) * ...
((norm_30 + norm_12)^2 - 3 * ...
(norm_21 + norm_03)^2) + ...
(norm_30 - 3 * norm_12) * ...
(norm_21 + norm_03) * ...
(3 * (norm_30 + norm_12)^2 - (norm_21 + norm_03)^2);

Akhir Program

Contoh penggunaan fungsi momenhu:

>>format('long');
>>Img = im2bw(imread('C:\Image\guppi-1.png'),0.5);
>> X = momenhu(Img)
X =

scalar structure containing the fields:

m1 = 0.237749187513244
m2 = 0.0147674602596600
m3 = 0.00229069589208390
m4 = 0.00135857111738100
m5 = 3.52803525223293e-006
m6 = 1.33488327285475e-004
m7 = 4.00783048172902e-006

>>
616 Pengolahan Citra Te
Teori dan Aplikasi

Contoh hasil
il perhitungan
p ketujuh momen Huuntuk sejum
mlah objek dapat
dilihat di Tabel 12.5.. Di tabel tersebut terlihat bahwa penyekalaan
an, transalasi, dan
rotasi pada ikan meng
nghasilkan nilai-nilai yang hampir sama.

el 12.5Fitur yang memanfaatkan momen Hu


Tabel u
O
Objek Fitur
∅ = 0.206371 ∅] = 0.00000
000034
∅ = 0.013207 ∅^ = 0.00001
016756
∅Z = 0.000172 ∅` = 0.00000
000049
∅\ = 0.000155
ikan-1.pngg
∅ = 0.206370 ∅] = 0.00000
000034
∅ = 0.013207 ∅^ = 0.00001
016756
∅Z = 0.000172 ∅` = 0.00000
000049
∅\ = 0.000155
ikan-2.pngg
∅ = 0.206774 ∅] = 0.00000
000035
∅ = 0.013390 ∅^ = 0.00001
017012
∅Z = 0.000173 ∅` = 0.00000
000050
∅\ = 0.000156
ikan-3.pngg
∅ = 0.2062254 ∅] = 0.00000
000034
∅ = 0.0131368 ∅^ = 0.00001
016712
∅Z = 0.0005498 ∅` = -
∅\ = 0.0001549 0.000000042
42
ikan-4.pngg
∅ = 0.2058433 ∅] = 0.00000
000036
∅ = 0.0128627 ∅^ = 0.00001
016946
∅Z = 0.0001610 ∅` = 0.00000
000050
∅\ = 0.0001575
ikan-5.pngg
∅ = 0.2377492 ∅] = 0.00000
003528
∅ = 0.0147675 ∅^ = 0.00013
133488
∅Z = 0.0022907 ∅` = 0.00000
004008
∅\ = 0.0013586
guppi-1.png
ng
∅ = 0.2824261 ∅] = 0.00000
000009
∅ = 0.0152452 ∅^ = 0.00000
002673
∅Z = 0.0086765 ∅` = 0.00000
000001
∅\ = 0.0000221
kunci.png

12.9 Momen Jarak k


ke Pusat

Apabila objek
ek berupa kontur saja (misalnya berupa bentu
ntuk suatu pulau),
momen dapat dihitu
tung melalui jarak titik pada kontur terhada
adap pusat massa
(Rangayyan, 2005).
). Dalam hal ini, momen ke-p untuk sed
ederet jarak d(n)
didefinisikan sebagai
ai berikut:
Pemerolehan Fitur Bentuk dan Kontur 617

b= = ∑ | |= (12.16)

Momen pusat ke-p didefinisikan sebagai berikut:

O= = ∑ | − b |= (12.17)

Selanjutnya, momen-momen yang ternormalisasi didefinisikan sebagai


@U
b= = (12.18)
Mc U/c

MU
O= = (12.19)
Mc U/c

Menurut Gupta dan Srinath (Rangayyan, 2005), momen ternormalisasi


b= dan b= bersifat bebas terhadap penyekalaan, rotasi, maupun translasi. Namun,
mengingat momen berorde tinggi peka terhadap derau, mereka menganjurkan tiga
fitur yang didefinisikan seperti berikut:

R
Mc f ∑g
ijR|h % "@R |
c
e = =
g
R g (12.20)
@R ∑ h %
g ijR

R g
Mk ∑ |h % "@R |k
e = k = R
g ijR
k/c (12.21)
Mc c l ∑g
ijR|h % "@R | m
c
g

R g
Mn ∑ |h % "@R |n
eZ = = g ijR
c (12.22)
Mc c R
l ∑g |h % "@R |c m
g ijR

Menurut Rangayyan (2005), studi yang dilakukan oleh Shen, dkk.


menunjukkan bahwa F2 dan F3 tidak menunjukkan perbedaan yang signifikan
untuk bentuk yang berbeda dan F2 ternyata berubah secara nyata terhadap
penyekalaan dan rotasi. Oleh karena itu, mereka melakukan modifikasi terhadap
F2 dan F3 sebagai berikut:

k R g
k
Mk f ∑ijR|h % "@R |k
o
e = =
g
R g (12.23)
@R ∑ h %
g ijR

n R g
n
Mn f ∑ijR|h % "@R |n
o
eZ = =
g
R g (12.24)
@R ∑ h %
g ijR

Fakta yang menarik, kumpulan fitur {F1, F2’, F3’} mempunyai sifat-sifat
seperti berikut (Rangayyan, 2005).
618 Pengolahan Citra Te
Teori dan Aplikasi

Semua fitur da
dapat diperbandingkan secara langsung.

F3’ menyataka
kan kekasaran kontur yang lebih baik daripa
pada F3. Semakin
besar nilai, sem
semakin besar kekasaran kontur.

Temuan yang jugaa menarik, menurut Rangayyan, kombinasii mf = F3’ – F1


merupakan indikatorr yang bagus untuk mengungkapkan kekasaran
an bentuk.
Fungsi mja
arakpusat berikut merupakan imple
lementasi untuk
menghitung fitur-fitur
tur yang telah dijelaskan di atas.

Program : mjarakpusat.m

function [Fitur] = mjarakpusat(F)


% FJARAKPUSAT Men
nghitung fitur momen jarak ke pusat.
% Masukan: F = Citra biner.
% p = Orde momen
% Keluaran: Fitur
F = fitur citra

Fitur.F1 = sqrt(m
momen_pusat_ke_p(F, 2)) / momen_ke_p(
(F, 1);
Fitur.F2 = momen_
_pusat_ke_p(F, 3) / (momen_ke_p(F, 2)
)^1.5);
Fitur.F3 = momen_
_pusat_ke_p(F, 4) / (momen_ke_p(F, 2)
)^2);

Fitur.F2a = momen
n_pusat_ke_p(F, 3)^(1/3) / momen_ke_p
p(F, 1);
Fitur.F3a = momen
n_pusat_ke_p(F, 4)^(1/4) / momen_ke_p
p(F, 1);

Fitur.mf = Fitur.
.F3a - Fitur.F1;

function [momen] = momen_pusat_ke_p(F, p)

momen_p = momen_k
ke_p(F, p);
momen_1 = momen_k
ke_p(F, 1);

Kontur = inbound_
_tracing(F);

[m, n] = size(F);
;
[xp, yp] = centro
oid(F);
jum = length(Kont
tur);

% Hitung momen pu
usat ke-p
momen = 0;
for i=1 : jum
jarak = sqrt(
((Kontur(i,2)-xp)^2 + (Kontur(i,1)-yp
p)^2);

momen = momen
n + abs(jarak - momen_1) ^ p;
end

momen = momen / jum;


j
Pemerolehan Fitur Bentuk dan Kontur 619

function [momen] = momen_ke_p(F, p)


% Hitung momen ke-p

Kontur = inbound_tracing(F);
[m, n] = size(F);
[xp, yp] = centroid(F);
jum = length(Kontur);
momen = 0;
for i=1 : jum
jarak = sqrt((Kontur(i,2)-xp)^2 + (Kontur(i,1)-yp)^2);
momen = momen + jarak ^ p;
end

momen = momen / jum;

Akhir Program

Contoh penggunaan fungsi mjarakpusat:

>> Img=im2bw(imread('C:\Image\kunci.png'), 0.5);


>> mjarakpusat(Img)
ans =

scalar structure containing the fields:

F1 = 0.358466495430004
F2 = 0.0501126615340028
F3 = 0.0239217027470453
F2a = 0.391651322336318
F3a = 0.417780786529233
mf = 0.0593142910992286

>>

Contoh hasil perhitungan momen jarak ke pusat untuk sejumlah objek


dapat dilihat pada Tabel 12.6. Pada tabel tersebut terlihat bahwa penyekalaan,
transalasi, dan rotasi pada ikan menghasilkan nilai yang hampir sama.
620 Pengolahan Citra Te
Teori dan Aplikasi

T
Tabel 12.6Fitur momen ke jarak pusat
Ob
Objek Fitur
F1 = 0.2526 F2’ = 0.277
776
F2 = 0.0195 F3’ = 0.298
988
F3 = 0.0070 Mf = 0.046
463
ikan-1.pngg
F1 = 0.2526 F2’ = 0.277
776
F2 = 0.0195 F3’ = 0.298
988
F3 = 0.0070 Mf = 0.046
463
ikan-2.pngg
F1 = 0.2542 F2’ = 0.279
796
F2 = 0.0199 F3’ = 0.301
012
F3 = 0.0073 Mf = 0.047
470
ikan-3.pngg
F1 = 0.2484 F2’ = 0.274
744
F2 = 0.0189 F3’ = 0.296
969
F3 = 0.0069 Mf = 0.048
485
ikan-4.pngg
F1 = 0.2422 F2’ = 0.265
658
F2 = 0.0173 F3’ = 0.285
857
F3 = 0.0059 Mf = 0.043
434
ikan-5.pngg
F1 = 0.3372 F2’ = 0.399
991
F2 = 0.0541 F3’ = 0.446
469
F3 = 0.0322 Mf = 0.109
096
guppi-1.png
ng
F1 = 0.3585 F2’ = 0.391
917
F2 = 0.0501 F3’ = 0.417
178
F3 = 0.0239 Mf = 0.059
593
kunci.pngg

12.10 Momen Zernik


ike

Momen Zernike
ike diperkenalkan oleh F. Zernike dalam bukunya
bu berjudul
Physica yang diterbi
rbitkan pada tahun 1934. Penerapan momen
en Zernike untuk
pengolahan citra dipe
iperkenalkan pertama kali oleh M.R. Teague pada
p tahun 1980
(Chen, dkk., 2005). Hasilnya
H berupa Zernike moment descriptors (ZMD). Momen
ini mempunyai kelebi
bihan seperti berikut (Migquiang, dkk., 2008):
):
bersifat inde
dependen terhadap pemutaran (rotasi);
andal terhad
adap derau dan variasi minor dalam bentuk obj
bjek;
memiliki redundansi
red informasi yang minimum.
Pemerolehan Fitur Bentuk dan Kontur 621

Walaupun begitu, momen ini memiliki kelemahan seperti berikut.


perlu normalisasi ruang koordinat (dalam hal ini, harus dilakukan
pengubahan ke bentuk lingkaran x2 + y2< 1).
perlu penggunaan hampiran penjumlahan mengingat aslinya menggunakan
integral. Hal ini berkontribusi dalam memberikan kesalahan numerik, yang
memberikan pengaruh terhadap sifat ketidakbergantungan pada rotasi.
perlu dilakukan normalisasi terhadap translasi dan penyekalaan mengingat
momen Zernike tidak bebas dari penggeseran dan penyekalaan.

Momen Zernike didasarkan pada polinomial Zernike yang bersifat


ortogonal terhadap lingkaran x2 + y2< 1, yang dinyatakan sebagai berikut:

p=q , = r=q s ,8 t, s sin t = x=q s . exp yzt (12.25)

dengans adalah radius dari (y,x) ke pusat massa (centroid), t adalah sudut antara r
dan sumbu x (lihat Gambar 12.26), dan Rpq(r) adalah polinomial radial ortogonal
seperti berikut:

="|q| / ="C !
x=q s = ∑C −1 C
U||V| U}|V| ~=" C
(12.26)
C!! "C&!! "C&!
c c

Dalam hal ini, n=0,1,2,….; 0 < |q|< n, j= √−1, , dan p-|q| bernilai genap. Beberapa
polinomial yang digunakan untuk memperoleh momen Zernikeditunjukkan pada
Tabel 12.7 (Flusser, dkk., 2009).PolinomialZernike hingga orde 12 dibahas pada
Duin, dkk. (2007). Adapun sembilanpolinomialZernike pertama ditunjukkan pada
Gambar 12.17.
622 Pengolahan Citra Teori dan Aplikasi

r
Lingkaran:
x2 + y2 < 1

Centroid

Gambar 12.16Citra dalam lingkaran yang memenuhi persamaan x2 + y2< 1

Tabel 12.7Polinomial yang digunakan pada momen Zernike


x s =1 x^^ s = s^
x s =s x` s = 35s ^ − 60s ] + 30s Z − 4s
x s = 2s − 1 x`Z s = 21s ` − 30s ] + 10s Z
x s =s x`] s = 7s ` − 6s ]
xZ s = 3s − 2s x`` s = 7s `
xZZ s = sZ xƒ s = 70s ƒ − 140s ^ + 90s \ − 20s + 1
x\ s = 6s \ − 6s + 1 xƒ s = 56s ƒ − 105s ^ + 60s \ − 10s
x\ s = 4s \ − 3s xƒ\ s = 28s ƒ − 42s ^ + 15s \
x\\ s = s\ xƒ^ s = 8s ƒ − 7s ^
x] s = 10s ] − 12s + 3s xƒƒ s = sƒ
x]Z s = 5s ] − 4s Z x† s = 126s † − 280s ` + 210s ] + 60s Z
+ 5s
x]] s = s ] x†Z s = 84s − 168s ` + 105s ] − 20s Z

x^ s = 20s ^ − 30s \ + 12s x†] s = 36s † − 56s ` + 21s ]


−1
x^ s = 15s − 20s \ + 6s
^
x†` s = 9s † − 8s `
x^\ s = 6s ^ − 5s \ x†† s = s †
Pemerolehan Fitur Bentuk dan Kontur 623

R00

R40 R11

R22 R33

R44

R42

R31

R20

Gambar 12.17Sembilan polinomial Zernike pertama,


berdasarkan pada Tabel 12.7

Momen Zernike berorde p dengan pengulangan fungsi kontinu f(y,x)


sebanyak q dinyatakan sebagai berikut:

=Y
‡=q = ˆP ˆQ ‰ , . p ∗ =q , ; + ≤1 (12.27)
$

Dalam hal ini, V* menyatakan konjugat, sedangkan Vpq(y,x) dinamakan sebagai


fungsi basis Zernike berorde p dengan pengulangan sebanyak q. Fungsi basis
berupa

p=q , = p=q ~, t = x=q ~ . exp yzt (12.28)

Dengan p berupa bilangan bulat nol atau positif dan n p-|q| bernilai genap dan |q| <
p.
Apabila f(y,x) adalah citra digital, persamaan di atas dapatdihampiri
dengan
624 Pengolahan Citra Teori dan Aplikasi

=Y
‡=q = ∑P ∑Q ‰ , . p ∗ =q , (12.29)
$

Gambar 12.18 menunjukkan 16 bentuk pertama fungsi Zernike.

Gambar 12.18 Enam belas fungsi Zernike yang pertama

Apabila citra diputar dengan sudut sebesar α, fungsi-fungsi momen


Zernike Z’ berupa

‡ o =q = ‡=q . : "#q• (12.30)

Persamaan di atas menyatakan bahwa apabila besaran momen Zernikesaja yang


digunakan akan diperoleh fitur yang tidak bergantung pada rotasi.
Polinomial yang digunakan pada momen Zernike dapat digunakan untuk
menyatakan bentuk geometrik objek. Polinomial orde rendah berguna untuk
memperoleh fitur global suatu bentuk, sedangkan polinomial orde tinggi dapat
menangkap rincian bentuk atau fitur lokal (Choras, 2007). Dalam praktik,
pemilihan jumlah momen Zernike yang tepat perlu ditentukan. Sebagai contoh,
Zhang (2002) menggunakan 36 momen untuk melakukan pencarian citra, dengan
mempertimbangkan efisiensi pemrosesan dan keakuratan.
Pemerolehan Fitur Bentuk dan Kontur 625

Proses untuk melakukan momen Zernike ditunjukkan pada Gambar 12.2.


Pertama-tama, citra yang akan diproses perlu diubah ke bentuk biner. Kemudian,
dilakukan normalisasi penyekalaan dan translasi, mengingat momen Zernike
bergantung pada kedua hal tersebut. Setelah momen Zernike diperoleh, perlu
dilaksanakan normalisasi agar nilainya berada antara [0 1].

Citra Normalisasi Normalisasi


Biner Penyekalaan Translasi

Perhitungan Normalisasi
ZMD ZMD

Gambar 12.19Mekanisme perhitungan ZMD

Normalisasi penyekalaan dilakukan didasarkan pada persamaan

Ž Ž
o
= f , o
= f (12.31)
@SS @SS

Ž
Komponen f adalah faktor penyekala. Dalam hal ini, β adalah suatu nilai yang
@SS

telah ditentukan terlebih dulu (pada contoh di belakang, β dipilih sebesar 20000)
dan m0,0(momen spasial orde (0,0)) tidak lain adalah luas objek.
Normalisasi translasi dilakukan dengan cara menggeser pusat massa ke
tengah citra. Dalam hal ini, nilai X dan Y pusat massa dihitung melalui rumus:

@ @
3 = @RS , 3 = @SR (12.32)
SS SS

Pada persamaan di atas, (yc, xc) adalah sentroid, m1,0 adalah momen spasial order
(1,0) dan m1,0 adalah momen spasial order (0,1). Dengan demikian, nilai x dan y
baru dapat diperoleh melalui
626 Pengolahan Citra Teori dan Aplikasi

M
o
= 3 − , o
= 3 − (12.33)

dengan M adalah tinggi citra dan N adalah lebar citra.


Normalisasi ZMD dilakukan dengan membagi momen citra dengan m0,0.
Jadi,

•UV
‡=q o = @ (12.34)
SS

Pengaturan citra ke dalam lingkaran yang memenuhi persamaan x2 + y2< 1


dilakukan dengan membuat matriks yang berukuran sama dengan ukuran citra.
Selanjutnya, absis dan ordinatdinormalisasiagar berada di dalam jangkauan [-1 1].
Hal ini dapat dilakukan melalui perintah seperti berikut:

selang = 2 / (m-1);
ii = 0;
for i=-1 : selang : 1
ii = ii + 1;
jj = 0;
for j=-1 : selang : 1;
jj = jj + 1;
X(ii, jj) = j;
Y(ii, jj) = i;
end
end

Dalam hal ini, m adalah tinggi atau lebar citra (karena tinggi dan lebar citra dibuat
sama).
Berdasarkan koordinat yang tercantum dalam X dan Y di atas, posisi setiap
piksel di dalam citra yang berada dalam lingkaran dapat diperoleh. Dengan
demikian, informasi ρ dan θdapat dihitung berdasarkan posisi piksel terhadap
pusat lingkaran.
Implementasi momen Zernikedapat dilihat pada fungsi zermoment.
Pemerolehan Fitur Bentuk
Be dan Kontur 627

Program : zermoment.m

function A = zerm
moment (F, orde, tampil)
% ZERMOMENT Mengh
hasilkan koefisien momen Zernike.
% Masukan:
% F = Citr
ra biner
% orde = order
o momen Zernike
% tampil = true untuk menampilkan gambar

if nargin < 3
tampil = fals
se;
end

% Salin yang ada pada kotak pembatas


[min_x, max_x, mi
in_y, max_y] = kotak_pembatas(F);
B = F(min_y:max_y
y, min_x:max_x);

[m, n] = size(B);
;

beta = 20000; % Parameter untuk mengatur


% penyekalaan citra
luas = sum(sum(B)
)); % Luas objek

% Tentukan citra yang memenuhi perbandingan beta


% dengan luas citra B
m1 = fix(m * sqrt
t(beta/luas));
n1 = fix(n * sqrt
t(beta/luas));

C = imresize(B, [m1,
[ n1]);

[m, n] = size(C);
;

% Atur ukuran gam


mbar untuk kepentingan
% penyajian dalam
d bentuk lingkaran
maks_mn = max(m, n);

m_baru = round(sqqrt(2) * maks_mn);


n_baru = m_baru;

D = zeros(m_baru,
, n_baru);
for i=1 : m
for j=1: n
D(i,j) = C(i,j);
end
end

m = m_baru;
n = n_baru;

% Peroleh pusat massa


m dan letakkan di tengah citra
[xc, yc] = centro
oid(D);
xc = round(xc);
628 Pengolahan Citra Teori dan Aplikasi

yc = round(yc);

xc = xc - round((n/2));
yc = yc - round((m/2));

% Atur gambar ke G
G = zeros(m,n);
for i=1 : m
for j=1: n
if ~((j-xc< 1) || (i-yc<1) || (i-yc > m) || (j-xc > n))
G(i-yc, j-xc)= D(i,j);
end
end
end

% Bentuk grid untuk menentukan koordinat


% dengan tengah citra sebagai titik pusat
selang = 2 / (m-1);
ii = 0;
for i=-1 : selang : 1
ii = ii + 1;
jj = 0;
for j=-1 : selang : 1;
jj = jj + 1;
X(ii, jj) = j;
Y(ii, jj) = i;
end
end

% Hitung sudut, rho, dan lingkaran


Theta = zeros(m, n);
Rho = zeros(m, n);
L = zeros(m, n);
for i=1 : m
for j=1: n
Theta(i,j) = atan2(Y(i,j), X(i,j));
if Theta(i,j) < 0
Theta(i,j) = Theta(i,j) + 2 * pi;
end

jarak2 = X(i,j)^2 + Y(i,j)^2;


Rho(i,j) = sqrt(jarak2);
L(i,j) = jarak2;
end
end

% Bentuk lingkaran
DidalamL = find(L <=1);
Lingkaran = zeros(m,n);
Lingkaran(DidalamL) = 1;

luas = 0;
for i=1 : m
for j=1: n
if Lingkaran(i,j) == 1
luas = luas + 1;
end
end
end
Pemerolehan Fitur Bentuk dan Kontur 629

% Hitung Koefisien momen Zernike


A = [];
indeks = 0;
for p = 2: orde
for q = p:-2:0
zpq_real = 0;
zpq_imaj = 0;
for i=1 : m
for j=1 : n
if Lingkaran(i,j) == 1
vpq = fb_zernike(p,q, Rho(i,j));
zpq_real = zpq_real + G(i,j)* vpq * ...
cos(q * Theta(i,j));
zpq_imaj = zpq_imaj + G(i,j)* vpq * ...
sin(q * Theta(i,j));
end
end
end

zpq_real = zpq_real * (p+1)/pi;


zpq_imaj = zpq_imaj * (p+1)/pi;

indeks = indeks + 1;
A(indeks) = sqrt(zpq_real^2 + zpq_imaj^2);
end;
end;

% Normalsiasi koefisien
m00 = momen_spasial(G, 0, 0);
A = A ./ m00;

% Tampilkan gambar kalau memang diminta


if tampil == true
close all;

figure;
subplot(2,2,1);
imshow(B);
title('Citra dalam kotak pembatas');

subplot(2,2,2);
imshow(G);
title('Hasil penyekalaan dan translasi');

subplot(2,2,3);
imshow(1-Lingkaran+G);
title('Citra dalam lingkaran');

subplot(2,2,4);
plot(A);
title('Deskriptor momen Zernike');
end

function p = fb_zernike (n,l,rho)


% Menghitung fungsi basis Zernike

p = 0;
if n == 2
630 Pengolahan Citra Teori dan Aplikasi

switch (l)
case 0, p = 2*(rho.^2)-1;
case 2, p = (rho.^2);
end;
elseif n == 3
switch (l)
case 1, p = 3*(rho.^3)-2*rho;
case 3, p = (rho.^3);
end;
elseif n == 4
switch (l)
case 0, p = 6*(rho.^4)-6*(rho.^2)+1;
case 2, p = 4*(rho.^4)-3*(rho.^2);
case 4, p = (rho.^4);
end;
elseif n == 5
switch (l)
case 1, p = 10*(rho.^5)-12*(rho.^3)+3*rho;
case 3, p = 5*(rho.^5)- 4*(rho.^3);
case 5, p = (rho.^5);
end;
elseif n == 6
switch (l)
case 0, p = 20*(rho.^6)-30*(rho.^4)+12*(rho.^2)-1;
case 2, p = 15*(rho.^6)-20*(rho.^4)+ 6*(rho.^2);
case 4, p = 6*(rho.^6)- 5*(rho.^4);
case 6, p = (rho.^6);
end;
elseif n == 7
switch (l)
case 1, p = 35*(rho.^7)-60*(rho.^5)+30*(rho.^3)-4*rho;
case 3, p = 21*(rho.^7)-30*(rho.^5)+10*(rho.^3);
case 5, p = 7*(rho.^7)- 6*(rho.^5);
case 7, p = (rho.^7);
end;
elseif n == 8
switch (l)
case 0, p = 70*(rho.^8)-140*(rho.^6)+...
90*(rho.^4)-20*(rho.^2)+1;
case 2, p = 56*(rho.^8)-105*(rho.^6)+ ...
60*(rho.^4)-10*(rho.^2);
case 4, p = 28*(rho.^8)- 42*(rho.^6)+15*(rho.^4);
case 6, p = 8*(rho.^8)- 7*(rho.^6);
case 8, p = (rho.^8);
end;
elseif n == 9
switch (l)
case 1, p = 126*(rho.^9)-280*(rho.^7)+ ...
210*(rho.^5)-60*(rho.^3)+5*rho;
case 3, p = 84*(rho.^9)-168*(rho.^7)+ ...
105*(rho.^5)-20*(rho.^3);
case 5, p = 36*(rho.^9)- 56*(rho.^7)+ 21*(rho.^5);
case 7, p = 9*(rho.^9)- 8*(rho.^7);
case 9, p = (rho.^9);
end;
elseif n == 10
switch (l)
case 0, p = 252*(rho.^10)-630*(rho.^8)+ ...
560*(rho.^6)-210*(rho.^4)+30*(rho.^2)-1;
Pemerolehan Fitur Bentuk dan Kontur 631

case 2, p = 210*(rho.^10)-504*(rho.^8)+ ...


420*(rho.^6)- ...
140*(rho.^4)+15*(rho.^2);
case 4, p = 129*(rho.^10)-252*(rho.^8)+ ...
168*(rho.^6)- ...
35*(rho.^4);
case 6, p = 45*(rho.^10)- 72*(rho.^8)+ 28*(rho.^6);
case 8, p = 10*(rho.^10)- 9*(rho.^8);
case 10, p = (rho.^10);
end;
elseif n == 11
switch (l)
case 1, p = 462*(rho.^11)-1260*(rho.^9)+ ...
1260*(rho.^7)- ...
560*(rho.^5)+105*(rho.^3)-6*rho;
case 3, p = 330*(rho.^11)- 840*(rho.^9)+ ...
756*(rho.^7)- ...
280*(rho.^5)+ 35*(rho.^3);
case 5, p = 165*(rho.^11)- 360*(rho.^9)+ ...
252*(rho.^7)- 56*(rho.^5);
case 7, p = 55*(rho.^11)- 90*(rho.^9)+ 36*(rho.^7);
case 9, p = 11*(rho.^11)- 10*(rho.^9);
case 11, p = (rho.^11);
end;
elseif n == 12
switch (l)
case 0, p = 924*(rho.^12)-2772*(rho.^10)+ ...
3150*(rho.^8)- ...
1680*(rho.^6)+420*(rho.^4)-42*(rho.^2)+1;
case 2, p = 792*(rho.^12)-2310*(rho.^10)+ ...
2520*(rho.^8)- ...
1260*(rho.^6)+280*(rho.^4)-21*(rho.^2);
case 4, p = 495*(rho.^12)-1320*(rho.^10)+ ...
1260*(rho.^8)- ...
504*(rho.^6)+ 70*(rho.^4);
case 6, p = 220*(rho.^12)- 495*(rho.^10)+ ...
360*(rho.^8)- ...
84*(rho.^6);
case 8, p = 66*(rho.^12)- 110*(rho.^10)+45*(rho.^8);
case 10, p = 12*(rho.^12)- 11*(rho.^10);
case 12, p = (rho.^12);
end;
end;

function [min_x, max_x, min_y, max_y] = kotak_pembatas(F)


% Mencari koordinat kotak yang membatasi
% citra F
[m0, n0] = size(F);
min_y = m0;
max_y = 1;
min_x = n0;
max_x = 1;

for i=1 : m0
for j=1: n0
if F(i,j) == 1
if min_y > i
min_y = i;
end
632 Pengolahan Citra Teori dan Aplikasi

if max_y < i
max_y = i;
end

if min_x > j
min_x = j;
end

if max_x < j
max_x = j;
end
end
end
end

Akhir Program

Contoh penggunaan fungsi zermoment:

>>Img= im2bw(imread('C:\Image\ikan-4.png'), 0.5);


>>X=zermoment(Img,4,true)
X =

0.087641 0.585965 0.013469 0.042353 0.050947


0.191575 0.403293
>>

Pada contoh di atas, argumen kedua yang berupa nilai 4 menentukan orde
polinomial dan argumen ketiga untuk menentukan fungsi akan menghasilkan
gambar. Argumen ketiga dapat ditiadakan. Contoh gambar yang dihasilkan oleh
zermomentditunjukkan pada Gambar 12.20.
Pemerolehan Fitur Bentuk
Be dan Kontur 633

ar 12.20Visualisasi pemrosesan momen Zern


Gambar rnike

Hasil momen
en Zernike dengan orde 4 untuk berbagai citra
cit diperlihatkan
pada Tabel 12.8.

T
Tabel 12.8Fitur momen Zernike orde 4
Objek Fitur
Z20 =0,067489 Z40 =0,031
31014
Z22 =0,655700 Z42 =0,187
87538
Z31 =0,015904 Z44 =0,575
75370
ikan-1.png Z33 =0,014320
Z20 = 0,067489 Z40 = 0,031
31014
Z22 = 0,655700 Z42 = 0,187
87538
Z31 = 0,015904 Z44 = 0,575
75370
ikan-2.png Z33 = 0,014320
Z20 = 0,066243 Z40 = 0,030
30826
Z22 = 0,634994 Z42 = 0,182
82968
Z31 = 0,014238 Z44 = 0,552
52235
ikan-3.png Z33 = 0,008975
634 Pengolahan Citra Te
Teori dan Aplikasi

Objek Fitur
Z20 = 0,087641 Z40 = 0,050
50947
Z22 = 0,585965 Z42 = 0,191
91575
Z31 = 0,013469 Z44 = 0,403
03293
ikan-4.png Z33 = 0,042353
Z20 = 0,065993 Z40 = 0,029
29108
Z22 = 0,655143 Z42 = 0,187
87842
Z31 = 0,008639 Z44 = 0,570
70436
ikan-5.png Z33 = 0,036051
Z20 = 0,073650 Z40 = 0,034
34444
Z22 = 0,611287 Z42 = 0,180
80690
Z31 = 0,058099 Z44 = 0,470
70811
guppi-1.png Z33 = 0,058516
Z20 = 0,099800 Z40 = 0,015
15126
Z22 = 0,440984 Z42 = 0,192
92140
Z31 = 0,112749 Z44 = 0,122
22398
Z33 = 0,010853
kunci.png

12.11 Polar Fourier Transform


T

Peranan alihra
hragam Fourier untuk membentuk deskriptorr telah dibahas di
depan. Selain yang
ng telah dibahas, sebenarnya terdapat beberapa
be turunan
alihragamFourier. Saalah satu turunan alihragam Fourier dalam koordinat polar
dinamakan PFT2 (Po
Polar Fourier Transform versi 2), yang dipperkenalkan oleh
Zhang (2002). PFT2
T2 ini digunakan untuk kepentingan temuu kembali citra
berdasarkan bentuk oobjek. Hasil PFT berupa generic Fourier descriptor
de (GFD).
Deskriptor diperoleh
eh dengan mula-mula memperlakukan citra polar
p ke bentuk
citra persegi panjangg dua dimensi. Contoh dapat dilihat pada Gamb
mbar 12.21.

(a) Citra dalam ruangg po


polar (b) Citra dalam ruang polar diubah ke ruang
ng K
Kartesian

Gambarar 12.21Citra di dalam koordinat polar diub


ubah
ke citra
cit persegi panjang (Sumber: Zhang, 2002)02)
Pemerolehan Fitur Bentuk dan Kontur 635

Kelebihan PFT2 terhadap Fourier Descriptor (FD) kontur (Zhang, 2002):

a) tidak perlu mengetahui informasi kontur yang boleh saja tidak tersedia;
b) dapat menangkap isi dalam bentuk;
c) lebih andal terhadap variasi bentuk.

Adapun kelebihan terhadap ZMD:

a) mampu menangkap fitur bentuk baik pada arah radial maupun melingkar;
b) komputasi lebih sederhana;
c) lebih andal.

PFT mempunyai sifat yang tidak bergantung pada translasi. Hal ini
ditunjukkan pada Gambar 12.22.

(a) Pola1 (b) Pola 2 (pergeseran dari Pola 1)

(c) Spektra Fourier Pola1 (d) Spektra Fourier Pola 2

Gambar 12.22Contoh yang menunjukkan PFT2 bersifat


tidak tergantung pergeseran (Sumber: Zhang, 2002)

PFT2 didefinisikan sebagai berikut:

? $
Je ~, ∅ = ∑? ∑ ‰ s, t exp 5y2• ~+ ∅ 6 (12.35)
1 ‘

dengan:

a) 0<r<R dan t = i(2•/’) (0< i<T);0< ~<R, 0< ∅<T;


b) R adalah resolusi frekuensi radial;
636 Pengolahan Citra Teori dan Aplikasi

c) T adalah resolusi frekuensi angular.

Cara untuk memproses dengan PFT2 seperti berikut. Misalnya, citra yang
akan diproses berupa I = {f(x, y); 0<x<M, 0<y<N}. Citra ini dikonversikan dari
ruang Kartesian ke ruang polar menjadi Ip = {f(r, t); 0<r<R, 0< t< 2• }, dengan
R adalah radius maksimum bentuk. Titik pusat ruang polar dijadikan sebagai pusat
bentuk dengan tujuan agar bentuk tidak tergantung pada translasi. Pusat bentuk
dihitung berdasarkan:

3 = ∑Q " , 3 = ∑M"
P (12.36)
M

Adapun (r, θ) dihitung berdasarkan:

P"P“
s= − 3 + − 3 , t = <s, < (12.37)
Q"Q“

Ketidakbergantungan pada rotasi diperoleh dengan mengabaikan informasi fase


pada koefisien-koefisiennya sehingga yang tertinggal adalah besaran koefisien.
Adapun untuk memperoleh ketidakbergantungan pada skala, besaran pertama
dinormalisasi dengan luas lingkaran dan selanjutnya semua koefisien
dinormalisasi dengan koefisien pertama. Jadi, deskriptor bentuk yang didapatkan
berupa:

—˜ , —˜ , —˜ ,% —˜ @, —˜ @,%
”e• = { , ,…, ,…, ,…, } (12.38)
$? c —˜ , —˜ , —˜ , —˜ ,

dengan m adalah jumlah maksimum frekuensi radial dan n adalah jumlah


frekuensi angular.
Implementasi untuk mendapatkan GFD dapat dilihat pada fungsi gfd
berikut.
Pemerolehan Fitur Bentuk
Be dan Kontur 637

Program : gfd.m

function [GFD] = gfd(F, nrad, nang)


% GFD Memperoleh nilai gfd atau koefisien PFT.
% Masukan: F = citra biner
% nr
rad = frekuensi radial
% na
ang = frekuensi angular

Kontur = inbound_
_tracing(F);
jum = length(Kont
tur);

[x_pusat, y_pusat
t] = centroid(F);

% Cari jarak terp


panjang
rad_maks = 0;
for i=1 : jum
xi = Kontur(i
i,2); yi = Kontur(i, 1);

panjang = ((x
xi-x_pusat)^2+(yi-y_pusat)^2)^0.5;
if panjang > rad_maks
rad_maks = panjang;
end
end

% Tentukan frekueensi radial dan angular maksimum


if nargin < 3
m = 4; % Frek
kuensi radial maksimum
n = 6; % Frek
kuensi angular maksimum
else
m = nrad;
n = nang;
end

F = double(F);
[tinggi, lebar] = size(F);
for rad=0 : m
for ang=0 : n
FR(rad+1,
, ang+1) = 0;
FI(rad+1,
, ang+1) = 0;
for x=1 : lebar
for y=1:
y tinggi
r
radius = ((x-x_pusat)^2 + (y-y_pusat)
)^2)^.5;
t
theta = atan2((y-y_pusat),(x-x_pusat)
));
i (theta < 0)
if
theta = theta + 2 * 3.14;
e
end

FR(rad+1, ang+1) = FR(rad+1, ang+1) + ...


F
F(y, x) * ...
cos(2 * 3.14 * rad * ...
(radius / rad_maks) + ang * thet
ta);

F
FI(rad+1, ang+1) = FI(rad+1, ang+1) - ...
638 Pengolahan Citra Teori dan Aplikasi

F(y, x) * ...
sin(2 * 3.14 * rad * ...
(radius / rad_maks) + ang * theta);
end
end
end
end

% Peroleh GFD
for rad=0 : m
for ang=0 : n
if (rad==0) && (ang==0)
dc = (FR(1,1)^2+FI(1,1)^2)^.5;
GFD(1) = dc /(pi * rad_maks^2);
else
GFD(rad * n+ang+1)=(FR(rad+1, ang+1)^2+ ...
FI(rad+1,ang+1)^2)^.5 / dc;
end
end
end

Akhir Program

Contoh penggunaan fungsi gfd:

>> Img=im2bw(imread('C:\Image\ikan-1.png'),0.5);
>> X=gfd(Img,4,6)
X =

Columns 1 through 6:

0.3950269 0.0205150 0.2590928 0.0179417 0.1771724


0.0650260

Columns 7 through 12:

0.4252236 0.0846727 0.1450364 0.0607695 0.1347511


0.0291150

Columns 13 through 18:

0.1481163 0.0858275 0.0024445 0.0706047 0.0357912


0.0445491
Pemerolehan Fitur Bentuk
Be dan Kontur 639

Columns 19 through 24:

0.0933387
7 0.0168520 0.0384655 0.017178
87 0.0299010
0.0500069

Columns 25 through 30:

0.0469270
0 0.0394526 0.0039343 0.032143
31 0.0205917
0.0125721

Column 31:

0.0162803
3

>>

Pada contoh di atas,

gfd(Img,4,6)

kuensi radial maksimum sebesar 4 dan frekuensi


berarti bahwa freku f radial
angularsebesar 6.
Contoh hasil
il 7 GFD pertama untuk berbagai citra yan
ang menggunakan
frekuensi radial maks
ksimum sebesar 4 dan frekuensi radial angular
lar sebesar 6 dapat
dilihat pada Tabel 12.
2.9.

itur GFD frekuensi radial maksimum sebes


Tabel 12.9Fit esar 4 dan
frekuensi radial angular sebesar 6
Ob
Objek Fitur
GFD1 = 0.395027
GFD2 = 0.020515
GFD3 = 0.259093
ikan-1.png
ng GFD4 = 0.017942
GFD1 = 0.395027
GFD2 = 0.020515
GFD3 = 0.259093
ikan-2.png
ng GFD4 = 0.017942
640 Pengolahan Citra Te
Teori dan Aplikasi

Ob
Objek Fitur
GFD1 = 0.396156
GFD2 = 0.020570
GFD3 = 0.261192
ikan-3.png
ng GFD4 = 0.017805
GFD1 = 0.393667
GFD2 = 0.020181
GFD3 = 0.258510
ikan-4.png
ng GFD4 = 0.019910
GFD1 = 0.396182
GFD2 = 0.021021
GFD3 = 0.255305
ikan-5.png
ng GFD4 = 0.020895
GFD1 = 0.262418
GFD2 = 0.073336
GFD3 = 0.303962
guppi-1.png
ng GFD4 = 0.249740
GFD1 = 0.386401
GFD2 = 0.003771
GFD3 = 0.346719
kunci.pngg GFD4 = 0.291891

12.12 Kotak Pembat


atas

Kotak pemba
batas (bounding box) adalah kotak terkec
kecil yang dapat
melingkupi sebuah objek.
o Kotak pembatas dibedakan menjadii ddua buah: kotak
pembatas yang berori
rientasi citra dan kotak pembatas yang berorie
rientasi pada objek
(Pratt, 2001). Perbeda
daan kedua kotak pembatas ditunjukkan padaa Gambar
G 12.23.

β
α

θ
X

(a) Kotak pemba


mbatas (b) Kotak pembatas
berorientasi
tasi citra berorientasi objek

Gambar 12.23Kotak pembatas


Pemerolehan Fitur Bentuk dan Kontur 641

Kotak pembatas berorientasi citra milik suatu area R dapat dinyatakan


dengan

78 <;J:bL< < x = {ymin, ymax, xmin, xmax} (12.39)

Dalam hal ini, ymin menyatakan Y terkecil, ymax menyatakan Y terbesar, xmin
menyatakan X terkecil, dan xmax menyatakan X terbesar. Adapun tinggi dan lebar
kotak berupa:

šš = @IQ − @ % , F:L<s = @IQ − @% (12.40)

Pada kotak pembatas berorientasi objek, perhitungan tinggi dan lebar


kotak diawali dengan pencarian θ. Hal ini dilakukan dengan menggunakan
rumusberikut:

-R,R
t= < "
›- œ (12.41)
c,S "-S,c

dengan µ adalah momen pusat. Setelah orientasi diperoleh, piksel-piksel kontur


objek dihitung dengan menggunakan transformasi

•= cos t + sin t, = − sin t + cos t (12.42)

Dalam hal ini, α mewakili absis dan β mewakili ordinat. Lalu, αmin, αmax, βmin,
dan βmindapat diperoleh dari semua nilai α dan β. Setelah itu, tinggi dan lebar
kotak dihitung melalui

šš = @IQ − @ % , F:L<s = •@IQ − •@ % (12.43)

Fitur yang umum digunakan berupa perbandingan antara luas kotak


pembatas dengan luas area. Perhitungannya seperti berikut:
642 Pengolahan Citra Te
Teori dan Aplikasi

GHIC I?>I D#>A


s< 8 ;8 <; ¡:bL< < L:s8
L:s8s : < , s< = (12.44)
P¢£¤ "P¢i¥ ∗ Q¢£¤ "Q¢i¥

GHIC I?>I D#>A


s< 8 ;8 <; ¡:bL< < L:s8
L:s8s : < 8Ly:; = (12.45)
¦¢£¤ "¦¢i¥ ∗ Ž¢£¤ "Ž¢i¥

Kedua rasio tersebutt m


menghasilkan nilai antara 0 dan 1.
Contoh berik
rikut menunjukkan perhitungan rasio kkotak pembatas
berorientasi citra.

Program : bboxcitra.m

function [rasio, min_x, max_x, min_y, max_y] = bboxci


itra(F)
% BBOXCITRA Menca
ari kotak terkecil yang melingkupi ci
itra.
% Masukan: F = Citra berskala keabuan
% Keluaran: Nilai
N X dan Y terkecil dan terbesar

[m, n] = size(F);
;
min_y = m;
max_y = 1;
min_x = n;
max_x = 1;

for i=1 : m
for j=1: n
if F(i,j)
) == 1
if mi
in_y > i
m
min_y = i;
end

if ma
ax_y < i
m
max_y = i;
end

if mi
in_x > j
m
min_x = j;
end

if ma
ax_x < j
m
max_x = j;
end
end
end
end

luas = 0;
for i=1 : m
for j=1 : n
Pemerolehan Fitur Bentuk
Be dan Kontur 643

if F(i,j)) ~= 0
luas = luas + 1;
end
end
end

rasio = luas / ((
(max_y - min_y) * (max_x - min_x));

Akhir Program

Fungsi bboxcitra
a menghasilkan rasio dan juga nilai X dan
an Y terkecil dan
terbesar. Contoh pema
makaiannya:

>>Img = im2b
bw(imread('C:\Image\ikan-3.png'),0.5
5);
>>[rasio, X1
1, X2, Y1, Y2] = bboxcitra(Img)
rasio = 0.5
59986
X1 = 54
X2 = 196
Y1 = 92
Y2 = 170
>>

Hasil di atas menyat


atakan kotak yang melingkupi objek mempu
punyai X terkecil
sama dengan 41, X terbesar
te sama dengan 204, Y terkecil sama dengan
de 28, dan Y
terbesar sama dengan
an 224. Adapun rasio kotak pembatas berorient
ntasi citra berupa
0,536715913359209..
Contoh berik
rikut menunjukkan perhitungan rasio kotak
k pembatas
berorientasi objek.

Program : bboxobjek.m

function [rasio, min_a, max_a, min_b, max_b] = bboxob


bjek(F)
% BBOXOBJEK Menca
ari kotak terkecil yang melingkupi ci
itra.
% Masukan: F = Citra berskala keabuan yang
% mengandung suatu objek
% Keluaran: Nilai
N alpha dan beta terkecil dan ter
rbesar
644 Pengolahan Citra Teori dan Aplikasi

if nargin < 2
tampil = true;
end

% Cek citra biner atau tidak


Cek = find(F>1);
if ~isempty(Cek)
% Kalau F bukan citra biner
Kontur = inbound_tracing(im2bw(F));
else
Kontur = inbound_tracing(F);
end

jum = length(Kontur);

% Cari nilai alpha dan beta terbesar dan terkecil


max_a = 0;
min_a = 10^300;
max_b = 0;
min_b = min_a;

[xc,yc] = centroid(F);
theta = 0.5 * atan(2 * momen_pusat(F,1,1)/...
(momen_pusat(F,2,0) - momen_pusat(F,0,2)));
for i=1 : jum
x = Kontur(i, 2);
y = Kontur(i, 1);
alpha = x * cos(theta) + y * sin(theta);
beta = -x * sin(theta) + y * cos(theta);
if min_b > beta
min_b = beta;
end

if max_b < beta


max_b = beta;
end

if min_a > alpha


min_a = alpha;
end

if max_a < alpha


max_a = alpha;
end
end

% Hitung luas
[m, n] = size(F);
luas = 0;
for i=1 : m
for j=1 : n
if F(i,j) ~= 0
luas = luas + 1;
end
end
end

% Hitung rasio
Pemerolehan Fitur Bentuk
Be dan Kontur 645

if luas == 0
rasio = 0;
else
rasio = luas / ((max_a - min_a) * (max_b - min_b)
));
end

Akhir Program

Contoh penggunaan bboxobjek:


b

>> Img=im2b
bw(imread('C:\Image\ikan-3.png'),
,0.5);
>> rasio = bboxobjek(Img)
rasio = 0.
.60112
>>

Contoh rasio berorien


ientasi objek dan citra untuk berbagai citra dapat
da dilihat pada
Tabel 12.10.

Tabel 12.10R
Rasio kotak pembatas berorientasi objek dan
da citra
Objek Rasio Berorientasi Rasio Beror
orientasi
Citra Objek
jek
ikan-1.png
ng
0.592211 0.59379
791

ikan-2.png
ng
0.592211 0.59379
791

ikan-3.png
ng
0.599856 0.60111
117

ikan-4.png
ng
0.544270 0.59008
088

ikan-5.png
ng 0.588815 0.59014
142
646 Pengolahan Citra Te
Teori dan Aplikasi

Objek Rasio Berorientasi Rasio Beror


orientasi
Citra Objek
jek

guppy-1.pn
png
0.522930 0.50697
971

kunci.png
ng
0.536716 0.52406
068

Latihan

1. Jelaskan penger
ertian tanda tangan kontur. Berikan ilustrasi untuk
menjelaskannya.
2. Manakah sifat ber
erikut yang dipenuhi oleh tanda tangan kontur?
ur?
(a) Translasi
(b) Rotasi
(c) Penyekalaan
3. Jelaskan mekanis
nisme deskriptor Fourier dalam mewakili
li bentuk dengan
menggunakan seju
ejumlah titik.
4. Jelaskan istilah berikut.
be
(a) Convex hull
(b) Soliditas
(c) Konveksitas
5. Jelaskan pengertia
tian proyeksi citra.
6. Apa kelebihan moomen Hu dibandingkan dengan momen pusat?
at?
7. Apa yang dimaksu
ksud dengan momen jarak ke pusat?
8. Berikan penjelasa
san singkat tentang prinsip kerja momen Zernik
nike.
9. Berapa jumlah mo
momen Zernike untuk orde:

(a) 4
Pemerolehan Fitur Bentuk dan Kontur 647

(b) 6
(c) 10
10. Apa keunggulan PFT terhadap momen Zernike?
11. Jelaskan perbedaan antara kotak pembatas berorientasi citra dan kotak
pembatas berorientasi objek? Fitur apa yang dapat diperoleh dari kedua kotak
pembatas tersebut?
12. Cobalah untuk membuat tanda tangan kontur agar dapat bersifat bebas
terhadap rotasi dan penyekalaan. Bantuan: Gunakan deskriptor Fourier untuk
membantu menyelesaikan masalah ini.
648 Pengolahan Citra Teori dan Aplikasi
>
BAB 13
Ekstraksi
Fitur Tekstur

Setelah bab ini berakhir, diharapkan pembaca dapat


memahami berbagai bahasan berikut yang berhubungan
dengan fitur tekstur dan mampu mempraktikkannya.
Fitur tekstur
Kategori tekstur
Tekstur berbasis histogram
Tekstur Laws
Lacunarity
GLCM
650 Pengolahan Citra Teori dan Aplikasi

13.1 Pengantar Fitur Tekstur

Selain melibatkan fitur bentuk, tekstur banyak digunakan sebagai fitur


untuk temu kembali citra.Hal ini disebabkan beberapa objek mempunyai pola-
pola tertentu, yang bagi manusia mudah untuk dibedakan.Oleh karena itu,
diharapkan komputer juga dapat mengenali sifat-sifat seperti itu.
Dalam praktik, tekstur digunakan untuk berbagai kepentingan.Umumnya,
aplikasi tekstur dapat dibagi menjadi dua kategori.Pertama adalahuntuk
kepentingan segmentasi. Pada proses ini, tekstur dipakai untuk melakukan
pemisahan antara satu objek dengan objek yang lain. Keduaadalah untuk
klasifikasi tekstur, yang menggunakan fitur-fitur tekstur untuk mengklasifikasi
objek.Beberapa contoh aplikasi tekstur disajikan di bawah ini (Tuceryan dan Jain,
1998).
Inspeksi secara otomatis pada industri tekstil, pengecatan mobil,
pemakaian karpet.
Analisis citra medis. Misalnya, tekstur digunakan untuk klasifikasi
penyakit paru-paru, diagnosis leukemia, dan pembedaan tipe-tipe sel darah
putih.
Analisis penginderaan jarak-jauh. Misalnya,tekstur dipakai untuk
kepentingan klasifikasi area tanah.

Sebelum membahas lebih lanjut mengenai tekstur, pengertian tekstur perlu


dijelaskan lebih dulu walaupun definisi struktur yang baku belum pernah
disepakati.Sebagai contoh, Kulkarni (1994) mendefinisikan tekstur sebagai
hubungan mutual antara nilai intensitas piksel-piksel yang bertetangga yang
berulang di suatu area yang lebih luas daripada jarak hubungan tersebut.Namun,
penjelasan seperti itu pun masih menyisakan ketidakmudahan untuk mengenali
pengulangan yang terjadi pada citra. Ada suatu pengulangan yang terkadang sulit
dijabarkan, tetapi mudah ditangkap oleh mata , seperti yang terdapat pada Gambar
13.1(a) dan Gambar 13.1(b). Hal ini berbeda dengan Gambar 13.1(c).Citra yang
disebut terakhir mempunyai sifat pengulangan yang mudah dilihat.Namun, pada
ketiga gambar tersebut, jelas bahwa ada suatu tekstur yang terkandung dalam
Pemerolehan Fitur Tekstur 651

setiap citra.Tekstur pada Gambar 13.1(c), dari sisi keteraturan pola, adalah yang
paling mudah untuk dikenali.

(a) Halus (b) Kasar (c) Teratur

Gambar 13.1Berbagai citra yang memiliki sifat tekstur yang berbeda-beda


(Sumber: citra Brodatz)

Perbedaan seperti yang terlihat pada Gambar 13.1akan dicoba dengan


menggunakan beberapa pendekatan yang berorientasi pada tekstur. Dengan
begitu, gambaran tentang efektivitas setiap metode dapat diamati melalui besaran
kuantitatif yang dihasilkan.

13.2 Kategori Tekstur

Berdasarkan keteraturan pengulangan pola dalam objek, teksturdapat


dikategorikan ke dalam dua bentuk: 1) tekstur teratur dan 2) tekstur tidak teratur.
Contoh kedua jenis tekstur ditunjukkan pada Gambar 13.2 dan Gambar
13.3.Tekstur buatan manusia berkecenderungan masuk dalam kategori tekstur
teratur, sedangkan tekstur alamiah bersifat tidak teratur. Berdasarkan tingkat
kekasaran objek, tekstur dibedakan menjadi dua: mikrotekstur dan makrotekstur
(Acharya dan Ray, 2005). Apabila ukuran elemen yang menyusun pengulangan
pola berukuran besar, tekstur dikatakan kasar atau bertekstur makro.Tekstur
seperti itu dinamakan sebagai makrostruktur.Sebaliknya, mikrostruktur
mempunyai sifat elemen-elemen yang menyusun pengulangan pola berukuran
kecil.Berdasarkan perspektif matematis, tekstur dapat dibedakan ke dalam
spektrum stokastis dan spektrum regular.Tekstur stokastis (atau kadang disebut
tekstur statistis) adalah tekstur yang mempunyai bentuk mirip dengan
derau.Tekstur regular (atau terkadang sebagai tekstur struktural) adalah tekstur
652 Pengolahan Citra Teori dan Aplikasi

yang tersusun atas pola-pola periodis. Dalam hal ini, warna/intensitas serta bentuk
elemen tekstur diulang dengan interval yang sama.

Perlu diketahui, terdapat istilah texton. Istilah inilah yang berupa


pola-pola (struktur primitif) yang menyusun tekstur secara
periodik. Istilah tersebut terkadang dinamakan texel (berasal dari
kata “texture element”).

(a) (b)

Gambar13.2Tekstur teratur (a) dan


tekstur tidak teratur (b)
(Gambar (a), (b), dan (c) berasal dari Brodatz)

(a) Waru berdaun hijau (b) Waru varigata

Gambar 13.3Dua daun dengan bentuk yang serupa,


tetapi berbedadalam pola tekstur
Pemerolehan Fitur Tekstur 653

Metode yang digunakan untuk memperoleh fitur tekstur dapat dibedakan


menjadi tiga golongan: 1) metode statistis, 2) metode struktural, dan 3) metode
spektral. Metode statistismenggunakan perhitungan statistikauntuk membentuk
fitur.Contoh yang termasuk sebagai metode statistis yaitu GLCM dan
Tamura.Metode struktural menjabarkansusunan elemen ke dalam tekstur.Contoh
metode struktural adalah Shape Grammar (Petrou dan Sevilla, 2006).Metode
spektral adalah metode yang didasarkan pada domain frekuensi-spasial. Contoh
metode spektral adalah distribusi energi domain Fourier, Gabor, dan filter Laws.

13.3 Tekstur Berbasis Histogram

Metode yang sederhana untuk mendapatkan tekstur adalah dengan


mendasarkan pada histogram.Namun, sebelum membahas fitur-fitur yang dapat
dikenal secara statistis melalui histogram, ada baiknya untuk melihat histogram
dari tiga buah citra yang mengandung tekstur yang berbeda, yang terdapat
diGambar 13.4.Gambar 13.4(a) menunjukkan bahwa citra dengan tekstur halus
memiliki daerah perubahan intensitas yang sempit.Sebaliknya, citra yang kasar
memiliki kontras yang tinggi, ditandai dengan jangkauan intensitas yang lebar
(Gambar 13.4(c) dan (d)). Menurut penglihatan, citra dalam Gambar 13.4(e) juga
termasuk kasar dibandingkan dengan citra pada Gambar 13.4(a) meskipun
beraturan
654 Pengolahan Citra Teori dan Aplikasi

(a) Tekstur halus (b) Histogram tekstur halus

(c) Tekstur kasar (d) Histogram tekstur kasar

(e) Tekstur periodik (f) Histogram tekstur periodik

Gambar 13.4Histogram tiga citra yang bertekstur berbeda

Fitur pertama yang dihitung secara statistisadalah rerata


intensitas.Komponen fitur ini dihitung berdasar persamaan

=∑ . ( ) (13.1)

Dalam hal ini, i adalah aras keabuan pada citra f dan p(i) menyatakan probabilitas
kemunculan i dan L menyatakan nilai aras keabuan tertinggi.Rumus di atas akan
menghasilkan rerata kecerahan objek.
Pemerolehan Fitur Tekstur 655

Fitur kedua berupa deviasi standar. Perhitungannya sebagai berikut:

= ∑ ( − ) () (13.2)

Dalam hal ini, σ2 dinamakan varians atau momen orde dua ternormalisasi karena
p(i) merupakan fungsi peluang. Fitur ini memberikan ukuran kekontrasan.
Fitur skewness merupakan ukuran ketidaksimetrisan terhadap rerata
intensitas.Definisinya :

=∑ ( − ) () (13.3)

Skewness sering disebut sebagai momen orde tiga ternormalisasi.Nilai negatif


menyatakan bahwa distribusi kecerahan condong ke kiri terhadap rerata dan nilai
positif menyatakan bahwa distribusi kecerahan condong ke kanan terhadap
rerata.Dalam praktik, nilai skewness dibagi dengan (L-1)2 supaya ternormalisasi.
Deskriptor energi adalah ukuran yang menyatakan distribusi intensitas
piksel terhadap jangkauan aras keabuan. Definisinya sebagai berikut:

=∑ () (13.4)

Citra yang seragam dengan satu nilai aras keabuan akan memiliki nilai energi
yang maksimum, yaitu sebesar 1. Secara umum, citra dengan sedikit aras keabuan
akan memiliki energi yang lebih tinggi daripada yang memiliki banyak nilai aras
keabuan. Energi sering disebut sebagai keseragaman.
Entropi mengindikasikan kompleksitas citra. Perhitungannya sebagai
berikut:

= −∑ ( ) log ( ( )) (13.5)

Semakin tinggi nilai entropi, semakin kompleks citra tersebut.Perlu diketahui,


entropi dan energi berkecenderungan berkebalikan.Entropi juga
merepresentasikan jumlah informasi yang terkandung di dalam sebaran data.
656 Pengolahan Citra Te
Teori dan Aplikasi

Properti kehhalusan biasa disertakan untuk men


engukur tingkat
kehalusan/kekasarann intensitas
i pada citra. Definisinya sebagai beri
erikut:

# =1− %&'
(13.6)

Pada rumus di atas, σ adalah deviasi standar.Berdasarkan rumus


us di atas, Nilai R
yang rendah menunj
njukkan bahwa citra memiliki intensitas yang
ya kasar. Perlu
diketahui, di dalam m
menghitung kehalusan, varians perlu dinorm
rmalisasi sehingga
am jangkauan [0 1] dengan cara membaginya ddengan (L-1)2.
nilainya berada dalam
Perwujudan perhitungan
p fitur tekstur secara statistis dap
apat dilihat pada
fungsi stattekstu
urberikut.

Program : stattekstur.m

function [Stat] = stattekstur(F)

% STATTEKSTUR Mem
mperoleh statistika tekstur.
% Masukan: F = citra berskala keabuan.
% Keluaran: Stat
S = berisi statistika tekstur
%
% Didasarkan pada Gonzalez, Woods, dan Eddins, 20
004

[m, n] = size(F);
;

% Hitung frekuens
si aras keabuan
L = 256;
Frek = zeros(L,1)
);
F = double(F);
for i = 1 : m
for j = 1 : n
intensitas = F(i,
,j);

Frek(intensitas+1
1) = Frek(intensitas+1) + 1;
end
end

% Hitung probabil
litas
jum_piksel = m * n;
for i=0 : L-1
Prob(i+1) = Frek(
(i+1) / jum_piksel;
end

% Hitung mu
Pemerolehan Fitur Tekstur 657

mu = 0;
for i=0 : L-1
mu = mu + i * Prob(i+1);
end

% Hitung deviasi standar


varians = 0;
for i=0 : L-1
varians = varians + (i - mu)^2 * Prob(i+1);
end

deviasi = sqrt(varians);
varians_n = varians / (L-1)^2; % Normalisasi

% Hitung skewness
skewness = 0;
for i=0 : L-1
skewness = skewness + (i - mu)^3 * Prob(i+1);
end

skewness = skewness / (L-1)^2;

% Energi (Keseragaman)
energi = 0;
for i=0 : L-1
energi = energi + Prob(i+1)^2;
end

% Entropi
entropi = 0;
for i=0 : L-1
ifProb(i+1) ~= 0
entropi = entropi + Prob(i+1) * log(Prob(i+1));
end
end

entropi = -entropi;

% Hitung R atau Smoothness


smoothness = 1 - 1 / (1 + varians_n);

Stat.mu = mu;
Stat.deviasi = deviasi;
Stat.skewness = skewness;
Stat.energi = energi;
Stat.entropi = entropi;
Stat.smoothness = smoothness;

Akhir Program

Contoh penggunaan fungsi stattekstur:

>>Img=imread('C:\Image\sidikjari.png');
658 Pengolahan Citra Teori dan Aplikasi

>> G=stattekstur(Img)
G =

scalar structure containing the fields:

mu = 125.130203247070
deviasi = 45.8705882891252
skewness = 0.0268669028523393
energi = 0.00630368571728468
entropi = 5.10425454860202
smoothness = 0.0313442386279402

>>

Contoh perbandingan statistika tekstur untuk berbagai citra ditunjukkan pada


Tabel 13.1.

Tabel 13.1Fitur tekstur berbasis histogram


Objek Fitur
Rerata intensitas : 161,408
Rerata kontras : 16,089
Skewness : -0,2545
Energi : 0,0220
Entropi : 3,9482
Smoothness : : 0,0039
Rerata intensitas : 127,633
Rerata kontras : 74,137
Skewness : -0,0312
Energi : 0,0077
Entropi : 4,9436
Smoothness : : 0,0779
Rerata intensitas : 162,381
Rerata kontras : 99,3366
Skewness : -6,4603
Energi : 0,1388
Entropi : 4,0303
Smoothness : :0,1318
Pemerolehan Fitur Tekstur 659

Pendekatan yang serupa dengan di depandilakukan dengan menggunakan


probability density function. Apabila p(i) adalah PDF, momen pusat PDF
didefinisikan sebagai

( =∑ ( − )* ) ( . ( ) (13.7)

dengan i=0,1,2,…,L-1 adalah aras keabuan pada citra.Adapun µf adalah rerata


aras keabuan pada citra, yang dihitung seperti berikut

)* = ∑ . ( ) (13.8)

Momen kedua, yakni varians aras keabuan, yang berlaku sebagai ukuran
ketidakhomogenan, berupa

( = =∑ ( − )( ) . ( ) (13.9)

Momen ketiga dan keempat ternormalisasi, yang secara berturut-turut bernama


skewness dan kurtosis, dinyatakan seperti berikut:

+,
=
+' ,/'
(13.10)
+
. = + /' (13.11)
'

Skewness merupakan ukuran asimetri dan kurtosis merupakan ukuran


keseragaman.
Pendekatan tekstur dengan probabilitas mempunyai kelebihan pada
sifatnya yang tidak tergantung pada operasi translasi, penyekalaan, dan
rotasi.Kelemahannya adalah mengabaikan hubungan antarpiksel secara lokal.
Dengan kata lain, tekstur dengan susunan spasial yang berbeda tetapi memiliki
distribusi aras keabuan yang sama tidak dapat dibedakan. Sebagai contoh, tekstur
yang memiliki titik-titik warna hitam dan putih secara berselang-seling tidak
660 Pengolahan Citra Teori dan Aplikasi

dapatdibedakan dengan kotak-kotak yang berwarna hitam dan putih secara


berselang-seling.

13.4 Tekstur Laws

Laws mengemukakan metode yang digunakan untuk mengklasifikasi


setiap kelompok piksel di dalam citra guna menentukan ukuran energi tekstur
lokal (Rangayyan, 2005).Untuk keperluan tersebut, filter yang dilibatkan berupa
Gaussian, deteksi tepi, dan jenis Laplacian.Filter-filter tersebut dipakai untuk
membentuk citra yang berisi energi tekstur, sehingga dapat digunakan untuk
kepentingan segmentasi.
Cadar Laws yang paling sederhana yang digunakan untuk kepentingan
penapisan berukuran 1x 3. Nama filter berupa L3, E3, dan S3. Bentuknya seperti
berikut:

LE = [1 2 1]
E3 = [-1 0 1]
S3 = [-1 2 -1]

Karakteristik ketiga filter ditunjukkan pada Gambar 13.5. Setiap huruf awal di
dalam cadar berasal dari kata-kata seperti berikut (Lemaitre dan Rodojevic, 2012):

L = Local averaging, yang berarti pererataan secara lokal


E = Edge detection (pendeteksian tepi)
S = Spot detection (pendeteksi titik)

L3 1 2 1

E3 -1 0 1

-1 2 -1
S3

Gambar 13.5Cadar Laws berukuran 1x3


Pemerolehan Fitur Tekstur 661

Selain cadar yang berukuran 1x3, terdapat cadar yang berukuran 1x5.
Kelima cadar berupa:

L5 = [1 4 6 4 1]
E5 = [-1 -2 0 2 1]
S5 = [-1 0 2 0 -1]
R5 = [1 -4 6 -4 1]
W5 = [ -1 2 0 -2 1]

Sebagai tambahan, R berasal dari kata “Ripple detection” dan W berasal dari
“Wave detection”. Karakteristik variasi bobot piksel kelima filter ditunjukkan
pada Gambar 13.6.

L5 1 4 6 4 1

E5 -1 -2 0 2 1

S5 -1 0 2 0 -1

W5 -1 2 0 -2 1

R5 1 -4 6 -4 1

Gambar 13.6Cadar Laws berukuran 1x5


662 Pengolahan Citra Teori dan Aplikasi

Penerapannya, pasangan dua cadar dapat digabung berdasar perkalian


vektor. Dengan demikian, akan terbentuk matriks berukuran 3x3 atau 5x5.
Sebagai contoh, L3 x S3 menghasilkan matriks seperti berikut:

1 −1 2 −1
022 −1 2 −1 = 0−2 4 −22 (13.12)
1 −1 2 −1

Oleh karena itu, dengan cadar berukuran 1x3 dapat diperoleh kombinasi perkalian
sebanyak 9, sedangkan dengan cadar berukuran 1x5 dapat terbentuk 25 kombinasi
perkalian. Tabel 13.2 menunjukkan kesembilan kombinasi ketiga cadar
1x3.Adapun Tabel 13.3memperlihatkan kombinasi pada cadar 1x5.

Tabel 13.2Pasangan cadar Laws berukuran 1x3


Nama Matriks Keterangan
Kernel
L3L3 L3TL3 Menyatakan pererataan intensitas aras
keabuan piksel-piksel yang bertetangga
dengan ukuran 3x3
L3E3 L3TE3 Pererataan pada arah vertikal dan
pendeteksian tepi pada arah horizontal
L3S3 L3TS3 Pererataan pada arah vertikal dan
pendeteksian titik pada arah horizontal
E3L3 E3TL3 Pendeteksian tepi pada arah vertikal dan
pererataan intensitas pada arah horizontal
E3E3 E3TE3 Pendeteksian tepi pada arah vertikal dan
horizontal
E3S3 E3TS3 Pendeteksian tepi pada arah vertikal dan
pendeteksian titik pada arah horizontal
S3L3 S3TL3 Pendeteksian titik pada arah vertikal dan
pererataan intensitas pada arah horizontal
S3E3 S3TE3 Pendeteksian titik pada arah vertikal dan
pendeteksian tepi pada arah horizontal
S3S3 S3TS3 Pendeteksian titik pada arah vertikal dan
horizontal
Pemerolehan Fitur Tekstur
Te 663

el 13.3Pasangan cadar Laws berukuran 1x5


Tabel x5
L5L5 E5L5 S5L5 W5L5 R5L5
L5E5 E5E5 S5E5 W5E5 R5E5
L5S5 E5S5 S5S5 W5S5 R5S5
L5W5 E5W5 S5W5 W5W5 R5W55
L5R5 E5R5 S5R5 W5R5 R5R5

Fungsi berna
rnama laws berikut merupakan imple
lementasi untuk
memperoleh citra yan
ang berisi energi tekstur.

Program : laws.m

function [E] = la
aws(F, cadar1, cadar2, w)
% LAWS Berguna un
ntuk memperoleh citra yang berisi
% energi tek
kstur.
% Masukan: F = Citra berskala keabuan.
% cadar1
c dan cadar2 = nama cadar
% (S3,
( S5, E3, dst.)
% w = ukuran jendela.

F = double(F);

% Memperoleh ener
rgi tekstur. Hasil berupa
% citra beruk
kuran sama dengan F.
% w = ukuran jendela

L3 = [1 2 1];
E3 = [-1 0 -1];
S3 = [-1 2 -1];

L5 = [1 4 6 4 1];
;
E5 = [-1 -2 0 2 1];
1
S5 = [-1 0 2 0 -1
1];
R5 = [1 -4 6 -4 1
1];
W5 = [-1 2 0 -2 1
1];

% Cek cadar 1
ifstrcmp(cadar1, 'L3') == 1
Cd1 = L3;
ukuran1 = 3;
elseifstrcmp(cadaar1, 'E3') == 1
Cd1 = E3;
ukuran1 = 3;
elseifstrcmp(cadaar1, 'S3') == 1
Cd1 = S3;
ukuran1 = 3;
elseifstrcmp(cadaar1, 'L5') == 1
664 Pengolahan Citra Teori dan Aplikasi

Cd1 = L5;
ukuran1 = 5;
elseifstrcmp(cadar1, 'E5') == 1
Cd1 = E5;
ukuran1 = 5;
elseifstrcmp(cadar1, 'S5') == 1
Cd1 = S5;
ukuran1 = 5;
elseifstrcmp(cadar1, 'R5') == 1
Cd1 = R5;
ukuran1 = 5;
elseifstrcmp(cadar1, 'W5') == 1
Cd1 = W5;
ukuran1 = 5;
else
ukuran1 = 0;
end

% Cek cadar 2
ifstrcmp(cadar2, 'L3') == 1
Cd2 = L3;
ukuran2 = 3;
elseifstrcmp(cadar2, 'E3') == 1
Cd2 = E3;
ukuran2 = 3;
elseifstrcmp(cadar2, 'S3') == 1
Cd2 = S3;
ukuran2 = 3;
elseifstrcmp(cadar2, 'L5') == 1
Cd2 = L5;
ukuran2 = 5;
elseifstrcmp(cadar2, 'E5') == 1
Cd2 = E5;
ukuran2 = 5;
elseifstrcmp(cadar2, 'S5') == 1
Cd2 = S5;
ukuran2 = 5;
elseifstrcmp(cadar2, 'R5') == 1
Cd2 = R5;
ukuran2 = 5;
elseifstrcmp(cadar2, 'W5') == 1
Cd2 = W5;
ukuran2 = 5;
else
ukuran2 = 0;
end

% Cek kebenaran cadar


ukuran = ukuran1 * ukuran2;
if ~(ukuran == 9 || ukuran == 25)
error('Cadar tidak valid');
end

Matriks = Cd1' * Cd2;

% Konvolusi citra dengan cadar


E = konvolusi2(F, Matriks);

% Lakukan pererataan dengan jendela berukuran w x w


Pemerolehan Fitur Tekstur 665

H=ones(w,w)/(w^2);
E=konvolusi2(E, H);

% Lakukan normalisasi ke 0 s/d 255


terkecil = min(min(E));
terbesar = max(max(E));
E = (E-terkecil) / (terbesar - terkecil) * 255;

% Kosongkan bagian tepi


[tinggi, lebar] = size(E);
E(1:15,:) = 0;
E(tinggi-15: tinggi,:) = 0;
E(:, 1:15) = 0;
E(:, lebar-15 : lebar) = 0;
E = uint8(E);

Akhir Program

Contoh penggunaan fungsi laws:

>> Lena=imread('C:\Image\lena256.png');
>> G=laws(Lena,'R5','S5',15);
>>imshow(G)
>>

Perintah di atas digunakan untuk memperoleh energi tekstur dengan menggunakan


pasangan cadarR5 dan S5 dengan ukuran jendela 15x15.
Contoh hasil penerapan enam pasangan cadar terhadap citra Lena
ditunjukkan pada Gambar 13.7.
666 Pengolahan Citra Teori dan Aplikasi

(a) L5L5, 15x15 (b) L5E5, 15x15

(c) L5L5, 15x15 (d) E5S5, 15x15

(e) S5R5, 15x15 (f) R5S5, 15x15

Gambar 13.7Contoh hasil penggunaan enam cadar Laws

Tekstur Laws biasa dipakai untuk kepentingan segmentasi.Contoh dapat


dilihat pada Petrou dan sevilla (2006), yang menggunakan algoritma deterministic
annealing untuk melakukan segmentasi citra.
Pemerolehan Fitur Tekstur
Te 667

13.5 Lacunarity

Lacunarity merupakan
m ukuran fraktal yang dapat di
digunakan untuk
memperoleh fitur tekstur
te (Petrou&Sevilla, 2006).Definisi lacu
acunarity sebagai
berikut.

M N
1
∑∑ P
2
mnn
MN m =1 n =1 (13.13)
Ls = 2
−1
 1 M N


 MN
∑ ∑
k =1 l =1
Pkl 

M N
1 Pmn
La =
MN
∑∑ 1 M N
−1 (13.14)
m =1 n =1
MNN
∑∑P k =1 l =1
kl

1/ p
   
p
  
 1 M N
 Pmn 
Lp =  ∑∑ − 1  (13.15)
 1 M N 
 MN m =1 n =1
 ∑ ∑ Pkl  
 MMN k =1 l =1
 

Dalam Hal ini, M x N menyatakan ukuran citra, Pmn menyatakann intensitas piksel
pada (m, n), dan p ber
ernilai 2, 4, 6, dan seterusnya.
Implementasi
si lacunarity dapat dilihat di bawah ini.F
Fungsi bernama
lacunarity memerluka
kan masukan berupa citra berwarna.

Program : lacunarity.m

function [H] = la
acunarity(RGB)
% LACUNARITY Berg
guna untuk memperoleh fitur lacunarit
ty.
% Masukan: RG
GB = Citra berwarna
%
% Keluaran: H = Nilai balik berupa lacunarity

GR = im2bw(RGB, 0
0.5);
[tinggi, lebar] = size(GR);

RGB = double(RGB));
GR = double(GR);
668 Pengolahan Citra Teori dan Aplikasi

% Hitung warna rata-rata R, G, dan B


jumlsr_atas=0;
jumlsr_bawah=0;
jumlsg_atas=0;
jumlsg_bawah=0;
jumlsb_atas=0;
jumlsb_bawah=0;
jumls_atas=0;
jumls_bawah=0;
jum_piksel = 0;
for Baris = 1:tinggi
for Kolom = 1:lebar
jum_piksel = jum_piksel + 1;

jumlsr_atas = jumlsr_atas + RGB(Baris, Kolom, 1)^2;


jumlsg_atas = jumlsg_atas + RGB(Baris, Kolom, 2)^2;
jumlsb_atas = jumlsb_atas + RGB(Baris, Kolom, 3)^2;
jumls_atas = jumls_atas + GR(Baris, Kolom)^2;

jumlsr_bawah = jumlsr_bawah + RGB(Baris, Kolom, 1);


jumlsg_bawah = jumlsg_bawah + RGB(Baris, Kolom, 2);
jumlsb_bawah = jumlsb_bawah + RGB(Baris, Kolom, 3);
jumls_bawah = jumls_bawah + GR(Baris, Kolom);
end
end

jumlar=0;
jumlag=0;
jumlab=0;
jumla=0;

juml2r=0;
juml2g=0;
juml2b=0;
juml2=0;

juml4r=0;
juml4g=0;
juml4b=0;
juml4=0;

juml6r=0;
juml6g=0;
juml6b=0;
juml6=0;

juml8r=0;
juml8g=0;
juml8b=0;
juml8=0;

juml10r=0;
juml10g=0;
juml10b=0;
juml10=0;

for Baris = 1:tinggi


for Kolom = 1:lebar
jumlar = jumlar + abs(RGB(Baris, Kolom, 1)) / ...
Pemerolehan Fitur Tekstur 669

(jumlsr_bawah/jum_piksel) -1;
jumlag = jumlag + abs(RGB(Baris, Kolom, 2)) / ...
(jumlsg_bawah/jum_piksel) -1;
jumlab = jumlab + abs(RGB(Baris, Kolom, 3)) / ...
(jumlsb_bawah/jum_piksel) -1;
jumla = jumla + abs(GR(Baris, Kolom)) / ...
(jumls_bawah/jum_piksel) -1;

juml2r = juml2r + (RGB(Baris, Kolom, 1) / ...


(jumlsr_bawah/jum_piksel) -1)^2;
juml2g = juml2g + (RGB(Baris, Kolom, 2) / ...
(jumlsg_bawah/jum_piksel) -1)^2;
juml2b = juml2b + (RGB(Baris, Kolom, 3) / ...
(jumlsb_bawah/jum_piksel) -1)^2;
juml2 = juml2 + (GR(Baris, Kolom) / ...
(jumls_bawah/jum_piksel) -1)^2;

juml4r = juml4r + (RGB(Baris, Kolom, 1) / ...


(jumlsr_bawah/jum_piksel) -1)^4;
juml4g = juml4g + (RGB(Baris, Kolom, 2) / ...
(jumlsg_bawah/jum_piksel) -1)^4;
juml4b = juml4b + (RGB(Baris, Kolom, 3) / ...
(jumlsb_bawah/jum_piksel) -1)^4;
juml4 = juml4 + (GR(Baris, Kolom) / ...
(jumls_bawah/jum_piksel) -1)^4;

juml6r = juml6r + (RGB(Baris, Kolom, 1) / ...


(jumlsr_bawah/jum_piksel) -1)^6;
juml6g = juml6g + (RGB(Baris, Kolom, 2) / ...
(jumlsg_bawah/jum_piksel) -1)^6;
juml6b = juml6b + (RGB(Baris, Kolom, 3) / ...
(jumlsb_bawah/jum_piksel) -1)^6;
juml6 = juml6 + (GR(Baris, Kolom) / ...
(jumls_bawah/jum_piksel) -1)^6;

juml8r = juml8r + (RGB(Baris, Kolom, 1) / ...


(jumlsr_bawah/jum_piksel) -1)^8;
juml8g = juml8g + (RGB(Baris, Kolom, 2) / ...
(jumlsg_bawah/jum_piksel) -1)^8;
juml8b = juml8b + (RGB(Baris, Kolom, 3) / ...
(jumlsb_bawah/jum_piksel) -1)^8;
juml8 = juml8 + (GR(Baris, Kolom) / ...
(jumls_bawah/jum_piksel) -1)^8;

juml10r = juml10r + (RGB(Baris, Kolom, 1) / ...


(jumlsr_bawah/jum_piksel) -1)^10;
juml10g = juml10g + (RGB(Baris, Kolom, 2) / ...
(jumlsg_bawah/jum_piksel) -1)^10;
juml10b = juml10b + (RGB(Baris, Kolom, 3) / ...
(jumlsb_bawah/jum_piksel) -1)^10;
juml10 = juml10 + (GR(Baris, Kolom) / ...
(jumls_bawah/jum_piksel) -1)^10;
end
end

H.lsr = (jumlsr_atas / jum_piksel) / ...


(jumlsr_bawah / jum_piksel)^2 - 1;
H.lsg = (jumlsg_atas / jum_piksel) / ...
(jumlsg_bawah / jum_piksel)^2 - 1;
670 Pengolahan Citra Teori dan Aplikasi

H.lsb = (jumlsb_atas / jum_piksel) / ...


(jumlsb_bawah / jum_piksel)^2 - 1;
H.ls = (jumls_atas / jum_piksel) / ...
(jumls_bawah / jum_piksel)^2 - 1;

H.lar = jumlar / jum_piksel;


H.lag = jumlag / jum_piksel;
H.lab = jumlab / jum_piksel;
H.la = jumla / jum_piksel;

H.l2r = sqrt(juml2r / jum_piksel);


H.l2g = sqrt(juml2g / jum_piksel);
H.l2b = sqrt(juml2b / jum_piksel);
H.l2 = sqrt(juml2 / jum_piksel);

H.l4r = (juml4r / jum_piksel)^(1/4);


H.l4g = (juml4g / jum_piksel)^(1/4);
H.l4b = (juml4b / jum_piksel)^(1/4);
H.l4 = (juml4 / jum_piksel)^(1/4);

H.l6r = (juml6r / jum_piksel)^(1/6);


H.l6g = (juml6g / jum_piksel)^(1/6);
H.l6b = (juml6b / jum_piksel)^(1/6);
H.l6 = (juml6 / jum_piksel)^(1/6);

H.l8r = (juml8r / jum_piksel)^(1/8);


H.l8g = (juml8g / jum_piksel)^(1/8);
H.l8b = (juml8b / jum_piksel)^(1/8);
H.l8 = (juml8 / jum_piksel)^(1/8);

H.l10r = (juml10r / jum_piksel)^(1/10);


H.l10g = (juml10g / jum_piksel)^(1/10);
H.l10b = (juml10b / jum_piksel)^(1/10);
H.l10 = (juml10 / jum_piksel)^(1/10);

Akhir Program

Contoh penggunaan fungsi lacunarity:

>>Img = imread('C:\Image\lapangan.png');
>> G = lacunarity(Img)
G =

scalar structure containing the fields:

lsr = 0.241901390093493
lsg = 0.309382645500090
Pemerolehan Fitur Tekstur 671

lsb = 0.330578855094647
ls = 2.62283837310405
lar = 2.26230885876551e-016
lag = -6.26450950373207e-015
lab = 1.98432322425409e-015
la = 5.19464568545421e-013
l2r = 0.491834718267793
l2g = 0.556221759283250
l2b = 0.574959872595208
l2 = 1.61951794466923
l4r = 0.624600061772115
l4g = 0.712312444691126
l4b = 0.754989005910267
l4 = 1.92692968430085
l6r = 0.703270891746616
l6g = 0.810362947598715
l6b = 0.864331218749092
l6 = 2.11922715098243
l8r = 0.753937245024470
l8g = 0.872513094744670
l8b = 0.932269246020702
l8 = 2.23333538990262
l10r = 0.789310933422419
l10g = 0.914539454662371
l10b = 0.977728062526614
l10 = 2.30607817570218

>>

Perlu diketahui:

lsr berarti Ls untuk komponen R;


lsg berarti Ls untuk komponen G;
672 Pengolahan Citra Teori dan Aplikasi

lsb berarti Ls untuk komponen B;


ls berarti Ls untuk aras keabuan;
lar berarti La untuk komponen R;
lag berarti La untuk komponen G;
lab berarti La untuk komponen B;
la berarti La untuk aras keabuan;
l2r berarti L2 untuk komponen R;
l2g berarti L2 untuk komponen G;
l2b berarti L2 untuk komponen B;
l2 berarti L2 untuk aras keabuan;
l4r berarti L4 untuk komponen R;
l4g berarti L4 untuk komponen G;
l4b berarti L4 untuk komponen B;
l4 berarti L4 untuk aras keabuan;
l6r berarti L6 untuk komponen R;
l6g berarti L6 untuk komponen G;
l6b berarti L6 untuk komponen B;
l6 berarti L6 untuk aras keabuan;
l8r berarti L8 untuk komponen R;
l8g berarti L8 untuk komponen G;
l8b berarti L8 untuk komponen B;
l8 berarti L8 untuk aras keabuan;
l10r berarti L10 untuk komponen R;
l10g berarti L10 untuk komponen G;
l10b berarti L10 untuk komponen B;
l10 berarti L10 untuk aras keabuan.

13.6GLCM

Gray Level Co-occurrence Matrices (GLCM) pertama kali diusulkan oleh


Haralick pada tahun 1973 dengan 28 fitur untuk menjelaskan pola spasial
(Kulkarni, 1994). GLCM menggunakan perhitungan tekstur pada orde
kedua.Pengukuran tekstur pada orde pertama menggunakan perhitungan
Pemerolehan Fitur Tekstur 673

statistikadidasarkan pada nilai piksel citra asli semata, seperti varians, dan tidak
memperhatikan hubungan ketetanggaan piksel.Pada orde kedua, hubungan
antarpasangan dua piksel citra asli diperhitungkan (Hall-Beyer, 2007).
Misalkan, f(x, y) adalah citra dengan ukuran Nx dan Ny yang memiliki
piksel dengan kemungkinan hingga L level dan 445 adalah vektor arah ofset spasial.
6789:5 ( , <)didefinisikan sebagai jumlah piksel dengan < ∈ 1, . . , 7 yang terjadi
pada ofset445 terhadap piksel dengan nilai ∈ 1, . . , 7, yang dapat dinyatakan
dalam rumus (Newsam dan Kammath, 2005):

6789:5 ( , <) = #?(@ , A ), (@ , A ) ∈ BCD , CE F × BCD , CE F|I(@ , A ) =


< =(@2−@1,A2−A1) (13.16)

Dalam hal ini, ofset 445dapat


berupa sudut dan/atau jarak.Sebagai contoh, gambar
berikut memperlihatkan empat arah untuk GLCM.

Gambar 13.8Contoh arah untuk GLCM


dengan sudut 0o, 45o, 90o, dan 135o

Untuk kepentingan ilustrasi, ketetanggaan piksel dapat dipilih ke arah


timur (kanan). Salah satu cara untuk merepresentasikan hubungan ini yaitu berupa
(1,0), yang menyatakan hubungan dua piksel yang berjajar horizontal dengan
piksel bernilai 1 diikuti dengan piksel bernilai 0. Berdasarkan komposisi tersebut,
jumlah kelompok piksel yang memenuhi hubungan tersebut dihitung.Hal ini
diilustrasikan pada Gambar 13.9.
674 Pengolahan Citra Teori dan Aplikasi

0 1 2 3 0 1 2 3

0 0 0 1 1 0 0,0 0,1 0,2 0,3

1 0 0 1 1 1 1,0 1,1 1,2 1,3

2 0 2 2 2 2 2,0 2,1 2,2 2,3

3 2 2 3 3 3 3,0 3,1 3,2 3,3

(a) Citra asli (a) Komposisi Piksel

Komposisi piksel 0 dengan 0

0 1 2 3

0 2 2 1 0

1 0 2 0 0

2 0 0 3 1

3 0 0 0 1
Komposisi piksel 3
dengan 3
(c) Jumlah pasangan piksel

Gambar 13.9Penentuan awal matriks GLCM berbasis pasangan dua piksel

Matriks pada Gambar 13.9(c) dinamakan matrix framework. Matriks ini


perlu diolah menjadi matriks yang simetris dengan cara menambahkan dengan
hasil transposnya, sebagaimana diperlihatkan pada Gambar 13.10.

Gambar 13.10Contoh pembentukan matriks GLCM yang simetris


Pemerolehan Fitur Tekstur 675

Untuk menghilangkan ketergantungan pada ukuran citra, nilai-nilai elemen


GLCM perlu dinormalisasi sehingga jumlahnya bernilai 1. Dengan demikian,
contoh di depan akan menjadi seperti berikut:

4 2 1 0
L Q
K24 24 24 24P
2 4 0 0
K P
K24 24 24 24P
K1 0 6 1P
K24 24 24 24P
K0 0 1 2P
J24 24 24 24O

Untuk mendapatkan fitur GLCM, hanya beberapa besaran yang diusulkan


Haralick yang dipakai. Misalnya, Newsam dan Kammath (2005) hanya
menggunakan lima besaran untuk GLCM, berupa angular second moment (ASM),
contrast, inverse different moment (IDM), entropi, dan korelasi.
ASM yang merupakan ukuran homogenitas citra dihitung dengan cara
seperti berikut:

RS9 = ∑ ∑T (6789( , <) (13.17)

Dalam hal ini, L menyatakan jumlah level yang digunakan untuk komputasi.
Kontras yang merupakan ukuran keberadaan variasi aras keabuan piksel
citra dihitung dengan cara seperti berikut:

U V = ∑W ?∑| T| W 6789( , <)X (13.18)

Fitur IDM digunakan untuk mengukur homogenitas. IDM dihitung dengan


cara seperti berikut:

([ \]( ,T)'
YZ9 = ∑ ∑T
%( T)'
(13.19)

Entropi menyatakan ukuran ketidakteraturan aras keabuan di dalam citra.


Nilainya tinggi jika elemen-elemen GLCM mempunyai nilai yang relatif sama.
676 Pengolahan Citra Te
Teori dan Aplikasi

Nilai rendah jika ele


elemen-elemen GLCM dekat dengan nilai 0 atau 1. Rumus
untuk menghitung ent
entropi:

^ = −∑ ∑T (6789( , <)log (6789( , <) (13.20)

Korelasi yang
ng merupakan ukuran ketergantungan linea
ear antarnilaiaras
keabuan dalam citraa dihitung
d dengan menggunakan rumus:

∑aecd ∑abcd( T)([ \]( ,T) fe g fb g


U _V =
&e g &b g
(13.21)

dengan

)`=∑ ∑T ∗ 6789( , <) (13.22)


)T ` = ∑ ∑T < ∗ 6789( , <) (13.23)

T =∑ ∑T 6789( , <)( − ) ` ) (13.24)


=∑ ∑T 6789( , <)( − ) ` ) (13.25)

Implementasi
si GLCM untuk mendapatkan beberapa fitur
fi yang telah
dijelaskan khusus unt
ntuk jarak satu ditunjukkan di bawah ini.

Program : glcm.m

function [G0, G45


5, G90, G135] = glcm(F)
% GLCM Menghasilk
kan fitur GLCM.
% Masukan: F = Citra berskala keabuan
% Keluaran: Fitur
F = fitur GLCM untuk beberapa sud
dut.

[tinggi, lebar] = size(F);

% --- Bentuk GLCM


M
GLCM0 = zeros(256
6, 256);
total_piksel0 = 0;
0

GLCM45 = zeros(25
56, 256);
total_piksel45 = 0;
Pemerolehan Fitur Tekstur 677

GLCM90 = zeros(256, 256);


total_piksel90 = 0;

GLCM135 = zeros(256, 256);


total_piksel135 = 0;

for y=2: tinggi-1


for x=2: lebar-1
% -- Sudut 0
a = F(y, x);
b = F(y, x+1);
GLCM0(a+1, b+1) = GLCM0(a+1, b+1) + 1;
total_piksel0 = total_piksel0 + 1;

% -- Sudut 45
a = F(y, x);
b = F(y-1, x+1);
GLCM45(a+1, b+1) = GLCM45(a+1, b+1) + 1;
total_piksel45 = total_piksel45 + 1;

% -- Sudut 90
a = F(y, x);
b = F(y-1, x);
GLCM90(a+1, b+1) = GLCM90(a+1, b+1) + 1;
total_piksel90 = total_piksel90 + 1;

% -- Sudut 135
a = F(y, x);
b = F(y-1, x-1);
GLCM135(a+1, b+1) = GLCM135(a+1, b+1) + 1;
total_piksel135 = total_piksel135 + 1;
end
end

GLCM0 = GLCM0 / total_piksel0;


GLCM45 = GLCM45 / total_piksel45;
GLCM90 = GLCM90 / total_piksel90;
GLCM135 = GLCM135 / total_piksel135;

% --- Hitung ASM


asm0 = 0.0;
asm45 = 0.0;
asm90 = 0.0;
asm135 = 0.0;
for a=0 : 255
for b=0 : 255
asm0 = asm0 + (GLCM0(a+1, b+1) * GLCM0(a+1, b+1));
asm45 = asm45 + (GLCM45(a+1, b+1) * GLCM45(a+1, b+1));
asm90 = asm90 + (GLCM90(a+1, b+1) * GLCM90(a+1, b+1));
asm135 = asm135 + (GLCM135(a+1, b+1) * GLCM135(a+1, b+1));
end
end

% --- Hitung kontras


kontras0 = 0.0;
kontras45 = 0.0;
kontras90 = 0.0;
kontras135 = 0.0;
678 Pengolahan Citra Teori dan Aplikasi

for a=0 : 255


for b=0 : 255
kontras0 = kontras0 + (a-b)*(a-b)*(GLCM0(a+1,b+1));
kontras45 = kontras45 + (a-b)*(a-b)*(GLCM45(a+1,b+1));
kontras90 = kontras90 + (a-b)*(a-b)*(GLCM90(a+1,b+1));
kontras135 = kontras135 + (a-b)*(a-b)*(GLCM135(a+1,b+1));
end
end

% --- Hitung IDM


idm0 = 0.0;
idm45 = 0.0;
idm90 = 0.0;
idm135 = 0.0;
for a = 0: 255
for b = 0 : 255
idm0 = idm0 + (GLCM0(a+1, b+1) / (1+(a-b)*(a-b)));
idm45 = idm45 + (GLCM45(a+1, b+1) / (1+(a-b)*(a-b)));
idm90 = idm90 + (GLCM90(a+1, b+1) / (1+(a-b)*(a-b)));
idm135 = idm135 + (GLCM135(a+1, b+1) / (1+(a-b)*(a-b)));
end
end

% --- Hitung entropi


entropi0 = 0.0;
entropi45 = 0.0;
entropi90 = 0.0;
entropi135 = 0.0;
for a=0 : 255
for b=0 : 255
if (GLCM0(a+1, b+1) ~= 0)
entropi0 = entropi0 - (GLCM0(a+1, b+1) * ...
(log(GLCM0(a+1, b+1))));
end

if (GLCM45(a+1, b+1) ~= 0)
entropi45 = entropi45 - (GLCM45(a+1, b+1) * ...
(log(GLCM45(a+1, b+1))));
end

if (GLCM90(a+1, b+1) ~= 0)
entropi90 = entropi90 - (GLCM90(a+1, b+1) * ...
(log(GLCM90(a+1, b+1))));
end

if (GLCM135(a+1, b+1) ~= 0)
entropi135 = entropi135 - (GLCM135(a+1, b+1) * ...
(log(GLCM135(a+1, b+1))));
end
end
end

% -- Hitung kovarians
% -- Hitung px [] dan py [] dulu
korelasi0 = 0.0;
px0 = 0;
py0 = 0;
reratax0 = 0.0;
reratay0 = 0.0;
Pemerolehan Fitur Tekstur 679

stdevx0 = 0.0;
stdevy0 = 0.0;

korelasi45 = 0.0;
px45 = 0;
py45 = 0;
reratax45 = 0.0;
reratay45 = 0.0;
stdevx45 = 0.0;
stdevy45 = 0.0;

korelasi90 = 0.0;
px90 = 0;
py90 = 0;
reratax90 = 0.0;
reratay90 = 0.0;
stdevx90 = 0.0;
stdevy90 = 0.0;

korelasi135 = 0.0;
px135 = 0;
py135 = 0;
reratax135 = 0.0;
reratay135 = 0.0;
stdevx135 = 0.0;
stdevy135 = 0.0;

for a=0 : 255


for b=0: 255
px0 = px0 + a * GLCM0 (a+1, b+1);
py0 = py0 + b * GLCM0 (a+1, b+1);

px45 = px45 + a * GLCM45 (a+1, b+1);


py45 = py45 + b * GLCM45 (a+1, b+1);

px90 = px90 + a * GLCM90 (a+1, b+1);


py90 = py90 + b * GLCM90 (a+1, b+1);

px135 = px135 + a * GLCM135 (a+1, b+1);


py135 = py135 + b * GLCM135 (a+1, b+1);
end
end

% Hitung deviasi standar


for a=0 : 255
for b=0 : 255
stdevx0 = stdevx0 + (a-px0) * (a-px0) * GLCM0(a+1, b+1);
stdevy0 = stdevy0 + (b-py0) * (b-py0) * GLCM0(a+1, b+1);

stdevx45 = stdevx45 + (a-px45) * ...


(a-px45) * GLCM45(a+1, b+1);
stdevy45 = stdevy45 + (b-py45) * ...
(b-py45) * GLCM45(a+1, b+1);

stdevx90 = stdevx90 + (a-px90) * ...


(a-px90) * GLCM90(a+1, b+1);
stdevy90 = stdevy90 + (b-py90) * ...
(b-py90) * GLCM90(a+1, b+1);
680 Pengolahan Citra Teori dan Aplikasi

stdevx135 = stdevx135 + (a-px135) * ...


(a-px135) * GLCM135(a+1, b+1);
stdevy135 = stdevy135 + (b-py135) * ...
(b-py135) * GLCM135(a+1, b+1);
end
end

% Hitung korelasi
for a = 0 : 255
for b = 0 : 255
korelasi0 = korelasi0 + ((a-px0)*(b-py0)* ...
GLCM0 (a+1, b+1)/(stdevx0*stdevy0));
korelasi45 = korelasi45 + ((a-px45)*(b-py45)* ...
GLCM45 (a+1, b+1)/(stdevx45 * stdevy45));
korelasi90 = korelasi90 + ((a-px90)*(b-py90)* ...
GLCM90 (a+1, b+1)/(stdevx90 * stdevy90));
korelasi135 = korelasi135 + ((a-px135)*(b-py135)* ...
GLCM135 (a+1, b+1)/(stdevx135 * stdevy135));
end
end

G0.asm = asm0;
G0.kontras = kontras0;
G0.idm = idm0;
G0.entropi = entropi0;
G0.korelasi = korelasi0;

G45.asm = asm45;
G45.kontras = kontras45;
G45.idm = idm45;
G45.entropi = entropi45;
G45.korelasi = korelasi45;

G90.asm = asm90;
G90.kontras = kontras90;
G90.idm = idm90;
G90.entropi = entropi90;
G90.korelasi = korelasi90;

G135.asm = asm135;
G135.kontras = kontras135;
G135.idm = idm135;
G135.entropi = entropi135;
G135.korelasi = korelasi135;

Akhir Program

Contoh penggunaan fungsiglcm :

>>Batik=rgb2gray(imread('C:\Image\batik.png'));
>> [G0, G45, G90, G135] = glcm(Batik)
G0 =
Pemerolehan Fitur Tekstur 681

scalar structure containing the fields:

asm = 6.5150e-004
kontras = 537.71
idm = 0.10643
entropi = 8.4453
korelasi = 6.8221e-004

G45 =

scalar structure containing the fields:

asm = 5.6409e-004
kontras = 778.22
idm = 0.085559
entropi = 8.5749
korelasi = 5.8479e-004

G90 =

scalar structure containing the fields:

asm = 6.6484e-004
kontras = 350.20
idm = 0.10536
entropi = 8.3458
korelasi = 7.5820e-004

G135 =

scalar structure containing the fields:


682 Pengolahan Citra Teori dan Aplikasi

asm = 5.8796e-004
kontras = 705.20
idm = 0.092194
entropi = 8.5474
korelasi = 6.1446e-004

>>

Pada contoh di atas, G0, G45, G90, dan G135 secara berturut-turut berisi lima
buah fitur tekstur pada arah 00, 450, 900, dan 1350.
Perlu diketahui, fitur GLCM bergantung pada rotasi.Oleh karena itu,
pendekatan yang dapat dilakukan adalah dengan meratakan nilai fitur untuk
keempat sudut.

Latihan

1. Jelaskan kegunaan tekstur untuk kepentingan analisis.


2. Jelaskan pengertian istilah-istilah berikut.
(a) Tekstur teratur
(b) Mikrotekstur
(c) Makrotekstur
(d) Tekstur stokastik
(e) Tekstur struktural
3. Cobalah berikan ilustrasi tentang texton.
4. Apa kelebihan dan kelemahan tekstur yang berbasis histogram?
5. Jelaskan istilah-istilah berikut yang berhubungan dengan tekstur.
(a) Entropi
(b) Energi
(c) Skewness
(d) Kurtosis
Pemerolehan Fitur Tekstur 683

6. Gambarkan tiga cadar berukuran 1x3 yang digunakan oleh Laws untuk
mendapatkan energi tekstur. Apa kegunaan setiap cadar?
7. Apa yang dimaksud lacunarity? Bagaimana perumusannya?
8. Mengapa GLCM digolongkan sebagai tekstur statistisberorde dua?
9. Implementasikan fungsi untuk menghitung skewness dan kurtosis berdasarkan
PDF yang dibahas di Subbab 13.3. Ujilah pada tiga citra yang menurut Anda
berbeda dalam tekstur.
10. Modifikasilah fungsi lacunarity agar dapat dipakai untuk menghitung fitur
tekstur citra berskala keabuan.
11. Tulislah fungsi untuk mengeksplorasi rumus
1/ p
   
p
  
 1 M N
 Pmn 
Lp =  ∑∑ − 1 
 1 M N 
 MN m =1 n =1
 ∑ ∑ Pkl  
  MN
 k =1 l =1

dengan menjadikan p sebagai argumen.

12. Lakukan eksperimen untuk memotret suatu objek yang mengandung suatu
pola. Kemudian lakukan pemutaran dengan berbagai sudut. Hitunglah nilai
rerata fitur-fitur yang didasarkan pada GLCM untuk empat sudut (0o, 45o, 90o,
dan 135o) untuk setiap citra. Apakah hasilnya mirip?
13. Kembangkan fungsi GLCM yang bisa mengukur pada jarak lebih dari 1
piksel.
684 Pengolahan Citra Teori dan Aplikasi
BAB 14
Aplikasi
Temu Kembali
Citra
Setelah bab ini berakhir, diharapkan pembaca dapat
memahami berbagai hal yang berhubungan dengan temu
kembali citra dan mampu mempraktikkannya.

Aplikasi temu kembali citra

Perhitungan jarak antarduacitra

Contoh penerapan jarak


686 Pengolahan Citra Teori dan Aplikasi

14.1 Pengantar Aplikasi TemuKembali Citra

Temu kembali citra (image retrieval) merupakan proses untuk


mendapatkan sejumlah citra berdasarkan masukan satu citra. Istilah yang lebih
spesifik lagi adalahcontent based image retrieval (CBIR) atau temu kembali citra
berdasarkan isinya. Istilah tersebut dikemukakan pertama kali oleh Kato pada
tahun 1992 (Zhang, 2002).Awalnya, CBIR digunakan untuk pencarian citra secara
otomatis di dalam suatu database didasarkan pada fitur warna dan bentuk.Sejak
saat itu, bermunculan berbagai sistem CBIR. Contoh yang terkenal adalahQuery
By Image Content (QBIC) yang dikembangkan oleh IBM. Pada perkembangan
selanjutnya, fitur tekstur juga dimasukkan sebagai bagian untuk melakukan
pencarian citra.
Prinsip temu kembali citra ditunjukkan pada Gambar 14.1.Fitur sejumlah
objek telah disimpan di dalam database. Selanjutnya, ketika suatu citra dijadikan
sebagai bahan query, fitur akan dihitung setelah melalui prapemrosesan dan
segmentasi. Fitur yang diperoleh dibandingkan dengan fitur semua objek yang
terdapat di dalam database, melalui perhitungan jarak fitur.Hasil jarak ini sering
disebut sebagai skor atau ranking.Seluruh skor diurutkan dari yang paling bernilai
kecil ke yang paling besar.Objek-objek yang menghasilkan skor rendah adalah
citra yang mirip dengan citra query.Untuk membatasi, hanya n citra yang
disajikan sebagai hasil query.Dalam hal ini, nilai ndapat ditentukan oleh sistem
ataupun pengguna.
Aplikasi Temu Kembali Citra 687

Citra
Masukan Prapemrosesan dan
Segmentasi
Database

Ekstraksi
Fitur

Perhitungan
Jarak Fitur

Pengurutan
Jarak

Pemilihan n Citra
Hasil

Gambar 14.1Prinsip temu kembali citra

14.2 Perhitungan Jarak Antara Dua Citra

Jarak merupakan pendekatan yang umum dipakai untuk mewujudkan


pencarian citra.Fungsinya adalah untuk menentukan kesamaan atau
ketidaksamaan dua vektor fitur.Tingkat kesamaan dinyatakan dengan suatu skor
atau ranking.Semakin kecil nilai ranking, semakin dekat kesamaan kedua vektor
tersebut.
Pengukuran jarak dilakukan dengan beberapa cara. Beberapa metode yang
umum dipakai dijelaskan di dalam subbab ini.

14.2.1 Jarak Euclidean

Jarak Euclidean didefinisikan sebagai berikut:

, = ∑ − (14.1)
688 Pengolahan Citra Teori dan Aplikasi

Dalam hal ini, v1 dan v2 adalah dua vektor yang jaraknya akan dihitung dan N
menyatakan panjang vektor. Apabila vektor memiliki dua nilai, jarak Euclidean
dapat dibayangkan sebagai sisi miring segitiga (Gambar 14.2(a)).

2 + 2
y+x max(y, x)

y y y

x x x

(a) jarak Euclidean (b) Jarak city-block (c) Jarak Chebychef

Gambar 14.2Gambaran jarak Euclidean, City-block, dan Chebychef

Sebagai contoh, terdapat dua vektor seperti berikut:

= [ 4, 3, 6]
= [ 2, 3, 7]

Jarak Euclidean kedua vektor adalah:

= 4−2 + 3−3 + 6−7 = √5 = 2,2361

Jarak Euclidean merupakan jarak yang umum dipakai dalam temu kembali
citra. Beberapa penelitian yang memanfaatkan jarak ini antara lain dilakukan oleh
Hastuti, dkk. (2009) dan Kadir, dkk. (2011a).

14.2.2 Jarak City-Block

Jarak city-block didefinisikan sebagai berikut:

, =∑ | − | (14.2)
Aplikasi Temu Kembali Citra 689

Dalam hal ini, v1 dan v2 adalah dua vektor yang jaraknya akan dihitung dan N
menyatakan panjang vektor. Apabila vektor memiliki dua nilai, jarak city-block
dapat dibayangkan sebagai jarak vertikal plus horizontal dari vektor pertama ke
vektor kedua (Gambar 14.2(b)).
Sebagai contoh, terdapat dua vektor seperti berikut:

= [ 4, 3, 6]
= [ 2, 3, 7]

Jarak city-blockkedua vektor tersebut berupa

= |4 − 2| + |3 − 3| + |6 − 7| = 3

14.2.3 Jarak Kotak Catur

Jarak kotak caturatau dikenal pula dengan nama jarak


Chebychefdidefinisikan sebagai berikut:

, = max → | − | (14.3)

Dalam hal ini, v1 dan v2 adalah dua vektor yang jaraknya akan dihitung dan N
menyatakan panjang vektor. Apabila vektor memiliki dua nilai, jarak dapat
dibayangkan sebagai jarak terpanjang antara jarak horizontal dan jarak vertikal
(Gambar 14.2(c)).
Sebagai contoh, dengan dua vektor yang sama dengan di depan ( =
[ 4, 3, 6]dan = [ 2, 3, 7]), jarak kotak catur kedua vektor tersebut berupa

= max |4 − 2|, |3 − 3|, |6 − 7| = 2

14.2.4 Jarak Minkowski

Jarak Minkowskididefinisikan sebagai berikut:


690 Pengolahan Citra Teori dan Aplikasi

%/'
, = ∑ | − |$ (14.4)

Dalam hal ini, v1 dan v2 adalah dua vektor yang jaraknya akan dihitung dan N
menyatakan panjang vektor. Apabila p bernilai 1, jarak berupa city-block.Apabila
p bernilai 2, jarak berupa Euclidean.
Sebagai contoh, dengan dua vektor yang sama dengan di depan ( =
[ 4, 3, 6]dan = [ 2, 3, 7]), jarak Minkowskikedua vektor tersebut untuk p
berupa 3 berupa:

%/) %/)
= 4−2 ( + 3−3 ( + 6−7 ( = √9 = 2,0801

14.2.5 Jarak Canberra

Jarak Canberra didefinisikan sebagai berikut:

|.% /.0 |
, = ∑ |.% |1|.% |
(14.5)

Dalam hal ini, v1 dan v2 adalah dua vektor yang jaraknya akan dihitung dan N
menyatakan panjang vektor.
Sebagai contoh, dengan dua vektor yang sama dengan di depan ( =
[ 4, 3, 6]dan = [ 2, 3, 7]), jarak Canberrakedua vektor tersebut berupa

|4 − 2| |3 − 3| |6 − 7| 2 0 1
= + + = + + = 0,4103
4+2 3+3 6+7 6 6 13

14.2.6 Jarak Bray Curtis

Jarak Bray Curtis atau jarak Sorensen (Putra, 2010) didefinisikan sebagai
berikut:

∑2
34%|.% /.0 |
, = ∑2 ∑2 (14.6)
34% .% 1 34% .0
Aplikasi Temu Kembali Citra 691

Dalam hal ini, v1 dan v2 adalah dua vektor yang jaraknya akan dihitung dan N
menyatakan panjang vektor.
Sebagai contoh, dengan dua vektor yang sama dengan di depan ( =
[ 4, 3, 6]dan = [ 2, 3, 7]), jarak BrayCurtiskedua vektor tersebut berupa

|4 − 2| + |3 − 3| + |6 − 7| 2 + 1
= = = 0,12
4+2+3+3+6+7 25

14.2.7 Divergensi KullbackLeibler

Divergensi KullbackLeibler (Deselaers, 2003) didefinisikan sebagai


berikut:

.%
56 , =∑ 789 (14.6)
.0

Dalam hal ini, v1 dan v2 adalah dua vektor yang jaraknya akan dihitung dan N
menyatakan panjang vektor.
Sebagai contoh, dengan dua vektor yang sama dengan di depan ( =
[ 4, 3, 6]dan = [ 2, 3, 7]), jarak menurut divergensiKullbackLeibler kedua
vektor tersebut berupa

4 3 6
= 4 ∗ log > ? + 3 ∗ log > ? + 6 ∗ log > ? = 1,8477
2 3 7

14.2.8 Divergensi Jensen Shannon

Divergensi Jensen Shannon (Deselaers, 2003) didefinisikan sebagai


berikut:

∗ .% ∗ .0
@A , =∑ . 789 . + . 789 (14.6)
% 1 .0 .% 1 .0

Dalam hal ini, v1 dan v2 adalah dua vektor yang jaraknya akan dihitung dan N
menyatakan panjang vektor.
692 Pengolahan Citra Te
Teori dan Aplikasi

Sebagai conto
toh, dengan dua vektor yang sama dengann di depan ( =
[ 4, 3, 6]dan = [ 2
2, 3, 7]), jarak menurut divergensi Jensen
en Shannonkedua
vektor tersebut berupa
pa
2∗4 2∗3 2∗6
= 4 ∗ log > ? + 3 ∗ log > ? + 6 ∗ log > ?+
4+2 3+3 6+7
∗ ∗( ∗F
2 ∗ log C E + 3 ∗ log C E + 7 ∗ log C E = 0,3
,3783
D1 (1( G1F

14.3 Contoh Penerap


apan Jarak

Untuk mema
mahami manfaat jarak dua vektor dala
lam pengolahan
citra,perhatikan conto
toh berikut.

Program : queryzer.m

function queryzer
r(berkas)
% QUERYZER Bergun
na untuk melakukan query dengan
% menggunakan
n momen Zernike.

% Citra yang akan


n menjadi acuan
Citra{1} = 'C:\Im
mage\ikan-4.png';
Citra{2} = 'C:\Im
mage\ikan-2.png';
Citra{3} = 'C:\Im
mage\ikan-3.png';
Citra{4} = 'C:\Im
mage\ikan-1.png';
Citra{5} = 'C:\Im
mage\guppi-4.png';
Citra{6} = 'C:\Im
mage\guppi-2.png';
Citra{7} = 'C:\Im
mage\guppi-3.png';
Citra{8} = 'C:\Im
mage\guppi-1.png';

% Proses momen Ze
ernike dan hitung jarak City-block
Query = im2bw(imr
read(berkas), 0.5);
ZQuery = zermomen
nt(Query, 10);
Hasil = [];
for i=1 : length(
(Citra)
disp(sprintf(
('proses terhadap citra %s', Citra{i}
}));
Ref = im2bw(i
imread(Citra{i}), 0.5);
ZRef = zermom
ment(Ref, 10);

jarak = 0;
for j=1 : len
ngth(ZRef)
jarak = jarak
j + abs(ZRef(j) - ZQuery(j));
end

Hasil(i).nama
a = Citra{i};
Hasil(i).jara
ak = jarak;
end
Aplikasi Temu Kembali Citra 693

% Urutkan data pada array Hasil


jum = length(Hasil);
for p = 2: jum
x = Hasil(p);

% Sisipkan x ke dalam data[1..p-1]


q = p - 1;
ketemu = 0;

while ((q >= 1) && (~ketemu))


if (x.jarak < Hasil(q).jarak)
Hasil(q+1) = Hasil(q);
q = q - 1;
else
ketemu = 1;
end

Hasil(q+1) = x;
end
end

% Tampilkan hasil
disp('Hasil pencocokan: ');
for i=1 : jum
disp(sprintf('Citra %s - Jarak: %f',Hasil(i).nama, ...
Hasil(i).jarak));
end

Akhir Program

Fungsi queryzer memerlukan masukan berupa nama citra. Citra


tersebutlah yang akan dibandingkan dengan delapan citra yang berfungsi sebagai
citra referensi (database). Jarak citra masukan terhadap kedelapan citra dihitung
dengan menggunakan jarak city-block.Selanjutnya, dilakukan pengurutan dari
jarak terkecil ke jarak terbesar.Hasilnya menyatakan kesamaan dengan citra
masukan.Semakin kecil nilai jarak berarti semakin dekat dengan citra masukan.
Berikut adalah contoh pemanggilan fungsi queryzer:

>>queryzer('C:\Image\ikan-5.png')
proses terhadap citra C:\Image\ikan-4.png
proses terhadap citra C:\Image\ikan-2.png
proses terhadap citra C:\Image\ikan-3.png
proses terhadap citra C:\Image\ikan-1.png
694 Pengolahan Citra Te
Teori dan Aplikasi

proses terh
hadap citra C:\Image\guppi-4.pn
ng
proses terh
hadap citra C:\Image\guppi-2.pn
ng
proses terh
hadap citra C:\Image\guppi-3.pn
ng
proses terh
hadap citra C:\Image\guppi-1.pn
ng
Hasil penco
ocokan:
Citra C:\Im
mage\ikan-3.png - Jarak: 0.3115
540
Citra C:\Im
mage\ikan-2.png - Jarak: 0.3172
283
Citra C:\Im
mage\ikan-1.png - Jarak: 0.3172
283
Citra C:\Im
mage\ikan-4.png - Jarak: 1.0636
666
Citra C:\Im
mage\guppi-2.png - Jarak: 1.896
6431
Citra C:\Im
mage\guppi-1.png - Jarak: 1.901
1020
Citra C:\Im
mage\guppi-3.png - Jarak: 1.908
8009
Citra C:\Im
mage\guppi-4.png - Jarak: 1.913
3503
>>

Sebagai pembanding
ng, guppi-5.png dapat dipakai sebagai bah
ahan query.Akan
terlihat bahwa ikan guppi-1.png
g hingga guppi-4.png akan mem
miliki jarak yang
lebih pendek dibandin
ing dengan kelompok ikan-1.png hingga ikan--4.png.

14.4 Pengembangan
n Lebih Lanjut

Contoh temuu kembali citra yang dicontohkandi Subbab 14.3


1 mempunyai
kelemahan yaitulam
ma untuk memperoleh fitur citra.Untuk
uk mempercepat
pencarian, fitur untuk
uk semua citra referensi dapat dihitung terleb
ebih dulu melalui
suatu skrip dan kemu
mudian disimpan di dalam suatu database.De
Dengan demikian,
pembandingan fitur dilakukan
d secara langsung, tanpa perlu menyia
yiapkan perolehan
fitur.
Sebagai gambbaran, perhatikan skrip berikut.

Program : dbfitur.m

% DBFITUR Berguna
a untuk menghitung fitur
Aplikasi Temu Kembali Citra 695

% menggunakan momen Zernike dan kemudian


% menyimoannya ke dalaa file .MAT

% Citra yang akan menjadi acuan


Citra{1} = 'C:\Image\ikan-4.png';
Citra{2} = 'C:\Image\ikan-2.png';
Citra{3} = 'C:\Image\ikan-3.png';
Citra{4} = 'C:\Image\ikan-1.png';
Citra{5} = 'C:\Image\guppi-4.png';
Citra{6} = 'C:\Image\guppi-2.png';
Citra{7} = 'C:\Image\guppi-3.png';
Citra{8} = 'C:\Image\guppi-1.png';

% Proses menghitung momen Zernike


Fitur = [];
for i=1 : length(Citra)
disp(sprintf('Menghitung fitur citra %s', Citra{i}));
Image = im2bw(imread(Citra{i}), 0.5);
Z.momen = zermoment(Image, 10);
Z.nama = Citra(i);
Fitur(i).momen = Z.momen;
Fitur(i).nama = Z.nama;
end

% Simpan ke file dbfitur.mat


save('dbfitur', 'Fitur');

clear Citra Fitur;

Akhir Program

Skrip di atas cukup dipanggil sekali, seperti berikut:

>>dbfitur
Menghitung fitur citra C:\Image\ikan-4.png
Menghitung fitur citra C:\Image\ikan-2.png
Menghitung fitur citra C:\Image\ikan-3.png
Menghitung fitur citra C:\Image\ikan-1.png
Menghitung fitur citra C:\Image\guppi-4.png
Menghitung fitur citra C:\Image\guppi-2.png
Menghitung fitur citra C:\Image\guppi-3.png
Menghitung fitur citra C:\Image\guppi-1.png
>>
696 Pengolahan Citra Te
Teori dan Aplikasi

Dengan cara sepertii it


itu, fitur kedelapan citra akan tersimpan difile
ledbfitur.mat.
Selanjutnya,, temu kembali citra dapat dilakukan melalui fungsi
queryzer2.Isinyaa seperti
s berikut.

Program : queryzer2.m

function queryzer
r2(berkas)
% QUERYZER2 Bergu
una untuk melakukan query dengan
% menggunakan
n momen Zernike dengan membaca
% data acuan dari file dbfitur.

load dbfitur; % Memuat


M database fitur

% Proses momen Ze
ernike dan hitung jarak City-block
Query = im2bw(imr
read(berkas), 0.5);
ZQuery = zermomen
nt(Query, 10);
Hasil = [];
jumFitur = length
h(Fitur(1).momen);
for i=1 : length(
(Fitur)
nama = Fitur(
(i).nama;

jarak = 0;
for j=1 : jum
mFitur
jarak = jarak
j + abs(ZQuery(j) - Fitur(i).mome
en(j));
end

Hasil(i).nama
a = Fitur(i).nama;
Hasil(i).jara
ak = jarak;
end

% Urutkan data pa
ada array Hasil
jum = length(Hasi
il);
for p = 2: jum
x = Hasil(p);
;

% Sisipkan x ke dalam data[1..p-1]


q = p - 1;
ketemu = 0;

while ((q >= 1) && (~ketemu))


if (x.jarrak < Hasil(q).jarak)
Hasil
l(q+1) = Hasil(q);
q = q - 1;
else
ketem
mu = 1;
end

Hasil(q+1
1) = x;
end
end
Aplikasi Temu Kembali Citra 697

% Tampilkan hasil secara visual


disp('Hasil pencocokan dapat dilihat pada jendela gambar');
subplot(3,3,1);
G = imread(berkas); imshow(G);
title('Query');
for i=1 : jum
subplot(3,3, i+1);
G = imread(char(Hasil(i).nama)); imshow(G);
title(num2str(Hasil(i).jarak));
end

Akhir Program

Contoh penggunaan fungsi queryzer2 seperti berikut.

>>queryzer2('C:\Image\ikan-5.png')
Hasil pencocokan dapat dilihat pada jendela gambar
>>

Hasilnya dapat dilihat pada Gambar 14.3. Gambar tersebut memperlihatkan citra
query dan citra-citra hasil yang dilengkapi dengan nilai jarak antara citra
bersangkutan terhadap citraquery, yang telah diurutkan dari jarak terpendek ke
jarak terpanjang.
698 Pengolahan Citra Teori dan Aplikasi

Gambar 14.3 Hasil query secara visual berdasar urutan besar jarak

Latihan

1. Jelaskan pengertian temu kembali citra.


2. Terdapat dua vektor seperti berikut:

= [ 3, 8, 6,5]
= [ 4, 6, 7,8]

Hitunglah jarak menurut:


a) jarak City-block
b) jarak Euclidean
c) jarak Canberra
d) jarak Chebychef
e) jarak Bray Curtis
Aplikasi Temu Kembali Citra 699

3. Tunjukkan bahwa rumus jarak Chebychef


∑ | − |
, =
∑ +∑

identik dengan

∑ | − |
, =
∑ +

4. Buatlah fungsi semacam queryzer, tetapi fitur yang digunakan berupa


momen Hu.
5. Buatlah fungsi semacam queryzer, tetapi fitur yang digunakan
menggunakan deskriptorFourier dengan jumlah:
(a) 30 buah
(b) 40 buah
(c) 50 buah

Amati hasilnya.Adakah kesimpulan yang dapat diambil?

6. Cobalah untuk membuat tiga fungsi yang melakukan perhitungan jarak


melalui momen Zernike dengan menggunakan pendekatan:

a) jarak Euclidean
b) jarak Canberra
c) jarak Chebychef
d) jarak Bray Curtis

Amati hasil yang didapatkan.Apakah dapat ditarik sesuatu kesimpulan dari


situ?
700 Pengolahan Citra Teori dan Aplikasi

6. Cobalah pula untuk melakukan pengukuran jarak terhadap fitur tekstur.


Bandingkan beberapa metode untuk memperoleh fitur tekstur yang dibahas
dalam Bab 13.

Anda mungkin juga menyukai