Teori dan Aplikasi
Dilengkapi CD beris erisi program-program cont contoh, file-file latihan, dan Octave Oct
Abdul Kadir Abd 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++. Kodekode 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 GLOSARIUM INDEKS
743 751 757
xi
Pengolahan Citra Teori dan Aplikasi Pengantar pengolahan citra Pengenalan dasar citra Operasi piksel dan histogram Operasi ketetanggaan piksel Operasi geometrik Pengolahan citra di kawasan frekuensi Morfologi untuk pengolahan citra Operasi pada citra biner Pengolahan citra berwarna Segmentasi citra Restorasi citra Ekstraksi fitur bentuk dan kontur Ekstraksi fitur tekstur Aplikasi temu kembali citra Panduan Octave
Buku ini sangat cocok dipakai oleh mahasiswa Teknologi Informasi,Teknik Informatika, Teknik Elektro, dan jurusan teknik lainyang sedang atau hendak mempelajari pengolahan citra untuk berbagai kepentingan.
Semua contoh mudah dipraktikkandengan menggunakan Octave ataupun MATLAB.Algoritma dan kode yang disajikan tidak menutup kemungkinan 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: http://www.dxhealthcorp.com)
(b) Contoh hasil CT Scan (Sumber: 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
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)
1.5
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 rendah
(b) Citra dengan kontras yang 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
Pengolahan Citra, Teori dan Aplikasi
12 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
0
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.
Pengolahan Citra, Teori dan Aplikasi
14
6 6 6 6 6 6 6 6 6 6 6 6
6 6 6 6 6 6 6 6 6 6 6 6
6 89 89 89 89 89 6 6 89 89 89 89
(a) Citra berukuran 12 x 12
6 237 237 237 237 237 6 6 237 237 237 237
6 6 6 89 237 237 237 237 237 6 6 89 237 237 237 237 237 6 6 89 237 237 237 237 6 6 89 237 237 237 237 6 6 89 237 237 237 6 6 89 237 237 6 6 6 89 237 237 237 6 6 89 237 237 237 237 237 6 6 89 237 237 237 237 237 6 6 89 237 237 237 237 237 6 6 89 237 237 237 237 237 6 6 89
237 237 237 237 237 237 237 237 237 237 237 237
(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 2 3 4
6
6
6
6
6
6
6
89 237 237 237 237
6
6
89 237 237 237
6
6
6
89 237 237 237 237
6
6
89 237 237
6
6
89 237 237 237 237
6
6
89 237 237
5 6 7 8 9
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
10 11
6
6
89 237 237 237
6
6
6
6
89 237 237 237 237
6
6
12
6
6
89 237 237 237 237 237
6
6 89 237 237 237
89 237 237 237 237 89 237 237 237 89 237 237 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.
Pengolahan Citra, Teori dan Aplikasi
16
(a) Citra yang akan dinyatakan dalam isyarat digital
(b) Citra ditumpangkan pada grid
1 1 1 1 0 1 1 1
1 1 0 0 0 0 0 1
1 1 0 0 0 0 0 1
1 1 0 0 0 0 0 1
1 0 0 0 0 0 0 0
0 1 0 0 0 0 0 1
1 1 1 0 0 0 0 1
1 1 1 1 1 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 warna
Piksel
1
1
Jangkauan Penggunaan
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
32
0-255
CMYK (cetakan digital)
4
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.
Pengolahan Citra, Teori dan Aplikasi
18
(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 piksel
(c) Citra berukuran 128 x 128 piksel
(b) Citra berukuran 256 x 256 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.
Pengolahan Citra, Teori dan Aplikasi
20
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
.tif, .tiff
Tagged
Gambar TIFF
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
Format
21
Ekstensi
Keterangan
Gambar 1:16. GIF
.gif
Graphics
Interface
merupakan
Format
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
penerapan Mendukung
karena
adanya
lisensi
GIF.
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.
Pengolahan Citra, Teori dan Aplikasi
22
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.
Pengolahan Citra, Teori dan Aplikasi
24
Gambar 2.8Contoh penampilan gambar pada Img
Apabila dikehendaki untuk menampilkan dua citradi dua jendelamasingmasing, 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.
Pengolahan Citra, Teori dan Aplikasi
26
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
0
255
255
Kuning
Gambar 2.12 menunjukkan pemetaan warna dalam ruang tiga dimensi.Adapun Gambar 2.13 menunjukkan keadaan suatu citra dan representasi warnanya.
B
255
Cyan
Biru
Magenta
Putih
255
0 Hitam
Hijau
255 Merah
Kuning
R Gambar 2.12 Warna RGB dalam ruang berdimensi tiga
G
Pengolahan Citra, Teori dan Aplikasi
28
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.
1 2
M-1 3
M
Komponen B
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);
Pengolahan Citra, Teori dan Aplikasi
30
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.
Pengolahan Citra, Teori dan Aplikasi
32
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.
Pengolahan Citra, Teo eori dan Aplikasi
34
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, 1,
(2.3)
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
Pengolahan Citra, Teori dan Aplikasi
36 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.
Pengolahan Citra, Teori dan Aplikasi
38
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
Fungsi
39
Tabel 2.5Fungsi yang disediakan Octave untuk kepentingan konversi ke aras keabuan 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.
Pengolahan Citra, Teori dan Aplikasi
40
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’);
Pengolahan Citra, Teori dan Aplikasi
42 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 berukuran 256x1. Per erintah bar digunakan untuk membuat diagram 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 masingmasing 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 ,
=
,
+
telah meningkat nilai kecerahan semua pikselnya sebesar
(3.2) 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
(a) Keadaan awal
53
(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 peregangan kontras
(b) Histogram gambar (a)
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
f
0 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 −
,
Untuk mempraktikkan Persamaan 3.7, perintah berikut dapat dicoba:
>>Img = imread('C:\Image\lena256.png'); >> R = 255 - Img;
(3.7)
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
(a) Citra pemetaan dengan logaritma
59
(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. g 2 255
45o
f
0 f1
f2
Gambar 3.115Contoh pemotongan aras keabuan denga gan 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
5 ,6 7
, $ = 0,1,2, … , + − 1
(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
(a) Histogram awal
65
(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 ( * jum_kolom); alpha = (L-1) / (jum_baris 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: ,
=
,
− '89:9;<=>
'89:8-;
255 - − '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)
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 T3
P
T1
T4
T4
T3
T2
T5
P
T1
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, − 1 ,
− 1, − 1
+ 1, − 1 ,
=
(4.2)
+ 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) 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 bintik-bintik putih
(b) Hasil pemfilteran gambar (a)
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 bintik-bintik putih
(c) Citra boneka berbintik dengan derau
(b) Hasil pemrosesan mobil
(d) Hasil pemrosesan boneka
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 ,
,
− 1,
,
− 1, + 1 ,
+ 1,
,
+ 1, + 1
, +1 ,
Contohuntuk satu piksel ditunjukkan pada Gambar 4.6.
(4.4)
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
(a) Citra mobil dengan bintik-bintik putih
(c) Citra boneka dengan derau
83
(b) Hasil pemrosesan terhadap gambar (a)
(d) Hasil pemrosesan terhadap 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
-1
0
1
1
2
-2
0
2
2
3
-1
0
1
3
1
2
n
m
n
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 angkaangka 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
− , −
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.
(4.5)
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
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.
87
88
Pengolahan Citra, Teori dan Aplikasi
•
Apabila kernel h diputar sebesar 180o (k = rot180(h)), perhitungan g(y,x) dapatdiperolehmelalui ,
•
+
= ,
+
Untuk
*
, ℎ *
kernel
+ #2 + 1, + (2 + 1
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-m m2, 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 : ting ggi_f-m2 for x=n2+1 : lebar_f-n2 % Pelaksa anaan konvolusi F(baris, kolom) jum = 0; for p=-m2 2 : m2 for q=-n2 q : n2 j jum = jum + H(p+m2+1,q+n2+1) * ... F2(y-p, x-q); end end x = jum; G(y-m2, x-n2) 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
A
Citra
B 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 awal
Bagian kernel di luar citra
Baris awal
Citra Baris akhir
Indeks tercermin Indeks melingkar
Kolom akhir
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
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_f f % 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
97
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 0−2 0 −1 0
−1 1 2 = 0 −22 31 2 −1 1
0 −14
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 berukuran sama Keluaran: • g : Citra hasil konvolusi
bentuk
vektor
mendatar
1. 2. 3. 4.
m2 ← floor(jumlah_kolom_kernel_hx) t←f // Proses y 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.
dan
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 : ting ggi_f-m2 for x=1 : leb bar_f jum = 0; for p=-m2 2 : 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=-m2 2 : 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
pemrosesangedung.pngmenggunakankonvolusi.mdan
hasil
konvolusi3.m.Pemrosesan
dengan kedua algoritma tersebut memberikan hasil visual yang sedikit berbeda.
(a) Hasil pemrosesan dengan konvolusi.m
(b) Hasil pemrosesan dengan 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
(c) Citra dengan frekuensi rendah
(b) Frekuensi tinggi
(d) Citra berfrekuensi tinggi
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).
1/6
0
1
0
1
2
1
0
1
0
1/9
1
1
1
1
1
1
1
1
1
#1
1/10
#2
1
1
1
1
2
1
1
1
1
#3
1/16
1
2
1
2
4
2
1
2
1
#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 40 40 40 40 128 128 128 128 128 128 128 128 128 128 128
40 40 40 40 40 40 40 40 40 128 128 128 128 128 128 128 128 128 128 128
40 40 40 40 40 40 40 40 40 128 128 128 128 128 128 128 128 128 128 128
40 40 40 40 40 40 40 40 40 128 128 128 128 128 128 128 128 128 128 128
40 40 40 40 40 40 40 40 40 128 128 128 128 128 128 128 128 128 128 128
(a) Citra dengan frekuensi rendah
(c) Citra dengan frekuensi rendah
128 40 128 40 128 40 128 40 128 40 128 40 128 40 128 40 128 40 128 40
128 40 128 40 128 40 128 40 128 40 128 40 128 40 128 40 128 40 128 40
128 40 128 40 128 40 128 40 128 40 128 40 128 40 128 40 128 40 128 40
128 40 128 40 128 40 128 40 128 40 128 40 128 40 128 40 128 40 128 40
128 40 128 40 128 40 128 40 128 40 128 40 128 40 128 40 128 40 128 40
(b) Citra dengan frekuensi tinggi
(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 40 40 40 40 69 99 128 128 128 128 128 128 128 128 128
40 40 40 40 40 40 40 69 99 128 128 128 128 128 128 128 128 128
40 40 40 40 40 40 40 69 99 128 128 128 128 128 128 128 128 128
(a) Citra dengan frekuensi rendah
99 69 99 69 99 69 99 69 99 69 99 69 99 69 99 69 99 69
99 69 99 69 99 69 99 69 99 69 99 69 99 69 99 69 99 69
99 69 99 69 99 69 99 69 99 69 99 69 99 69 99 69 99 69
(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); sil penapisan akan ditampilkan pada jendela yang ya terpisah. Gambar asal dan hasi Gambar 4.20 menunjukkan me hasil penapisan dengan filter #2 # pada Gambar 4.17. Contoh terse rsebut menghaluskan
menunjukkan bahwa filter lolos-rrendah
pperubahan-perubahan
yang
drastis. is.
mampu
Perhatikan
ketajamangentingpada adagoldhillmenjadidiperhalussetelah melalui ppenapisan.Begitu pula derau pada bonek neka.
Operasi Ketetanggaan Piksel
109
(a) Citra boneka yang dilengkapi derau
(b) Hasil penapisan citra boneka
(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 derau
(b) Hasil dengan kernel #1
(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 lolostinggi 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
0 0 0 0 0 0 0 0 88 0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 88 0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 88 0 0 0 0 0 0 0 0 0
(a) Citra dengan frekuensi rendah
113
0 176 0 176 0 176 0 176 0 176 0 176 0 176 0 176 0 176
0 176 0 176 0 176 0 176 0 176 0 176 0 176 0 176 0 176
0 176 0 176 0 176 0 176 0 176 0 176 0 176 0 176 0 176
(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
(a) Citra bulat.png
(c) Hasil dengan kernel #2
115
(b) Hasil dengan kernel #1
(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
-1
-1
-1
c > 8; misalnya 9
Gambar 4.27Contoh filter high boost
Gambar berikut menunjukkan efek saat c diisi dengan 9, 10, dan 11.
Operasi Ketetanggaan Piksel
(a) Citra boneka
(c) Hasil untuk c=10
117
(b) Hasil untuk c=9
(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: 5
.
=$
78 9:8 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 = $
/
5 1, 1 = 5 1, −1 = 5 −1,1 = 5 −1, −1 = $ 5 2,1 = 5 1, 2 = 5 −2,1 = 5 −2, −1 = $
5 2,0 = 5 0, 2 = 5 0, −2 = 5 −2,0 = $
= 0,6065 /
= 0,3679 = 0,0821
= 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
(b) Pemetaan ke depan
Citra masukan
Citra keluaran
(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)
Bingka kai citra hasil ha rotasi
Bag agian citra asli yan ang masuk di bin ingkai citra hasil
Hasil pemanfaatan pembalikan perhitungan pemutaran citra (pemetaan ke belakang)
Citra asli yang diputar
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; % Sud dut 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) (y2>=1) G(y, x) else G(y, x) end
&& (x2<=lebar) && ... && (y2<=tinggi) = F2(y2, x2); = 0;
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; % Sudu ut 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 : leb bar x2 = roun nd(x * cosa - y * sina); y2 = roun nd(y * cosa + x * sina); if (x2>=1 1) && (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)
a p = floor(p’) q = floor(q’)
f(p’,q’) b
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 bicubic ic interpolation, yang menggunakan 16 pikse 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
m n
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 −
∗
−# ∗
−
−# ∗ −
∗
Untuk kepenting ngan pemutaran citra sejauh
#
(5.8) (5.9)
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
(a) Citra gedung asli
137
(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)
m 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; % Sud dut pemutaran rad = pi * sudut/ /180; cosa = cos(rad); sina = sin(rad); x11 x12 x13 x14
= = = =
1; lebar; lebar; 1;
y11 y12 y13 y14
= = = =
1; 1; tinggi; tinggi;
Operasi Geometrik
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);
139
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 1. FOR baris is ← 1 TO M 2. FOR kol olom ← 1 TO N 3. g(bar aris, kolom) ← f(N – baris + 1, kolom) 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
1. FOR baris is ← 1 TO M 2. 3. 4.
FOR kol olom ← 1 TO N g(bar aris, kolom) ← f(baris, N – kolom + 1) 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:
′ , ′1
,
((
)(
0
()
))
0
+ + -/ 0 1 1
(5.11)
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
1
0
s
1
0
0
vertikal sebesar s Pembengkokan secara 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 affi ine. % 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 : leb bar x2 = a11 * x + a12 * y + tx; y2 = a21 * x + a22 * y + ty; if (x2>=1 1) && (x2<=lebar) && ... (y2>=1 1) && (y2<=tinggi) % p q a b
Laku ukan interpolasi bilinear = fl loor(y2); = fl loor(x2); = y2 2-p; = 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(2 2); for y=1 : tinggi for x=1 : leb bar x2 = x + ax * y2 = y + ay * if (x2>=1 1) && (y2>=1 1) && % p q a b
sin(2 * pi * y / tx); sin(2 * pi * x / ty); (x2<=lebar) && ... (y2<=tinggi)
Laku ukan interpolasi bilinear = fl loor(y2); = fl loor(x2); = y2 2-p; = 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
5
(5.15)
6 cos :
6 sin :
(5.14)
158
Pengolahan Citra, Te Teori dan Aplikasi
dengan
6
:
=
−
>6?@
5
)
AAB , B C
−
5
)
D 6
(5.16) EF
− 6 /6
EF
(5.17)
Contoh berikut mengg ggunakan rmaks sebesar ½ diagonal citra dan α sebesar 43o.
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 : leb bar r = sqrt( ((x-xc)^2+(y-yc)^2); beta = at tan2(y-yc, x-xc) + … alpha * (rmaks - r) / rmaks; x2 = xc + r * cos(beta); y2 = yc + r * sin n(beta);
if (x2>=1 1) && (x2<=lebar) && ... (y2>=1 1) && (y2<=tinggi) % p q a b
Laku ukan interpolasi bilinear = fl loor(y2); = fl loor(x2); = y2 2-p; = 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.
′
H
− I ∗ tan ! , L M 6 ≤ 6 , L M 6 > 6
EF P
EF
(5.18)
160
Pengolahan Citra, Te Teori dan Aplikasi
′
Q
tan C , L M 6 ≤ 6 − I ∗ tanA! , L M 6 > 6
EF P
EF
(5.19)
dengan (
!
R1 − T ∗ 6? sin 6? Z
!
R1 − T ∗ 6? sin 6? Z
6
(
S
=
I 6
S
=6 5
5
EF
−
=
5
EF
=
)
)
6)
−
5
[ \
` [ \ ] ^_ ]
(5.20)
[ \ ` [ \ ] ^_ ]
(5.21)
)
5
UV! 6/2
+ XX /2
isebut indeks refraksi atau indeks pantulan. Perlu diketahui, Y dis
(5.22) (5.23) (5.24) (5.25) (5.26)
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 : leb bar 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^2 2)); 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) % p q a b
Lakukan interpolasi bilinear = floor(y2); = floor(x2); = y2-p; = 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
!a
b
!b
(5.27) (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 : leb bar 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
% p q a b
163
Lakukan interpolasi bilinear = floor(y2); = floor(x2); = y2-p; = 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 #
1 =*
+
2$1 -+ 4
+
2$1 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 -+ 4
+
2$2 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 #
3 =*
+
2$3 -+ 4
+
2$3 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
0.25000
-0.00000
-0.25000
Im = 0.00000 >> 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: , . = ∑/ 0
∑
, 1 cos 52$ 6
+
70 /
89 − sin 52$ 6
+
70 /
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: 1,
= / ∑/ 0
∑
.,
cos 52$ 6
+
70 89 + /
sin 52$ 6
+
70 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 itra berukuran NxN, kompleksitas berupa O(N (N4). Tentu saja, 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(imrea ad(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
<
real cos
+
<
untuk u dan x sama dengan 0,1,2,3,4,5,6,7 dengan nilai
ditunjukkan pada Tabel 6.2.
<
Tabel 6.2Nilai-nilai x
<
0
1
2
3
4
5
6
7
0
1+j0
1+j0
1+j0
1+j0
1+j0
1+j0
1+j0
1+j0
1
1+j0
2
1+j0
3
1+j0
4
1+j0
5
1+j0
6
1+j0
7
1+j0
u 1
√2 −
+
0+j
1
√2
1
√2 1
−
√2
1+j0
1
√2
+
1
√2
0+ j
−
1
√2
−
1
√2
0+j
−
-1+j0 0+j
-1+j0 0+i
1
+
√2
0-j
+
1+j0 0+j
1
√2 1
√2
1
−
1+j0
−
1
√2
+
0-j
1
√2
−
√2 1
√2 1
√2
-1+j0
−
1+j0 0-j
+
1
√2
+
1+j0
−
1+j0 0-j
−
0+j
1+j0 -1+j0
1
√2
1
√2
−
0+j
+
1
√2
+
1
√2 1
√2 1
√2 1
√2
0-j
−
-1+j0 0-j
−
1
√2
+
1+j0
−
-1+j0 0-j
−
0-j
1+j0 0-j
1
√2
1
√2
−
0-j
−
1
√2
+
1
√2 1
√2 1
√2 1
√2
Pengolahan Citra di Kawasan Frekuensi
Terlihat bahwa nilai-nilai
<
179
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: ∅ .,
= BC
D 7,
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
(a) Citra lena256.png
(c) Visualisasi hasil FFT dengan skala logaritmik intensitas
181
(b) Visualisasi hasil FFT. Hanya di pojok kiri atas yang terlihat putih
(d) Visualisasi hasil FFT. Dengan 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
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
183
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 dan
(6.9)
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)
2r>b + d -1
(6.12)
dan
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: • 1. m
pxq (ukuran baru citra untuk f dan h)
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
Gambar 6.8Contoh oh pemfilteran dengan filter Sobel pada kaw wasan frekuensi
Pada perintah p di depan Hs=fs special('sobel'); diguna nakan untuk memperoleh filter Sobel. Fung ngsi fspecial 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 % r p q
Menentukan ukuran baru untuk perluasan citra = nextpow2(2 * max(a, b)); = 2 ^ r; = 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 Ideal
Butterworth
Gaussian
Citra terkait
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:
G .,
=H
1 IC IC J ., 0 IC J IC .,
KJ M LJ
(6.13)
ad bilangan non-negatif yang biasa disebu but radius filter, Dalam hal ini, D0 adalah 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 % r p q
Menentukan ukur ran baru untuk perluasan citra = nextpow2(2 * max(a, b)); = 2 ^ r; = 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 lo yang BLPF (Butterwor 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 .,
=
NOP 7, 7
/PQ RST
(6.15)
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
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 % r p q
Menentukan ukuran baru untuk perluasan citra = nextpow2(2 * max(a, b)); = 2 ^ r; = 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
195
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: G .,
=
US V,W SXS
(6.16)
denganY merupakan deviasi standar. Sebagai contoh, dengan menggunakan Ysama dengan Do maka G .,
=
US V,W 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: ra yang telah difilter % F - citr Fs = double(imrea ad(berkas)); [a, b] = size(Fs) ); %Peroleh ukuran citra % r p q
Menentukan ukur ran baru untuk perluasan citra = nextpow2(2 * max(a, b)); = 2 ^ r; = 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 alau n tidak disebutkan % Menentukan n ka 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 Ideal
Butterworth
Citra terkait
Pengolahan Citra di Kawasan K Frekuensi
Filter
201
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 % r p q
Menentukan ukur ran baru untuk perluasan citra = nextpow2(2 * max(a, b)); = 2 ^ r; = 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 % r p q
Menentukan ukur ran baru untuk perluasan citra = nextpow2(2 * max(a, b)); = 2 ^ r; = p;
gkauan frekuensi u dan v % Menentukan jang 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 lolosrendah 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
Gambar 7.3Contoh beberapa kernel
1
212
Pengolahan Citra, Teori dan Aplikasi
Hotspot
Citra
0
1
0
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), (3,2), (3,3), (3,4), (4,2), (4,3), (5,2)}
B={(1,1), (2,1), (2,2), (3,3), (4,2), (5,1)}
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), (3,2), (3,3), (3,4), (4,2), (4,3), (5,2)}
B={(1,1), (2,1), (2,2), (3,3), (4,2), (5,1)}
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), (3,2), (3,3), (3,4), (4,2), (4,3), (5,2)}
Ac = {(1,1), (1,3), (1,4), (1,5), (2,1), (2,4), (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 Contoh ditunjukkan di Gambar 7.8.
(7.7)
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
B={(1,1), (2,1), (2,2), (3,3), (4,2), (5,1)}
A={(1,2), (2,2), (2,3), (3,2), (3,3), (3,4), (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), (4,3), (5,2) }
C = { (1,1), (5,1) }
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
= {(3,2), (3,3), (3,4), (4,3), (4,4)}
A={(2,2), (2,3), (3,2), (3,3), (3,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), (3,3), (3,4)}
(A)(2,1) = {(4,3), (4,4), (5,3), (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 0 0 1 1
Masukan 2 0 1 0 1
AND 0 0 0 1
OR 0 1 1 1
Tabel 7.2Tabel kebenaran NOT Masukan
Keluaran
0
1
1
0
Selain ketiga operator yang disebut di depan, operator lain yang kadangkadang digunakan adalah XOR dan NAND. Sifat XOR dan NAND ditunjukkan pada Tabel 7.3. Tabel 7.3Tabel kebenaran XOR dan NAND Masukan 1 0 0 1 1
Masukan 2 0 1 0 1
XOR 0 1 1 0
NAND 1 1 1 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
1
2
3
4
223
5
-1
1
-1
2
0
3
1
0
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
1
1
1
0
0
1
1
1
0
0
1
0
0
0
0
0
0
0
0];
>>H = [0
1
0
1
0
0
1
0];
0
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 21 11 /=1 11 11 01
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 16 155 15 15 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
(c) Erosi dengan H = ones(4)
(b) Hasil konversi ke citra biner
(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 bentukbentuk 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 rtinya, jika suatu Operasi openin 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 ng (band-pass): (AοBh1)- (AοBh2), dengan diam meter Bh1 < Bh2.
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
(a) Hasil konversi ke biner
247
(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 1
= 0 =
= =? =
(7.19)
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 H1 = [ 0 H2 = [ 1 H3 = [ 0 H4 = [ 1 H5 = [ 1 H6 = [ 1 H7 = [ 1 H8 = [ 0
penstruktur 0 0; 1 1 1; 1 1; 1 1 1; 1 1; 0 1 1; 1 0; 1 1 0; 0 0; 1 1 0; 1 1; 0 1 1; 1 1; 1 1 0; 0 1; 0 1 1;
1 0 0 1 1 0 1 1
1 0 1 1 1 0 0 1
1 0 1 0 1 1 0 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
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
B
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)
Implementasi thickening ditunjukkan berikut ini.
B5 )
B6)
B7)
B8)(7.27)
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 H2 H3 H4 H5 H6 H7 H8
= = = = = = = =
[ [ [ [ [ [ [ [
C = F; for p = C = C = C = C = C = C = C = C = end
1 0 1 0 0 0 0 1
1 0 0 0 1 0 0 1
1; 0; 0; 1; 1; 0; 0; 0;
0 0 1 0 0 1 0 1
0 0 0 0 0 0 0 0
0; 0; 0; 1; 1; 0; 1; 0;
0 1 1 0 0 1 0 0
0 1 0 0 0 1 1 0
0 1 0 1 0 0 1 0
]; ]; ]; ]; ]; ]; ]; ];
% Salin citra F ke C 1 : n_iterasi or(C, thm(C,H1)); or(C, thm(C,H2)); or(C, thm(C,H3)); or(C, thm(C,H4)); or(C, thm(C,H5)); or(C, thm(C,H6)); or(C, thm(C,H7)); or(C, thm(C,H8));
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)
M M Konvergensi tercapai ketika LBM = LBP7 . Nah, bila Di = LBTUVWXYWU , 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
L1]
^ =3
A 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]
L 3]
^ =1
^ =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 C C C C
= = = = =
]; ]; ]; ];
zeros(tinggi, lebar); or(C, chull(A, H1)); or(C, chull(A, H2)); or(C, chull(A, H3)); 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) 11
12
14
15
17
18
Himpunan hasil
B 13 16
⊕
1
3
8
2
7
6
5
9
4
19
11+4
12+9
13+5
14+6
15+7
16+2
17+8
18+3
19+1
Diputar 180o 4
9
5
6
7
2
8
3
1
Terbesar = 25
+
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 ); % Nolkan semua pada hasil dilasi G = zeros(tf, lf) % 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
(b) Dilasi dengan elemen struktur berukuran 3x3 dan seluruhnya bernilai 0
(a) Citra mandrill.png
(c) Dilasi dengan elemen struktur berukuran 3x3 dan seluruhnya bernilai 1
(d) Dilasi dengan elemen struktur berukuran 9x9 dan berbentuk bola
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) 11
12
14
15
17
18
Himpunan hasi asil
B 13 16
Θ
1
3
8
2
7
6
5
9
4
19
11-2
12-3
13 13-8
14-2
15-7
16 16-6
17-5
18-9
19 19-4
Terkecil = 5 Hasil
5
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
0
0
1
277
1
1
1
1
0
0 ];
>> G=gerosi(Img, H); imshow(G)
Hasilnya dapat dilihat pada Gambar 7.46.
(a) ) Citra mandrill.tif
(c) Erosi dengan elemen struktur
berukuran 3x3 dan seluruhnya bernilai 1
(b) Erosi dengan elemen penstruktur berukuran 3x3 dan seluruhnya bernilai 0
(d) Erosi dengan elemen struktur berukuran 9x9 dan berbentuk 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
(c) Erosi dengan elemen struktur berukuran 3x3 dan seluruhnya bernilai 1
(b) Dilasi dengan elemen struktur berukuran 3x3 dan seluruhnya bernilai 1
(d) Hasil dilasi – hasil erosi
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 melalui rice.png secara langsung
(c) Konversi citra biner melalui hasil Top-Hat
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
Secara prinsip, operasi ini memperbesar warna putih melalui dilasi,
(7.35)
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
Kode rantai Hampiran poligon …
• • •
Rasio kebulatan Transformasi jarak …
Transformasi
• • •
Transformasi 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_b baris - 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
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
291
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 eksternal
Kontur 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
Titik awal
Kontur 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 penelusuran kontur
(b) Tetangga berwarna hitam 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 0 1 2 3 4 5 6
dcp = kebalikan(dcp) 4 5 6 7 0 1 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 cye cxi cyi
= = = =
Kontur(indeks,2) Kontur(indeks,1) Kontur(indeks,2) Kontur(indeks,1)
+ + + +
XP(de+1); YP(de+1); XP(di+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 mulamula 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
4
5
6
1
0
0
0
0
0
0
2
0
1
1
1
1
0
3
0
0
1
1
1
0
4
0
1
1
1
0
0
5
0
0
1
1
1
0
6
0
0
0
0
0
0
2
1
1
1
3
1
1
1
1
1
1
1
1
1
1
4
1
Objek
(a (a)
(b)
0
0
0
0
0
0
0
1
1
1
1
0
0
0
1
0
1
0
0
1
0
1
0
0
Piksel objek paling kiri dan paling atas sebagai titik awal pelacakan 2
0
1
1
1
0
0
0
0
0
0
0
0
4 Kontur
0
1
3
(c (c)
5
6
7
(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_b baris for q = 1 : jum_kolom j if BW(p, q) == 1 b0.y = p;
Operasi pada Citra Biner
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) Kontur(1, 2) Kontur(2, 1) Kontur(2, 2)
= = = =
b0.y; b0.x; b1.y; 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
303
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
4 5
1 0
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 ∆
∆
+1
6
0
-1
2
2
-1
+1
5
7
-1
-1
3
1
+1
+1
7
9
+1
-1
1
3
-1
0
4
4
0
Kode Rantai
Indeks = 3 ∆ + ∆ + 5
Kode untuk memperolehkode rantai dapat dilihat berikut ini.
8
Operasi pada Citra Biner
307
Program : chain_code.m
function [kode_rantai, % CHAIN_CODE Digunakan % kode rantai dari % misalnya melalui % Kode Kode =
xawal, yawal] = chain_code(U) untuk mendapatkan titik awal (x, y) dan kontur U yang datanya telah terurutkan get_contour
1 2 3 4 5 6 7 8 9 ['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, -1 1, -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
Jarak 1
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 % an hasil perhitungan perimeter % hasil menyataka U = inbound_traci ing(BW); kode_rantai = cha ain_code(U); jum_genap = 0; jum_ganjil = 0; for p=1: length(k kode_rantai) kode = kode_r rantai(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: read('C:\Image\daun_bin.png'); >>Daun = imr >>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
Contoh
pada
315
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 Rantai Kode 0 7 7 0 7 6 4 5 5 4 3 4 1 2
Ordinat (Y)
Luas
8 8 7 6 6 5 4 4 3 2 2 3 3 4
8 7,5 6,5 6 5,5 0 -4 -3,5 -2,5 -2 -2,5 -2 -2,5 0
316
Pengolahan Citra, Te Teori dan Aplikasi
Kodee pada Rantai tai Kode 3 4 2 0 1
Ordinat (Y)
Luas
5 6 6 7 7
-5,5 -6 0 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' hasil l = hasil case '1' hasil l = hasil case '3' hasil l = hasil case '4' hasil l = hasil case '5' hasil l = hasil case {'2' ','6'} hasil l = hasil case '7' hasil l = hasil end end
Akhir Program
+ y; + y + 0.5; - y - 0.5; - y; - y + 0.5; ; + y - 0.5;
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 x1 y2 x2
= = = =
U(piksel1, U(piksel1, U(piksel2, U(piksel2,
1); 2); 1); 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 x1 y2 x2
= = = =
U(piksel1, U(piksel1, U(piksel2, U(piksel2,
1); 2); 1); 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); x4 = U(q, 2); pembagi = (x4 if pembagi == continue; end;
y3 = U(p, 1); y4 = U(q, 1); - x3); 0
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 posx4 posy3 posy4
= = = =
x3; x4; y3; 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 posx4 posy3 posy4
= = = =
x3; x4; y3; 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 y3 x4 y4
= = = =
posx3; posy3; posx4; 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: ()* +
(,) = 4.
/(0)
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). 23 = 1 −
45/ 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: 67
8 9&%
= :&;<&;$
(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
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.
327
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 menggunakan
massa
atau
nilai
rerata
sentroid(centroid) koordinat
lazim
setiap
piksel
ditemukan yang
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. 2. 3. 4.
pusat_x← 0 pusat_y← 0 luas ← 0 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
dengan
menyusun
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. Perbandingan: an:
=>?@
,
=>?@
,
=>AB
=>AB =>D?B =>D?B
Contoh program ram yang memanfaatkan beberapa fitur yang ng memanfaatkan pusat massa dapat dili ilihat di bawah ini.
Program : pusat.m
function [] = pu usat(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: E(F) =
G HIJ ((O(!A !̅ ) P( A L) ) 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 E,(F) =
HIJ ((O(!A !̅ ) P( A L) ) 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 memberikan
terhadap
label
yang
objek berbeda
sesungguhnya (berupa
berupa
nomor)
pada
tindakan
untuk
setiap
objek.
Pemrosesannya dapat dilaksanakan pada citra biner. Ketentuan yang dilakukan sebagai berikut: 0 7 * * + ( * * * + 7 Y S( , ) = T 1 7 2,3, … * ( * W(X
(8.10)
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. 5.
FOR kolom ← 1 TO N IF g(baris, kolom) = 1
6. banjiri(g, baris, kolom, label) 7. 8. 9.
label ←label + 1 END-IF 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
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
aalgoritma
yang
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 simpul.y > 0 && simpul.y G(simpul.y, simpul.x) == G(simpul.y, simpul.x) =
<= n && ... <= m && ... 1 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 fork3.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. B (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.
Merah
Kuning
Kuning Hijau Merah
Putih
Hijau Hitam
Cyan
Magenta
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) C’ = C - K M’ = M - K Y’ = Y - K
(9.2) (9.3) (9.4) (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) C = (C – K)/(1-K) M = (M – K) (1-K) Y = (Y – K) (1-K)
(9.6) (9.7) (9.8) (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) C = 1 - R - uKb M = 1 – G - uKb Y = 1 – B - uKb K = bKb 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) % R G B
Normalisasi RGB ke [0, 1] = double(R); = double(G); = double(B);
if max(max(R)) > 1.0 || max(max(G)) > 1.0 || ... max(max(B)) > 1.0
(9.10) (9.11) (9.12) (9.13) (9.14)
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 % C M Y K
Konversikan = uint8(C * = uint8(M * = uint8(Y * = uint8(K *
ke jangkauan [0,255] 255); 255); 255); 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 % C M Y K
Normalisasi CMY Y ke [0, 1] = double(C); = double(M); = double(Y); = 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 % R G B
Konversikan = uint8(R * = uint8(G * = uint8(B *
ke jangkauan [0,255] 255 5); 255 5); 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. Pad ada 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 596 = 0,596 0,211 211
0,587 −0,274 −0,523
0,114 −0,322 0,312
(9.2)
Komposisi RGB untu tuk 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. Adapun konve versi RGB dari YIQ sebagai berikut: 000 0,956 0,621 1,000 = 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 % Y I Q
Konversikan = uint8(Y * = uint8(I * = uint8(Q *
ke jangkauan [0,255] 255 5); 255 5); 255 5);
Akhir Program
Contoh penggunaan fungsiRGBkeYIQ: f >> [Y,I,Q]=RGBk keYIQ(171, 20, 250) Y =91 I =16 Q =104 >> Fungsi kebalikan annya, 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 % Y I Q
Normalisasi YIQ Q ke [0, 1] = double(Y); = double(I); = 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 % R G B
Konversikan = uint8(R * = uint8(G * = uint8(B *
ke jangkauan [0,255] 255); 255); 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 = +0,5000 − 0,41869 − 0,08131
(9.4) (9.5) (9.6)
Adapun pengonversian dari YCbCr ke RGB sebagai berikut: = = =
+ 1.40200 − 0,34414 + 1,77200
− 0,71414
(9.7) (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 % R G B
Normalisasi RGB B ke [0, 1] = double(R); = double(G); = 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 !((%$))((%&)* "($%&)
+ = 1−
0=
(9.10)
,-. ((,$,&)
()$)&
/
(9.11)
"
(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 G +=6 ,-.(( ,7 7, ) , 0 F 0 1− / =
; 9
0, HIJK + = 0
<=∗((7% ) ?∗/ ? %
, HIJK 0 = 1
: 60 ∗ @@2 + ?∗/ L , HIJK 0 = 2 9 %7 860 ∗ @@4 + ?∗/ L , HIJK 0 = 3
(9.15)
G
360 M0 = H + 360 jika H
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) % R G B
Normalisasi RGB B ke [0, 1] = double(R); = double(G); = 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 maxrgb b == 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
(9.16)
(9.17)
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; elsei if 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 % H S V
Konversikan = uint8(H * = uint8(S * = uint8(V *
ke jangkauan [0, 255] atau [0, 360] 255 5/360); 255 5); 255 5);
Akhir Program engonversi HSV ke RGB dapat dilihat di bawa wah ini. Proses untuk men Program : HSVkeRGB.m
function [R,G,B] = HSVkeRGB(H,S,V) % HSVkeRGB diguna akan untuk mengonversi HSV ke RGB % H S V
Normalisasi SV ke [0, 1] dan H ke [0, 360] = double(H); = double(S); = 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): =N
0, HIJK ≤ G 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 − +)
= !1 + ]^_ (<=a %`)* ? ]^_ `
= 3 − ( + ))
(9.22) (9.23) (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 − +) = !1 +
? ]^_ `
]^_ (<=a %`)
= 3 − ( + ))
*
(9.25) (9.26) (9.27) (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 − +) = !1 +
? ]^_ `
*
]^_ (<=a %`)
= 3 − ( + ))
(9.29) (9.30) (9.31) (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
Program : RGBkeHSI.m
function [H,S,I] = RGBkeHSI(R,G,B) % RGBkeHSI diguna akan untuk mengonversi RGB ke HSI. % R G B
Normalisasi RGB B ke [0, 1] = double(R); = double(G); = 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) ) == S(m,n n) = H(m,n n) = else S(m,n n) =
G(m,n) && G(m,n) == B(m,n) 0; 0; 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 sudut t = 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 % H S I
Konversikan = uint8(H * = uint8(S * = uint8(I *
ke jangkauan [0, 255] dan [0, 360] 255 5/360); 255 5); 255 5);
Akhir Program
367
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. % H S I
Normalisasi HSI I ke [0, 1] = double(H); = double(S); = 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: leba ar 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 R R(m,n) = R(m,n) * G G(m,n) = G(m,n) * elsei if H(m,n) <= 240 H H(m,n) = H(m,n) -
skala; skala; skala; 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 sudut2 G(m,n) B(m,n)
= = = =
H(m,n) * 0.017453292; (60 - H(m,n)) * 0.017453292; (1 - S(m,n)) / 3; (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 % R G B
Konversikan = uint8(R * = uint8(G * = uint8(B *
ke jangkauan [0, 255] 255); 255); 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
Kuning
Hijau
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). = min ( , , ) bef = max ( , , ) (9.34) bcd
g= +=
hijk )hilm
;
W
0,
hijk %hilm
(9.33)
bcd
=
, g ≤ 0,5
bef
G : 8W%(hijk )hnop ) , g F 0,5 qrstu rts, bcd = bef ; $%& , = bef 9 hijk %hilm hijk )hilm hijk %hilm
G = 2 + &%( , = bef : hijk %hilm 9 (%$ 84 + hijk %hilm , vwxvJ yKIwwzK
(9.35)
(9.36)
(9.37)
Pengolahan Citra Ber erwarna
= { 60 |IJK M 0 }KJK }KJK
371
=
+ 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) % R G B
Normalisasi RGB B = double(R); = double(G); = 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 maxrgb b == 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 % Ten ntukan hue if R( (m,n) == maxrgb % Warna antara kuning dan magenta H H(m,n) = (G(m,n)-B(m,n))/d; elsei if 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 % H S L
Konversikan = uint8(H * = uint8(S * = uint8(L *
ke jangkauan [0, 255] atau [0, 360] 255 5/360); 255 5); 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) % H S L
Normalisasi HSL L = double(H); = double(S); = 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: leba ar 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
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 % R G B
Konversikan = uint8(R * = uint8(G * = uint8(B *
ke jangkauan [0, 255] 255); 255); 255);
Akhir Program
Contoh penggunaan RGBkeHSL dan HSLkeRGB:
373
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 • = 0,019334 019334 + 0,119193 + 0,950227
(9.40) (9.41) (9.42)
Selanjutnya, L*a*b** ddidefinisikan sebagai berikut: g∗ = 116€ ! * − 16 • •
m
K ∗ = 500 @@€ !ƒ * − € !• *L ƒ
m
•
m
3 ∗ = 200 @@€ ! * − € ! *L •
•m
„
„m
(9.43) (9.44) (9.45)
dih seperti berikut: Dalam hal ini, f(q) dihitung ‚ … , 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: 0] % L -> [1, 100 % 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/Xn n, Yq=Y/Yn, Zq=Z/Zn for m=1 : tinggi for n=1 : leb bar fqy = (L( (m, n) + 16) / 116.0; fqx = a(m m, n) / 500.00 + fqy; fqz = fqy y - 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 XYZ(1,:) XYZ(2,:) XYZ(3,:)
X, Y, da an Z = Xq * 0.950456; 0 = Yq; = 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:
σ=
1 MN
M
N
∑∑ ( P
ij
− µ )2
(9.48)
i =1 j =1
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
M
N
∑ ∑ (P
ij
θ=
379
− µ )3
i =1 j =1
(9.49)
MNσ 3
Distribusi condong ke kiri
Distribusi condong ke kanan
(a) Skewness negatif θ<0
(b) Skewness nol θ<0
(c) Skewness positif θ<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
ij
γ=
− µ )4
i =1 j =1
MNσ 4
(9.50)
−3
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 rna % --- Peroleh war % 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 mean_r = mean_g = mean_b =
rerata jum_r / jum_piksel; jum_g / jum_piksel; 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
(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 skew_r = skew_g = skew_b =
skewness jum_skew_r/ (jum_piksel * (dev_r^3)); jum_skew_g/ (jum_piksel * (dev_g^3)); 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:
381
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
(c) Efek kontras dan da pencerahan melalui C = 2 x (Img + 30)
(b) Efek pencerahan melalu alui C = Img + 30;
(d) Efek pencerahan melalui C = 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 ead(berkas)); RGB = double(imre
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 R
15
8
7
G
0 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 ) /(b − a ) Λ ( x; a , b , c ) = (c − x ) /(c − b) 0
x ≤ a, a < x ≤ b, (9.51) b < x ≤ c, x>c
1
1
0
0 a
b
c
(a) Bentuk segitiga
a
b
c
d
(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) /(b − a ) Π ( x; a, b, c) = 1 (c − x) /(c − b) 0
x ≤ a, a < x ≤ b, b < x ≤ c, (9.52) c < x ≤ d, 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) && (hc) && (h=b) && (h<=c) derajat=1.0; else derajat = 0.0; end end end end Pemrosesan yang dilakukan pada Gambar menghitung nilai untuk setiap komponen warna: ‹%T ℎIHKv = ∑•%T cŒ= ∑ŠŒ= €_21‰‰w( cŠ , +cŠ , 0cŠ ) ‹%T }‰1Kℎ = ∑•%T cŒ= ∑ŠŒ= €_1‰Ž( cŠ , +cŠ , 0cŠ )
JvwIw2 = dst.
‹%T ∑•%T cŒ= ∑ŠŒ= €_z‰yyR•( cŠ , +cŠ , 0cŠ )
9.14 kotak terbawah yaitu
(9.53)
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 berad da % 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
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;
391
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
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
393
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
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;
395
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) && (hc) && (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) && (hb) && (h
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) && (ha) && (h
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) && (hc) && (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
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
tersebut
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
Mobil
Citra
Mobil, jalan, dan
Kegunaan
Acuan yang
Segmentasi
Digunakan
Pelacakan mobil
latarbelakang Struktur
warna
Foto satelit
permukaan bumi Wajah orang
Kerumunan orang
Pengklasifikasian
Tekstur dan
area
warna
Pengenalan wajah
Warna, bentuk,
di pasar Apel
Segmentasi
Gerakan dan
dan tekstur
Kumpulan apel
Pemilahan buah apel
Bentuk, warna,
pada ban berjalan
berdasarkan ukuran
ukuran
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 2 2 2 −1 −1 −1
−1 −1 2 −1 2 −1 2 −1 −1
(a)
(b)
−1 2 −1 −1 2 −1 −1 2 −1
(c)
2 −1 −1 −1 2 −1 −1 −1 2
(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 cadarcadar yang lain.
Program : deteksi.m
function [G] = de eteksi(F, H, potong, pembulatan) % DETEKSI Melakuk kan operasi korelasi kernel H dengan citra F % H harus memp punyai tinggi dan lebar ganjil % Argumen poto ong bersifat opsional. Apabila % bernilai true, bagian citra yang tidak dipros ses % akan dipo otong. Bawaan = false % Argumen pemb bulatan bersifat opsional. % Apabila bernilai b true, pembulatan dengan uint t8 % tidak dil lakukan. 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); ran hasil beserta % Menentukan ukur % penentu ofse et koordinat if potong == true e sisi_m2 = m2; ; sisi_n2 = n2; ; G = zeros(tin nggi_f - 2 * m2, lebar_f - 2 * n2); else sisi_m2 = 0; sisi_n2 = 0; G = zeros(siz ze(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.
Turunan
∇
,
Tabel 10.2Turunan orde pertama dan kedua pada bentuk kontinu dan diskret Bentuk kontinu Bentuk diskret , +∆ , f(y,x+1)f(y,x) lim ∆ → ∆ +∆ , , f(y+1,x)f(y,x) lim ∆ → ∆ [f(y, x+1)f(y,x), , f(y+1,x)f(y,x)] f(y,x+1)- 2f(y,x)+f(y,x-1) , +∆ , lim ∆ → ∆
Segmentasi Citra
Turunan ∇
411
Bentuk kontinu ,
lim
∆ →
+∆ , +
∆
Bentuk diskret 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 2
2
(zero-crossing) (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 168
168 168 168 168
168 168 168 168
0 0 0 0
0 0 0 0
0 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
168 168 168
168 168 168
138 138 138
87 87 87
30 30 30
0 0 0 0 0 0
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 ∇ $ *+, ∇f $ .%
0/
+% /
$2
+
0/
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] = ro oberts(F) % ROBERTS Pemerol lehan tepi objek pada citra F % melalui oper rator 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 + (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))
(10.6)
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] = pr rewitt(F) % PREWITT Pemerol lehan tepi objek pada citra F % melalui oper rator Prewitt % Hasil: citra G [m, n] = size(F); ; F=double(F); G=zeros(m,n); for y=2 : m-1 1 for x=2 : n-1 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
x-1
421
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] = so obel(F) % SOBEL Pemeroleh han tepi objek pada citra F % melalui oper rator Sobel % Hasil: citra G [m, n] = size(F); ; F=double(F); G=zeros(m,n); for y=2 : m-1 1 for x=2 : n-1 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
1
y
z4
z5
z6
-√2
0
√2
√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] = fr reichen(F) % FREICHEN Pemero olehan tepi objek pada citra F % melalui oper rator 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-1 1 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
(c) Operator Sobel
(b) Operator Prewitt
(d) Operator Frei-Chen
Gambar 10.16Perbedaan hasil deteksi tepi dengan menggunakan keempat macam operator
(a) Hasil deteksi tepi dengan (a) Hasil deteksi tepi dengan operator Roberts operator Roberts
(b) Hasil setelah peng-ambangan dengan nilai ambang 20
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] = la aplacian2(F) % LAPALACIAN2 Pem merolehan tepi objek pada citra F % melalui oper rator Laplacian #1 % Hasil: citra G [m, n] = size(F); ; G=zeros(m,n); % Semua berisi nol F=double(F); for y=2 : m-1 1 for x=2 : n-1 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 @A%
,
$−
0
BC
D 21 −
5E 5
C5
3F
G H5 IJ5 5K5
(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: @A%
,
$ −L
+
M9
−M
NF
G H5 IJ5 5K5
Nixon dan Aguido (2002) menggunakan rumus: @A%
,
$
1 L M
+ M
− 2N F
G H5 IJ5 5K5
Adapun Crane (1997) menggunakan rumus: @A%
,
$
1 L1 − OM 9
+ 2M
NF
G H5 IJ5 5K5
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 -1
0
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
nilai ←C5 2 0
P 5E P 5 C5
− 23 F
G QH5 I QJ5 5K5
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 : uku uran -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 normali isasi 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 RA%
.
$
G H5 IJ5 5 T 5KU
CU 5
−
G H5 IJ5 5 T 5K5
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
-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
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
1 / 115
2
4
5
4
2
4
9
12
9
4
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) ( H) 45 yi = f ∑wij xj j arah = 90 y = f (T) w (TH) y (H) j ∑ ij 135 i j
(10.12)
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
Arah tepi 0o:
439
i, j-1
i, j
i, j+1
Arah tepi 45o:
i-1, 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; end
Arah tepi 90o:
i-1, j
if (Grad(i,j) <= Grad(i-1,j+1)) || ... (Grad(i,j) <= Grad(i+1,j-1)) Non_max(i,j) = 0; end
Arah tepi 135o:
i-1, j-1
i, j
i, j
i, j+1 if (Grad(i,j) <= Grad(i+1,j) ) || ... (Grad(i,j) <= Grad(i-1,j)) Non_max(i,j) = 0;
end
i, j+1 if (Grad(i,j) <= Grad(i+1,j+1)) || ... (Grad(i,j) <= Grad(i-1,j-1)) Non_max(i,j) = 0; 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] = ca anny(F, ambang_bawah, ambang_atas) % CANNY Pemeroleh han tepi objek pada citra F % melalui oper rator Canny % Masukan: ambang_bawah h = batas bawah untuk ambang histeres sis % % Nilai bawaan 011 % ambang_atas = batas atas untuk ambang histeresis s % 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
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
441
442
Pengolahan Citra : Teori dan Aplikasi
elseif Theta(i,j) == if (Grad(i,j) <= (Grad(i,j) <= Non_max(i,j) end elseif Theta(i,j) == if (Grad(i,j) <= (Grad(i,j) <= Non_max(i,j) end else if (Grad(i,j) <= (Grad(i,j) <= Non_max(i,j) end end
45 Grad(i-1,j+1)) || ... Grad(i+1,j-1)) = 0; 90 Grad(i+1,j) ) || ... Grad(i-1,j)) = 0;
Grad(i+1,j+1)) || ... Grad(i-1,j-1)) = 0;
end end % Pengambangan histeresis ambang_bawah = ambang_bawah * max(max(Non_max)); ambang_atas = ambang_atas * max(max(Non_max)); Histeresis = Non_max; % ----% ----for i = for
Penentuan awal untuk memberikan nilai 0, 128, dan 255 1+h2 : r-h2 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 % ----% ----for i = for
Penggantian angka 128 menjadi 0 untuk yang tersisa 1+h2 : r-h2 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
(d) Penghilangan non-maksimum
(c) Besaran gradien
(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 MarrHildrethsebenarnya adalah operatorLoGyang dilengkapi dengan upaya untuk menemukan zero crossing. Zero-crossing menyatakan tanda perubahan pada tepitepi 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 n4
Bagian 2
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] = ze erocross(F, ukuran, sigma) % ZEROCROSS Pemer rolehan tepi objek pada citra F % melalui oper rator Marr-Hildreth % Hasil: citra K H = cadarLoG(ukur ran, sigma); pembulatan = fals se; potong = true; G = deteksi(F, H, , potong, pembulatan); % Proses zero cro ossing 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 : for q = y jum = end end rerata1 = jum
x : y+1 jum + G(q,p);
/ 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
Timur H1 Timur Laut H2 Utara H3 Barat Laut H4 Barat H5 Barat Daya H6 Selatan H7 Tenggara H8
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 −2 1 −1 −2 1
−1 −2 1
−1 −2 1 1 −2 1 1 −2 −1
1 −2 −1
1 −2 −1
Kirsch
−1 −1 −1
5 −3 5 0 5 −3
−1 −1 −1
−3 5 5
−3 0 5
1 1 1
−3 −3 −3
−3 0 5
−1 1 1
1 1 1 1 1 1
1 1 −1 1 1 1
−3 −3 5
−3 −3 −3 −3 −3 −3 5 −3 −3 5 5 −3
−3 0 5
−3 0 −3 5 0 −3 5 0 −3 5 0 −3
−3 −3 −3
−3 −3 −3 −3 −3 5 −3 5 5 5 5 −3 5 5 −3 5 −3 −3 −3 −3 −3
Robinson 3-level
Robinson 5-level
1 1 1
1 2 1
0 0 0
0 1 1
−1 0 1
1 1 1
1 −2 1
−1 0 1
−1 0 1
−1 −1 −1
0 −1 −1
1 0 −1 1 1 0
−1 −1 −1
0 0 0
1 0 −1
1 0 −1
1 0 −1
−1 −1 0
−1 0 0
−1 −1 −1 1 1 1
1 1 0
1 0 −1
0 −1 −1
0 1 2
−1 0 1
−2 −1 0
0 0 0
−1 0 1
−2 0 2
−1 0 1
−1 0 −2 0 −1 0
0 −1 −2
1 0 −1 2 1 0
−1 −2 −1
1 0 −1
2 0 −2
1 0 −1
−2 −1 0
−1 0 −1 0 1 2
1 2 1
2 1 0
1 0 −1
0 −1 −2
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] = ko ompas(F, jenis) % KOMPAS Melakuka an operasi dengan operator kompas % Argumen F be erupa citra berskala keabuan dan % jenis berupa a tipe operator % 1 = Prewitt % 2 = Kirsch % 3 = Robinson n 3-level % 4 = Robinson n 4-level % % Hasil: citra G if nargin < 2 jenis = 1; end % Operator Prewitt1 = Prewitt2 = Prewitt3 = Prewitt4 = Prewitt5 = Prewitt6 = Prewitt7 = Prewitt8 = Kirsch1 Kirsch2 Kirsch3 Kirsch4 Kirsch5 Kirsch6 Kirsch7 Kirsch8
= = = = = = = =
kompas s [1 1 -1;1 -2 -1;1 1 -1]; [1 -1 -1;1 -2 -1;1 1 -1]; [-1 -1 1 -1;1 -2 1;1 1 1]; [-1 -1 1 1;-1 -2 1;1 1 1]; [-1 1 1;-1 -2 1;-1 1 1]; [1 1 1;-1 1 -2 1;-1 -1 1]; [1 1 1;1 1 -2 1;-1 -1 -1]; [1 1 1 1;-1 -2 1;-1 -1 1]; 0 -3;5 -3 -3]; [5 -3 -3;5 [-3 -3 -3;5 0 -3; 5 5 -3]; [-3 -3 -3;-3 0 -3;5 5 5]; [-3 -3 -3;-3 0 5;-3 5 5]; [-3 -3 5;-3 0 5;-3 -3 -3]; [-3 5 5;-3 5 0 5;-3 -3 -3]; [5 5 5; ;-3 0 -3;-3 -3 -3]; [5 5 -3 3;5 0 -3;-3 -3 -3];
Robinson3_1 Robinson3_2 Robinson3_3 Robinson3_4 Robinson3_5 Robinson3_6 Robinson3_7 Robinson3_8
= = = = = = = =
[1 0 -1;1 0 -1;1 0 -1]; [0 -1 -1;1 0 -1;1 1 0]; [-1 1 -1 -1;0 0 0;1 1 0]; [1 1 -1;1 -2 -1;1 1 -1]; [-1 1 0 1;-1 0 1;-1 0 1]; [0 1 1;-1 0 1;-1 -1 0]; [1 1 1;0 0 0;-1 -1 -1]; [1 1 0;1 0 -1;0 -1 -1];
Robinson5_1 Robinson5_2 Robinson5_3 Robinson5_4 Robinson5_5 Robinson5_6 Robinson5_7 Robinson5_8
= = = = = = = =
[1 0 -1;2 0 -2;1 0 -1]; [0 -1 -2;1 0 -1;2 1 0]; [-1 1 -2 -1;0 0 0;1 2 -1]; [-2 2 -1 0;-1 0 1;0 1 2]; [-1 1 0 1;-2 0 2;-1 0 1]; [0 1 2;-1 0 1;-2 -1 0]; [1 2 1;0 0 0;-1 -2 -1]; [2 1 0;1 0 -1;0 -1 -2];
452
Pengolahan Citra : Teori dan Aplikasi
Prewitt(:,:,1) Prewitt(:,:,2) Prewitt(:,:,3) Prewitt(:,:,4) Prewitt(:,:,5) Prewitt(:,:,6) Prewitt(:,:,7) Prewitt(:,:,8) Kirsch(:,:,1) Kirsch(:,:,2) Kirsch(:,:,3) Kirsch(:,:,4) Kirsch(:,:,5) Kirsch(:,:,6) Kirsch(:,:,7) Kirsch(:,:,8)
= = = = = = = = = = = = = = = =
Prewitt1; Prewitt2; Prewitt3; Prewitt4; Prewitt5; Prewitt6; Prewitt7; Prewitt8; Kirsch1; Kirsch2; Kirsch3; Kirsch4; Kirsch5; Kirsch6; Kirsch7; Kirsch8;
Robinson3(:,:,1) Robinson3(:,:,2) Robinson3(:,:,3) Robinson3(:,:,4) Robinson3(:,:,5) Robinson3(:,:,6) Robinson3(:,:,7) Robinson3(:,:,8)
= = = = = = = =
Robinson3_1; Robinson3_2; Robinson3_3; Robinson3_4; Robinson3_5; Robinson3_6; Robinson3_7; Robinson3_8;
Robinson5(:,:,1) Robinson5(:,:,2) Robinson5(:,:,3) Robinson5(:,:,4) Robinson5(:,:,5) Robinson5(:,:,6) Robinson5(:,:,7) Robinson5(:,:,8)
= = = = = = = =
Robinson5_1; Robinson5_2; Robinson5_3; Robinson5_4; Robinson5_5; Robinson5_6; Robinson5_7; 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) Opr(2,2,i) Opr(2,3,i) Opr(3,1,i) Opr(3,2,i) Opr(3,3,i)
* * * * * *
F(y, x+1) + ... F(y, x) + ... F(y, x-1) + ... F(y-1, x+1) + ... F(y-1, x) + ... 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 pengambangan intensitas. Secara matematis, hal itu dinyatakan dengan W
,
$
$X
1, YZ[Y\ 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, pengambangan 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. 3. Hitunglah nilai rata-rata pada kedua area (µ1 dan µ2). a Ea 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 pengambangan 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 arasjamak 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 n nilai ←C5 2 0
P 5E P 5 C5
− 23 F
G QH5 I QJ5 5K5
hh(y+1, x+1) ← nilai ju ← jum + nilai jum END ND-FOR END-F FOR 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
(c) Nilai ambang t1=175 dan t2=200
(e) Nilai ambang t1=235 dan t2=250
(b) Nilai ambang t1=50 dan t2=100
(d) Nilai ambang t1=220 dan t2=230
(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 $
Pd e
, b c ≥ 0, ∑0gh b c $ 1
(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
i [ $ ∑mkljE0 b c $ 1 − i0 [
(10.15) (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 .
M
[ $ ∑mkljE0 1 − *
o k
pU j
.
o k
p5 j
(10.19) (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
Mq [ $ n0 . >*0 [ − * r ? + n . >* [ − * r ?
465
(10.23)
Dalam hal ini, mT ada dalah rerata total (* r $ ∑e 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.
Octave ve menyediakan fungsi bawaan bernama gra 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 bagianbagian 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 pengambangan ini. Pend ndekatan pertama menggunakan statistika rerata terhadap intensitas lokal. Terka kadang, nilai yang konstan ikut dilibatkan. Rumusnya Ru sebagai berikut. ^$
∑ J,H ∈u ev
k,ss
−w
(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); else G = ones(m, n); end
% Diasumsikan berlatarbelakang 0 % Diasumsikan berlatarbelakang 1
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] = ad dapmedian(F, w, c) % ADAPMEDIAN Mela akukan 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); else G = ones(m, n); n end Nilai = [];
% Diasumsikan berlatarbelakang g 0 % Diasumsikan berlatarbelakang g 1
% 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] = ad dapmaxmin(F, w, c) % ADAPMAXMIN Mela akukan pengambangan adaptif dengan me enggunakan % maximum dan n 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); else G = ones(m, n); n end
% Diasumsikan berlatarbelakang g 0 % Diasumsikan berlatarbelakang g 1
m for y=1+delta : m-delta 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 dengan t1=140, t2=200
(b) Pengambangan aras-jamak 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
e
, ∑mz0 kl
k
$1
c $ 0,1,2, … , @ − 1
Dalam hal ini, N adalah jumlah piksel
(10.27)
citra, dan Lmenyatakanjumlah aras
keabuan. Selanjutnya, apabila t adalah nilai ambang, entropi latarbelakang adalah:
Segmentasi Citra |} [ $ − ∑jkl
479 o k
~‚ j
. ln
o k
~‚ j
(10.28)
dan entropi objek ada dalah: |• [ $ − ∑mz0 kljE E0 ~
o k „
j
. ln
o k
~„ 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
o k
~‚ j
o k
~‚ j
− ∑mz0 kljE0
o k
~„ j
o k
~„ 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: |} [ $
0
0z…
o k
~‚ j
…
3
(10.32)
Segmentasi Citra |• [ $
483 o k
0z~„ j
…
3
(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 optima al ambang = 0; varMaks = 0; for t=0 : 255 % Hitung Pb(t t) 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
(c) ρ = 0,5
(b) ρ = 0,05
(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 wa arna if h < 11 1 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
(a) Citra lapangan.png
(c) Citra mainan.png
(e) Citra inns.png
489
(b) Hasil segmentasi lapangan.png
(d) Hasil segmentasi mainan.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); tra berskala keabuan % Konversi ke cit 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); % t t C
Gunakan pengambangan otsu = otsu(B); = t + 13; % Koreksi ambang. Sesuaikan dengan kebutuhan = 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
(d) Morfologi opening
(c) citra biner
(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 probabilitas
(probability
model derau yang memiliki fungsi kerapatan
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
(c) σ = 25
(b) σ = 10
(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
(c) σ = 150
(b) σ = 10
(d) σ = 150
Gamb bar 11.4Derau Gaussian pada citra berwarn 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] = dr rgaussian2(F, sigma, mu) % DRGAUSSIAN Meng ghasilkan citra yang telah diberi der rau % menggunakan Gaussian. % % Berdasarkan kode % Harley R. My yler dan Arthur R. Weeks, 1993 % % F = citra be erskala keabuan % sigma = stan ndar 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 = theta = derau = derau =
sqrt(-2 * sigma * sigma * log(1 - rand)); rand * 1.9175345E-4 - 3.14159265; derau * cos(theta); 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
(c) Probabilitas = 0,05
(b) Probabilitas = 0,01
(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
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
507
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 =& Adapun bentuk PDFdapat dilihat pada Gambar 11.16.
(11.8)
Restorasi Citra
509
p(z) 1
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
(c) a = 0,07
(b) a = 0,1
(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): 1 =
&2 3 2 4 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
7=
(b-1)/a
0,607
8−1 8−1 !
8−1
− 8−1
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
Program : drgamma.m
function [G] = dr rgamma(F, a, b) % DRGAMMA Mengha asilkan citra yang telah diberi derau u % menggunakan fungsi Gamma. % % Berdasarkan % Rafael C. Go onzales, Richard E. Woods, dan % Steven L. Ed ddins, 2004 % erskala keabuan % F = citra be % a dan b = ar rgumen 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
513
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.
(b) a = 1, b = 20
(a) Citra Innsbruck.png
(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 1 =
515 1 = ;5
−
% '%& /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
x +@
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
(c) a = 1, b = 300
(b) a = 10, b = 90
(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: 1 =;
, AB* ≤ 1 ≤ 8 . 1, (!)(* C B!!D 5%&
(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
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)
519
520
Pengolahan Citra Teori dan Aplikasi
>>
Beberapa contoh hasil penerapan derau uniform dapat dilihat pada Gambar 11.13.
(b) a = 10, b = 30
(a) Citra Innsbruck.png
(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
(a) Citra panta tai.png
(c) a = 10, bx x = -3, by = 4
521
(b) a = 10, bx = 3,, by b =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 F = G8 8 1 8
1 8H 1
(11.22)
1 1 F = 9 G1 1 1 1 F = 10 G1 1 1 1 F = 16 G2 1
1 1 1
1 2 1
2 4 2
1 1H 1
(a)
1 1H 1
(b)
1 2H 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
>> G=drgaussian(Img, 5); >> K=uint8(konvolusi(G,H)); imshow(K) >>
Contoh hasil ditunjukkan pada Gambar 11.17(b).
525
526
Pengolahan Citra Teori dan Aplikasi
(a) Citra boneka.png yang telah diberi derau Gaussian 1 G 1 9 1
1 1 1
1 1H 1
(c)
1 G 1 10 1
1 2 1
1 1H 1
(d)
1 G 2 16 1
2 4 2
1 2H 1
(b)
1
1
1
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 =
LM
∑ P,Q
∈STU
,O
(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 koefisien dalam cadar H bernilai
LM
. 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 pemrosesan dengan rerata aritmetik.
K
g x
y
7
5
7
3
2
6
1
4
7
2+6+7+4+1+3+7+5+7 9
y
=
42 9
hasil
x
5
= 4,6667 ≈ 5
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*set tengah, n-2*setengah); for i=1+setengah : m-setengah for j=1+seten ngah: 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 ukuran); G(i-seten 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); >>
pat ditentukan secara bebas dan terarah, m misalnya, seperti Ukuran jendela dapa 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 derau Gaussian dengan σ = 10
(c) Filter rerata aritmetika 5 x 5
(b) Filter rerata aritmetika 3 x 3
(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 derau garam dan merica, p = 0,01
(c) Filter rerata aritmetika 5 x 5
(b) Filter rerata aritmetika 3 x 3
(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 Y Z,[
(11.24)
Restorasi Citra
531
Sebagai contoh, perh erhitungan dengan rumus di atas ditunjukkan kan pada Gambar 11.21. K
g x
y
7
5
7
3
2
6
1
4
7
y
9
1 1 1 1 1 1 1 1 1 + + + + + + + + 2 6 7 4 1 3 7 5 7
x
3
= 3,1266 ≈ 3
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 derau Gaussian, σ = 10
(b) Filter rerata harmonik 3 x 3
(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 derau garam dan merica, p = 0,01
(b) Filter rerata harmonik 3 x 3
(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: K D, 1 =
∑ Z,[ ∈\TU ] P,Q ^_4 ∑ 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. fK
g x
y
7
5
7
3
2
6
1
4
7
x
y
6
Q=1 22 +62 +72 +42 +12 +39 +72 +52 +72 2 2+6+7+4+1+3+7+5+7
=
238 42
= 5,6667 ≈ 6
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
(a) Citra boneka.png yang telah diberi derau Gaussian, σ = 10
(c) Filter rerata kontraharmonik 5 x 5 Orde = 2
537
(b) Filter rerata kontraharmonik 3 x 3 Orde = 2
(d) Filter rerata kontraharmonik 3 x 3 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 derau garam dan merica, p =0,01
(b) Filter rerata kontraharmonik 3 x 3 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): K D, 1 =
b
4/^
∑ Z,[ ∈\TU ] P,Q ^ 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*set tengah, n-2*setengah); for i=1+setengah : m-setengah for j=1+seten ngah: 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 diberi derau Gaussian
(b) Filter rerata Yp 3 x 3, Orde = 2
(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
,O
∈STU
(11.27)
Ilustrasi filter median ditunjukkan pada Gambar 11.28. Kf
g x
y
7
5
7
3
2
6
1
4
7
y
x
5
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 derau garam dan nm merica, σ = 10
(b) Filter median ian 3 x 3
(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
,O
∈STU
(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.
Kf
g x
y
7
5
7
3
2
6
1
4
7
y
x
7
Bilangan terbesar
7 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 derau garam dan merica, σ = 10
(c) Filter max 5 x 5
(b) Filter max 3 x 3
(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
,O
∈STU
(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. fK
g x
y
7
5
7
3
2
6
1
4
7
y
x
1
Bilangan terkecil
1 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
% %
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);
551
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 K D, 1 =
L&3 Z,[ ∈\TU d] P,Q eELfM Z,[ ∈\TU d] P,Q e
(11.30)
Sebagai contoh, perh erhitungan pada filtertitik tengah ditunjukkan an pada Gambar 11.36. Kf
g x
y
7
5
7
3
2
6
1
4
7
y
x
4
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 diberi derau Gaussian, σ = 10
(b) Filter titik tengah 3 x 3
(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
Amplitudo
Amplitudo
filter band-reject ditunjukkan pada Gambar 11.38).
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
(a) Citra absam.png
557
(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 = filn notch(a, b, d0, x, y, n) % FILNOTCH Digun nakan untuk memperoleh fungsi transfe er % filter notch h % Masukan: % a = tinggi i % b = lebar % d0 - menen ntukan 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); % r p q
Menentukan ukuran baru untuk perluasan citra = nextpow2(2 * max(a, b)); = 2 ^ r; = p;
% Buat filter notch H1 = filnotch(p, q, H2 = filnotch(p, q, H3 = filnotch(p, q, H4 = filnotch(p, q,
10, 10, 10, 10,
1, 165); 165, 1); 1, 860); 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 masingmasing 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 Ynya. 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) (x4,y3)
Kuadran III
Frekuensi (0,0)
(x0,y0) Kuadran II p
(x2,y2)
(x1,y1) Bintik cerah
q
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 frekuensi = 0,15
(e) Hasil filter inversi gambar d
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) ); % r p q
Peroleh ukuran untuk kepentingan perluasan citra = nextpow2(2 * max(a, b)); = 2 ^ r; = 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); ; % r p q
%Peroleh ukuran citra
Menentukan ukur ran baru untuk perluasan citra = nextpow2(2 * max(a, b)); = 2 ^ r; = p;
gkauan frekuensi u dan v % Menentukan jang 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 k=
m%n 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
u s ≈ tu ∑t fw ∑vw
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 B, A ≈ xo
|o f,v | { k| 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 Digunak kan untuk melihat efek filter Wiener % Argumen ber rkas adalah nama berkas yang diuji, % d menentuka an ambang frekuensi, dan k adalah % kosntanta. Img=imread(berkas s); [a,b] = size(Img) ); % r p q
Peroleh ukuran untuk kepentingan perluasan citra = nextpow2(2 * max(a, b)); = 2 ^ r; = 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 =
tu
∑u ∑t f fw vw
&
B, A −
5
B, A
(11.41)
alah citra sebelum terkena derau dan fb adalah ah citra yang telah Dalam hal ini, fa adal 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 1 =
&2 3 2 4 5% !
%&3
Adapun Myler dan Weeks mendefinisikan sebagai: 1 =
1 α% α−1 !
α
%3/&
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(n)
d(2) 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): 1. batas← ←inbound_tracing(f) 2. jum← jumlah piksel batas 3. [xp, yp] yp ←pusat massa objek dalam f 4. FOR pp←1 TO jum Jarak(p)← ←jarak antara piksel batas (batas(p)) dan titik pusat massa END-F FOR 5. RETUR URN jarak
tan dan Fungsi yangg dapat digunakan untuk memperoleh tanda-tangan 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 ikan1.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 jum mlah 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
Gambarr 12.4Gambar kontur melaluideskriptorFou ourier
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). Pertamatama, 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) F
K1
a + ib
m + in
c + id
o + ip
e + if
q + ir
g + ih
s + it
m + in
a + ib
o + ip
c + id
q + ir
e + if
s + it
g + ih
n=4 delta = (8-4)/2 =2 1 + delta
n + delta
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
(a) Citra ikan-5.png
(c) n = 100
587
(b) n = 544
(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. Pertamatama 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
mereko ekonstruksi kontur.
tidak
dapat
digun unakan
untuk
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
(d) FD ikan-2.png
(a) Citra ikan-1.png
(b) FD ikan-1.png
(c) Citra ikan-2.png
(e) Citra ikan-3.png
(f) FD ikan-3.png
(g) Citra ikan-4.png
(h) FD ikan-4.png
(k) Citra guppi-1.png
(l) FD guppi-1.png
(i) Citra ikan-5.png
(j) FD ikan-5.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 = ∑ dan σr berupa
|
,
−
3 , ̅3
|
(12.5)
Pemerolehan Fitur Bentuk Be dan Kontur 41 = ∑
5|
,
−
3 , ̅3
591 | − 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 Brute Force Graham Scan Gift Wrapping QuickHull Divide-and-Conquer Monotone Chain Incremental Marriage-beforeConquest
Kinerja O(n4) dan O(n3) O(n log n) O(nh) O(nh) O(n log n) O(n log n) O(n log n) O(n log h)
Penemu Tidak diketahui Graham, 1972 Jarvis, 1973 Eddy, 1977 Preparata & Hong, 1977 Andrew, 1979 Kallay, 1984 Kirkpatrick & Seidel, 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)
(c)
(e)
(b)
(d)
(f)
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 sudut yang sama
Titik dengan jarak ja terpanjang dipe pertahankan
(a)
(b)
Gambar 12.11 Penghilangan P titik-titik yang mempunyaii sudut su sama, dengan han anya mempertahankan satu saja yang terpa panjang Program : convexhull.m
function [CH] = convexhull2(Kontur) c % CONVEXHULL Digu unakan untuk mendapatkan convex hull % dari suatu u objek menggunakan metode 'Graham Sc can'. % Masukan: Kontur K = kontur objek, yamg berdimens si 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
% 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
599
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 (a) p3 di kiri garis. Dalam hal ini, p2 berputar ke kanan untuk menuju p3
p3 (b) p3 di kanan garis. Dalam hal ini, p2 berputar ke kiri untuk 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
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(imrea ad(berkas), 0.5e); Kontur = inbound_ _tracing(Img); K = convexhull(Ko ontur); 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');
dengan
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: 78 9:; E8F
< =
< =
=>? @> >? A %B>AC =>? @> >? D#>A
GHIC D#>A
GHIC A %B>AC
(12.7) (12.8)
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 >>
ut berguna untuk mendapatkan soliditas. Fungsi berikut
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)
(a, b) (c, d) (e, f) (g, h) (a, b)
S a m a
(X, Y)
(X, Y)
(a, b)
(a, b)
(c, d)
(c, d)
(e, f)
(e, f)
(g, h)
(g, h)
(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 ika kan-1.png
Konveksitas
Soliditas tas
0.8930
0.8577
0.8930
0.8577
0.8925
0.8546
0.8840
0.8582
0.8276
0.8514
0.7876
0.7964
0.7352
0.7147
ika kan-2.png
ika kan-3.png
ika kan-4.png
ika kan-5.png
gup uppi-1.png
kun unci.png
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, ;#
N LA , ; JB>? ; = ∑M #
(12.9)
(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: ∑P O # = ∑M Q
#
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: ∑P 0 # = ∑M Q
− ̅
−
#
N
,
(12.12)
Momen di atas bersifat invariant (tidak terpengaruh) terhadap translasi. Dalam hal ini, ̅ dan ̅=
diperoleh melalui: MRS MSS
,
M
= MSR SS
(12.13)
Agar momen pusat bersifat bebas terhadap translasi, penyekalaan, dan rotasi, maka momen perlu dinormalisasi. Momen pusat ternormalisasi berupa: -UV
ŋ # = W ,X = SS
Y#Y
(12.14)
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
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
611
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 >>
Contoh di atas digun unakan untuk memperoleh ŋ
(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 normalisasi Tabel 12.4Fitu Obje bjek
ikan-1.png
ŋ ŋ ŋ
Fitur = -0.0024 = 0.04578 = 0.1606
ŋ Z =-5.6067e-44 ŋZ = 0.0132 ŋ = -8.7615e--4 ŋ = 0.0024
Pemerolehan Fitur Bentuk Be dan Kontur
ikan-2.png
ikan-3.png
ikan-4.png
ikan-5.png
guppi-1.png
ŋ ŋ ŋ
= -0.0024 = 0.0458 = 0.1606
ŋ ŋ ŋ
= -0.0025 = 0.0456 = 0.1612
ŋ ŋ ŋ
= 0.0529 = 0.0811 = 0.1251
ŋ ŋ ŋ
= -0.0021 = 0.0463 = 0.1596
ŋ ŋ ŋ
= 0.0370 = 0.0706 = 0.1671
ŋ ŋ ŋ
= -0.0032 = 0.2029 = 0.0796
613 ŋ Z = -5.6067e--4 ŋZ = 0.0132 ŋ = -8.7615e--4 ŋ = 0.0024 ŋ Z = -5.4819e--4 ŋZ = 0.0132 ŋ = -8.8123e--4 ŋ = 0.0024 ŋ Z = 0.0031 ŋZ = 0.0038 ŋ = 0.0051 ŋ = 0.0054 ŋ Z = -5.0026e--4 ŋZ = 0.0135 ŋ = -0.0010 ŋ = 0.0023 ŋ Z = 0.0104 ŋZ = -0.0449 ŋ = 0.0080 ŋ = -0.0109 ŋ Z = -0.0268 ŋZ = -0.0016 ŋ = 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 + ŋ
+ ŋ
∅] = ŋZ − 3ŋ ŋ ∅^ = ŋ
Z
ŋ
Z
5 ŋZ + ŋ 5 ŋ
+ŋ
5 ŋZ + ŋ
4ŋ
ŋZ + ŋ
∅` = 3ŋ
−ŋ
ŋZ − 3ŋ
ŋ
Z
ŋ
Z
− ŋ
Z
Z
−3 ŋ
+ŋ +ŋ
−3 ŋ Z
+ŋ
6+
Z
6
+ ŋZ
6+
+ŋ 5 ŋZ + ŋ
ŋZ + ŋ
+ŋ
(12.15)
+ŋ
Z
ŋZ + ŋ
− 3ŋ
−ŋ
− 3ŋ
Z
5 ŋ
Z
+ŋ
−3 ŋ
− 3 ŋZ + ŋ
+ŋ
Z
6
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 norm_02 norm_11 norm_30 norm_12 norm_21 norm_03
= = = = = = =
normome en(F, normome en(F, normome en(F, normome en(F, normome en(F, normome en(F, normome en(F,
2, 0, 1, 3, 1, 2, 0,
0); 2); 1); 0); 2); 1); 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
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
>>
615
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.
Tabel el 12.5Fitur yang memanfaatkan momen Hu u O Objek
ikan-1.pngg
ikan-2.pngg
ikan-3.pngg
ikan-4.pngg
ikan-5.pngg
guppi-1.png ng
∅ = 0.206371 ∅ = 0.013207 ∅Z = 0.000172 ∅\ = 0.000155
Fitur ∅] = 0.00000 000034 ∅^ = 0.00001 016756 ∅` = 0.00000 000049
∅ = 0.206370 ∅ = 0.013207 ∅Z = 0.000172 ∅\ = 0.000155
∅] = 0.00000 000034 ∅^ = 0.00001 016756 ∅` = 0.00000 000049
∅ = 0.206774 ∅ = 0.013390 ∅Z = 0.000173 ∅\ = 0.000156
∅] = 0.00000 000035 ∅^ = 0.00001 017012 ∅` = 0.00000 000050
∅ = 0.2062254 ∅ = 0.0131368 ∅Z = 0.0005498 ∅\ = 0.0001549
∅] = 0.00000 000034 ∅^ = 0.00001 016712 ∅` = 0.000000042 42
∅ = 0.2058433 ∅ = 0.0128627 ∅Z = 0.0001610 ∅\ = 0.0001575
∅] = 0.00000 000036 ∅^ = 0.00001 016946 ∅` = 0.00000 000050
∅ = 0.2377492 ∅ = 0.0147675 ∅Z = 0.0022907 ∅\ = 0.0013586
∅] = 0.00000 003528 ∅^ = 0.00013 133488 ∅` = 0.00000 004008
∅ = 0.2824261 ∅ = 0.0152452 ∅Z = 0.0086765 ∅\ = 0.0000221
∅] = 0.00000 000009 ∅^ = 0.00000 002673 ∅` = 0.00000 000001
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 ∑
b= =
|
|=
617
(12.16)
Momen pusat ke-p didefinisikan sebagai berikut: O= = ∑
− b |=
|
(12.17)
Selanjutnya, momen-momen yang ternormalisasi didefinisikan sebagai b= = O= =
@U
(12.18)
MU
(12.19)
Mc U/c 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: e = e = eZ =
Mc
=
@R
Mk
k
Mc c Mn
Mc c
R c f ∑g ijR|h % "@R |
= =
g
R g ∑ h g ijR
R g ∑ |h g ijR
(12.20)
%
% "@R |k
k/c
R c l ∑g ijR|h % "@R | m g
R g ∑ |h % "@R |n g ijR c R |h % "@R |c m l ∑g g ijR
(12.21)
(12.22)
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: o
e = o
eZ =
k
Mk
@R
n
Mn
@R
=
k R g f ∑ijR|h % g R g ∑ h g ijR
"@R |k
=
n R g f ∑ijR|h % g R g ∑ h g ijR
"@R |n
%
%
(12.23)
(12.24)
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
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 momen_pusat_ke_p(F, 2)) / momen_ke_p( (F, 1); Fitur.F1 = sqrt(m 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
untuk
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 F1 = 0.2526 F2 = 0.0195 F3 = 0.0070
Fitur F2’ = 0.277 776 F3’ = 0.298 988 Mf = 0.046 463
F1 = 0.2526 F2 = 0.0195 F3 = 0.0070
F2’ = 0.277 776 F3’ = 0.298 988 Mf = 0.046 463
F1 = 0.2542 F2 = 0.0199 F3 = 0.0073
F2’ = 0.279 796 F3’ = 0.301 012 Mf = 0.047 470
F1 = 0.2484 F2 = 0.0189 F3 = 0.0069
F2’ = 0.274 744 F3’ = 0.296 969 Mf = 0.048 485
F1 = 0.2422 F2 = 0.0173 F3 = 0.0059
F2’ = 0.265 658 F3’ = 0.285 857 Mf = 0.043 434
F1 = 0.3372 F2 = 0.0541 F3 = 0.0322
F2’ = 0.399 991 F3’ = 0.446 469 Mf = 0.109 096
F1 = 0.3585 F2 = 0.0501 F3 = 0.0239
F2’ = 0.391 917 F3’ = 0.417 178 Mf = 0.059 593
ikan-1.pngg
ikan-2.pngg
ikan-3.pngg
ikan-4.pngg
ikan-5.pngg
guppi-1.png ng
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| /
x=q s = ∑C
−1
C
="C !
U||V| U}|V| C!! "C&!! "C&! c c
~="
C
(12.26)
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 x x x xZ xZZ x\ x\ x\\ x] x]Z
s s s s s s s s s s s
=1 =s = 2s − 1 =s = 3s − 2s = sZ = 6s \ − 6s + 1 = 4s \ − 3s = s\ = 10s ] − 12s + 3s = 5s ] − 4s Z
x]] s = s ] x^ s = 20s ^ − 30s \ + 12s −1 ^ x^ s = 15s − 20s \ + 6s x^\ s = 6s ^ − 5s \
x^^ x` x`Z x`] x`` xƒ xƒ xƒ\ xƒ^ xƒƒ x† x†Z x†]
s s s s s s s s s s s
= s^ = 35s ^ − 60s ] + 30s Z − 4s = 21s ` − 30s ] + 10s Z = 7s ` − 6s ] = 7s ` = 70s ƒ − 140s ^ + 90s \ − 20s + 1 = 56s ƒ − 105s ^ + 60s \ − 10s = 28s ƒ − 42s ^ + 15s \ = 8s ƒ − 7s ^ = sƒ = 126s † − 280s ` + 210s ] + 60s Z + 5s † s = 84s − 168s ` + 105s ] − 20s Z s = 36s † − 56s ` + 21s ]
x†` s = 9s † − 8s ` 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: ‡=q =
=Y $
ˆ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 ‡=q =
=Y $
∑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 Biner
Normalisasi Penyekalaan
Normalisasi Translasi
Normalisasi ZMD
Perhitungan ZMD
Gambar 12.19Mekanisme perhitungan ZMD
Normalisasi penyekalaan dilakukan didasarkan pada persamaan
o
= f
Komponen f
Ž
Ž
@SS
@SS
,
o
= f
Ž
@SS
(12.31)
adalah faktor penyekala. Dalam hal ini, β adalah suatu nilai yang
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 , SS
3
@
= @SR SS
(12.32)
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
o
=
3
− ,
o
=
3
−
M
(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
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; luas = sum(sum(B) ));
% Parameter untuk mengatur % penyekalaan citra % 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(sq qrt(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);
627
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
% 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
629
630
Pengolahan Citra Teori dan Aplikasi
switch (l) case 0, case 2, end; elseif n == 3 switch (l) case 1, case 3, end; elseif n == 4 switch (l) case 0, case 2, case 4, end; elseif n == 5 switch (l) case 1, case 3, case 5, end; elseif n == 6 switch (l) case 0, case 2, case 4, case 6, end; elseif n == 7 switch (l) case 1, case 3, case 5, case 7, end; elseif n == 8 switch (l) case 0, case 2, case 4, case 6, case 8,
p = 2*(rho.^2)-1; p = (rho.^2);
p = 3*(rho.^3)-2*rho; p = (rho.^3);
p = 6*(rho.^4)-6*(rho.^2)+1; p = 4*(rho.^4)-3*(rho.^2); p = (rho.^4);
p = 10*(rho.^5)-12*(rho.^3)+3*rho; p = 5*(rho.^5)- 4*(rho.^3); p = (rho.^5);
p p p p
= 20*(rho.^6)-30*(rho.^4)+12*(rho.^2)-1; = 15*(rho.^6)-20*(rho.^4)+ 6*(rho.^2); = 6*(rho.^6)- 5*(rho.^4); = (rho.^6);
p p p p
= 35*(rho.^7)-60*(rho.^5)+30*(rho.^3)-4*rho; = 21*(rho.^7)-30*(rho.^5)+10*(rho.^3); = 7*(rho.^7)- 6*(rho.^5); = (rho.^7);
p = 70*(rho.^8)-140*(rho.^6)+... 90*(rho.^4)-20*(rho.^2)+1; p = 56*(rho.^8)-105*(rho.^6)+ ... 60*(rho.^4)-10*(rho.^2); p = 28*(rho.^8)- 42*(rho.^6)+15*(rho.^4); p = 8*(rho.^8)- 7*(rho.^6); 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
case
case
case case case
2, p = 210*(rho.^10)-504*(rho.^8)+ ... 420*(rho.^6)- ... 140*(rho.^4)+15*(rho.^2); 4, p = 129*(rho.^10)-252*(rho.^8)+ ... 168*(rho.^6)- ... 35*(rho.^4); 6, p = 45*(rho.^10)- 72*(rho.^8)+ 28*(rho.^6); 8, p = 10*(rho.^10)- 9*(rho.^8); 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
631
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.191575
0.585965
0.013469
0.042353
0.050947
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
Gambar ar 12.20Visualisasi pemrosesan momen Zern 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 Z40 =0,031 31014 Z42 =0,187 87538 Z44 =0,575 75370
ikan-1.png
Z20 =0,067489 Z22 =0,655700 Z31 =0,015904 Z33 =0,014320
Z40 = 0,031 31014 Z42 = 0,187 87538 Z44 = 0,575 75370
ikan-2.png
Z20 = 0,067489 Z22 = 0,655700 Z31 = 0,015904 Z33 = 0,014320
Z40 = 0,030 30826 Z42 = 0,182 82968 Z44 = 0,552 52235
ikan-3.png
Z20 = 0,066243 Z22 = 0,634994 Z31 = 0,014238 Z33 = 0,008975
634
Pengolahan Citra Te Teori dan Aplikasi
Objek
Fitur Z40 = 0,050 50947 Z42 = 0,191 91575 Z44 = 0,403 03293
ikan-4.png
Z20 = 0,087641 Z22 = 0,585965 Z31 = 0,013469 Z33 = 0,042353
Z40 = 0,029 29108 Z42 = 0,187 87842 Z44 = 0,570 70436
ikan-5.png
Z20 = 0,065993 Z22 = 0,655143 Z31 = 0,008639 Z33 = 0,036051
Z40 = 0,034 34444 Z42 = 0,180 80690 Z44 = 0,470 70811
guppi-1.png
Z20 = 0,073650 Z22 = 0,611287 Z31 = 0,058099 Z33 = 0,058516 Z20 = 0,099800 Z22 = 0,440984 Z31 = 0,112749 Z33 = 0,010853
Z40 = 0,015 15126 Z42 = 0,192 92140 Z44 = 0,122 22398
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
Gambar ar 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•
?
1
~+
$
‘
∅ 6
dengan: a) 0
(12.35)
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
3
∑Q "
=
,
3
=
M
∑M" P
(12.36)
Adapun (r, θ) dihitung berdasarkan: s=
−
+
3
−
3
P"P“
, t =
(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• = {
—˜
,
$? c
,
—˜ —˜
, ,
,…,
—˜
—˜
,% ,
,…,
—˜ @, —˜
,
,…,
—˜ @,% —˜
,
}
(12.38)
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
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); xi-x_pusat)^2+(yi-y_pusat)^2)^0.5; panjang = ((x if panjang > rad_maks rad_maks = panjang; end end % Tentukan frekue ensi 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) - ...
637
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.1450364
0.0607695
0.1347511
0.0024445
0.0706047
0.0357912
0.0650260
Columns 7 through 12:
0.4252236
0.0846727
0.0291150
Columns 13 through 18:
0.1481163 0.0445491
0.0858275
Pemerolehan Fitur Bentuk Be dan Kontur
639
Columns 19 through 24:
0.0933387 7
0.0168520
0.0384655
0.017178 87
0.0299010
0.0039343
0.032143 31
0.0205917
0.0500069
Columns 25 through 30:
0.0469270 0
0.0394526
0.0125721
Column 31:
0.0162803 3
>>
Pada contoh di atas,
gfd(Img,4,6)
kuensi radial maksimum sebesar 4 dan frekuensi f radial berarti bahwa freku 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 esar 4 dan Tabel 12.9Fit 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
ikan-3.png ng
ikan-4.png ng
ikan-5.png ng
guppi-1.png ng
kunci.pngg
Fitur GFD1 = 0.396156 GFD2 = 0.020570 GFD3 = 0.261192 GFD4 = 0.017805 GFD1 = 0.393667 GFD2 = 0.020181 GFD3 = 0.258510 GFD4 = 0.019910 GFD1 = 0.396182 GFD2 = 0.021021 GFD3 = 0.255305 GFD4 = 0.020895 GFD1 = 0.262418 GFD2 = 0.073336 GFD3 = 0.303962 GFD4 = 0.249740 GFD1 = 0.386401 GFD2 = 0.003771 GFD3 = 0.346719 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. Y β
α
θ X
(a) Kotak pemba mbatas berorientasi tasi citra
(b) Kotak pembatas 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
=
@IQ
−
@%
(12.40)
Pada kotak pembatas berorientasi objek, perhitungan tinggi dan lebar kotak diawali dengan pencarian θ. Hal ini dilakukan dengan menggunakan rumusberikut: t=
<
"
›-
-R,R
c,S "-S,c
œ
(12.41)
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
= •@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
s< 8 ;8 <; ¡:bL< < L:s8 L:s8s : < , s< = s< 8 ;8 <; ¡:bL< < L:s8 L:s8s : < 8Ly:; =
GHIC I?>I D#>A
P¢£¤ "P¢i¥ ∗ Q¢£¤ "Q¢i¥ GHIC I?>I D#>A
¦¢£¤ "¦¢i¥ ∗ Ž¢£¤ "Ž¢i¥
(12.44) (12.45)
menghasilkan nilai antara 0 dan 1. Kedua rasio tersebutt m 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 Citra
Rasio Beror orientasi Objek jek
0.592211
0.59379 791
0.592211
0.59379 791
0.599856
0.60111 117
0.544270
0.59008 088
0.588815
0.59014 142
ikan-1.png ng
ikan-2.png ng
ikan-3.png ng
ikan-4.png ng
ikan-5.png ng
646
Pengolahan Citra Te Teori dan Aplikasi
Objek
Rasio Berorientasi Citra
Rasio Beror orientasi Objek jek
0.522930
0.50697 971
0.536716
0.52406 068
guppy-1.pn png
kunci.png ng
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 tian proyeksi citra. 5. Jelaskan pengertia 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 polapola 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 pemisahan antara
dipakai untuk melakukan
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
merepresentasikan jumlah informasi yang terkandung di dalam sebaran data.
juga
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)
us di atas, Nilai R Pada rumus di atas, σ adalah deviasi standar.Berdasarkan rumus yang rendah menunj njukkan bahwa citra memiliki intensitas yang ya kasar. Perlu diketahui, di dalam m menghitung kehalusan, varians perlu dinorm rmalisasi sehingga nilainya berada dalam am jangkauan [0 1] dengan cara membaginya ddengan (L-1)2. 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
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');
657
658
Pengolahan Citra Teori dan Aplikasi
>> G=stattekstur(Img) G =
scalar structure containing the fields:
mu =
125.130203247070
deviasi =
45.8705882891252
skewness = energi = entropi =
0.0268669028523393 0.00630368571728468 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)
+
. Skewness
+,
+' ,/'
= + /'
(13.11)
'
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 022 −1 2 1
−1 2 −1 −1 = 0−2 4 −22 −1 2 −1
(13.12)
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 Kernel L3L3
Matriks L3TL3
L3E3
L3TE3
L3S3
L3TS3
E3L3
E3TL3
E3E3
E3TE3
E3S3
E3TS3
S3L3
S3TL3
S3E3
S3TE3
S3S3
S3TS3
Keterangan Menyatakan pererataan intensitas aras keabuan piksel-piksel yang bertetangga dengan ukuran 3x3 Pererataan pada arah vertikal dan pendeteksian tepi pada arah horizontal Pererataan pada arah vertikal dan pendeteksian titik pada arah horizontal Pendeteksian tepi pada arah vertikal dan pererataan intensitas pada arah horizontal Pendeteksian tepi pada arah vertikal dan horizontal Pendeteksian tepi pada arah vertikal dan pendeteksian titik pada arah horizontal Pendeteksian titik pada arah vertikal dan pererataan intensitas pada arah horizontal Pendeteksian titik pada arah vertikal dan pendeteksian tepi pada arah horizontal Pendeteksian titik pada arah vertikal dan horizontal
Pemerolehan Fitur Tekstur Te
663
Tabel el 13.3Pasangan cadar Laws berukuran 1x5 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
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 E5 S5 R5 W5
= = = = =
[1 4 6 4 1]; ; [-1 -2 0 2 1]; 1 [-1 0 2 0 -1 1]; [1 -4 6 -4 1 1]; [-1 2 0 -2 1 1];
% Cek cadar 1 ifstrcmp(cadar1, 'L3') == 1 Cd1 = L3; ukuran1 = 3; elseifstrcmp(cada ar1, 'E3') == 1 Cd1 = E3; ukuran1 = 3; elseifstrcmp(cada ar1, 'S3') == 1 Cd1 = S3; ukuran1 = 3; elseifstrcmp(cada ar1, 'L5') == 1
untuk
664
Cd1 = L5; ukuran1 = 5; elseifstrcmp(cadar1, Cd1 = E5; ukuran1 = 5; elseifstrcmp(cadar1, Cd1 = S5; ukuran1 = 5; elseifstrcmp(cadar1, Cd1 = R5; ukuran1 = 5; elseifstrcmp(cadar1, Cd1 = W5; ukuran1 = 5; else ukuran1 = 0; end
Pengolahan Citra Teori dan Aplikasi
'E5') == 1
'S5') == 1
'R5') == 1
'W5') == 1
% Cek cadar 2 ifstrcmp(cadar2, 'L3') == 1 Cd2 = L3; ukuran2 = 3; elseifstrcmp(cadar2, 'E3') == Cd2 = E3; ukuran2 = 3; elseifstrcmp(cadar2, 'S3') == Cd2 = S3; ukuran2 = 3; elseifstrcmp(cadar2, 'L5') == Cd2 = L5; ukuran2 = 5; elseifstrcmp(cadar2, 'E5') == Cd2 = E5; ukuran2 = 5; elseifstrcmp(cadar2, 'S5') == Cd2 = S5; ukuran2 = 5; elseifstrcmp(cadar2, 'R5') == Cd2 = R5; ukuran2 = 5; elseifstrcmp(cadar2, 'W5') == Cd2 = W5; ukuran2 = 5; else ukuran2 = 0; end
1
1
1
1
1
1
1
% 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.
Ls =
La =
M
1 MN
N
∑∑ P
2
mnn
m =1 n =1
1 MN
Pkl ∑ ∑ k =1 l =1
1 MN
M
M
N
N
∑∑ m =1 n =1
1 Lp = MN
2
(13.13)
−1
Pmn 1 MN N
M
N
∑∑P
(13.14)
−1
kl
k =1 l =1
p M N Pmn − 1 ∑∑ M N 1 m =1 n =1 ∑ ∑ Pkl MN k =1 l =1 M
1/ p
(13.15)
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 0.5); GR = im2bw(RGB, 0 [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 jumlsg_atas = jumlsg_atas jumlsb_atas = jumlsb_atas jumls_atas = jumls_atas +
+ RGB(Baris, Kolom, 1)^2; + RGB(Baris, Kolom, 2)^2; + RGB(Baris, Kolom, 3)^2; GR(Baris, Kolom)^2;
jumlsr_bawah = jumlsr_bawah jumlsg_bawah = jumlsg_bawah jumlsb_bawah = jumlsb_bawah jumls_bawah = jumls_bawah + end end
+ RGB(Baris, Kolom, 1); + RGB(Baris, Kolom, 2); + RGB(Baris, Kolom, 3); GR(Baris, Kolom);
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
(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;
669
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 H.lag = jumlag H.lab = jumlab H.la = jumla /
/ jum_piksel; / jum_piksel; / jum_piksel; jum_piksel;
H.l2r = sqrt(juml2r H.l2g = sqrt(juml2g H.l2b = sqrt(juml2b H.l2 = sqrt(juml2 /
/ jum_piksel); / jum_piksel); / jum_piksel); jum_piksel);
H.l4r = H.l4g = H.l4b = H.l4 =
(juml4r / jum_piksel)^(1/4); (juml4g / jum_piksel)^(1/4); (juml4b / jum_piksel)^(1/4); (juml4 / jum_piksel)^(1/4);
H.l6r = H.l6g = H.l6b = H.l6 =
(juml6r / jum_piksel)^(1/6); (juml6g / jum_piksel)^(1/6); (juml6b / jum_piksel)^(1/6); (juml6 / jum_piksel)^(1/6);
H.l8r = H.l8g = H.l8b = H.l8 =
(juml8r / jum_piksel)^(1/8); (juml8g / jum_piksel)^(1/8); (juml8b / jum_piksel)^(1/8); (juml8 / jum_piksel)^(1/8);
H.l10r = H.l10g = H.l10b = H.l10 =
(juml10r / jum_piksel)^(1/10); (juml10g / jum_piksel)^(1/10); (juml10b / jum_piksel)^(1/10); (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
lsb = ls =
0.330578855094647 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;
671
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
dalam rumus (Newsam dan Kammath, 2005):
∈ 1, . . , 7, yang dapat dinyatakan
6789:5 ( , <) = #?(@ , A ), (@ , A ) ∈ BCD , CE F × BCD , CE F|I(@ , A ) =
< =(@2−@1,A2−A1)
(13.16)
berupa sudut dan/atau jarak.Sebagai contoh, gambar Dalam hal ini, ofset 445dapat
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
(c) Jumlah pasangan piksel
dengan 3
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 L K24 2 K K24 K1 K24 K0 J24
2 24 4 24 0 24 0 24
1 24 0 24 6 24 1 24
0 Q 24P 0 P 24P 1P 24P 2P 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: YZ9 = ∑
∑T
([ \]( ,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: U
_V
=
∑aecd ∑abcd( T)([ \]( ,T) fe g fb g &e g &b g
(13.21)
dengan )`=∑
)T ` = ∑ T
=∑ =∑
∑T
∑T
∑T ∑T
∗ 6789( , <)
< ∗ 6789( , <)
6789( , <)( − ) ` )
6789( , <)( − ) ` )
(13.22) (13.23) (13.24) (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) stdevy45 = stdevy45 + (b-py45) (b-py45)
* * * *
... GLCM45(a+1, b+1); ... GLCM45(a+1, b+1);
stdevx90 = stdevx90 + (a-px90) (a-px90) stdevy90 = stdevy90 + (b-py90) (b-py90)
* * * *
... GLCM90(a+1, b+1); ... GLCM90(a+1, b+1);
680
Pengolahan Citra Teori dan Aplikasi
stdevx135 = stdevx135 + (a-px135) (a-px135) stdevy135 = stdevy135 + (b-py135) (b-py135)
* * * *
... GLCM135(a+1, b+1); ... 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
scalar structure containing the fields:
asm = 6.5150e-004 kontras = idm =
537.71
0.10643
entropi =
8.4453
korelasi = 6.8221e-004
G45 =
scalar structure containing the fields:
asm = 5.6409e-004 kontras = idm =
778.22
0.085559
entropi =
8.5749
korelasi = 5.8479e-004
G90 =
scalar structure containing the fields:
asm = 6.6484e-004 kontras = idm =
350.20
0.10536
entropi =
8.3458
korelasi = 7.5820e-004
G135 =
scalar structure containing the fields:
681
682
Pengolahan Citra Teori dan Aplikasi
asm = 5.8796e-004 kontras = idm =
705.20
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 Lp = MN
1/ p
p M N Pmn − 1 ∑∑ M N 1 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
+
y
2
y+x
max(y, x)
y
y
x (a) jarak Euclidean
x
x
(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%|.%
= ∑2
34% .%
| /.0 2 ∑ 1 34% .0
(14.6)
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 25 4+2+3+3+6+7
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 3 6 4 = 4 ∗ log > ? + 3 ∗ log > ? + 6 ∗ log > ? = 1,8477 3 7 2 14.2.8 Divergensi Jensen Shannon Divergensi Jensen Shannon (Deselaers, 2003) didefinisikan sebagai berikut: @A
,
=∑
. 789 .
%
∗ .%
1 .0
+
. 789
.%
∗ .0
1 .0
(14.6)
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
2 ∗ log C
∗
D1
E + 3 ∗ log C
∗(
E + 7 ∗ log C
(1(
∗F
E = 0,3 ,3783
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
% %
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 >>
695
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.jar rak < 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.