Anda di halaman 1dari 719

Teori dan Aplikasi

Dilengkapi CD beris
erisi
program-program cont
contoh,
file-file latihan, dan Octave
Oct

Abdul Kadir
Abd
AdhiS
dhiSusanto

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

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.

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

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

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

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.

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

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

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

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.

N-1
x

Posisi sebuah piksel

y
M-1

Gambar 2.1Sistem koordinat citra berukuran MxN


(M baris dan N kolom)
Dengan sistem koordinat yang mengikuti asas pemindaian pada layar TV
standar itu, sebuah piksel mempunyai koordinat berupa
(x, y)
Dalam hal ini,

x menyatakan posisi kolom;

y menyatakan posisi baris;

Mengenal Dasar Citra

13

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

Dalam praktik, penggunaan koordinat pada sistem tertentu


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

Dengan menggunakan notasi pada OctavedanMATLAB, citra dinyatakan


dengan
f(y, x)
Sebagai contoh, citra yang berukuran 12x12 yang terdapat pada Gambar 2.2(a)
memiliki susunan data seperti terlihat pada Gambar 2.2(b).Adapun Gambar 2.3
menunjukkan contoh penotasian f(y,x). Berdasarkan gambar tersebut maka:

f(2,1) bernilai 6

f(4,7) bernilai 237

Pada citra berskala keabuan, nilai seperti 6 atau 237 dinamakan sebagai intensitas.

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

10

11

12

1
2
3
4

89 237 237 237 237

89 237 237 237

89 237 237 237 237

89 237 237

89 237 237 237 237

89 237 237

5
6
7
8
9

89 237 237 237 237

89 237 237

89 237 237 237

89 237 237 237

89 237 237 237 237

89 237 237 237 237 237

89 237 237

10
11

89 237 237 237

89 237 237 237 237

12

89 237 237 237 237 237

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.

(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

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

24

0-1

RGB umum

36

0-4095

RGB kualitas tinggi

42

0-16383

RGB kualitas profesional

32

0-255

CMYK (cetakan digital)

Dalam pengolahan citra, kuantisasi aras intensitas menentukan kecermatan


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

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

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

Merah

255

Hijau

255

Biru

255

Hitam

Putih

255

255

255

255

255

Kuning

Gambar 2.12 menunjukkan pemetaan warna dalam ruang tiga dimensi.Adapun


Gambar 2.13 menunjukkan keadaan suatu citra dan representasi warnanya.

255

Cyan

Biru

Magenta

Putih

255

0
Hitam

Hijau

255
Merah

Kuning

R
Gambar 2.12 Warna RGB dalam ruang berdimensi tiga

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

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

Komponen B

2
1
1

N-1

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

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

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)

12

20

18

38

14

52

10

62

64

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 i1 TO L-1
5.
c[i+1] c[i] + round( * hist[i+1])
6. END-FOR
7. FOR i 1 TO M
8.
FOR j1 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.

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.

Piksel tetangga f(y, x)


menentukan piksel
pada g(y,x)

y
x

f(y, x)

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

T1

T4

T4

T3

T2

T5

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) <minInt
g(y, x) minInt
ELSE
IF f(y. x) >maksInt
g(y, x) maksInt
ELSE
g(y, x) f(y, x)
END-IF
END-IF

Sebagai contoh, terdapat piksel seperti terlihat pada Gambar 4.3.

Operasi Ketetanggaan
an Piksel

75

G
Gambar
4.3Contoh piksel dan tetangga

Berdasarkan keadaan
an tersebut,

minInt = mini
nimum(5, 7, 7, 5, 4, 6, 7, 8) = 4;

maksInt = mak
aksimum(5, 7, 7, 5, 4, 6, 7, 8) = 8;

mengingat f(y
(y, x) bernilai 9 dan lebih besar daripada 8 (maaksInt) maka g(y,
x) bernilai 8;

seandainya f(y,
f( x) pada keadaan di atas bernilai 2 (bukan
(
9),g(y,x)
akanbernilaii 4.
4

Untuk melihat efe


efek filter batas, cobalah program berikut.

Program : filbatas.m

% FILBATAS Melaku
ukan operasi ketetanggan piksel
%
menggunakan
n filter batas
F = imread('c:\Im
mage\mobil.png');
Ukuran = size(F);
;
tinggi = Ukuran(1
1);
lebar = Ukuran(2)
);
G = F;

76

Pengolahan Citra, Teori dan Aplikasi

for baris=2 : tinggi-1


for kolom=2 : lebar-1
minPiksel = min([F(baris-1, kolom-1)
...
F(baris-1, kolom) F(baris, kolom+1)
...
F(baris, kolom-1)
...
F(baris, kolom+1) F(baris+1, kolom-1) ...
F(baris+1, kolom) F(baris+1, kolom+1)]);
maksPiksel = min([F(baris-1, kolom-1)
...
F(baris-1, kolom) F(baris, kolom+1)
...
F(baris, kolom-1)
...
F(baris, kolom+1) F(baris+1, kolom-1) ...
F(baris+1, kolom) F(baris+1, kolom+1)]);
if F(baris, kolom) < minPiksel
G(baris, kolom) = minPiksel;
else
if F(baris, kolom) > maksPiksel
G(baris, kolom) = maksPiksel;
else
G(baris, kolom) = F(baris, kolom);
end
end
end
end
figure(1);
imshow(G);
clear;

Akhir Program

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

Operasi Ketetanggaan Piksel

77

(a) Citra mobil yang telah diberi


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

-1

-2

-1

Gambar 4.8Contoh kernel untuk konvolusi berukuran 3x3 dan mxn

Kernel konvolusi terkadang disebut dengan istilah cadar, cadar


konvolusi, atau cadar spasial.

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


alternatif di kawasan frekuensi, dilaksanakan melalui operasi konvolusi.Operasi
ini dilakukan dengan menumpangkan suatu jendela (kernel) yang berisi 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
jumjum * 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

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
jumjum * 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,

adalah

matriks

kernel.Untuk

kondisi

tertentu,

dapatdipecahmenjadiduabuahvektor seperti berikut:


- = -. -/
Dalam hal ini, hk adalah vektor kolom dan hb adalah vektor baris.Contoh:
1 0
02 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

kalaumatriksdapatdidekomposisimenjadiduabuah

vektor. Contoh:
>> H = [-1 0 1; -2 0 2; -1 0 1];
>> rank(H)
ans =

1
>>

Hasil

di

atas

menyatakan

bahwa

dapatdidekomposisimenjadiperkalianduavektor.

Suatu

kernel

yang

mempunyairank

dengan

nilai

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)
tf
// 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
jumjum * 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
jumjum * 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

1/9

#1

1/10

#2

#3

1/16

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

-1

-1

-1

-1

-2

-1

-1

-1

-1

-2

-2

-1

-1

-1

-1

-2

#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

-1

-1

-1

-1

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

-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

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?

-2

-2

-2

-2

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 "

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

Rotasi sebesar

cos

sin

-sin

cos

Penyekalaan sebesar s

Pembengkokan secara

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

6 cos :

6 sin :

(5.14)

158

Pengolahan Citra, Te
Teori dan Aplikasi

dengan

>6?@

AAB , B C

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.

I tan ! , L M 6 6
, L M 6 > 6

EF P

EF

(5.18)

160

Pengolahan Citra, Te
Teori dan Aplikasi

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

I
6

=6
5

EF

EF

6)

[ \

`
[ \ ] ^_ ]

(5.20)

[ \
`
[ \ ] ^_ ]

(5.21)

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

!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

<

1+j0

1+j0

1+j0

1+j0

1+j0

1+j0

1+j0

1+j0

1+j0

1+j0

1+j0

1+j0

1+j0

1+j0

1+j0

u
1

0+j

2
1

1+j0

0+ j

0+j

-1+j0
0+j

-1+j0
0+i

0-j

1+j0
0+j

2
1

1+j0

0-j

2
1

2
1

-1+j0

1+j0
0-j

1+j0

1+j0
0-j

0+j

1+j0
-1+j0

0+j

2
1

2
1

2
1

0-j

-1+j0
0-j

1+j0

-1+j0
0-j

0-j

1+j0
0-j

0-j

2
1

2
1

2
1

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

10

11

12

13

14

15

16

183

Jika dikenakan perintah seperti berikut

fftshift(X)

diperoleh hasil berupa:

ans =

11

12

10

15

16

13

14

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.

1
1

Gambar 7.3Contoh beberapa kernel

212

Pengolahan Citra, Teori dan Aplikasi

Hotspot

Citra

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:
BA

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

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=AB
1

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 = AB

(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

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=AB
1

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

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

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

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

= {(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.

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

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

AB =

"

(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:


AB =

| =

+ , 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,
AB = { (2,2) + (-1, 0) , (2,2) + (0, 0) + (2,2) + (1, 0),
(2,3) + (-1, 0) , (2,3) + (0, 0) + (2,3) + (1, 0),
(2,4) + (-1, 0) , (2,4) + (0, 0) + (2,4) + (1, 0),
(3,2) + (-1, 0) , (3,2) + (0, 0) + (3,2) + (1, 0),
(3,3) + (-1, 0) , (3,3) + (0, 0) + (3,3) + (1, 0),
(3,4) + (-1, 0) , (3,4) + (0, 0) + (3,4) + (1, 0),
(4,3) + (-1, 0) , (4,3) + (0, 0) + (4,3) + (1, 0) }
= { (1,2), (2,2), (3,2), (1,3), (2,3), (3,3),
(1,4), (2,4), (3,3), (2,2), (3,2), (4,2),
(2,3), (3,3), (4,3), (2,4), (3,4), (4,4),
(3,3), (4,3), (5,3) }
= { (1,2), (1,3), (1,4), (2,2), (2,3), (2,4),
(3,2), (3,3), (3,4), (4,2), (4,3), (4,4), (5,3) }

Morfologi untuk Pengolahan Citra

223

-1

-1

4
5
A

B
Hotspot vertikal
Penambahan piksel akibat dilasi

AB

Gambar 7.11Efek dilasi dengan hotspot vertikal

Operasi dilasi bersifat komutatif. Artinya,


AB = BA
Selain itu, operasi dilasi bersifat asosiatif. Artinya,
(AB) 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];

226

Pengolahan Citra, Teori dan Aplikasi

>> H = [0 1 0; 1 1 1; 0 1 0];
>> G = dilasi(F,H)
G =

>>

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 =

Morfologi untuk Pengolahan Citra

227

>>

Dengan menggunakan data F dan H di atas, perintah berikut dapat dicoba:

>> G = dilasi(F,H, 2, 1)
G =

>>

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

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:


AB = ) * + | ( + ) ,,

- . )

(7.13)

Makna yang tersirat padaPersamaan 7.12 dan 7.13sebenarnya sama. Berdasarkan


Persamaan 7.13, posisi p terdapat pada AB 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];

>>H = [0

0];

>> G = erosi(F, H)
G =

>>

232

Pengolahan Citra, Teori dan Aplikasi

Gambar berikut memperlihatkan bentuk visual untuk contoh di atas.

Hanya ini yang cocok dengan


elemen penstruktur
A

AB

Gambar 7.14 Contoh visualisasi operasi erosi

Operasi erosi bersifat komutatif. Artinya,


AB = BA
Selain itu, operasi erosi bersifat asosiatif. Artinya,
(AB) 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

>>

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:
AB = (AB) 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 ];

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

(AB)B = (AB)
(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): ABh;
filter lolos-rendah

filter lolos-tinggi (high-pass): A (ABh);

filter lolos-bidang
ng (band-pass): (ABh1)- (ABh2), 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:

AB = (AB)) 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).

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

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 =

>>

Gambar 7.25 menunjukkan keadaan H2 dan komplemen citra.

;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

;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

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:

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 dont 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 dont 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 (dont 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

B5

B6

B7

B8

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

A
0

AB

(A B) B

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:

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

B5

B6

B7

B8

Gambar 7.36Contoh 8 elemen penstruktur


untuk operasi thickening
Fase pertama operasi thickening dilakukan sebagai berikut:

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

Gambar 7.38Empat elemen penstruktur untuk membentuk convex hull

Pada contoh di atas, x menyatakan dont 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 ,

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

L1]

^ =3

A
0

L 2]

L 3]

^ =1

^ =2

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

B5

B6

B7

B8

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

A (Citra)
11

12

14

15

17

18

Himpunan hasil

B
13
16

19

11+4

12+9

13+5

14+6

15+7

16+2

17+8

18+3

19+1

Diputar
180o
4

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

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

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

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

Morfologi untuk Pengolahan Citra

277

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:

AgB = (AgB) gB

(7.32)

Closing:

AgB = (AgB) 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-(AgB)

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

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

(a) Bagaimana bentuk komplemen citra tersebut?


(b) Bagaimana bentuk refleksinya?

3. Jelaskan kegunaan operasi dilasi.

4. Perhatikan citra berikut:

Morfologi untuk Pengolahan Citra

285

Perlihatkan hasilnya jika dikenai operasi dilasi dengan elemen penstruktur


seperti berikut?

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

B5

B6

B7

B8

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

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.

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.

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

(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

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
pEperoleh_piksel_berikutnya(pc, dE)
pIperoleh_piksel_berikutnya(pc, dI)
IF adalah_latarbelakang(pE) AND adalah_objek(pI)
pbpE

296

Pengolahan Citra, Teori dan Aplikasi

dcndE
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:
jumjum + 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

Objek

(a
(a)

(b)

Piksel objek paling


kiri dan paling atas
sebagai titik awal
pelacakan
2

4
Kontur

(c
(c)

(d)

Gamb
bar 8.8Penjelasan pelacakan kontur dengan
an
menggunakan Algoritma Moore
Implementasi
si algoritma Moore ditunjukkan berikut ini.

Program : inbound_tracing.m

function [Kontur]
] = inbound_tracing(BW)
% INBOUND_TRACING
G Memperoleh kontur yang telah teruru
utkan
%
dengan meng
ggunakan algoritma pelacakan kontur M
Moore
[jum_baris, jum_k
kolom] = size(BW);
% Peroleh piksel awal
selesai = false;
for p = 1 : jum_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 =

>>

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.

4
5

1
0

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

-1

-1

+1

-1

-1

+1

+1

+1

-1

-1

Kode Rantai

Indeks = 3 + + 5

Kode untuk memperolehkode rantai dapat dilihat berikut ini.

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

Jarak 1

Jarak 2

Gambar 8.11Jarak antarpiksel pada 8-ketetanggaan

Apabila tepi objek diproses dengan menggunakan rantai kode (dibahas


pada Subbab 8.4), perimeter dapat diperkirakan dengan menggunakan rumus:
=

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

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 p1 TO c-1
FOR qp+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_xpusat_x + p
pusat_ypusat_y + q
END-IF
END-FOR
END-FOR

5. pusat_xpusat_x / luas

dengan

menyusun

330

Pengolahan Citra, Teori dan Aplikasi

6. pusat_ypusat_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.

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

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)

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

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

K = 500 @@ ! * ! *L

3 = 200 @@ ! * ! *L

(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

( 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

(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

( P

ij

)4

i =1 j =1

MN 4

(9.50)

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

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

0
a

(a) Bentuk segitiga

(b) Bentuk trapesium

Gambar 9.13Fungsi keanggotan berbentuk segitiga dan trapesium

388

Pengolahan Citra Teori dan Aplikasi

Adapun fungsi keanggotaan berbentuk trapesium didefnisikan sebagai


berikut:

0
( x a) /(b a )

( x; a, b, c) = 1
(c x) /(c b)

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) && (h<b)
derajat=(h-a)/(b-a);
else
if (h>c) && (h<d)
derajat=(d-h)/(d-c);
else
if (h>=b) && (h<=c)
derajat=1.0;
else
derajat = 0.0;
end
end
end
end
Pemrosesan yang dilakukan pada Gambar
menghitung nilai untuk setiap komponen warna:
%T
IHKv = %T
c= = _21w( c , +c , 0c )
%T
}1K = %T
c= = _1( c , +c , 0c )

JvwIw2 =
dst.

%T
%T
c= = _zyyR( 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)
v1z(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) && (h<b)
derajat = (h-a)/(b-a);
else
if (h>c) && (h<d)
derajat = (d-h)/(d-c);
else
if (h>=b) && (h<=c)
derajat = 1.0;
else
derajat = 0.0;
end
end
end
function derajat=f_segitiga(a,b,c,h)
if h==b
derajat = 1.0;
else
if (h>a) && (h<b)
derajat = (h-a)/(b-a);
else
if (h>b) && (h<c)
derajat = (c-h)/(c-b);
else

Pengolahan Citra Berwarna

397

derajat = 0.0;
end
end
end
function derajat=f_segitiga_kiri(a,b,h)
if h==b
derajat=1.0;
else
if (h>a) && (h<b)
derajat = (h-a)/(b-a);
else
derajat = 0.0;
end
end
function derajat=f_segitiga_kanan(a,b,h)
if h==a
derajat=1.0;
else
if (h>a) && (h<b)
derajat = (b-h)/(b-a);
else
derajat = 0.0;
end
end

Akhir Program

Untuk keperluan mempraktikkan program cariwarna.m,


diperlukanuntuk menyalin isi subfolder Warna yang terdapat pada
fileunduhan (di bawah folder Image) ke dalam folder C:\Image.
Dengan demikian, pada C:\Image terdapat subfolder Warna.

Contoh penggunaan cariwarna:

>>cariwarna('biru', 'C:\Image\Warna')
Perintah di atas digunakan untuk mencari semua gambar yang berada dalam
folder C:\Image\Warna yang memiliki warna dominan berupa biru. Hasilnya
ditunjukkan pada Gambar 9.15, sedangkan Gambar 9.16 memberikan contoh hasil
kalau warna yang dicari adalah putih. Latarbelakang biru pada gambar tersebut
diperoleh melalui perintah:

set(gcf, 'Color', 'b')

398

Pengolahan Citra Teori dan Aplikasi

Gambar 9.15Hasil pencarian warna dominan biru

Gambar 9.16 Hasil pencarian warna dominan putih

Pengolahan Citra Berwarna

399

Latihan
1. Jelaskan istilah-istilah berikut:
(a) hue
(b) saturation
(c) brightness
2. Apa perbedaan CMY dan CMYK?
3. Kapan ruang warna seperti HSV bermanfaat?
4. Apakah ruang warna HIS, HSV, dan HSL itu sama? Kalau berbeda, di mana
perbedaannya?
5. Jelaskan penggunaan statistik mean,standard deviation, skewness, dan kurtosis
pada warna.
6. Mengapa fuzzy logic cocok diterapkan pada komponen hue (H)?

7. Jelaskan kode berikut:


function derajat=f_trapesium(a,b,c,d,h)
if (h>a) && (h<b)
derajat=(h-a)/(b-a);
else
if (h>c) && (h<d)
derajat=(d-h)/(d-c);
else
if (h>=b) && (h<=c)
derajat=1.0;
else
derajat = 0.0;
end
end
end
8. Jelaskan pula kode berikut:
function derajat=f_green(h, s, v)

400

Pengolahan Citra Teori dan Aplikasi

if (h==0) && (s==0)


derajat = 0.0;
else
derajat = f_trapesium(43,65,105,128, h);
end;
9. Kelemahan dari cariwarna.m terletak pada langkah yang selalu menghitung
komposisi warna untuk setiap file citra setiap kali terdapat permintaan suatu
warna. Langkah yang lebih baik adalah melakukan perhitungan komposisi
warna sekali saja dan kemudian hasilnya diletakkan dalam suatu file. Dalam
hal ini, perintah save bisa dipakai. Selanjutnya, query terhadap warna dapat
dlakukan secara langsung melalui file tersebut. Cobalah untuk
mengimplementasikannya.
10. Ada kemungkinan warna yang mendominasi suatu citra lebih dari satu warna.
Sebagai contoh, sebuah citra berisi warna merah dan putih dengan komposisi
yang sama. Kembangkan program pencari warna dominan yang bisa
mengantisipasi hal seperti itu.

BAB 10
Segmentasi
Citra

Setelah bab ini berakhir, diharapkan pembaca dapat


memahami berbagai istilah berikut dan juga dapat
mempraktikkan beberapa penerapannya.
Segmentasi citra
Deteksi garis
Deteksi tepi
Peng-ambangandwi-aras
Peng-ambangan global Vs. lokal
Peng-ambangan aras-jamak
Peng-ambangan dengan metode Otsu
Peng-ambangan adaptif
Peng-ambangan berdasarkan entropi
Segmentasi warna

402

Pengolahan Citra : Teori dan Aplikasi

10.1 Pengantar Segmentasi Citra


Segmentasi citra merupakan proses yang ditujukan untuk mendapatkan
objek-objek yang terkandung di dalam citra atau membagi citra ke dalam
beberapa daerah dengan setiap objek atau daerah memiliki kemiripan atribut. Pada
citra yang mengandung hanya satu objek, objek dibedakan dari latarbelakangnya.
Contoh ditunjukkan pada Gambar 10.1.Pada citra yang mengandung sejumlah
objek, proses untuk memilah semua objek tentu saja lebih kompleks.Contoh
penerapan segmentasi yaitu untuk membuatMagic 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

(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/

(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:

(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+1

z1

z2

-1

y+1

z3

z4

-1

(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+1

y-1

z1

z2

z3

-1

-1

-1

-1

z4

z5

z6

-1

y+1

z7

z8

z9

-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+1

y-1

z1

z2

z3

-1

z4

z5

z6

-2

y+1

z7

z8

z9

-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+1

y-1

z1

z2

z3

-1

z4

z5

z6

-2

y+1

z7

z8

z9

-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+1

y-1

z1

z2

z3

-1

-1

-1

-1

z4

z5

z6

-1

-1

-1

-1

y+1

z7

z8

z9

-1

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

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

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)

-1

-1

-2

-1

-1

-2

16

-2

-1

-1

-2

-1

-1

Gambar 10.21 Contoh operator LoG


Contoh penggunaanLoG:

>>Img = rgb2gray(imread('C:\Image\mainan.png'));
>> H = [

0 -1

0 -1 -2 -1

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

0 -1

0 0];

>> G=deteksi(Img, H); imshow(G)


>>

Hasil deteksi tepi pada citra mainan.png dapat dilihat pada Gambar 10.22.

430

Pengolahan Citra : Teori dan Aplikasi

Gambar 10.22Contoh hasil deteksi tepi dengan LoG

Nixon & Aguado (2002) memberikan cara yang dapat digunakan untuk
memperoleh cadar LoG berdasarkan nilai dan ukuran. Cara tersebut tertuang
dalam algoritma berikut.

ALGORITMA 10.1 Memperoleh cadar LoG


Masukan:
Ukuran : ukuran cadar
: Deviasi standar
Keluaran:
h (M, N): Cadar LoG
cadarLoG(ukuran, ):
1. cx floor((ukuran-1) / 2)
2. cy cx
3. jum 0
4. FORy0 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

-1

-1

-1

-2

-3

-3

-3

-2

-1

-3

-3

-1

-1

-3

16

-3

-1

-1

-3

-3

-1

-2

-3

-3

-3

-2

-1

-1

-1

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

12

12

15

12

12

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

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+1

i-1

255

255

255

255

255

255

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 .

[ $ 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

(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

(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 $

, mz0
kl

$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

. 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

<Z

o k

~ j

mz0
kljE0

o k

~ j

<Z

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:
|} [ $

0z

<Z 2jkl

o k

~ j

(10.32)

Segmentasi Citra
| [ $
<Z 2mz0
kljE0
0z
0

483
o k

0z~ j

(10.33)

Notasi yang digunaka


kan pada Persamaan 10.32 dan 10.33 sama sep
eperti rumus yang
digunakan pada entr
ntropi Kapur. Parameter berguna untuk memperoleh
m
nilai
ambang terbaik.
Implementasi
si peng-ambangan yang didasarkan Renyii dapat
d
dilihat di
bawah ini.
Program : renyi.m

function [ambang]
] = renyi(F, rho)
% RENYI Memperole
eh nilai ambang menggunakan metode en
ntropi Renyi
%
berdasarkan rumus pada Acharya dan Ray (2005)
%
F = Citra be
erskala keabuan
F = double(F);
[m, n] = size(F);
;
jum_piksel = m * n;
% Kosongkan histo
ogram
for i=1 : 256
h(i) = 0.0;
end
% Hitung histogra
am
for i=1 : m
for j=1 : n
intensita
as = F(i,j);
h(intensi
itas+1) = h(intensitas+1) + 1;
end
end
% Hitung p(i)
for i=1 : 256
p(i) = h(i) / jum_piksel;
end
% Hitung t 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

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

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


#=

&

(11.11)

dan
=

&

(11.12)

p(x)
7

7=

(b-1)/a

0,607

81
81 !

81

81

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

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)

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.

g
x

2+6+7+4+1+3+7+5+7
9

42
9

hasil

= 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

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

1 1 1
1 1 1 1 1 1
+ + + + + + + +
2 6 7 4 1 3 7 5 7

= 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

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 =

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

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

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

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

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

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

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

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 ORourke (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. P0Titik 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)
ii+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 =

100

602

Pengolahan Citra Te
Teori dan Aplikasi

100

100
0

100
0

10
0

50

60
0

34

40
0

>> H = conve
exhull(M)
H =

100
0

100

100
0

100

>>

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

(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

(12.12)

Momen di atas bersifat invariant (tidak terpengaruh) terhadap translasi. Dalam hal
ini, dan
=

diperoleh melalui:
MRS
MSS

= 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

^ =

5 Z +
5

5 Z +

Z +

` = 3

Z 3

+
+

3
Z

6+

+ Z

6+

+
5 Z +

Z +

(12.15)

Z +

3 Z +

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

Mc c
Mn

Mc c

R
c
f g
ijR|h % "@R |

=
=

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 =

Mk

@R

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

="C !

U||V|
U}|V|
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
xZ
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

(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

= f

Komponen f

@SS

@SS

= 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:

= @RS ,
SS

= @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

(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

~+

dengan:
a) 0<r<R dan t = i(2/) (0< i<T);0< ~<R, 0< <T;
b) R adalah resolusi frekuensi radial;

(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<x<M, 0<y<N}. Citra ini dikonversikan dari
ruang Kartesian ke ruang polar menjadi Ip = {f(r, t); 0<r<R, 0< t< 2 }, dengan
R adalah radius maksimum bentuk. Titik pusat ruang polar dijadikan sebagai pusat
bentuk dengan tujuan agar bentuk tidak tergantung pada translasi. Pusat bentuk
dihitung berdasarkan:

Q "

M"
P

(12.36)

Adapun (r, ) dihitung berdasarkan:


s=

P"P

, t = <s, <

(12.37)

Q"Q

Ketidakbergantungan pada rotasi diperoleh dengan mengabaikan informasi fase


pada koefisien-koefisiennya sehingga yang tertinggal adalah besaran koefisien.
Adapun untuk memperoleh ketidakbergantungan pada skala, besaran pertama
dinormalisasi

dengan

luas

lingkaran

dan

selanjutnya

semua

koefisien

dinormalisasi dengan koefisien pertama. Jadi, deskriptor bentuk yang didapatkan


berupa:
e = {

$? 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

(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<s

@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<s

= @IQ @ %

(12.43)

Fitur yang umum digunakan berupa perbandingan antara luas kotak


pembatas dengan luas area. Perhitungannya seperti berikut:

642

Pengolahan Citra Te
Teori dan Aplikasi

s< 8 ;8 <; :bL< < L:s8


L:s8s : < , s< =
s< 8 ;8 <; :bL< < L:s8
L:s8s : < 8Ly:; =

GHIC I?>I D#>A

P "Pi Q "Qi
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

E3

-1

-1

-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

E5

-1

-2

S5

-1

-1

W5

-1

-2

R5

-4

-4

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 = 02 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

% 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 =

1
MN

mnn

m =1 n =1

MN

Pkl

k =1 l =1

1
MN

m =1 n =1

1
Lp =
MN

(13.13)

Pmn
1
MN
N

(13.14)

kl

k =1 l =1

M N

Pmn

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_p