Dilengkapi CD beris
erisi
program-program contcontoh, Abdul Kadir
Abd
file-file latihan, dan Octave
Oct
AdhiS
dhiSusanto
i
Ceritakan kepada saya, maka saya lupa.
Tunjukkan kepada saya,maka saya ingat.
Biarkan saya mengerjakannya, maka saya paham.
Pepatah Cina
ii
Prakata
Aplikasi pengolahan citra telah memberikan sumbangan yang sangat berarti dalam berbagai
aspek. Para perancang desain grafis telah merasakan betapa nikmatnya menggunakansoftware
semacam Adobe Photoshop untuk mengerjakan berbagai tugas mereka. Pemakai Microsoft
Word bisa memberikan ilustrasi gambar yang dipoles dengan teknik tertentu, misalnya
memungkinkan gambar seolah-olah dibuat dengan goresan kapur. Robot seperti AIBO dapat
membaca mimik si pemiliknya dan melakukan aksi untuk menghibur. Mesin inspeksi mampu
mendeteksi produk yang cacat. Perangkat presensi dapat mengenali sidik jari para mahasiswa
yang akan mengikuti kuliah. Pintu pun terbuka setelah retina mata si pegawai dipindai oleh
pembaca retina mata. Hal-haltersebutmenunjukkan beberapa contoh yang melibatkan
pengolahan citra.
Buku ini mengupas sejumlah fondasi dalam pengolahan citra hingga ke aplikasinya. Berbeda
dengan buku lain yang umumnya hanya menekankan pada aspek teori, buku ini
mengombinasikan teori dan praktik. Buku ini membahas berbagai rumus matematika dan
sekaligus mewujudkannya ke dalam bentuk program. Dengan perkataan lain, buku ini
menunjukkan bahwa rumus-rumus matematika yang kadang dirasakan sulit untuk dimengerti
dapat diterjemahkan ke dalam program dengan cara yang mudah. Oleh karena itu, buku ini
sangat berguna bagi mahasiswa Teknologi Informasi, Teknik Informatika, atau Teknik Elektro
yang sedang mengambil matakuliah Pengolahan Citra ataupun matakuliah lain yang
memerlukan dasar pengolahan citra. Materi yang disampaikan tidak hanya terbatas pada
pendekatan teori tetapi juga sekaligus disertai dengan algoritma dan penyelesaian dalam
bentuk program.
Contoh program diwujudkan dengan menggunakan Octave. Octave adalah Free Software yang
kompatibel dengan MATLAB. Perangkat lunak ini dapat diunduh secara gratis. Informasi
pengunduhannya dapat dilihat di http://www.gnu.org/software/octave/download.html. Versi
Octave yang digunakan untuk mengimplementasikan program adalah Octave 3.4.3, sedangkan
paket Image Processing yang digunakan adalah versi 1.0.15. Paket ini bisa diunduh di
http://octave.sourceforge.net/image/index.html.
Meskipun diwujudkan dengan Octave, contoh-contoh program yang diberikan sangat mudah
untuk dikonversikanke bentukbahasa pemrograman yang lain seperti Java ataupun C++. Kode-
kode penting untuk mewujudkan program telah diusahakan agar tidak bergantung sepenuhnya
pada fungsi-fungsi yang disediakan oleh Octave.
Agar pembaca bisa menyerap materi yang disajikan dalam buku ini, dianjurkan untuk
menguasai dasar pemrograman Octave terlebih dulu. Pada bagian Lampiran, ringkasan
mengenai dasar Octave diberikan. Materi tersebut diharapkan dapat membantu pembaca
dalam mempelajari dan mempraktikkan dasar Octave secara cepat.
iii
Materi di dalam buku ini telah disusun sedemikian rupa sehingga mempermudah bagi pembaca
yang baru saja belajar pengolahan citra. Oleh karena itu, sebaiknya bab-bab yang terdapat
dalam buku ini dibaca secara berurutan. Namun, apabila pembaca telah memiliki dasar
pengolahan citra, membaca secara langsung ke bab-bab tertentu yang diperlukan juga
dimungkinkan.
Bab 1 memperkenalkan dasar pengolahan citra dan aplikasinya. Bab 2 membahas dasar
pengolahan citra melalui software. Berbagai jenis citra diperkenalkan di dalam bab ini. Cara
membaca citra dari berkas, mengonversi citra, dan menyimpan citra ke dalam berkas mulai
diperkenalkan. Berbagai operasi pemrosesan citra yang berbasis piksel mulai dibahas dalam Bab
3. Dasar histogram juga dibahas dalam bab ini. Bab 4 mulai membahas pengolahan citra yang
mempertimbangkan piksel tetangga. Pada bab inilah konvolusi mulai dibahas. Berbagai filter
mulai diperkenalkan dalam bab ini. Bab 5 membicarakan operasi geometrik seperti
penggeseran citra, pemutaran citra, pembesaran/pengecilan citra, dan berbagai transformasi
untuk mengubah citra. Bab 6 membahas alihragam Fourier untuk melakukan pengolahan citra
pada kawasan frekuensi. Bab 7 mulai membicarakan berbagai operasi morfologi seperti erosi,
dilasi, opening, closing, dan transformasi Top-Hat. Bab 8 membahas berbagai operasi yang
dilaksanakan pada citra biner, misalnya untuk memperoleh tepi objek, rantai kode, perimeter,
dan luas objek. Beberapa fitur yang dapat diperoleh pada citra biner mulai diperkenalkan. Bab 9
membahas secara khusus pemrosesan citra dengan melibatkan unsur warna. Bab 10 mengupas
berbagai teknik untuk kepentingan segmentasi, misalnya deteksi tepi dan peng-ambangan
adaptif. Bab 11 membahas secara rinci berbagai metode untuk melaksanakan restorasi citra.
Berbagai fitur bentuk dan kontur dibicarakan dalam Bab 12. Deskriptor Fourier, momen Zernike,
momen invariant, Polar Fourier Transform, dan convex hull dibahas dalam bab ini. Bab 13
secara khusus membahas fitur tekstur. Bab 14 membahas aplikasi temu kembali citra.
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.
iv
v
DAFTAR ISI
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
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
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
ix
12.12 Kotak Pembatas .......................................................................................................... 640
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
xi
Pengolahan Citra
Teori dan Aplikasi
Pengantar pengolahan citra
Buku ini sangat cocok dipakai
Pengenalan dasar citra
oleh mahasiswa Teknologi
Operasi piksel dan histogram
Informasi,Teknik Informatika,
Operasi ketetanggaan piksel
Teknik Elektro, dan jurusan teknik
Operasi geometrik
lainyang sedang atau hendak
Pengolahan citra di kawasan frekuensi
mempelajari pengolahan citra
Morfologi untuk pengolahan citra
untuk berbagai kepentingan.
Operasi pada citra biner
Pengolahan citra berwarna
Segmentasi citra
Semua contoh mudah
Restorasi citra
dipraktikkandengan menggunakan
Ekstraksi fitur bentuk dan kontur
Octave ataupun MATLAB.Algoritma
Ekstraksi fitur tekstur dan kode yang disajikan tidak
Aplikasi temu kembali citra
menutup kemungkinan
Panduan Octave
untukdikonversikan ke dalam
bahasa pemrograman lain.
xii
BAB 1
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.
Gambar 1.2Aplika
ikasi pengolahan citra untuk mengartunkan
n wajah orang
Pengantar Pengolahan Citra 5
Gambar 1.6(a) kurang jelas, tetapi melalui pengolahan citra yang tepat diperoleh
hasil yang jauh lebih jelas (Gambar 1.6(b)).
(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).
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.
Latihan
Kuantisasi citra
Kualitas citra
Citra digital dibentuk oleh kumpulan titik yang dinamakan piksel (pixel atau
“picture element”).Setiap piksel digambarkan sebagai satu kotak kecil.Setiap
piksel mempunyai koordinat posisi.Sistem koordinat yang dipakai untuk
menyatakan citra digital ditunjukkan pada Gambar 2.1.
0 N-1
x
y
M-1
• piksel pojok kiri-atas mempunyai koordinat (0, 0) dan piksel pada pojok
kanan-bawah mempunyai koordinat (N-1, M-1).
f(2,1) = 6
1 2 3 4 5 6 7 8 9 10 11 12
1 6 6 6 6 6 6 6 89 237 237 237 237
2 6 6 89 237 237 237 6 6 89 237 237 237
3 6 6 89 237 237 237 237 6 6 89 237 237
4 6 6 89 237 237 237 237 6 6 89 237 237
5 6 6 89 237 237 237 237 6 6 89 237 237
6 6 6 89 237 237 237 6 6 89 237 237 237
7 6 6 6 6 6 6 6 89 237 237 237 237
8 6 6 6 6 6 6 89 237 237 237 237 237
9 6 6 89 237 237 6 6 89 237 237 237 237
10 6 6 89 237 237 237 6 6 89 237 237 237
11 6 6 89 237 237 237 237 6 6 89 237 237
12 6 6 89 237 237 237 237 237 6 6 89 237
f(4,7) = 237
Gambar 2.3Notasi piksel dalam citra
Mengenal Dasar Citra 15
t t
Pada isyarat digital, nilai intensitas citra dibuat diskret atau terkuantisasi
dalam sejumlah nilai bulat. Gambar 2.5(a) menunjukkan contoh citra biner dua
nilai intensitas berupa 0 (hitam) dan 1 (putih).Selanjutnya, gambar tersebut
ditumpangkan pada grid 8x8 seperti yang diperlihatkan pada Gambar
2.5(b).Bagian gambar yang jatuh pada kotak kecil dengan luaslebih kecil
dibanding warna putih latarbelakang, seluruh isi kotak dibuat putih.Sebaliknya,
jika mayoritas hitam, isi kotak seluruhnya dibuat hitam.Hasil pengubahan ke citra
digital tampak pada Gambar 2.5(c).Adapun Gambar 2.5(d) memperlihatkan
bilangan yang mewakili warna hitam (0) dan putih (1).Dengan demikian, citra
digital akan lebih baik (lebih sesuai aslinya) apabila ukuran piksel diperkecil atau
jumlah piksel diperbanyak.
16 Pengolahan Citra, Teori dan Aplikasi
(a) Citra yang akan dinyatakan (b) Citra ditumpangkan pada grid
dalam isyarat digital
1 1 1 1 1 0 1 1
1 1 1 1 0 1 1 1
1 0 0 0 0 0 1 1
1 0 0 0 0 0 0 1
0 0 0 0 0 0 0 1
1 0 0 0 0 0 0 1
1 0 0 0 0 0 0 1
1 1 1 1 0 1 1 1
jumlah gradasi juga bisa dinyatakan dalam jumlah digit biner atau bit 0 dan 1
sebagai sandi digital per piksel.
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.
lebardalam jumlah piksel. Contoh pada Gambar 2.5 menunjukkan bahwa kalau
gambar apel hanya dinyatakan dalam 8 x 8 piksel,citra yang terbentuk sangat
berbeda dengan aslinya.Seandainya jumlah piksel yang digunakan lebih banyak,
tentu akan lebih mendekati dengan gambar aslinya. Contoh pada Gambar 2.6
memperlihatkan efek resolusi piksel untuk menampilkan gambar yang sama.
(a) Citra berukuran 512 x 512 (b) Citra berukuran 256 x 256
piksel piksel
(c) Citra berukuran 128 x 128 piksel (d) Citra berukuran 64 x 64 piksel
Terlihat bahwa pada resolusi tertentu citra menjadi kabur kalau dinyatakan dengan
jumlah piksel yang makinsedikit.
20 Pengolahan Citra, Teori dan Aplikasi
Resolusi spasial ditentukan oleh jumlah piksel per satuan panjang. Istilah
seperti dpi (dot per inch) menyatakan jumlah piksel per inci. Misalnya, citra 300
dpi menyatakan bahwa citraakan dicetak dengan jumlah piksel sebanyak 300
sepanjang satu inci. Berdasarkan hal itu, maka citra dengan resolusi ruang spasial
sebesar 300 dpi dicetak di kertas dengan ukuran lebih kecil daripada yang
mempunyai resolusi ruang sebesar 150 dpi, meskipun kedua gambar memiliki
resolusi piksel yang sama.
>>Img = imread(’C:\Image\mandrill.png’);
>>
>>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
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:
Dengan cara seperti itu, jum_barisberisi jumlah baris pada larikImg dan
jum_kolom berisi jumlah kolom pada larikImg.
>>imshow(Img);
>>
Hasilnya berupa jendela yang menampilkan citra pada Img, seperti terlihat pada
Gambar 2.8.
24 Pengolahan Citra, Teori dan Aplikasi
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.
Ada tiga jenis citra yang umum digunakan dalam pemrosesan citra.Ketiga
jenis citra tersebut yaitu citra berwarna, citra berskala keabuan, dan citra biner.
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.
255
Biru Cyan
Magenta Putih
0 255
G
Hitam Hijau
255
Merah Kuning
>>size(Kota)
ans =
747 500 3
Mengenal Dasar Citra 29
>>
M-1
3 Komponen B
M
2
1
1 2 N-1 N Komponen G
Komponen R
>> R = Kota(:,:,1);
>> G = Kota(:,:,2);
>> B = Kota(:,:,3);
30 Pengolahan Citra, Teori dan Aplikasi
>>figure(1);
>>imshow(Kota);
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.
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.
>>Img = imread('c:\Image\daun_bin.png');
>>imshow(Img);
>>
= + + , + + =1 (2.1)
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);
Bagaimana halny
lnya kalau dikehendaki untuk mengonversika
kan citra berskala
keabuan ke citra bine
ner?Strategi yang dipakai yaitu dengan menera
rapkan suatu nilai
yang dikenal sebaga
gai nilai ambang (threshold). Nilai tersebut
ut dipakai untuk
menentukan suatu int
ntensitas akan dikonversikan menjadi 0 atau menjadi
m 1. Secara
matematis, konversii dinyatakan
d dengan rumus:
0,
= (2.3)
1,
Contoh berikutt menunjukkan
m cara melakukan konversi dar
ari citra berskala
keabuan ke dalam citr
itra biner.
Program : kebiner.m
% KEBINER Digunak
kan untuk mengonversi file
Mengenal Dasar Citra 35
Img = imread('c:\Image\daun_gray.png');
[tinggi, lebar] = size(Img);
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');
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
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)
imshow(Biner);
>>kebiner;
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);
imwrite(A, nama_file)
A dapat berupa larik dua dimensi (citra berskala keabuan) ataupunlarik berdimensi
tiga (citra RGB).
Contoh:
>>Img = imread('C:\Image\daun_gray.png');
>>X = 255 – Img;
>>imwrite(X, ’negatif_daun.png’);
42 Pengolahan Citra, Teori dan Aplikasi
Perlu diketahui,
X = 255 – Img;
Latihan
, = , (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.
FOR j←1 TO
ON
hist(f(M,, N
N)+1) ←hist(f(M, N)+1) + 1
END-FO
FOR
END-FOR
R
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
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);
Gamba
bar 3.1Citrainnsbruck.png dan histogramny
nya
Operasi Piksel dan Histogram 47
>>Img=imread('C:\Image\innsbruck.png');
>>imhist(Img);
Dengan cara seperti itu,Histog berupa larik yang berisi jumlah piksel setiap
nilai aras dalam argumen aras. Namun, diagram tidak dibuat.
Gambar 3.4Empat buah citra (a),(b),(c), dan (d) yang memiliki histogram
yang sama (e),tetapi mempunyai informasi yang jauh berbeda
Operasi dasar yang sering dilakukan pada citra adalah peningkatan kecerahan
(brightness).Operasi ini diperlukan dengan tujuan untuk membuat gambar
menjadi lebih terang.
Secara matematis, peningkatan kecerahan dilakukan dengan cara
menambahkan suatu konstanta terhadap nilai seluruh piksel. Misalkan, f(y, x)
menyatakan nilai piksel pada citra berskala keabuan pada koordinat (y, x). Maka,
citra baru
, = , + (3.2)
telah meningkat nilai kecerahan semua pikselnya sebesar terhadap citra asli f(y,
x). Apabila β berupa bilangan negatif, kecerahan akanmenurun atau menjadi lebih
gelap.
Operasi Piksel dan Histogram 51
>>Img = imread('C:\Image\absam.png');
>> C = Img + 60;
>>imshow(C);
(a) Citra dengan kecerahan rendah (b) Citra dengan kecerahan ditambah 20
(c) Histogram dari gambar (a) (d) Histogram dari gambar (b)
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:
Gambar 3.7 memperlihatkan perbedaan antara gambar pada keadaan awal dan
setelah dicerahkan.Gambar 3.7(a) menyatakan citra pada RGB dan Gambar 3.7(b)
menyatakan citra pada RGB2.
Operasi Piksel dan Histogram 53
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
>>Img = imread('C:\Image\gembala.png');
>> K = 2.5 * Img;
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.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)
>>Img = imread('C:\Image\gembala.png');
>> C = Img - 45;
>> K = C * 11;
Dengan cara seperti itu, akan dihasilkan citra yang lebih tegas, sebagaimana
diperlihatkan pada Gambar 3.10.
(a) Citra hasil pengaturan kecerahan dan (b) Histogram gambar (a)
peregangan kontras
Bila pernah melihat film hasil kamera analog, gambar yang terekam dalam
film tersebut berkebalikan dengan foto saat dicetak, yang dikenal sebagai film
negatif.Citra seperti ini biasa digunakan pada rekam medis; misalnya hasil
fotografi rontgen.Hubungan antara citra dan negatifnya untuk yang beraras
keabuan dapat dinyatakan dengan rumus:
, = 255 − , (3.6)
Hubungan di atas dapat digambarkan seperti secara grafis pada Gambar 3.11.
g(f)
255
0 f
255
Gambar 3.11 menunjukkan bahwa kalau f(y, x) bernilai 255, g(y, x) bernilai
0.Sebaliknya, kalau f(y, x) bernilai 0, g(y, x) bernilai 255. Jika bit yang digunakan
bukan 8 tetapi 4, persamaan untuk membalik citra berubah menjadi
, = 15 − , (3.7)
>>Img = imread('C:\Image\lena256.png');
>> R = 255 - Img;
Operasi Piksel dan Histogram 57
Dengan memberikan
R = 255 - Img;
makaR berisi kebalikan dari citra diImg. Citra asli dan citra negatif yang
dihasilkan diperlihatkan pada Gambar 3.12.
g(f)
∆g2
∆g1
f
∆f1 ∆f2
>>Img = imread('C:\Image\gembala.png');
>> C=log(1+double(Img));
>> C2=im2uint8(mat2gray(C));
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.
0,
, = , , , "
255
255, !
(3.8)
2
255
45o
0 f
f1 f2
Untuk memprak
aktikkan rumus dalam Persamaan 3.8, kode
de berikut dapat
digunakan.
Program : potong.m
Img = imread(berk
kas);
[tinggi, lebar] = size(Img);
Hasil = Img;
Operasi Piksel dan Histogram 61
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:
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
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
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
/, = 01234 + − 1 , $ = 0,1,2, … , + − 1
5 ,6
7
(3.9)
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
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
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
C(1) = alpha * Hi
istog(1);
for i=1 : L-2
C(i+1) = C(i) + round(alpha
r * Histog(i+1));
end
Hasil = uint8(Has
sil);
imshow(Hasil);
Akhir Program
Hasil = uint8(Hasil);
Latihan
7 7 7 7
6 5 5 6
5 5 5 5
2 4 0 1
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
, = , +
255
, = , − '89:9;<=>
'89:8-; - − '89:9;<=>
f(y, x)
y
g(y, x)
T2 T4 T3 T2
T3 P T1 T5 P T1
T4 T6 T7 T8
Pada 4-ketetanggan, T1, T2, T3, dan T4 merupakan tetangga terdekat piksel P. Pada
8-ketetanggan, tetangga piksel P yaitu piksel-piksel yang berada disekitar P.
Totalnya sebanyak 8 buah. Bila P mempunyai koordinat (b, k) dengan b baris dan
k kolom,hubungan piksel tetangga terhadap P sebagai berikut.
• Pada 4-ketetanggaan
= , +1 , = − 1, , = , −1 , = + 1, (4.1)
• Pada 8-ketetanggaan
= , +1 , = − 1, − 1 ,
= , −1 , = − 1, − 1 (4.2)
= , −1 , = + 1, − 1 ,
= + 1, − 1 , = + 1, + 1
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.
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
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
figure(1);
imshow(G);
clear;
Akhir Program
Perlu diketahui, pemrosesan hanya dilakukan selain baris pertama, baris terakhir,
kolom pertama, dan kolom terakhir.Keempat area tersebut tidak diproses karena
tidak mempunyai tetangga yang lengkap (sebanyak 8).
Untuk melihat efek filter batas, jalankan program di atas. Kemudian,
bandingkan citra asli dan citra yang dihasilkan oleh program tersebut.Gambar 4.3
memperlihatkan perbedaannya.
Operasi Ketetanggaan Piksel 77
(a) Citra mobil yang telah diberi (b) Hasil pemfilteran gambar (a)
bintik-bintik putih
, = ∑ ∑ + , + (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
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);
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.
Filter median sangat populer dalam pengolahan citra.Filter ini dapat dipakai
untuk menghilangkan derau bintik-bintik. Nilai yang lebih baik digunakan untuk
suatu piksel ditentukan oleh nilai median dari setiap piksel dan kedelapan piksel
tetangga pada 8-ketetanggaan. Secara matematis,filter dapat dinotasikan seperti
berikut:
, = #$%&'(
− 1, − 1 , − 1, , − 1, + 1 , (4.4)
, −1 , , , , +1 ,
+ 1, − 1 , + 1, , + 1, + 1
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
Program : filmedian.m
% FILMEDIAN Melak
kukan operasi dengan filter median
F = imread('C:\Im
mage\mobil.png');
[tinggi, lebar] = size(F);
% 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
figure(1); imshow(G);
clear;
Akhir Program
Contoh hasil penggunaan filter median dapat dilihat pada Gambar 4.7.
Operasi Ketetanggaan Piksel 83
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
1 2 3 1 2 n
1 -1 0 1 1
2 -2 0 2 2
m
3 3
-1 0 1
Kernel digerakkan di
sepanjang baris dan kolom
Citra
, = ∑+ + ∑* * ℎ + #2 + 1, + (2 + 1 − , − (4.5)
+ *
, = , , , + , +
+ *
Berdasarkan Gambar 4.10, apabila citra yang berada pada jendela kernel berupa
Operasi Ketetanggaan Piksel 87
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
+ *
, = , , ℎ + #2 + 1, + (2 + 1 + , +
+ *
Masukan:
• f : Citra yang akandikonvolusi
• h : kernel konvolusi
Keluaran:
• g : Citra hasil konvolusi
1. m2 ← floor(jumlah_baris_kernel h)
2. n2 ← floor(jumlah_lebar_kernel h)
3. FOR y ← m2+1 TO tinggi_citra_f – m2
FOR x ←n2+1 TO lebar_citra_f – n2
// Lakukan konvolusi
jum← 0;
FOR p ← -m2 TO m2
FOR q ← -n2 TO n2
jum←jum * h(p+m2+1, q+n2+1) * f(y-p, x-p)
END-FOR
END-FOR
g2(y, x) ←jum
END-FOR
END-FOR
Operasi Ketetanggaan
an Piksel 89
4. // Salin pos
osisi g2 ke g dengan membuang yang tidakdik
ikonvolusi
5. FOR y ← m2+1 TO tinggi_citra_f – m2
FOR x ← n2+1 TO lebar_citra_f – n2
g(y-mm2, x-n2) ← g2(y, x)
END-FO FOR
END-FOR R
Berdasarkan algoritm
tma di atas, maka citra hasil akan kehilangan sebesar:
se
• 2 * m2 baris atau
a sama dengan jumlah baris kernel dikuran
angi 1
• 2 * n2 kolom atau sama dengan jumlah kolom kernel dikur
urangi 1
Baris dan kolom yang
ng dihilangkan adalah yang berada di tepi citra
tra.
Fungsi yang digu
gunakan untuk melakukan konvolusi dapat dilih
ilihat berikut ini.
Program : konvolusi.m
function [G] = ko
onvolusi(F, H)
% KONVOLUSI Melak
kukan konvolusi kernel H dengan citra
a F
% H harus mem
mpunyai tinggi dan lebar ganjil
% Hasil: citr
ra G
[tinggi_f, lebar_
_f] = size(F);
[tinggi_h, lebar_
_h] = size(H);
m2 = floor(tinggi
i_h/2);
n2 = floor(lebar_
_h/2);
F2=double(F);
for y=m2+1 : tingggi_f-m2
for x=n2+1 : lebar_f-n2
% Pelaksaanaan konvolusi F(baris, kolom)
jum = 0;
for p=-m22 : m2
for q=-n2
q : n2
j
jum = jum + H(p+m2+1,q+n2+1) * ...
F2(y-p, x-q);
end
end
G(y-m2, x-n2)
x = jum;
end
end
Akhir Program
90 Pengolahan Citra, Teori dan Aplikasi
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).
Citra
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
Baris
awal
Citra
Baris
akhir
Indeks tercermin
Kolom
akhir
Indeks melingkar
(b) Bagian tepi diberi nilai nol (c) Pengisian dari baris atau kolom
terpinggir
Masukan:
• f : Citra yang akandikonvolusi
• h : kernel konvolusi
Keluaran:
• g(y, x) : Citra hasil konvolusi
Program : konvolusi2.m
function [G] = ko
onvolusi2(F, H)
% KONVOLUSI2 Mela
akukan konvolusi kernel H dengan citr
ra F
% (Versi Algo
oritma 4.3)
% H harus mem
mpunyai tinggi dan lebar ganjil
% Hasil: citr
ra G
[tinggi_f, lebar_
_f] = size(F);
[tinggi_h, lebar_
_h] = size(H);
m2 = floor(tinggi
i_h/2);
n2 = floor(lebar_
_h/2);
F2=double(F);
for y=1 : tinggi__f
for x=1 : lebar_ff
% Pelaksa
anaan konvolusi F(baris, kolom)
jum = 0;
for p=-m2 : m2
for q=-n2 : n2
% Penanganan x
x2 = x-q;
if x2 < 1
x2 = -x2 + 1;
else
if x2 >lebar_f
x2 = 2 * lebar_f - x2 + 1;
end
end
% Penanganan y
y = y-p;
y2
if y2 < 1
y2 = -y2 + 1;
else
if y2 >tinggi_f
y2 = 2 * tinggi_f - y2 + 1;
end
end
G(y, x) = jum;
end
end
Akhir Program
98 Pengolahan Citra, Teori dan Aplikasi
- = -. -/
Dalam hal ini, hk adalah vektor kolom dan hb adalah vektor baris.Contoh:
−1 0 1 −1
0−2 0 22 = 0 −22 31 0 −14
−1 0 1 −1
Nah, melalui vektor hb dan hk inilah konvolusi terhadap citra dilakukan.Dalam hal
ini, kedua vektor dijadikan sebagai vektor mendatar.
Operasi Ketetanggaan Piksel 99
1
>>
>> [U,S,V]=svd(H);
>>hkol = U(:,1) * sqrt(S(1))
>>hbrs = conj(V(:,1)) * sqrt(S(1));
>>hkol * hbrs'
Masukan:
• f : Citra
• hy: Kernel baris
• hx: Kernel kolom
• hxdanhyditulis dengan bentuk vektor mendatar dan
berukuran sama
Keluaran:
• g : Citra hasil konvolusi
1. m2 ← floor(jumlah_kolom_kernel_hx)
2. t←f
3. // Proses y
4. FOR y ← m2+1 TO tinggi_citra_f – m2
FOR x ← 1 TO lebar_citra_f
// Lakukankonvolusidenganhy
jum← 0;
FOR p ← -m2 TO m2
jum←jum * hy(p+m2+1) * f(y-p, x)
END-FOR
t(y, x) ←jum
END-FOR
5. // Proses x
FOR y ← 1 TO tinggi_citra_f
FOR x ← m2+1 TO lebar_citra_f –m2
// Lakukankonvolusidenganhx
jum← 0;
FOR p ← -m2 TO m2
jum←jum * hy(p+m2+1) * t(y, x-p)
END-FOR
g(y, x) ←jum
END-FOR
Program : konvolusi3.m
function [G] = ko
onvolusi3(F, Hkol, Hbrs)
% KONVOLUSI3 Mela
akukan konvolusi kernel Hkol dan Hbrs
s dengan citra
F
% (Versi Algo
oritma 4.4)
% Hkol dan Hb
brs harus mempunyai tinggi dan lebar ganjil
% dan ukurann
nnya sama
% Hkol dan Hb
brs berupa vektor mendatar
% Hasil: citr
ra G
[tinggi_f, lebar_
_f] = size(F);
[tinggi_h, lebar_
_h] = size(Hbrs);
m2 = floor(lebar_
_h/2);
F2=double(F);
T = F2;
for y=m2+1 : tingggi_f-m2
for x=1 : lebbar_f
jum = 0;
for p=-m22 : m2
jum = jum + Hkol(p+m2+1) * F2(y-p, x);
end
T(y, x) = jum;
end
end
G(y, x) = jum;
end
end
Akhir Program
Program : teskonv.m
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
Jarak Jarak
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 ini berguna untuk menghaluskan derau atau untuk kepentingan interpolasi
tepi objek dalam citra.
Operasi penapisan lolos-bawah dilaksanakan melalui konvolusi atau tanpa
konvolusi. Contoh yang tidak memakai konvolusi dapat dilihat pada filter
median(filter median termasuk dalam filter lolos-bawah). Adapun yang
melibatkan konvolusi menggunakan kernel antara lain berupa seperti yang terlihat
pada Gambar 4.17 (Phillips, 2000).
0 1 0 1 1 1
1/6 1 2 1 1/9 1 1 1
0 1 0 1 1 1
#1 #2
1 1 1 1 2 1
1/10 1 2 1 1/16 2 4 2
1 1 1 1 2 1
#3 #4
(a) Citra dengan frekuensi rendah (b) Citra dengan frekuensi tinggi
(c) Citra dengan frekuensi rendah (d) Citra dengan frekuensi tinggi
40 40 40 99 99 99
40 40 40 69 69 69
40 40 40 99 99 99
40 40 40 69 69 69
40 40 40 99 99 99
40 40 40 69 69 69
40 40 40 99 99 99
69 69 69 69 69 69
99 99 99 99 99 99
128 128 128 69 69 69
128 128 128 99 99 99
128 128 128 69 69 69
128 128 128 99 99 99
128 128 128 69 69 69
128 128 128 99 99 99
128 128 128 69 69 69
128 128 128 99 99 99
128 128 128 69 69 69
(a) Citra dengan frekuensi rendah (b) Citra dengan frekuensi tinggi
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
>> H = [1 1 1; 1 1 1; 1 1 1] / 9;
>>tapis('C:\
\Image\mobil.png', H);
(a) Citra boneka yang dilengkapi (b) Hasil penapisan citra boneka
derau
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
(c) Hasil dengan kernel 5x5 (b) Hasil dengan kernel 13x13
4.9Filter Lolos-Tinggi
0 -1 0 -1 -1 -1 1 -2 1
-1 4 -1 -1 8 -1 -2 4 -2
0 -1 0 -1 -1 -1 1 -2 1
#1 #2 #3
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.
0 -1 0
-1 4 -1
0 -1 0
dikenakan pada data dalam Gambar 4.18, akan diperoleh hasil seperti berikut.
Operasi Ketetanggaan Piksel 113
0 0 0 0 0 0
0 0 0 176 176 176
0 0 0 0 0 0
0 0 0 176 176 176
0 0 0 0 0 0
0 0 0 176 176 176
0 0 0 0 0 0
0 0 0 176 176 176
88 88 88 0 0 0
0 0 0 176 176 176
0 0 0 0 0 0
0 0 0 176 176 176
0 0 0 0 0 0
0 0 0 176 176 176
0 0 0 0 0 0
0 0 0 176 176 176
0 0 0 0 0 0
0 0 0 176 176 176
(a) Citra dengan frekuensi rendah (b) Citra dengan frekuensi tinggi
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
-1 -1 -1
-1 c -1 c > 8; misalnya 9
-1 -1 -1
Gambar berikut menunjukkan efek saat c diisi dengan 9, 10, dan 11.
Operasi Ketetanggaan Piksel 117
-2 0 0
0 0 0
0 0 2
Nilai negatif dan positif yang berpasangan menentukan perubahan kecerahan yang
berefek pada penggambaran garis gelap atau terang, Gambar 4.30
memperlihatkan efek beberapa kernel dan hasil yang didapatkan untuk citra
lena256.png.
120 Pengolahan Citra, Teori dan Aplikasi
Nilai negatif pada kernel emboss menentukan arah penebalan garis. Beberapa
contoh yang dapat dicoba ditunjukkan pada gambar berikut.
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.
78 9:8
5 . =$ 8;8 (4.6)
Dalam hal ini,< adalah deviasi standar dan piksel pada pusat (y,x) mendapatkan
bobot terbesar berupa 1.
Filter Gaussian paling tidak berukuran 5x5. Sebagai contoh, bobot-bobotnya
dapatdiperolehdenganmembuat< bernilai 1. Dengan demikian:
5 0, 0 = $ =
=1
5 1,0 = 5 0,1 = 5 −1,0 = 5 0, −1 = $ /
= 0,6065
5 1, 1 = 5 1, −1 = 5 −1,1 = 5 −1, −1 = $ = 0,3679
5 2,1 = 5 1, 2 = 5 −2,1 = 5 −2, −1 = $ /
= 0,0821
5 2,0 = 5 0, 2 = 5 0, −2 = 5 −2,0 = $ = 0.1353
5 2, 2 = 5 −2, −2 = 5 −2,2 = 5 2, −2 = $ = 0,0183
Dengan mengatur nilai terkecil menjadi 1, maka setiap nilai di atas perlu dikalikan
dengan 55 (diperoleh dari 1/0,0183 dan kemudian hasilnya dibulatkan ke atas).
Dengan demikian,diperoleh hasil seperti berikut, yang diperoleh dengan
mengalikan nilai G(x,y) di depan dengan 55.
Operasi Ketetanggaan Piksel 123
Gambar 4.32 memberikan contoh penerapan filter Gaussian pada dua buah citra.
124 Pengolahan Citra, Teori dan Aplikasi
Latihan
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
1 -2 1
-2 c -2
1 -2 1
14. Cobalah untuk menguji tiga kernel yang digunakan dalam filter lolos-tinggi
terhadap sejumlah gambar.
15. Jelaskan pengertian filter linear dan nonlinear. Berikan contoh masing-masing.
16. Dengan menggunakan pendekatan < bernilai 1, buatlah filter i berukuran
7x7.
BAB 5
Operasi
Geometrik
Setelah bab ini berakhir, diharapkan pembaca
mendapatkan pengetahuan mengenai hal-hal berikut dan
mampu mempraktikkannya.
Pengantar operasi geometrik
Penggeseran citra
Pemutaran citra
Interpolasi piksel
Pemutaran citra berdasarkan sebarang koordi
Pemutaran citra secara utuh
Pembesaran citra
Pengecilan citra
Pembesaran citra dengan skala vertikal dan
horizontal
Pencerminan citra
Transformasi affine
Efek ripple
Efek twirl
Transformasi spherical
Transformasi bilinear
122 Pengolahan Citra, Teori dan Aplikasi
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.
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.
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
F2 = double(F);
G = zeros(size(F2));
for y=1 : tinggi
for x=1 : lebar
xlama = x - sx;
ylama = y - sy;
G = uint8(G);
figure(1); imshow(G);
clear all;
Akhir Program
G(y, x) = 0;
Gambar hitam di bagian kiri dan bagian atas adalah efek dari
Suatu citra dapat diputar dengan sudut seiring arah jarum jam atau
berlawanan arah jarum jam dengan pusat putaran pada koordinat (0,0). Gambar
5.3 menjelaskan bentuk pemutaran citra. Adapun rumus yang digunakan untuk
memutar citra dengan sudut berlawanan arah jam berupa:
∗ ∗ (5.3)
∗ − ∗ (5.4)
126 Pengolahan Citra, Te
Teori dan Aplikasi
(0,0)
Bingkakai
citra hasil
ha
rotasi
Bag
agian citra asli
yan
ang masuk di
bin
ingkai citra hasil
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);
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);
G = uint8(G);
figure(1); imshow(G);
clear all;
Akhir Program
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);
G = uint8(G);
figure(1); imshow
w(G);
clear all;
Akhir Program
Perhatikan pada Gambar 5.5(b).Titik-titik hitam pada citra adalah efek lubang
yang memerlukan penanganan lebih lanjut untuk menghilangkannya.
5.4Interpolasi Piksel
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
f(p,q) f(p,q+1)
f(p’,q’) p = floor(p’)
b q = floor(q’)
f(p+1,q) f(p+1,q+1)
Perhatikan bahwa f(p’. q’) mempunyai empat piksel terdekat berupa f(p,q),
f(p,q+1), f(p+1,q), dan f(p+1,q+1).
Pratt (2001) menunjukkan cara menghitung nilai intensitas yang digunakan
untuk suatu piksel berdasarkan empat piksel. Rumusnya sebagai berikut:
, 1− 1−! , ! , 1 "
1−! 1, ! 1, 1 " (5.5)
− (5.6)
132 Pengolahan Citra, Te
Teori dan Aplikasi
! − (5.7)
Selain
in bilinear interpolation, sebenarnya terdapa
pat beberapa cara
untukk melakukan interpolasi. Dua cara lain yan
ang populer yaitu
ic interpolation, yang menggunakan 16 pikse
bicubic sel tetangga untuk
mempe
peroleh interpolasi intensitas piksel dan bikuadratik
b yang
meliba
batkan 9 piksel terdekat.
Contoh program
m yang menggunakan interpolasi bilinear untu
ntuk mendapatkan
intensitas piksel dapat
at dilihat di bawah ini.
Program : rotasi3.m
% ROTASI3 Melakuk
kan operasi pemutaran citra.
% Versi 3 - menggunakan
m bilinear interpolation
F = imread('c:\Im
mage\gedung.png');
[tinggi, lebar] = size(F);
Operasi Geometrik 133
G(y, x) = intensitas;
end
else
G(y, x) = 0;
end
end
end
G = uint8(G);
figure(1); imshow(G);
clear all;
Akhir Program
Operasi pemutaran citra dapat dilakukan dengan pusat di mana saja; tidak
harus dari (0, 0).Gambar 5.9 memperlihatkan keadaan ini.
Operasi Geometrik 135
Bingka
kai citra asli
Bin
ingkai citra hasil
pem
emutaran
Gambar
ar 5.9Pemutaran citra melalui titik pusat citra
ci
− ∗ −# ∗ (5.8)
−# ∗ − − ∗ # (5.9)
Untuk kepenting
ngan pemutaran citra sejauh searah jarum
m jam, intensitas
piksel (y,x) dapat dipe
iperoleh melalui intensitas pada piksel (ybaru, xbaru) yang tertera
pada Persamaan 5.8
.8 dan 5.9.Implementasi program dapat dilih
lihat pada contoh
berikut.
Program : rotasi4.m
% ROTASI4 Melakuk
kan operasi pemutaran citra.
% Versi 4 - pusat
p putaran pada pusat citra
136 Pengolahan Citra, Teori dan Aplikasi
F = imread('c:\Image\gedung.png');
[tinggi, lebar] = size(F);
m = floor(tinggi / 2);
n = floor(lebar / 2);
G(y, x) = intensitas;
end
else
G(y, x) = 0;
end
end
end
G = uint8(G);
figure(1); imshow(G);
clear all;
Akhir Program
Pada seluruh contoh yang telah diberikan, ada bagian gambar yang hilang
ketika pemutaran dilaksanakan.Namun, adakalanya dihendaki agar pemutaran
citra tidak membuat ada bagian citra asli hilang. Untuk keperluan ini, ukuran citra
hasil pemutaran harus diubah sesuai dengan sudut putaran.Dalam hal ini,
Persamaan 5.8 dan 5.9 digunakan untuk menentukan keempat pojok gambar
semula.Adapun lebar dan tinggi gambar hasil pemutaran dengan menghitung nilai
terkecil dan terbesar dari koordinat keempat pojok hasil pemutaran.Untuk lebih
jelasnya, lihat Gambar 5.11.
138 Pengolahan Citra, Te
Teori dan Aplikasi
(y21,x21)
C
Citra asli
(y22,x22)
C
Citra hasil utuh
m’= max(y
m 21, y22, y23, y24)-
min(y21
2 , y22, y23, y24)+1
(y24,x24)
n
(y23,x23)
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);
x11 = 1; y11 = 1;
x12 = lebar; y12 = 1;
x13 = lebar; y13 = tinggi;
x14 = 1; y14 = tinggi;
Operasi Geometrik 139
m = floor(tinggi/2);
n = floor(lebar/2);
% Menentukan pojok
x21 = ((x11-n) * cosa + (y11-m) * sina + n);
y21 = ((y11-m) * cosa - (x11-n) * sina + m);
figure(1);
imshow( uint8(F2));
% Putar citra
m = floor(tinggi_baru/2);
n = floor(lebar_baru/2);
figure(2);
G = uint8(G);
imshow(G);
140 Pengolahan Citra, Teori dan Aplikasi
clear all;
Akhir Program
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
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
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;
>>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);
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
>>Img=Perbesar2('C:\Image\lena128.png', 4, 4);
>>imshow(Img);
(b) Pembesaran 3x
Cobalah untuk membandingkan hasil di atas dengan hasil pada Gambar 5.14.
5.10Pencerminan Citra
ALGORITMA
A 5.1 – Mencerminkan gambar secara hor
orizontal
Masukan:
• f (M,N N): Citra masukan berukuran M baris dan N ko
kolom
Keluaran:
• g (M,, N): Hasil citra yang telah dicerminka kan secara
horizon
ontal
is ← 1 TO M
1. FOR baris
2. olom ← 1 TO N
FOR kol
3. aris, kolom) ← f(N – baris + 1, kolom)
g(bar
4. END-FO OR
5. END-FOR R
Implementasinya ditu
tunjukkan pada program berikut.
Program : cerminh.m
function G = cerm
minh(F)
% CERMINH Berfung
gsi untuk mencerminkan citra
% secara hori
izontal
148 Pengolahan Citra, Teori dan Aplikasi
G = uint8(G);
Akhir Program
>> F=imread('C:\Image\boneka.png');
>> G=cerminh(F); imshow(G)
Ga
Gambar 5.20Pencerminan secara vertikal
ALGORITMA
A 5.2 – Mencerminkan gambar secara vert
rtikal
Masukan:
• f (M,N
N): Citra masukan berukuran M baris dan N ko
kolom
Keluaran:
• g (M,, N): Hasil citra yang telah dicerminka
kan secara
horizon
ontal
is ← 1 TO M
1. FOR baris
2. olom ← 1 TO N
FOR kol
3. aris, kolom) ← f(baris, N – kolom + 1)
g(bar
4. END-FO
OR
5. END-FOR
R
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
G = uint8(G);
Akhir Program
>> F=imread('C:\Image\boneka.png');
>> G=cerminv(F); imshow(G)
5.11Transformasi Affine
′ (( () +
$ & ' *' * $+ &
′
(5.10)
)( ))
′ (( () +
, ′- , )( )) + -/ 0 (5.11)
1 0 0 1 1
Fungsi berikut be
berguna untuk mewujudkan transformasi affine
ne.
Program : taffine.m
function G = taff
fine(F, a11, a12, a21, a22, tx, ty)
% TAFFINE Digunak
kan untuk melakukan transformasi affiine.
% Masukan: F = Citra berskala keabuan
% a1
11, a12, a21, a22, tx, ty = mengatur
% tr
ransformasi affine
% Laku
ukan interpolasi bilinear
p = fl
loor(y2);
q = fl
loor(x2);
a = y2
2-p;
b = x2
2-q;
if (fl
loor(x2)==lebar) || ...
(fl
loor(y2) == tinggi)
G(y
y, x) = F(floor(y2), floor(x2));
else
int
tensitas = (1-a)*((1-b)*F(p,q) + ...
.
b * F(p, q+1)) + ...
a *
*((1-b)* F(p+1, q) + ...
b * F(p+1, q+1));
G(y
y, x) = intensitas;
end
else
G(y, x)
x = 0;
end
end
end
G = uint8(G);
Akhir Program
Contoh pengguna
naan fungsi taffine untuk melakukan pembbengkokan:
154 Pengolahan Citra, Teori dan Aplikasi
>> F=imread('C:\Image\gedung.png');
>> G=taffine(F,1,0.15,0,1,0,0);
>>imshow(G)
>>rad=10*pi/180;
>> G=taffine(F,cos(rad),sin(rad), …
-sin(rad),cos(rad),0,0);
>>imshow(G)
>> G=taffine(F,cos(rad),sin(rad),-sin(rad), …
cos(rad),-30,-50);
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
Program : ripple.m
function G = ripp
ple(F, ax, ay, tx, ty)
% RIPPLE Berfungs
si untuk melakukan transformasi 'ripp
ple'.
dimensi = size(F));
tinggi = dimensi((1);
lebar = dimensi(22);
for y=1 : tinggi
for x=1 : lebbar
x2 = x + ax * sin(2 * pi * y / tx);
y2 = y + ay * sin(2 * pi * x / ty);
if (x2>=11) && (x2<=lebar) && ...
(y2>=11) && (y2<=tinggi)
% Laku
ukan interpolasi bilinear
p = fl
loor(y2);
q = fl
loor(x2);
a = y2
2-p;
b = x2
2-q;
if (fl
loor(x2)==lebar) || ...
(fl
loor(y2) == tinggi)
G(y
y, x) = F(floor(y2), floor(x2));
else
int
tensitas = (1-a)*((1-b)*F(p,q) + ...
.
b * F(p, q+1)) + ...
a *
*((1-b)* F(p+1, q) + ...
b * F(p+1, q+1));
G(y
y, x) = intensitas;
end
else
G(y, x)
x = 0;
end
end
end
G = uint8(G);
Akhir Program
156 Pengolahan Citra, Teori dan Aplikasi
>> 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.
′ 5 6 cos : (5.14)
′ 5 6 sin :
(5.15)
158 Pengolahan Citra, Te
Teori dan Aplikasi
dengan
6 = − 5
) − 5
) (5.16)
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
if (x2>=1
1) && (x2<=lebar) && ...
(y2>=1
1) && (y2<=tinggi)
% Laku
ukan interpolasi bilinear
p = fl
loor(y2);
q = fl
loor(x2);
a = y2
2-p;
b = x2
2-q;
if (fl
loor(x2)==lebar) || ...
(fl
loor(y2) == tinggi)
G(y
y, x) = F(floor(y2), floor(x2));
else
int
tensitas = (1-a)*((1-b)*F(p,q) + ...
.
b * F(p, q+1)) + ...
a *
*((1-b)* F(p+1, q) + ...
b * F(p+1, q+1));
G(y
y, x) = intensitas;
Operasi Geometrik 159
end
else
G(y, x) = 0;
end
end
end
G = uint8(G);
Akhir Program
>> F=imread('C:\Image\kotatua.png');
>> G=swirl(F); imshow(G)
− I ∗ tan ! , L M 6 ≤ 6 EF P
′ H
, L M 6 > 6
(5.18)
EF
160 Pengolahan Citra, Te
Teori dan Aplikasi
− I ∗ tanA!
tan C , L M 6 ≤ 6 EF P
′ Q
, L M 6 > 6
(5.19)
EF
dengan
( [ \
! R1 − T ∗ 6? sin
6? Z `
S = [ \ ] ^_ ]
(5.20)
( [ \
! R1 − T ∗ 6? sin
6? Z `
S = [ \ ] ^_ ]
(5.21)
6 = − 5
) − 5
) (5.22)
I =6 EF
) 6) (5.23)
6 EF 5 (5.24)
5 UV! 6/2 (5.25)
5 + XX /2 (5.26)
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
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 (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
>> F=imread('C:\Image\kotatua.png');
>>G=spheri(F, 1.8); imshow(G)
Transformasi bili
ilinear mempunyai fungsi pemetaan seperti ber
erikut:
( ) a b (5.27)
!( !) !a !b (5.28)
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);
if (x2>=1
1) && (x2<=lebar) && ...
(y2>=1
1) && (y2<=tinggi)
Operasi Geometrik 163
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
>> F=imread('C:\Image\kotatua.png');
>> G=tbilin(F, 1.2,0.1,0.005,-45,0.1,1,0.005,-30);
>>imshow(G)
Latihan
(c) Twirl
(d) Ripple
(e) Bilinear
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
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
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
#
2$1 2$1
1 =* + -+ + -
4 4
= F(0)(cos(0)+j sin(0)) +
F(1)(cos($/2)+j sin($/2)) +
F(2)(cos($)+j sin($)) +
F(3)( (cos(3$/2)+j sin(3$/2))
= 3 (1+0) + (0,25 + j0,25)(0+j) - 1,5 (-1+0) +
(0,25-j0,25)(0-j)
Pengolahan Citra di Kawasan
K Frekuensi 173
= 3 + j0
j0,25 -0,25 + 1,5 - j0,25 -0,25
=4
#
2$2 2$2
2 =* + -+ + -
4 4
= F(0)(
0)(cos(0)-j sin(0)) +
F(1)(co
(cos($)-j sin($)) +
F(2)(co
(cos(2$)-j sin(2$)) +
F(3)(co
(cos(3$)-j sin(3$))
= 3 (1--0) + (0,25 + j0,25) (-1-0) - 1,5 (1-0) +
((0,25--j0,25))(-1-0)
= 3 – 0,25
0 –j0,25 -1,5 – 0,25 +j0,25
=1
#
2$3 2$3
3 =* + -+ + -
4 4
= (F(0)
(0)(cos(0)+j sin(0)) +
F(1)(co
(cos(3$/2)+j sin(3$/2)) +
F(2)(co
(cos(3$)+j sin(3$)) +
F(3)(( (cos(9$/2)+j
(c sin(9$/2))) / 4
= 3 (1--0) + (0,25 + j0,25) (0-j) - 1,5 (-1-0) +
(0,25
25-j0,25)(0+j)
= 3 - j0,25
j + 0,25 + 1,5 + j0,25 + 0,25
= 5
Program : dft1d.m
174 Pengolahan Citra, Teor
ori dan Aplikasi
Re(u+1) = Re(u+1)
) / n;
Im(u+1) = Im(u+1)
) / n;
end
Akhir Program
>>Fx=[2,4,1,
,5]';
>> [Re,Im]=d
dft1d(Fx)
Re =
Im =
>>
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
Akhir Program
>>Fx=[2,4,1,5]';
>> [Re,Im]=dft1d(Fx);
>> F=idft1d(Re+Im*j)
F =
>>
70 70
, . = ∑/
0 ∑ , 1 cos 52$ 6 + 89 − sin 52$ 6 + 89 (6.4)
/ /
70 70
1, = / ∑/
0 ∑ ., cos 52$ 6 + /
89 + sin 52$ 6 + /
89 (6.5)
Berdasarkan rum
umus di atas, setiap piksel akan ditransform
rmasikan dengan
kompleksitas berupaa O(MN) atau O(N2) jika ukuran citra berup
upa NxN. Dengan
demikian, untuk citra (N4). Tentu saja,
itra berukuran NxN, kompleksitas berupa O(N
untuk ukuran yangg besar akan diperlukan waktu yang san
angat lama.Itulah
sebabnya, dalam prak
aktik cara tersebut dihindari karena terdapat metode
m lain yang
jauh lebih cepat dalam
am melakukan transformasi.
Sekedar untuk kepentingan
k ilustrasi, alihragamFourier yan
ang menggunakan
Persamaan 6.4 dapatt diimplementasikan
d seperti berikut.
Program : dft2d.m
Fx = double(imreaad(berkas));
[m, n] = size(Fx)); % Ukuran citra
% m = jumlah baris
% n = jumlah kolom
for v = 0 : m -1
for u = 0 : n - 1
Pengolahan Citra di Kawasan Frekuensi 177
Re(v+1, u+1) = 0;
Im(v+1, u+1) = 0;
for y = 0 : m - 1
for x = 0 : n - 1
radian = 2 * pi * …
(u * x / n + v * y / m);
cosr = cos(radian);
sinr = -sin(radian);
Re(v+1, u+1) = Re(v+1, u+1) + ...
Fx(y+1, x+1) * cosr;
Im(v+1, u+1) = Im(v+1, u+1) + ...
Fx(y+1, x+1) * sinr;
end
end
end
end
Akhir Program
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.
x 0 1 2 3 4 5 6 7
u
0 1+j0 1+j0 1+j0 1+j0 1+j0 1+j0 1+j0 1+j0
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);
| ., | = >? ., + @ ., (6.6)
dengan R(u,v) menyatakan bagian real dan I(u,v) menyatakan bagian imajiner.
Adapun sudut fase transformasi didefinisikan sebagai:
D 7,
∅ ., = BC E 7,
(6.7)
180 Pengolahan Citra, Teori dan Aplikasi
Selain itu, terdapat pula istilah power spectrum atau spektrum daya, yang
didefinisikan sebagai kuadrat besaran:
F ., =| ., | = ? ., + @ ., (6.8)
>>Img=imread(’C:\Image\lena256.png’);
>>F=fft2(Img);
>>imshow(abs(F),[]);
(c) Visualisasi hasil FFT dengan (d) Visualisasi hasil FFT. Dengan
skala logaritmik intensitas frekuensi nol ditengahkan
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.
X=
Pengolahan Citra di Kawasan Frekuensi 183
1 2 3 4
5 6 7 8
9 10 11 12
13 14 15 16
fftshift(X)
ans =
11 12 9 10
15 16 13 14
3 4 1 2
7 8 5 6
>> G=fftshift(F);
>>imshow(log(1+abs(G)),[])
>>
Gonzales, dkk. (2004) menjelaskan cara menentukan ukuran baru untuk citra
f dan h. Misalkan, f berukuran axb dan h berukuran cxd. Kedua fungsi tersebut
diperluas menjadi berukuran pxq. Maka, ukuran untuk p dan q harus memenuhi
p> a + c -1 (6.9)
dan
Pengolahan Citra di Kawasan Frekuensi 187
q>b + d -1 (6.10)
2r
dengan r adalah bilangan bulat. Dalam praktik, nilai p dan q acapkali dibuat sama,
yaitu sebesar r. Dengan kata lain, nilai r harus memenuhi persamaan berikut:
2r> a + c -1 (6.11)
dan
2r>b + d -1 (6.12)
Dengan asumsi bahwa ukuran citra f jauh lebih besar daripada citra h, satu
pendekatan yang biasa dilakukan untuk memperoleh nilai p dan q untuk
kepentingan zero padding menggunakan algoritma seperti berikut.
Keluaran:
• pxq (ukuran baru citra untuk f dan h)
1. m max(a, b)
3. p 2q
4. q 2q
188 Pengolahan Citra, Teori dan Aplikasi
>>Fs = imread('C:\Image\kotatua.png');
>>Hs=fspecial('sobel');
>>size(Fs)
ans =
747500
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
Pada perintah
p di depan
Hs=fs
special('sobel');
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
% Konvolusi
G = Hf .* Ff;
Akhir Program
>>H = fspecial(’sobel’);
>>F=filterdft('C:\Image\kotatua.png', H);
>>imshow(F)
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
Butterworth
Gaussian
192 Pengolahan Citra, Teor
ori dan Aplikasi
1 IC
IC J ., KJ M
G ., =H (6.13)
0 IC J
IC ., LJ
J ., = √. + (6.14)
Skrip berikut meenunjukkan suatu fungsi yang ditujukan untukk memfilter citra
menggunakan ILPF.
Program : ilpf.m
function F = ilpf
f(berkas, d0)
% ILPF Digunakan untuk melaksanakan pemfilteran
% pada kawasa
an frekuensi menggunakan ILPF.
% Masukan:
% berkas - nama citra
% d0 - me
enentukan frekuensi ambang
% Keluaran:
% F - cit
tra yang telah difilter
Fs = double(imrea
ad(berkas));
[a, b] = size(Fs)
); %Peroleh ukuran citra
% Menentukan ukur
ran baru untuk perluasan citra
r = nextpow2(2 * max(a, b));
p = 2 ^ r;
q = p;
% Menentukan jang
gkauan frekuensi u dan v
u = 0:(p - 1);
v = 0:(q - 1);
% Pemfilteran
G = Hf .* Ff;
% Transformasi balik
F = real(ifft2(G));
F = uint8(F(1:a, 1:b));
Akhir Program
Gambar 6.9 merupakan contoh penerapan IDLF untuk berbagai nilai d0 yang
diterapkan pada kotatua.png.
194 Pengolahan Citra, Teor
ori dan Aplikasi
G ., = (6.15)
NOP 7,
7 /PQ RST
Program : blpf.m
Pengolahan Citra di Kawasan Frekuensi 195
Fs = double(imread(berkas));
[a, b] = size(Fs); %Peroleh ukuran citra
% Pemfilteran
G = Hf .* Ff;
% Transformasi balik
F = real(ifft2(G));
F = uint8(F(1:a, 1:b));
Akhir Program
196 Pengolahan Citra, Teori dan Aplikasi
Gambar 6.10dan 6.11 merupakan contoh penerapan IDLF untuk berbagai nilai
d0dan nyang berbeda yang diterapkan pada kotatua.png.
GLPF (Gaussian low pass filter) merupakan filter lolos-rendah dengan fungsi
transfer seperti berikut:
US V,W
G ., = SXS (6.16)
US V,W
G ., = SUQ S (6.17)
Saat D(v,u) = D0, filter turun menjadi 0.607 terhadap nilai maksimum 1.
198 Pengolahan Citra, Teor
ori dan Aplikasi
Contoh berikut
ut merupakan fungsi yang digunakan un
untuk melakukan
pemfilteran dengan GLPF.
G
Program : glpf.m
function F = glpf
f(berkas, d0)
% GLPF Digunakan untuk melaksanakan pemfilteran
% pada kawasa
an frekuensi menggunakan GLPF.
% Masukan:
% berkas - nama citra
% d0 - men
nentukan frekuensi ambang
% Keluaran:
% F - citr
ra yang telah difilter
Fs = double(imrea
ad(berkas));
[a, b] = size(Fs)
); %Peroleh ukuran citra
% Menentukan ukur
ran baru untuk perluasan citra
r = nextpow2(2 * max(a, b));
p = 2 ^ r;
q = p;
% Menentukan jang
gkauan frekuensi u dan v
u = 0:(p - 1);
v = 0:(q - 1);
% Hitung jarak D(
(v,u)
D = sqrt(V.^2 + U.^2);
U
% Menentukan n ka
alau n tidak disebutkan
ifnargin == 2
n = 1;
end
% 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
>>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.
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).
Butterworth
Pengolahan Citra di Kawasan
K Frekuensi 201
Program : bhpf.m
function F = bhpf
f(berkas, d0, n)
% BHPF Digunakan untuk melaksanakan pemfilteran
% pada kawasa
an frekuensi menggunakan BHPF.
% Masukan:
% berkas - nama citra
% d0 - men
nentukan frekuensi ambang
% n - mene
entukan faktor n
% Keluaran:
% F - citr
ra yang telah difilter
Fs = double(imrea
ad(berkas));
[a, b] = size(Fs)
); %Peroleh ukuran citra
% Menentukan ukur
ran baru untuk perluasan citra
r = nextpow2(2 * max(a, b));
p = 2 ^ r;
q = p;
% Menentukan jang
gkauan frekuensi u dan v
u = 0:(p - 1);
v = 0:(q - 1);
% Pemfilteran
G = Hlt .* Ff;
% Transformasi balik
F = real(ifft2(G));
F = uint8(F(1:a, 1:b));
Akhir Program
Gambar 6.13 menunjukkan gambar asli dan hasil pemrosesan dengan perintah di
atas.
Pengolahan Citra di Kawasan Frekuensi 203
Hasil pada Gambar 6.13(b) menunjukkan bahwa penerapan BHPF pada citra
membuat latarbelakang menjadi hampir hilang, karena nilai intensitas reratanya
hilang (menjadi nol).
Program : hfe.m
function F = hfe(
(berkas, d0, n)
% HFE Digunakan untuk
u melaksanakan pemfilteran
% pada kawasa
an frekuensi menggunakan BHPF
% dan menerap
pkan HFE (High frequency emphasis).
% Masukan:
% berkas - nama citra
% d0 - men
nentukan frekuensi ambang
% n - mene
entukan faktor n
% Keluaran:
% F - citr
ra yang telah difilter
Fs = double(imrea
ad(berkas));
[a, b] = size(Fs)
); %Peroleh ukuran citra
% Menentukan ukur
ran baru untuk perluasan citra
r = nextpow2(2 * max(a, b));
p = 2 ^ r;
q = p;
% Menentukan jang
gkauan frekuensi u dan v
u = 0:(p - 1);
v = 0:(q - 1);
% Hitung jarak D(
(v,u)
D = sqrt(V.^2 + U.^2);
U
% Menentukan n ka
alau n tidak disebutkan
ifnargin == 2
n = 1;
end
% Proses HFE
Hfe = 0.5 + 2 * Hlt;
H
Pengolahan Citra di Kawasan Frekuensi 205
% Pemfilteran
G = Hfe .* Ff;
% Transformasi balik
F = real(ifft2(G));
F = uint8(F(1:a, 1:b));
Akhir Program
Gambar 6.14 menunjukkan gambar asli goldhill.png dan hasil pemrosesan di atas.
Latihan
f(x) = (3, 4, 4, 5)
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
Inti operasi morfologi melibatkan dua larik piksel. Larik pertama berupa
citra yang akan dikenai operasi morfologi, sedangkan larik kedua dinamakan
sebagai kernel atau structuring element(elemen penstruktur) (Shih, 2009). Contoh
kernel ditunjukkan pada Gambar 7.3. Pada contoh tersebut, piksel pusat (biasa
diberi nama hotspot) ditandai dengan warna abu-abu. Piksel pusat ini yang
menjadi pusat dalam melakukan operasi terhadap citra, sebagaimana
diilustrasikan pada Gambar 7.4.
0 1 0 1 1 1 1 1 1
1 1 1 1 1 1 1 1 1
0 1 0 1 1 1 1
1
1 1 1 1 1 1 1 1 1 1
Hotspot
0 1 0
Citra
1 1 1
0 1 0
Kernel
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.1)
∉ (7.2)
Morfologi untuk Pengolahan Citra 213
Sebagai contoh, s = (1, 2) dan t = (1, 4), sedangkan himpunan A berisi seperti
berikut:
∈
∉
Perlu diketahui, setiap elemen hanya dapat menjadi anggota himpunan satu kali.
Dengan demikian,
B⊆A (7.3)
C = A ∪B (7.4)
214 Pengolahan Citra, Teori dan Aplikasi
1 2 3 4 5 1 2 3 4 5
1 0 1 0 0 0 1 1 0 0 0
2 0 1 1 0 0 0 1 0 0 0
3 0 1 1 1 0 0 0 1 0 0
4 0 1 1 0 0 0 1 0 0 0
5 0 1 0 0 0 1 0 0 0 0
C=A∪B
1 1 0 0 0
0 1 1 0 0
0 1 1 1 0
0 1 1 0 0
1 1 0 0 0
C = A∩B (7.5)
berarti bahwa C berisi anggota-anggota yang ada di himpunan A dan juga terdapat
di himpunan B. Hasilnya cenderung menyempit. Contoh dapat dilihat pada
Gambar 7.6.
Morfologi untuk Pengolahan Citra 215
1 2 3 4 5 1 2 3 4 5
1 0 1 0 0 0 1 1 0 0 0
2 0 1 1 0 0 0 1 0 0 0
3 0 1 1 1 0 0 0 1 0 0
4 0 1 1 0 0 0 1 0 0 0
5 0 1 0 0 0 1 0 0 0 0
C=A∩B
1 1 0 0 0
0 1 1 0 0
0 1 1 1 0
0 1 1 0 0
1 1 0 0 0
Ac = { w | w ∉ A } (7.6)
Notasi di atas dibaca “semua elemen yang tidak menjadi anggota A”.
Komplemen atau juga disebut inversi dapat dibayangkan seperti saling
menukarkan warna hitam dan putih.Nilai yang semula berupa nol diganti satu dan
nilai satu diganti dengan nol. Contoh dapat dilihat di Gambar 7.7.Di bidang
fotografi dengan film, inversi menghasilkan gambar negatif. Istilah komplemen
juga berarti ”pelengkap”, karena bila A digabung dengan operasi union akan
menyempurnakan citra menjadi citra yang semua pikselnya bernilai 1.
216 Pengolahan Citra, Teori dan Aplikasi
1 2 3 4 5 1 2 3 4 5
1 0 1 0 0 0 1 0 1 1 1
2 0 1 1 0 0 1 0 0 1 1
3 0 1 1 1 0 1 0 0 0 1
4 0 1 1 0 0 1 0 0 1 1
5 0 1 0 0 0 1 0 1 1 1
A – B = { w | w ∈ A, w ∉ B } = A ∩Bc (7.7)
1 2 3 4 5 1 2 3 4 5
1 0 1 0 0 0 1 1 0 0 0
2 0 1 1 0 0 0 1 0 0 0
3 0 1 1 1 0 0 0 1 0 0
4 0 1 1 0 0 0 1 0 0 0
5 0 1 0 0 0 1 0 0 0 0
C=A-B C=B-A
0 0 0 0 0 1 0 0 0 0
0 0 1 0 0 0 0 0 0 0
0 0 0 1 0 0 0 0 0 0
0 0 1 0 0 0 0 0 0 0
0 1 0 0 0 1 0 0 0 0
= | =− , ∈ (7.8)
1 2 3 4 5 1 2 3 4 5
1 0 0 0 0 0 0 0 0 0 0
2 0 1 1 0 0 0 0 0 0 0
3 0 1 1 1 0 0 1 1 1 0
4 0 0 0 0 0 0 0 1 1 0
5 0 0 0 0 0 0 0 0 0 0
( ) = | = + , ∈ (7.9)
1 2 3 4 5 1 2 3 4 5
1 0 0 0 0 0 0 0 0 0 0
2 0 1 1 0 0 0 0 0 0 0
3 0 1 1 1 0 0 0 0 0 0
4 0 0 0 0 0 0 0 1 1 0
5 0 0 0 0 0 0 0 1 1 1
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.
Masukan Keluaran
0 1
1 0
Selain ketiga operator yang disebut di depan, operator lain yang kadang-
kadang digunakan adalah XOR dan NAND. Sifat XOR dan NAND ditunjukkan
pada Tabel 7.3.
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
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)');
Akhir Program
7.3Operasi Dilasi
a) = | =− , ∈
b) ( ) = | = + , ∈
c) z=(z1, z2)
222 Pengolahan Citra, Teori dan Aplikasi
Dengan demikian,
1 2 3 4 5 -1 0 1
1 -1
2 0
3 1
4
5
A B
Hotspot vertikal
A⊕B
A⊕B = B⊕A
(A⊕B) ⊕C = A⊕ (B ⊕C)
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)
3. p 2q
4. q 2q
Program : dilasi.m
[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;
% 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
>> F = [ 0 0 0 0 0 0 0
0 0 0 0 0 0 0
0 0 1 1 1 1 0
0 0 1 1 1 1 0
0 0 0 1 1 1 0
0 0 0 0 0 0 0
0 1 1 0 0 0 0
0 0 0 0 0 0 0];
226 Pengolahan Citra, Teori dan Aplikasi
>> H = [0 1 0; 1 1 1; 0 1 0];
>> G = dilasi(F,H)
G =
0 0 0 0 0 0 0
0 0 1 1 1 1 0
0 1 1 1 1 1 1
0 1 1 1 1 1 1
0 0 1 1 1 1 1
0 1 1 1 1 1 0
1 1 1 1 0 0 0
0 1 1 0 0 0 0
>>
>> F = [ 0 0 0 0 0;
0 1 1 1 0;
0 1 1 1 0;
0 1 0 0 0;
0 0 0 0 0];
>> H = [0 1 0
0 1 0
0 1 0];
>> G = dilasi(F,H)
G =
0 1 1 1 0
0 1 1 1 0
0 1 1 1 0
0 1 1 1 0
0 1 0 0 0
Morfologi untuk Pengolahan Citra 227
>>
>> G = dilasi(F,H, 2, 1)
G =
0 0 0 0 0
0 1 1 1 0
0 1 1 1 0
0 1 1 1 0
0 1 1 1 0
>>
Angka 2 dan 1 pada argumen fungsi dilasi menyatakan bahwa hotspot pada H
terletak pada kolom kedua dan baris pertama.Jadi, yang berfungsi sebagai hotspot
adalah nilai 1 pada H yang terletak paling atas, bukan yang di tengah.Mengapa
hasilnya seperti itu? Cobalah untuk menganalisisnya. Perlu diketahui, pada saat
menentukan posisi hotspot, pemetaan seperti pada Gambar 7.12 harus digunakan.
1 2 3
1
2
3
Hotspot dengan:
hx = 2
hy = 1
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
A ΘB = |( ) ⊆ (7.12)
230 Pengolahan Citra, Teori dan Aplikasi
AΘB = ) ∈ * + | ( + ) ∈ ,, - . ) ∈ (7.13)
Program : erosi.m
[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;
% Memproses erosi
for baris = 1 : tf
for kolom = 1 : lf
cocok = true;
for indeks = 1 : jum_anggota
Morfologi untuk Pengolahan Citra 231
if cocok
G(baris, kolom) = 1;
end
end
end
Akhir Program
>> F =[ 0 0 0 0 0
0 1 1 1 0
0 1 1 1 0
0 1 0 0 0
0 0 0 0 0];
>>H = [0 1 0
0 1 0
0 1 0];
>> G = erosi(F, H)
G =
0 0 0 0 0
0 0 0 0 0
0 1 0 0 0
0 0 0 0 0
0 0 0 0 0
>>
232 Pengolahan Citra, Teori dan Aplikasi
A B
AΘB
AΘB = BΘA
(AΘB) ΘC = AΘ (B ΘC)
>> Daun=imread('C:\image\dedaunan.png');
>> BW=im2bw(Daun, 0.1);
Morfologi untuk Pengolahan Citra 233
>> H=ones(4);
>> G=erosi(BW, H);
>> imshow(G, [0 1])
Citra asli dan hasil pemrosesan dengan operasi erosi dapat dilihat pada Gambar
7.15. Terlihat bahwa dengan menggunakan elemen penstruktur
1 1 1 1 1 1
21 1 1 1 1 16
11 1 1 1 1 155
/=1
11 1 1 1 1 15
11 1 1 1 1 15
01 1 1 1 1 14
>> Img=imread('C:\Image\daun_gray.png');
>> BW=im2bw(Img, 0.65);
>> BW = not(BW);
>> imshow(BW);
Perintah
BW = not(BW);
>>H = ones(5);
>> G=erosi(BW, H);
>>Ap =BW - G;
>> imshow(Ap);
Ap = A – (A ΘB) (7.14)
236 Pengolahan Citra, Teori dan Aplikasi
Bentuk elemen penstruktur yang lain yaitu belah ketupat, garis, persegi
panjang, bujur sangkar, dan oktagon. Gambar 7.18 menunjukkan contoh bentuk-
bentuk tersebut.
238 Pengolahan Citra, Teori dan Aplikasi
>>strel('disk', 8)
ans =
Morfologi untuk Pengolahan Citra 239
Neighborhood:
0 0 0 0 1 1 1 1 1 1 1 0 0 0 0
0 0 0 1 1 1 1 1 1 1 1 1 0 0 0
0 0 1 1 1 1 1 1 1 1 1 1 1 0 0
0 1 1 1 1 1 1 1 1 1 1 1 1 1 0
1 1 1 1 1 1 1 1 1 1 1 1 1 1 1
1 1 1 1 1 1 1 1 1 1 1 1 1 1 1
1 1 1 1 1 1 1 1 1 1 1 1 1 1 1
1 1 1 1 1 1 1 1 1 1 1 1 1 1 1
1 1 1 1 1 1 1 1 1 1 1 1 1 1 1
1 1 1 1 1 1 1 1 1 1 1 1 1 1 1
1 1 1 1 1 1 1 1 1 1 1 1 1 1 1
0 1 1 1 1 1 1 1 1 1 1 1 1 1 0
0 0 1 1 1 1 1 1 1 1 1 1 1 0 0
0 0 0 1 1 1 1 1 1 1 1 1 0 0 0
0 0 0 0 1 1 1 1 1 1 1 0 0 0 0
>>
Dengan cara seperti itu, H dapat digunakan pada fungsi erosi atau dilasi. Contoh:
>> 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;
strel('disk', 6)
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:
>>Img = imread('C:\Image\struktur.png');
>>BW=im2bw(Img, 0.1);
>> H = [
0 0 1 1 1 1 1 0 0
0 1 1 1 1 1 1 1 0
1 1 1 1 1 1 1 1 1
1 1 1 1 1 1 1 1 1
1 1 1 1 1 1 1 1 1
1 1 1 1 1 1 1 1 1
1 1 1 1 1 1 1 1 1
0 1 1 1 1 1 1 1 0
0 0 1 1 1 1 1 0 0 ];
>> G=dilasi(BW, H);
>>M=erosi(G, H);
>>imshow(M,[0 1])
>>
(AοB)οB = (AοB)
(A (7.16)
Operator openi
ning dapat dimanfaatkan sebagai filter lolo
olos-rendah, filter
lolos-tinggi, maupunn sebagai tapis lolos-bidang apabila elemen penstruktur
p yang
digunakan berupa cak
akram (Shih, 2009). Berikut adalah rumusanny
nya:
• ah (low-pass): AοBh;
filter lolos-rendah
• filter lolos-tinggi (high-pass): A – (AοBh);
• filter lolos-bidang meter Bh1 < Bh2.
ng (band-pass): (AοBh1)- (AοBh2), dengan diam
Program : opening.m
function G = open
ning (F, H)
% OPENING Melakuk
kan operasi opening.
G = dilasi(erosi(
(F, H), H);
Akhir Program
Operasi closin
sing berguna untuk menghaluskan kontur dan
an menghilangkan
lubang-lubang kecil.
l. D
Definisinya seperti berikut:
Program : closing.m
Akhir Program
248 Pengolahan Citra, Teori dan Aplikasi
7.8 TransformasiHit-or-Miss
* = ( Θ 7 )∩(
̅Θ +) (7.18)
Dalam hal ini, biasanya B2 = 9997. Morfologi seperti itu dipakai untuk pemrosesan
dan pengenalan bentuk pada citra biner.
Sebagai contoh, terdapat pola seperti terlihat pada Gambar 7.23(a). Target
yang dikehendaki adalah menemukan pola tersebut pada citra yang terlihat pada
Gambar 7.23(b).
1 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0
1 0 0 1 0 0 0 0 0 1 0 0 1 0 0 0 0 0
1 1 1 1 1 0 0 1 0 1 1 1 1 0 1 0 0 0
0 0 0 1 1 1 1 1 0 1 1 1 1 0 1 0 0 1
0 0 0 1 0 0 0 1 0 0 0 0 1 0 1 1 1 1
0 0 0 1 0 0 0 1 1 0 0 0 0 1
0 0 0 0 0 0 0 0 0 0 0 0 0 1
Secara manual dapatdilihat bahwa target yang dicari ada tiga buah. Untuk
menemukan posisinya, dapatdigunakan operasi erosi. Penyelesaiannya seperti
berikut:
Morfologi untuk Pengolahan Citra 249
>>H1 = [1 0 0 0
1 0 0 1
1 1 1 1
0 0 0 1
0 0 0 1 ];
>>Citra = [ 0 0 0 0 0 1 0 0 0 0 0 0 0 0
0 0 0 0 0 1 0 0 1 0 0 0 0 0
1 0 0 1 0 1 1 1 1 0 1 0 0 0
1 1 1 1 0 1 1 1 1 0 1 0 0 1
0 0 0 1 0 0 0 0 1 0 1 1 1 1
0 0 0 1 0 0 0 1 1 0 0 0 0 1
0 0 0 0 0 0 0 0 0 0 0 0 0 1];
>> G = erosi(Citra, H1)
Terlihat bahwa ada tiga elemen pada G yang bernilai 1. Pada posisi itulah target
ditemukan. Gambar 7.24 memperlihatkan isi G. Elemen yang bernilai 1 ditandai
dengan arsiran yang agak gelap. Arsiran yang agak terang digunakan untuk
menandai keberadaan target.
0 0 0 0 0 0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 1 0 0 0 0 0 0
0 0 0 0 0 0 0 1 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0 0 0 0 1 0
0 0 0 0 0 0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0 0 0 0 0 0
>> H2 = not(H1)
250 Pengolahan Citra, Teori dan Aplikasi
H2 =
0 1 1 1
0 1 1 0
0 0 0 0
1 1 1 0
1 1 1 0
>>
0 1 1 1 1 1 1 1 1 0 1 1 1 1 1 1 1 1
0 1 1 0 1 1 1 1 1 0 1 1 0 1 1 1 1 1
0 0 0 0 0 1 1 0 1 0 0 0 0 1 0 1 1 1
1 1 1 0 0 0 0 0 1 0 0 0 0 1 0 1 1 0
1 1 1 0 1 1 1 0 1 1 1 1 0 1 0 0 0 0
1 1 1 0 1 1 1 0 0 1 1 1 1 0
1 1 1 1 1 1 1 1 1 1 1 1 1 0
;1
(a) /2 = / (b) Komplemen citra
>>erosi(not(Citra), not(H1))
0 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 1 1
0 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
1 1 1 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0
1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0
0 0 0 0 0 0 0 0 0 0 0 0 0 0
1 0 0 0 1 1 0 0 0 0 0 0 0 0
;1
(a) /2 = / (b) Komplemen citra
Hasil THM diperoleh dengan melakukan interseksi antara hasil yang terletak pada
7.24 dan 7.26. Secara visual terlihat bahwa interseksi kedua hasil tersebut
menghasilkan satu nilai saja, yaitu pada posisi yang terlihat pada Gambar 7.27.
Hasil THM
0 0 0 0 0 0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0 0 0 1 0 0
0 0 0 0 0 0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0 0 0 0 0 0
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:
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).
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
Akhir Program
Pada contoh di atas, elemen pentruktur yang digunakan untuk memperoleh batas
kiri objek berupa:
0 1 1
0 1 1
0 1 1
>> 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
1 = =
= <1 0 =? (7.19)
1 = =
Pada contoh di atas, x menyatakan “don’t care” atau bebas (0 atau 1). Nah, untuk
menangani kasus seperti itu, dapat dibuat transformasi Hit_or_Miss seperti
berikut.
Program : thm2.html
function G = thm2(F, H)
% THM2 Digunakan untuk menangani transformasi Hit-or-Miss
% F adalah citra yang akan dikenai operasi
% H adalah elemen penstruktur
% H bisa mengandung nilai -1 untuk menyatakan
% don't care
% 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
Akhir Program
Secara prinsip, bagian yang bernilai -1 (“don’t care”) selalu diubah menjadi nol.
Ketika dikomplemenkan, nilai -1 juga menghasilkan nilai 0. Dengan demikian,
H1 AND H2 akan selalu menghasilkan nilai 0 pada setiap elemen. Contoh
penggunaan thm2akan diberikan ketika membahas convex hull.
7.9Skeleton
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.
B1 B2 B3 B4
0 0 0 1 1 1 0 1 1 1 1 0
1 1 1 1 1 1 0 1 1 1 1 0
1 1 1 0 0 0 0 1 1 1 1 0
B5 B6 B7 B8
1 0 0 1 1 1 1 1 1 0 0 1
1 1 0 0 1 1 1 1 0 0 1 1
1 1 1 0 0 1 1 0 0 1 1 1
A ⊗ B = ((((((((A ⊗ B1) ⊗ B2) ⊗ B3) ⊗ B4) ⊗ B5) ⊗ B6) ⊗ B7) ⊗ B8) (7.21)
Program : thinning.m
% Elemen penstruktur
H1 = [ 0 0 0; 1 1 1; 1 1 1 ];
H2 = [ 1 1 1; 1 1 1; 0 0 0 ];
H3 = [ 0 1 1; 0 1 1; 0 1 1 ];
H4 = [ 1 1 0; 1 1 0; 1 1 0 ];
H5 = [ 1 0 0; 1 1 0; 1 1 1 ];
H6 = [ 1 1 1; 0 1 1; 0 0 1 ];
H7 = [ 1 1 1; 1 1 0; 1 0 0 ];
H8 = [ 0 0 1; 0 1 1; 1 1 1 ];
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)));
if sama == false
break;
end
end
if sama == true
break; % Akhiri kalang
end
end
G = C;
Akhir Program
Hasilnya ditunjukkan pada Gambar 7.33(a). Hasil fase keenam diperoleh dengan
menggunakan perintah berikut:
@( ) = ⋃C
BDE @B ( ) (7.22)
@B ( ) = ( Θ − ( Θ ) ° (7.23)
F = max( | Θ ≠ ∅) (7.24)
Perlu diketahui,
Θ = (( Θ )Θ … )Θ (7.25)
0 1 1 1 0 0 0 0 1 1 1
0 1 1 1 0 0 0 0 1 1 1
0 1 1 1 0 0 0 0 1 1 1
0 1 1 1 0 0 0 0
B
0 1 1 1 1 1 1 0
0 1 1 1 1 1 1 0
0 1 1 1 1 1 1 0
0 0 0 0 0 0 0 0
A
0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0
0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0
0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0
0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0
0 0 1 1 1 1 0 0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
AΘB (A Θ B) ° B
0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
S1(A) = (A Θ B) - (A Θ B) ° B S2(A)
>> Img=imread('C:\Image\bentuk.png');
262 Pengolahan Citra, Teori dan Aplikasi
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.
7.10 Thickening
A B = A ∪hit_or_miss(A, B) (7.26)
Dalam hal ini, A adalah citra biner dan B adalah delapan elemen penstruktur
B1..Bn. Satu fase perhitungan thickening dilakukan dengan menggunakan delapan
elemen penstruktur. Contoh kedelapan elemen penstruktur disajikan pada Gambar
7.36.
B1 B2 B3 B4
1 1 1 0 0 0 1 0 0 0 0 1
0 0 0 0 0 0 1 0 0 0 0 1
0 0 0 1 1 1 1 0 0 0 0 1
B5 B6 B7 B8
0 1 1 0 0 0 0 0 0 1 1 0
0 0 1 1 0 0 0 0 1 1 0 0
0 0 0 1 1 0 0 1 1 0 0 0
Program : thickening.m
H1 = [ 1 1 1; 0 0 0; 0 0 0 ];
H2 = [ 0 0 0; 0 0 0; 1 1 1 ];
H3 = [ 1 0 0; 1 0 0; 1 0 0 ];
H4 = [ 0 0 1; 0 0 1; 0 0 1 ];
H5 = [ 0 1 1; 0 0 1; 0 0 0 ];
H6 = [ 0 0 0; 1 0 0; 1 1 0 ];
H7 = [ 0 0 0; 0 0 1; 0 1 1 ];
H8 = [ 1 1 0; 1 0 0; 0 0 0 ];
C = F; % Salin citra F ke C
for p = 1 : n_iterasi
C = or(C, thm(C,H1));
C = or(C, thm(C,H2));
C = or(C, thm(C,H3));
C = or(C, thm(C,H4));
C = or(C, thm(C,H5));
C = or(C, thm(C,H6));
C = or(C, thm(C,H7));
C = or(C, thm(C,H8));
end
G = C;
Akhir Program
Contoh
>>F = imread(’C:\Image\morfo.png’);
>>G=thickening(F,1); imshow(G)
B1 B2 B3 B4
1 x x 1 1 1 x x 1 x x x
1 0 x x 0 x x 0 1 x 0 x
1 x x x x x x x 1 1 1 1
LBM = ℎO LBP7 , M
∪ . = 1,2,3,4 ( = 1,2,3, … (7.28)
Z( ) = ⋃\MD7 [M (7.29)
0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
0 0 1 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0
0 1 1 0 0 1 0 0 0 0 1 1 1 0 1 0 0 0
0 1 1 0 1 1 0 0 0 0 1 1 1 1 1 1 0 0
0 0 1 1 1 0 0 0 0 0 0 1 1 1 1 1 1 0
0 0 1 1 1 1 1 0 0 0 0 1 1 1 1 1 1 0
0 0 0 0 1 1 1 0 0 0 0 0 0 1 1 1 0 0
0 0 0 0 1 0 0 0 0 0 0 0 0 1 0 0 0 0
0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
A L1] ^ =3
0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
0 0 1 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0
0 1 1 0 0 1 0 0 0 0 1 1 0 0 1 0 0 0
0 1 1 0 1 1 0 0 0 0 1 1 0 1 1 0 0 0
0 0 1 1 1 0 0 0 0 0 1 1 1 1 1 0 0 0
0 0 1 1 1 1 1 0 0 0 0 1 1 1 1 1 0 0
0 0 0 1 1 1 1 0 0 0 0 0 1 1 1 1 0 0
0 0 0 0 1 1 0 0 0 0 0 0 0 1 0 0 0 0
0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
L 2] ^ =1 L 3] ^ =2
0 0 0 1 0 0 0 0 0 0 0 0 1 0 0 0 0 0
0 0 1 1 1 0 0 0 0 0 0 1 1 1 0 0 0 0
0 1 1 1 1 1 0 0 0 0 1 1 1 1 1 0 0 0
0 1 1 1 1 1 0 0 0 1 1 1 1 1 1 0 0 0
0 0 1 1 1 1 0 0 0 0 1 1 1 1 1 1 0 0
0 0 1 1 1 1 1 0 0 0 1 1 1 1 1 1 1 0
0 0 0 0 1 1 1 0 0 0 0 0 1 1 1 1 0 0
0 0 0 0 1 0 0 0 0 0 0 0 0 1 1 0 0 0
0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
L 4] ^ =4 Z( )
Program : convhull.m
function G = convhull(A)
% CONVHULL Untuk melakukan operasi convex hull terhadap citra A
% dengan menggunakan 4 elemen penstruktur
% G = Convex hull
% Elemen penstruktur
H1 = [ 1 -1 -1; 1 0 -1; 1 -1 -1 ];
H2 = [ 1 1 1; -1 0 -1; -1 -1 -1 ];
H3 = [ -1 -1 1; -1 0 1; -1 -1 1 ];
H4 = [ -1 -1 -1; -1 0 -1; 1 1 1 ];
C = zeros(tinggi, lebar);
C = or(C, chull(A, H1));
C = or(C, chull(A, H2));
C = or(C, chull(A, H3));
C = or(C, chull(A, H4));
G = C;
k=1;
Ckmin1 = A;
while (true)
Ck = or(Ckmin1, thm2(Ckmin1,B));
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
(a) Citra fork-3.png (b) Convex hull (c) Convex hull – Citra asli
B1 B2 B3 B4
1 1 1 1 1 x 1 x x x x x
1 0 x 1 0 x 1 0 x 1 0 x
x x x 1 x x 1 1 x 1 1 1
B5 B6 B7 B8
x x x x x 1 x 1 1 1 1 1
x 0 1 x 0 1 x 0 1 x 0 1
1 1 1 x 1 1 x x 1 x x x
dengan A adalah citra dan B adalah elemen penstruktur. Jadi, nilai yang dihasilkan
berupa nilai terbesar antara A+B,dengan proses penambahan dilakukan seperti
yang terjadi pada konvolusi citra. Simbol g sesudah tanda ⊕ menyatakan bahwa
operasi dilasi tersebut berlaku untuk citra beraras keabuan.
Ilustrasi dilasi beraras keabuan dapat dilihat pada Gambar 7.43. Pada
contoh tersebut, nilai terbesar A+B adalah25. Nilai tersebut dijadikan sebagai nilai
dalam A⊕gB.
Hasil
25
Implementasi
si dilasi dapat dilihat pada program berikut.
Program : gdilasi.m
function G = gdil
lasi(F, H, hotx, hoty)
% GDILASI Berguna
a untuk melaksanakan operasi dilasi p
pada
% citra berar
ras keabuan.
% Masukan:
% F = citr
ra yang akan dikenai dilasi
% H = elem
men pentruksur
% (hy, hx) koordinat pusat piksel
[th, lh]=size(H);
;
[tf, lf]=size(F);
;
if nargin < 3
hotx = round(
(lh/2);
hoty = round(
(th/2);
end
G = zeros(tf, lf)
); % Nolkan semua pada hasil dilasi
% Memproses dilas
si
for baris = 1 : tf
t
for kolom = 1 : lf
terbesar = 0;
for p=1:t
th
for q=1:lh
q
y
ypos = baris - (p - hoty);
x
xpos = kolom - (q - hotx);
i (xpos >= 1) && (xpos <= lf) && ...
if .
(ypos >= 1) && (ypos <= tf)
nilai = F(ypos, xpos) + H(p, q);
if terbesar < nilai
terbesar = nilai;
end
e
end
end
end
% 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.
>> Img=imread('C:\Image\mandrill.png');
>>H = [
0 0 1 1 1 1 1 0 0
0 1 1 1 1 1 1 1 0
1 1 1 1 1 1 1 1 1
1 1 1 1 1 1 1 1 1
1 1 1 1 1 1 1 1 1
1 1 1 1 1 1 1 1 1
1 1 1 1 1 1 1 1 1
0 1 1 1 1 1 1 1 0
0 0 1 1 1 1 1 0 0 ];
>> G=gdilasi(Img, H); imshow(G)
(c) Dilasi dengan elemen struktur (d) Dilasi dengan elemen struktur
berukuran 3x3 dan seluruhnya berukuran 9x9 dan berbentuk bola
bernilai 1
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
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
% 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 = uint8(G);
Akhir Program
>> Img=imread('C:\Image\mandrill.png');
>>H = [
0 0 1 1 1 1 1 0 0
0 1 1 1 1 1 1 1 0
1 1 1 1 1 1 1 1 1
1 1 1 1 1 1 1 1 1
1 1 1 1 1 1 1 1 1
1 1 1 1 1 1 1 1 1
1 1 1 1 1 1 1 1 1
0 1 1 1 1 1 1 1 0
Morfologi untuk Pengolahan Citra 277
0 0 1 1 1 1 1 0 0 ];
>> G=gerosi(Img, H); imshow(G)
(c) Erosi dengan elemen struktur (d) Erosi dengan elemen struktur
berukuran 3x3 dan berukuran 9x9 dan berbentuk
seluruhnya bernilai 1 bola
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:
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).
(c) Erosi dengan elemen struktur (d) Hasil dilasi – hasil erosi
berukuran 3x3 dan seluruhnya
bernilai 1
Secara prinsip, operasi opening dan closing pada citra beraras keabuan
serupa pada citra biner. Definisinya sebagai berikut.
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.
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
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
>> Img=imread('C:\Image\rice.png');
>>H = [
0 0 1 1 1 1 1 0 0
0 1 1 1 1 1 1 1 0
1 1 1 1 1 1 1 1 1
1 1 1 1 1 1 1 1 1
1 1 1 1 1 1 1 1 1
1 1 1 1 1 1 1 1 1
1 1 1 1 1 1 1 1 1
0 1 1 1 1 1 1 1 0
0 0 1 1 1 1 1 0 0 ];
>> G=gopening(Img, H);
>> TH=Img-G;
>>imshow(TH)
dari citra asal. Sebagai gambaran, Gambar 7.50 memberikan contoh hasil konversi
ke citra biner menggunakan citra rice.png dan hasil konversi citra biner
menggunakan hasil transformasi Top-Hat.
(a) Citra rice.png (b) ) Konversi citra biner (c) Konversi citra biner
melalui rice.png secara melalui hasil Top-Hat
langsung
Perhatikan bahwa jumlah butir padi pada Gambar 7.50(c) bagian bawah lebih
banyak daripada pada Gambar 7.50(b).
TBH(A, B) = (A •g B) - A (7.35)
Secara prinsip, operasi ini memperbesar warna putih melalui dilasi, diikuti
dengan pengecilan warna putih melalui erosi dan kemudian dikurangi dengan citra
asal. Dilasi yang diikuti dengan erosi memberikan efek berupa objek-objek yang
berdekatan menjadi semakin dekat. Pengurangan oleh citra asal membuat
penghubung antarobjek menjadi hasil yang tersisa. Dengan kata lain, hasil yang
tersisa adalah piksel-piksel yang digunakan untuk mengisi “lubang”, atau
“penghubung objek”.
284 Pengolahan Citra, Teori dan Aplikasi
Latihan
0 0 0 0 0
0 1 1 0 0
0 1 1 1 0
0 0 1 0 0
0 1 0 0 0
0 0 0 0 0
0 1 1 0 0
0 1 1 1 0
0 0 1 0 0
0 1 0 0 0
Morfologi untuk Pengolahan Citra 285
1 1
Bagaimana hasilnya kalau hotspot justru terletak yang kanan? Lakukan secara
manual dan juga melalui komputasi dengan fungsi erosi.
B1 B2 B3 B4
0 0 0 1 0 0 1 1 0 1 1 1
1 1 1 1 1 1 1 1 0 1 1 0
1 1 1 1 1 1 1 1 0 1 0 0
B5 B6 B7 B8
1 1 1 1 1 1 0 1 1 0 0 1
1 1 1 0 1 1 0 1 1 0 1 1
0 0 0 0 0 1 0 1 1 1 1 1
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
Representasi
bentuk
Tepi objek pada citra biner dapat diperoleh melalui algoritma yang dibahas
oleh Davis (1990).Pemrosesan dilakukan dengan menggunakan 8-
ketetanggaan.Sebagai penjelas, lihatlah Gambar 8.2. Piksel P mempuyai 8
tetangga yang dinyatakan dengan P0 hingga P7. Adapun algoritma tertuang pada
Algoritma 8.1.
Operasi pada Citra Biner 289
P3 P2 P1
P4 P P0
P5 P6 P7
FOR q ← 2 to m-1
FOR p ← 2 to n-1
p0 ← f(q, p+1)
p1 ← f(q-1, p+1)
p2 ← f(q-1, p)
p3 ← f(q-1, p-1)
p4 ← f(q, p-1)
p5 ← f(q+1, p-1)
p6 ← f(q+1, p)
p7 ← f(q+1, p+1)
sigma ← p0 + p1 + p2 + p3 + p4 + p5 + p6 + p7
IF sigma = 8
g(q, p) ← 0
ELSE
g(q, p) ← f(q, p)
END-IF
END-FOR
END-FOR
290 Pengolahan Citra, Te
Teori dan Aplikasi
Algori
ritma 8.1 mengasumsikan bahwa semua piks
ksel pada kolom
pertam
ama, kolom, terakhir, baris pertama, dan baris
ris terakhir tidak
ada yang
ya bernilai 1. Apabila ada kemungkinan bah
ahwa piksel pada
posisi
si tersebut ada yang bernilai satu, perlu diben
entuk larik baru
yang berukuran
b (m+2) x (n+2), yang mencakup selu
eluruh nilai f dan
dengan
an bagian tepi larikberisi 0.
Perwujudan skrip
sk berdasarkan algoritma di depan dapat dil
ilihat berikut ini.
Program : tepibiner.m
function [G] = te
epibiner(F)
% TEPIBINER Bergu
una untuk mendapatkan tepi objek
% pada citra biner
[jum_baris, jum_k
kolom] = size(F);
G = zeros(jum_bar
ris, jum_kolom);
for q = 2 : jum_bbaris - 1
for p = 2 : jum_kolom
j - 1
p0 = F(q,, p+1);
p1 = F(q--1, p+1);
p2 = F(q--1, p);
p3 = F(q--1, p-1);
p4 = F(q,, p-1);
p5 = F(q++1, p-1);
p6 = F(q++1, p);
p7 = F(q++1, p+1);
sigma = p0
p + p1 + p2 + p3 + p4 + p5 + p6 + p7
7;
if sigma == 8
G(q, p) = 0;
else
G(q, p) = F(q, p);
end
end
end
Akhir Program
Operasi pada Citra Biner 291
>>Img = imread('C:\Image\daun_bin.png');
>> G = tepibiner(Img);
>>imshow(G)
>>
Jika objek berlubang, kontur bagian dalam juga akan dibuat oleh
fungsi tepibiner. Contoh:
0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
0 0 1 1 1 1 1 0 0 0 0 1 1 1 1 1 0 0
0 0 1 1 1 1 1 0 0 0 0 1 1 1 1 1 0 0
0 0 1 1 1 1 1 0 0 0 0 1 1 1 1 1 0 0
0 0 1 1 1 1 1 0 0 0 0 1 1 1 1 1 0 0
0 0 1 1 1 1 1 0 0 0 0 1 1 1 1 1 0 0
0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
Kontur Kontur
eksternal internal
(3,2), (4,2), (5,2), (6,2), (7,2), (8,3), (8,4), (8,5), (8,6), (8,7), (7,8), (6,8), (5,8),
(4,8), (3,8), (2,7), (2,6), (2,4), (2,3)
Proses untuk mendapatkan titik awal (yaitu (3,1)) dilakukan dengan melakukan
pemindaian seperti yang diilustrasikan dalam Gambar 8.5. Setelah titik awal
ditemukan, penelusuran dilakukan seperti terlihat pada Gambar 8.5(b).
Penelusuran kontur berakhir setelah bertemu kembali dengan titik awal.
1 2 3 4 5 6 7 8 9
1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
2 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
3 0 0 1 1 1 1 1 0 0 0 0 1 1 1 1 1 0 0
4 0 0 1 1 1 1 1 0 0 0 0 1 1 1 1 1 0 0
5 0 0 1 1 1 1 1 0 0 0 0 1 1 1 1 1 0 0
6 0 0 1 1 1 1 1 0 0 0 0 1 1 1 1 1 0 0
7 0 0 1 1 1 1 1 0 0 0 0 1 1 1 1 1 0 0
8 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
9 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
Kontur
Titik awal
eksternal
3 2 1 3 2 1
4 P 0 4 P 0
5 6 7 5 6 7
dcp dcp =
kebalikan(dcp)
0 4
1 5
2 6
3 7
4 0
5 1
6 2
Operasi pada Citra Biner 295
7 3
Algoritma untuk mendapatkan hasil seperti yang telah dibahas dapat dilihat
di bawah ini (Costa & Cesar, 2001).
pE←peroleh_piksel_berikutnya(pc, dE)
pI←peroleh_piksel_berikutnya(pc, dI)
dcn←dE
END-IF
END-FOR
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];
% Peroleh kontur
% 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];
Kontur(1,1) = y1;
Kontur(1,2) = x1;
break;
end
end
if selesai
break;
end
end
yberikut = y1 + YP(dcn+1);
xberikut = x1 + XP(dcn+1);
break;
end
end
% Naikkan indeks
indeks = indeks + 1;
end
Akhir Program
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
>>
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).
e. IF b = b0
Keluar dari WHILE
END-IF
END-WHILE
Algoritma di atas akan membuat indeks pertama dan indeks terakhir pada
konturberisi nilai yang sama yaitu b0. Jika dikehendaki untuk tidak
Operasi pada Citra Biner 301
menyertakan nilai yang sama pada bagian akhir larikkontur, elemen tersebut
tinggal diabaikan saja.
Untuk memahami proses kerja pada algoritma Moore, perhatikan Gambar
8.8. Gambar 8.8(a) menyatakan keadaan objek pada citra. Piksel yang bernilai 1
menyatakan bagian objek dan yang bernilai 0 adalah bagian latarbelakang. Pada
contoh tersebut, pelacakan akan dimulai pada posisi (2,2), yaitu piksel bagian
objek yang terletak paling kiri dan paling atas. Adapun titik pencarian untuk
piksel kedua dimulai di arah barat atau arah kiri piksel (2,2) tersebut.Pencarian
dilakukan searah jarum jam. Pada langkah pertama, diperoleh piksel pada posisi
(2,3). Pencarian berikutnya akan dimulai di posisi (1,3), yaitu yang ditandai
dengan bulatan. Pada pencarian kedua, piksel yang didapat, yaitu posisi (2,4),
dengan titik pencarian berikutnya dimulai di posisi (1,4). Pada pencarian ketiga,
piksel yang didapat adalah pada (2,5), dengan titik pencarian berikutnya dimulai
di posisi (1,5). Pada pencarian keempat, piksel yang didapat yaitu (3,5), dengan
titik pencarian berikutnya dimulai di posisi (3,6). Jika langkah seperti itu terus
diulang, suatu ketika akan diperoleh piksel yang sama dengan piksel yang pertama
kali menjadi bagian kontur. Saat itulah proses untuk melacak kontur diakhiri.
Semua langkah yang terjadi untuk contoh Gambar 8.8(a) ditunjukkan pada
Gambar 8.8(b).Penomoran arah pencarian ditunjukkan pada Gambar 8.8(d),
sedangkan hasil kontur diperlihatkan pada Gambar 8.8(c).
302 Pengolahan Citra, Te
Teori dan Aplikasi
1 2 3
1 2 3 4 5 6 4
1 0 0 0 0 0 0
2 0 1 1 1 1 0 1 1 1 1
3 0 0 1 1 1 0 1 1 1
4 0 1 1 1 0 0 1 1 1
5 0 0 1 1 1 0 1 1 1
6 0 0 0 0 0 0
Objek
(a
(a) (b)
Piksel objek paling
kiri dan paling atas
0 0 0 0 0 0 sebagai titik awal
pelacakan
0 1 1 1 1 0 2
3 1
0 0 1 0 1 0
0 1 0 1 0 0 4 0
Kontur
0 0 1 1 1 0 5 7
6
0 0 0 0 0 0
(c
(c) (d)
Gamb
bar 8.8Penjelasan pelacakan kontur dengan
an
menggunakan Algoritma Moore
Implementasi
si algoritma Moore ditunjukkan berikut ini.
Program : inbound_tracing.m
function [Kontur]
] = inbound_tracing(BW)
% INBOUND_TRACING
G Memperoleh kontur yang telah teruru
utkan
% dengan meng
ggunakan algoritma pelacakan kontur M
Moore
[jum_baris, jum_k
kolom] = size(BW);
b0.x = q;
selesai = true;
break;
end
end
if selesai
break;
end
end
c0 = 4; % Arah barat
c1 = sebelum(c0);
break;
else
c0 = berikut(c0);
end
end
Kontur=[];
Kontur(1, 1) = b0.y;
Kontur(1, 2) = b0.x;
Kontur(2, 1) = b1.y;
Kontur(2, 2) = b1.x;
%Kontur
b = b1;
c = c1;
c = sebelum(c);
n = n + 1;
Kontur(n, 1) = b.y;
Kontur(n, 2) = b.x;
break;
else
c = berikut(c);
end
304 Pengolahan Citra, Teori dan Aplikasi
end
return
if s < 2
s = 2;
elseif s < 4
s = 4;
elseif s < 6
s = 6;
else
s = 0;
end
Akhir Program
Operasi pada Citra Biner 305
>> D = [ 0 0 0 0 0 0
0 1 1 1 1 0
0 0 1 1 1 0
0 1 1 1 0 0
0 0 1 1 1 0
0 0 0 0 0 0 ];
>> P = inbound_tracing(D)
P =
2 2
2 3
2 4
2 5
3 5
4 4
5 5
5 4
5 3
4 2
3 3
2 2
>>
8.6Rantai Kode
3 2 1
4 0
5 6 7
= 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.
Program : chain_code.m
% Kode 1 2 3 4 5 6 7 8 9
Kode = ['3', '2', '1', '4', '0', '0', '5', '6', '7' ];
xawal = U(1,2);
yawal = U(1,1);
kode_rantai = '';
for p=2: length(U)
deltay = U(p, 1) - U(p-1, 1);
deltax = U(p, 2) - U(p-1, 2);
indeks = 3 * deltay + deltax + 5;
kode_rantai = strcat(kode_rantai, Kode(indeks));
end
Akhir Program
01221121212221212
2112122122121212121211212122121212222
21222222222222
22222232222222222
2100001
x =131
y =8
>>
Fungsishow_co
ontourberikut digunakan untuk menguraika
ikan kembali kode
rantai menjadi koordi
dinat piksel dan kemudian menggambarkan ko
konturnya.
Program : show_contour.m
function show_con
ntour(x, y, rantai_kode)
% SHOW_CONTOUR Co
ontoh untuk menggambar kontur
% melalui ran
ntai kode
% Masukan fun
ngsi ini adalah hasil
% fungsi chai
in_code
% 0 1 2 3 4 5 6 7
Dx = [ +1, +1, 0,
0 -1, -1, -1, 0, +1];
Dy = [ 0, -1, -11, -1, 0, +1, +1, +1];
U = zeros(1,2);
U(1,1) = y;
U(1,2) = x;
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
>>show_contour(x,y,kode)
>>
8.7Perimeter
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
U = inbound_traci
ing(BW);
hasil = length(U)
) - 1;
Akhir Program
Operasi pada Citra Biner 311
>>Img = imread('C:\Image\daun_bin.png');
>>perim1(Img)
ans =1409
>>
1 1 1 1 1
1 1 1
1 1
1 1
Jarak 1 Jarak √2
= + √2 (8.2)
312 Pengolahan Citra, Te
Teori dan Aplikasi
dengan Ne menyatak
takan jumlah kode genap dan No menyataka
kan jumlah kode
ganjil. Contoh berikut
ut menunjukkan penggunaan cara seperti itu.
Program : perim2.m
U = inbound_traci
ing(BW);
kode_rantai = cha
ain_code(U);
jum_genap = 0;
jum_ganjil = 0;
for p=1: length(kkode_rantai)
kode = kode_rrantai(p);
if (kode == '0')
' || (kode == '2') || (kode == '4'
') || ...
(kode == '6')
' || (kode == '8')
jum_genap
p = jum_genap + 1;
else
jum_ganji
il = jum_ganjil + 1;
end
end
hasil = jum_genap
p + jum_ganjil * sqrt(2);
Akhir Program
Contoh:
>>Daun = imr
read('C:\Image\daun_bin.png');
>>perim2(Dau
un)
ans = 1605.8
8
>>
Operasi pada Citra Biner
Bi 313
8.8Luas
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
Program : luas.m
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
>>
1 2 3 4 5 6 7 8 9 10
9
8
7
6
5
4
3
2
1
Berikut adalah
lah contoh skrip yang digunakan untuk melaku
kukan perhitungan
dengan cara di depan..
Program : luas2.m
kode_rantai = cha
ain_code(U);
hasil = 0;
for p=1: length(k
kode_rantai)
kode = kode_r
rantai(p);
y = tinggi + 1 -U(p);
switch kode
case '0'
hasill = hasil + y;
case '1'
hasill = hasil + y + 0.5;
case '3'
hasill = hasil - y - 0.5;
case '4'
hasill = hasil - y;
case '5'
hasill = hasil - y + 0.5;
case {'2'','6'}
hasill = hasil ;
case '7'
hasill = hasil + y - 0.5;
end
end
Akhir Program
Operasi pada Citra Biner 317
>> 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.
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
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
y1 = U(piksel1, 1);
x1 = U(piksel1, 2);
y2 = U(piksel2, 1);
x2 = U(piksel2, 2);
diameter = jarak_maks;
Akhir Program
>> X=[x1,x2]
X =
144 131
>> Y=[y1,y2];
>>line(X,Y, 'Color','r')
>>
( )
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
Program : peroleh_lebar.m
322 Pengolahan Citra, Teori dan Aplikasi
U = get_contour(BW);
n = length(U);
jarak_maks = 0;
piksel1 = 0;
piksel2 = 0;
for p=1 : n-1
for q=p+1 : n
jarak = sqrt((U(p,1)-U(q,1)) ^ 2 + ...
(U(p,2)-U(q,2)) ^ 2);
if jarak > jarak_maks
jarak_maks = jarak;
piksel1 = p;
piksel2 = q;
end
end
end
y1 = U(piksel1, 1);
x1 = U(piksel1, 2);
y2 = U(piksel2, 1);
x2 = U(piksel2, 2);
panjang = jarak_maks;
maks = 0;
posx3 = -1;
posx4 = -1;
posy3 = -1;
posy4 = -1;
for p=1:n-1
for q=p+1:n
x3 = U(p, 2); y3 = U(p, 1);
x4 = U(q, 2); y4 = U(q, 1);
pembagi = (x4 - x3);
if pembagi == 0
continue;
end;
grad3 = (y4-y3)/(x4-x3);
Operasi pada Citra Biner 323
posx3 = x3;
posx4 = x4;
posy3 = y3;
posy4 = y4;
end
end
end
end
else
if (y1 == y2)
% kalau kedua titik pada baris yang sama
grad1 = 0;
grad2 = inf;
for p=1:n-1
for q=p+1:n
x3 = U(p,2); y3 = U(p, 1);
x4 = U(q,2); y4 = U(q, 1);
deltax = (x4 - x3);
if (deltax < 0.01) || (deltax > 0.01)
continue;
end;
jarak = sqrt((x3-x4)^2+(y3-y4)^2);
if jarak > maks
maks = jarak;
posx3 = x3;
posx4 = x4;
posy3 = y3;
posy4 = y4;
end
end
end
else
% kalau kedua titik pada kolom yang berbeda
grad1 = inf;
grad2 = 0;
for p=1:n-1
for q=p+1:n
x3 = U(p,2); y3 = U(p, 1);
x4 = U(q,2); y4 = U(q, 1);
deltay = (y3 - y4);
if (deltay < 1.0) || (deltay > 1.0)
continue;
end
jarak = sqrt((x4-x3)^2+(y4-y3)^2);
if jarak > maks
maks = jarak;
posx3 = x3;
324 Pengolahan Citra, Teori dan Aplikasi
posx4 = x4;
posy3 = y3;
posy4 = y4;
end
end
end
end
end
x3 = posx3;
y3 = posy3;
x4 = posx4;
y4 = posy4;
lebar = maks;
Akhir Program
>>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')
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.
/(0)
()* + (,) = 4.
1 (0)
(8.5)
326 Pengolahan Citra, Teori dan Aplikasi
45/
23 = 1 −
1
(8.6)
8 9&%
67 = :&;<&;$ (8.7)
denganpanjang adalah panjang objek dan lebar adalah lebar objek. Fitur
ini terkadang disebut sebagai rasio aspek (Wu, dkk., 2007). Dengan
menggunakan fitur ini, objek yang gemuk dan yang kurus dapat dibedakan
(lihat Gambar 8.17).
Operasi pada Citra Biner 327
Program : peroleh_kebulatan.m
p = perim2(BW);
a = luas2(BW);
rasio = 4 * pi * a / (p^2);
Akhir Program
>> Daun1=imread('C:\Image\adv.png');
>>peroleh_kebulatan(Daun1)
ans =0.28708
>> Daun2=imread('C:\Image\aw.png');
>>peroleh_kebulatan(Daun2)
ans =0.66130
>>
Program : peroleh_kerampingan.m
Akhir Program
>> Daun1=imread('C:\Image\adv.png');
>>peroleh_kerampingan(Daun1)
ans =0.14605
>> Daun2=imread('C:\Image\aw.png');
>>peroleh_kerampingan(Daun2)
ans =0.76921
>>
Masukan:
• f (m,n): Citra masukan berukuran m baris dan n kolom
Keluaran:
• pusat_x dan pusat_y
1. pusat_x← 0
2. pusat_y← 0
3. luas ← 0
4. FOR q = 1 to m
FOR p = 1 to n
IF F(q, p) = 1
luas ←luas + 1
pusat_x←pusat_x + p
pusat_y←pusat_y + q
END-IF
END-FOR
END-FOR
5. pusat_x←pusat_x / luas
330 Pengolahan Citra, Teori dan Aplikasi
6. pusat_y←pusat_y / luas
Program : centroid.m
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
Akhir Program
>> 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
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
Contoh program
ram yang memanfaatkan beberapa fitur yang
ng memanfaatkan
pusat massa dapat dili
ilihat di bawah ini.
Program : pusat.m
function [] = puusat(BW)
% PUSAT Contoh un
ntuk menguji beberapa fitur yang
% menggunakan pusat massa. BW = Citra biner
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;
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
>> 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
>>
Untuk bentuk yang tidak teratur (atau biasa disebut bentuk tidak kompak),
Nixon dan Aguado (2002) menyarankan penggunaan fitur dispersi.Sebagai
contoh, terdapat tiga bentuk seperti terlihat pada Gambar 8.19.Penggunaan
kekompakan bentuk untuk objek pada Gambar 8.19(c) sebagai diskriminator tidak
tepat.Mereka menyarankan penggunaan dispersi pada bentuk yang tidak teratur,
karena dispersi sangat tepat untuk bentuk seperti itu.
334 Pengolahan Citra, Te
Teori dan Aplikasi
(b) Teratu
atur (c) Teratur (a) Tidak
k teratur
Gambar 8.19
8 Kekompakan objek pada berbagai beentuk
Berdasarkan definisi
d Chen di tahun 1995 (Nixon dann Aguado, 2002),
dispersi (atau juga dis
disebut ketidakteraturan) diukur sebagai perban
andingan panjang
chord utama terhadap
dap area objek. Bila dinyatakan dalam rumus
us berupa seperti
berikut:
G HIJ ((O(!A !̅ ) P( A L) )
E(F) =
Q(R)
(8.8)
HIJ ((O(!A !̅ ) P( A L) )
E,(F) =
HMN ((O(!A !̅ ) P( A L) )
(8.9)
Fungsi bernam
ama dispersi berikut dapat digunakan unt
ntuk memperoleh
fitur kedua dispersi di depan.
Program : dispersi.m
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;
a = perim2(BW);
d1 = pi * terbesar / a;
d2 = terbesar / terkecil;
Akhir Program
0 7 * * + ( *
S( , ) = T 1 7 * * + 7 Y (8.10)
2,3, … * ( * W(X
Objek yang diberi label akan terlihat jelas jika nilai nol dihilangkan. Hal seperti
itu terlihat pada Gambar 8.22.
1. g ← f
2. label ← 2
3. FOR baris ← 1 TO M
4. FOR kolom ← 1 TO N
5. IF g(baris, kolom) = 1
6. banjiri(g, baris, kolom, label)
7. label ←label + 1
8. END-IF
9. END-FOR
10. END-FOR
Operasi pada Citra Biner 339
11. RETURN g
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
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
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
Sebagai con
ontoh, akan diberikan implementasi aalgoritma yang
menggunakan pendek
ekatan breadth-first. Kodenya seperti berikut.
Program : labeli.m
function G = labe
eli(F)
% Memberi label pada
p area di dalam citra biner F
% dengan meng
ggunakan 4-ketetanggan
% Hasil berupa ci
itra G
Maks_antre = 50000;
Antrean = cell(Maks_antre,1);
depan = 1;
belakang = 1;
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 = Antrean{depan};
if depan == 50000
depan = 1;
else
depan = depan + 1;
end
x = simpul.x; y = simpul.y;
belakang = 1;
end
else
if belakang + 1 == depan
error('Kapasitas antrian penuh');
else
Antrean{belakang} = simpul;
belakang = belakang + 1;
end
end
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)
Latihan
1. Jelaskan bahwa fitur suatu objek dapat diperoleh melalui citra biner.
2. Apa yang dimaksud dengan kontur?
3. Pada CD yang tersedia bersama buku ini terdapat citra gambar bernama fork-
3.gif. Kenakan fungsi tepibiner terhadap citra tersebut untuk memperoleh
tepinya. Perlu diperhatikan, citra tersebut bukan berupa citra biner. Jika
perintah Anda benar, Anda akan memperoleh hasil seperti berikut:
0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0
0 0 1 1 1 0 0 0 0
0 0 1 1 1 1 1 0 0
0 0 0 1 1 1 0 0 0
0 0 1 1 1 1 0 0 0
0 0 1 1 0 1 1 0 0
0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0
Operasi pada Citra Biner 347
12. Pendekatan yang lain untuk menghitung luas suatu objek dilakukan melalui
kode rantai dengan ketentuan seperti berikut.
0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0
0 0 1 1 1 0 0 0 0
0 0 1 1 1 1 1 0 0
0 0 0 1 1 1 1 0 0
0 0 1 1 1 1 1 0 0
0 0 1 1 0 1 0 0 0
0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0
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.
yaitu merah (R), hijau (G), dan biru (B). Setiap piksel dibentuk oleh ketiga
komponen tersebut. Model RGB biasa disajikan dalam bentuk kubus tiga dimensi,
dengan warna merah, hijau, dan biru berada pada pojok sumbu (Gambar 9.1).
Warna hitam berada pada titik asal dan warna putih berada di ujung kubus yang
berseberangan. Gambar 9.2 memperlihatkan kubus warna secara nyata dengan
resolusi 24 bit. Perlu diketahui, dengan menggunakan 24 bit, jumlah warna
mencapai 16.777.216.
(0,0,1)
Biru Cyan
Putih
Magenta
(0,1,0)
Aras
keabuan
G
Hitam
Hijau
Merah
Kuning
(1,0,0)
R
Biru
Magenta
Cyan
Hijau
Merah
Kuning
1
= 1 −
1
(9.1)
Dalam hal ini, R, G, dan B berupa nilai warna yang telah dinormalisasi, dengan
jangkauan [0, 1].
Pada CMY, warna hitam diperoleh jika C, M, dan Y bernilai sama. Namun,
pada aplikasi printer, warna hitam ditambahkan tersendiri sehingga membentuk
CMYK, dengan K menyatakan warna hitam. Alasannya, kalau ada warna hitam,
warna dapat diambilkan secara langsung dari tinta hitam, tanpa perlu mencampur
dengan warna lain. Lagipula, tinta warna hitam lebih murah daripada tinta
berwarna dan paling sering digunakan terutama untuk teks.
Kuning
Merah Kuning Hijau
(a) Penjumlahan warna pada sistem RGB (b) Pengurangan warna pada sistem CMY
K = min(C, M, Y) (9.2)
C’ = C - K (9.3)
M’ = M - K (9.4)
Y’ = Y - K (9.5)
Dengan pendekatan seperti itu, salah satu dari C’, M’, atau Y’ akan bernilai 0.
Namun, ada pula yang menggunakan rumus seperti berikut (Dietrich, 2003):
K = min(C, M, Y) (9.6)
C = (C – K)/(1-K) (9.7)
M = (M – K) (1-K) (9.8)
Y = (Y – K) (1-K) (9.9)
Program : RGBkeCMY.m
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
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:
>>Img=imread('C:\Image\lapangan.png');
>> [C,M,Y,K]=RGBkeCMY(Img(:,:,1),Img(:,:,2),Img(:,:,3));
>>
Pengolahan Citra Ber
erwarna 355
Program : CMYkeRGB.m
% Normalisasi CMY
Y ke [0, 1]
C = double(C);
M = double(M);
Y = double(Y);
K = double(K);
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
Akhir Program
Contoh:
>> [R,G,B]=C
CMYkeRGB(64,20,65,40)
R =171
G =215
B =170
>>
0,299
299 0,587 0,114
= 0,596
596 −0,274 −0,322
0,211
211 −0,523 0,312
(9.2)
000 0,956
1,000 0,621
Adapun konve
versi RGB dari YIQ sebagai berikut:
= 1,000
000 −0,272 −0,647
1,000
000 −1,106 1,703
(9.3)
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);
Akhir Program
>> [Y,I,Q]=RGBk
keYIQ(171, 20, 250)
Y =91
I =16
Q =104
>>
Program : YIQkeRGB.m
function [R, G, B]
B = YIQkeRGB(Y,I,Q)
% YIQkeRGB diguna
akan untuk mengonversi YIQ ke RGB
% Normalisasi YIQ
Q ke [0, 1]
Y = double(Y);
I = double(I);
Q = double(Q);
Y = double(Y) / 255;
I = double(I) / 255;
Q = double(Q) / 255;
end
Akhir Program
= + 1.40200
= − 0,34414 − 0,71414
(9.7)
= + 1,77200
(9.8)
(9.9)
Pengolahan Citra Ber
erwarna 359
Program : RGBkeYCB.m
% Normalisasi RGB
B ke [0, 1]
R = double(R);
G = double(G);
B = double(B);
Y = Y * 255;
Cb = Cb * 255;
Cr = Cr * 255;
Akhir Program
>> [Y,Cb,C
Cr]=RGBkeYCB(9, 16, 250)
Y =40.5830
0
Cb = 118.1
1815
Cr =-22.52
265
>>
Program : YCBkeRGB.m
function [R, G, B]
B = YCBkeRGB(Y,Cb,Cr)
% YCBkeRGB diguna
akan untuk mengonversi YCbCr ke RGB
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
>>
Model HSV, yang pertama kali diperkenalkan A. R. Smith pada tahun 1978,
ditunjukkan pada Gambar 9.4. Untuk mendapatkan nilai H, S, V berdasarkan R,
G, dan B, terdapat beberapa cara. Cara yang tersederhana (Acharya& Ray, 2005)
adalah seperti berikut.
= tan !((%$))((%&)*
"($%&)
(9.10)
+ = 1−
,-. ((,$,&)
/
(9.11)
0=
()$)&
"
(9.12)
Namun, cara ini membuat hue tidak terdefinisikan kalau S bernilai nol. Cara
kedua terdapat pada Acharya& Ray (2005). Rumus-rumus yang digunakan
sebagai berikut:
1= , 2 = ,3=
( $ &
(()$)&) (()$)&) (()$)&)
(9.13)
362 Pengolahan Citra Teori dan
an Aplikasi
0 = max (1, 2, 3)
3 (9.14)
0, jika V = 0
+=6 G
1− , 0 F 0
,-.(( ,7 7, ) (9.15)
/
0, HIJK + = 0
;
, HIJK 0 = 1
<=∗((7% )
9
G
?∗/
?
=
: 60 ∗ @@2 + ?∗/ L , HIJK 0 = 2
% (9.16)
9
860 ∗ @@4 + ?∗/ L , HIJK 0 = 3
%7
= H + 360 jika H
360 M0 (9.17)
Implementasi ber
erikut didasarkan pada rumus-rumus di atas.
Program : RGBkeHSV.m
% Normalisasi RGB
B ke [0, 1]
R = double(R);
G = double(G);
B = double(B);
if maxrgbb == 0
S(m,n
n) = 0;
else
S(m,n
n) = 1 - minrgb / maxrgb;
end
if S(m,n)) == 0
H(m,n
n) = 0;
else
Pengolahan Citra Ber
erwarna 363
SV = S(m,n) * V(m,n);
if R((m,n) == maxrgb
% Di antara kuning dan magenta
H
H(m,n) = (G(m,n)-B(m,n)) / SV;
elseiif G(m,n) == maxrgb
% Di antara cyan dan kuning
H
H(m,n) = 2 + (B(m,n)-R(m,n)) / SV;
else
% Di antara magenta dan cyan
H
H(m,n) = 4 + (R(m,n)-G(m,n)) / SV;
end
H(m,n
n) = H(m,n) * 60;
if H(
(m,n) < 0
H
H(m,n) = H(m,n)+360;
end
end
end
end
Akhir Program
Program : HSVkeRGB.m
G(m,n) = V(m,n);
B(m,n) = V(m,n);
else
% S != 0
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
V =120
>> [R,G,B]=HSVkeRGB(64, 85, 120)
R = 100
G =120
B =80
>>
Gambar 9.5 memperlihatkan ruang warna HSI. Konversi dari RGB keHSI
dilakukan melalui rumus berikut (Gonzalez & Woods, 2002):
0, HIJK ≤ G
=N
360 − P, HIJK F
(9.18)
Pada rumus di atas, H menyatakan hue. Adapunθ diperoleh melalui rumus berikut:
+ = 1− Xmin ( , , )Y
"
(()$)&)
(9.20)
= "( + + )
T
(9.21)
= (1 − +) (9.22)
= !1 + ]^_ (<=a %`)*
? ]^_ `
(9.23)
= 3 − ( + )) (9.24)
= − 120
= (1 − +)
(9.25)
(9.26)
= !1 + *
? ]^_ `
]^_ (<=a %`)
(9.27)
= 3 − ( + )) (9.28)
= − 240
= (1 − +)
(9.29)
(9.30)
= !1 + *
? ]^_ `
]^_ (<=a %`)
(9.31)
= 3 − ( + )) (9.32)
Perlu diketahui, mengingat nilai pada HSI berada di dalam jangkauan [0,
1], maka untuk mendapatkan nilai H yang berkisar antara 0o-360o, H perlu
dikalikan terlebih dulu dengan 360. Dengan demikian, jangkauan H berada dalam
[0, 360].
Contoh berikut merupakan perwujudan fungsi yang ditujukan untuk
melakukan konversi dari RGB ke HSI.
Pengolahan Citra Ber
erwarna 367
Program : RGBkeHSI.m
% Normalisasi RGB
B ke [0, 1]
R = double(R);
G = double(G);
B = double(B);
y = (R(m,n)-G(m,n)+R(m,n)-B(m,n))/2;
(
x = (R(m,n)-G(m,n))*(R(m,n)-G(m,n))
( + ...
.
(
(R(m,n)-B(m,n)) * (G(m,n)-B(m,n));
x = sqrt(x);
s
sudutt = acos(y/x) * 180/pi;
if B((m,n) > G(m,n)
H
H(m, n) = 360 - sudut;
else
H
H(m,n) = sudut;
end
end
end
end
Akhir Program
368 Pengolahan Citra Teori dan
an Aplikasi
Program : HSIkeRGB.m
% Normalisasi HSI
I ke [0, 1]
H = double(H);
S = double(S);
I = double(I);
skala
a = 3 * I(m,n);
if H(
(m,n) <= 120
s
sudut1 = H(m,n) * 0.017453292;
sudut2 = (60 - H(
(m,n)) * 0.017453292;
B
B(m,n) = (1 - S(m,n)) / 3;
R
R(m,n) = (1 + (S(m,n) * cos(sudut1)/.
...
cos(sudut2))) / 3;
G
G(m,n) = 1 - R(m,n) - B(m,n);
B(m,n) = B(m,n) *
B skala;
R
R(m,n) = R(m,n) * skala;
G
G(m,n) = G(m,n) * skala;
elsei
if H(m,n) <= 240
H
H(m,n) = H(m,n) - 120;
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);
sudut1 =
H(m,n) * 0.017453292;
sudut2 =
(60 - H(m,n)) * 0.017453292;
G(m,n) =
(1 - S(m,n)) / 3;
B(m,n) =
(1 + (S(m,n) * cos(sudut1)/...
cos(sudut2))) / 3;
R(m,n) = 1 - G(m,n) - B(m,n);
end
end
end
end
Akhir Program
Putih
Hijau Kuning
Merah
Hijau
Magenta
Hitam
H
S
bcd = min ( , , )
bef = max ( , , )
(9.33)
g=
(9.34)
hijk )hilm
W
0, =
(9.35)
;
bcd bef
, g ≤ 0,5
hijk %hilm
+= hijk )hilm G
:
8W%(hijk )hnop ) , g F 0,5
hijk %hilm
(9.36)
= { 60
|IJK M 0 }KJK
}KJK = + 360
(9.38)
(9.39)
Program : RGBkeHSL.m
% Normalisasi RGB
B
R = double(R);
G = double(G);
B = double(B);
if maxrgbb == minrgb
S(m,n
n) = 0;
H(m,n
n) = 0; % Cek microsoft
else
L(m,n
n) = (minrgb + maxrgb) / 2;
d = (maxrgb
( - minrgb);
% Tenntukan hue
if R((m,n) == maxrgb
% Warna antara kuning dan magenta
H
H(m,n) = (G(m,n)-B(m,n))/d;
elseiif G(m,n) == maxrgb
% Warna antara cyan dan kuning
H
H(m,n) = 2+(B(m,n)-R(m,n))/d;
else
372 Pengolahan Citra Teori dan
an Aplikasi
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
Akhir Program
Program : HSLkeRGB.m
% Normalisasi HSL
L
H = double(H);
S = double(S);
L = double(L);
if v == 0
R(m,n
n) = 0;
Pengolahan Citra Berwarna 373
G(m,n) = 0;
B(m,n) = 0;
else
terkecil = 2 * L(m,n) - v;
sv = (v - terkecil) / v;
if H(m,n) == 360
H(m,n) = 0;
else
H(m,n) = H(m,n) / 60;
end
Akhir Program
Transformasi
si RGB ke CIELAB dimulai dengan melakuk
ukan perhitungan
sebagai berikut:
~ = 0,412453
412453 + 0,357580 + 0,180423
= 0,212671
212671 + 0,715160 + 0,072169
(9.40)
• = 0,019334
019334 + 0,119193 + 0,950227
(9.41)
(9.42)
g∗ = 116€ ! * − 16
•
•
(9.43)
m
K ∗ = 500 @@€ !ƒ * − € !• *L
ƒ •
(9.44)
m m
3 ∗ = 200 @@€ ! * − € ! *L
• „
•m „m
(9.45)
‚ … , HIJK ‚ F 0,008856G
[
€(‚) = 6
7,787
787‚ + 16/116, vwxvJ zKw2 yKIw
(9.46)
Program : RGBkeLab.m
R = double(R);
G = double(G);
B = double(B);
% RGB to XYZ
Koef = [0.412453 0.357580 0.180423;
0.212671 0.715160 0.072169;
0.019334 0.119193 0.950227];
return
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
>>
Program : LabkeRGB.m
function [R, G, B]
B = LabkeRGB(L, a, b)
% LabkeRGB Mengon
nversi CIELAB ke RGB
Xq(m, n) = peroleh_q(fqx);
Yq(m, n) = peroleh_q(fqy);
Zq(m, n) = peroleh_q(fqz);
end
end
% Hitung X, Y, da
an Z
XYZ(1,:) = Xq * 0.950456;
0
XYZ(2,:) = Yq;
XYZ(3,:) = Zq * 1.088754;
1
% XYZ to RGB
Koef = [ 3.240479
9 -1.537150 -0.498535;
-0.969256
6 1.875992 0.041556;
0.055648
8 -0.204043 1.057311];
RGB = Koef * XYZ;
;
R = uint8(RGB(1, :) * 255);
G = uint8(RGB(2, :) * 255);
B = uint8(RGB(3, :) * 255);
return
function q = pero
oleh_q(fq)
% Peroleh nilai q
378 Pengolahan Citra Teori dan Aplikasi
q = fq ^ 3;
if q > 0.008856
hasil = q;
else
q = (fq - 16 / 116.0) / 7.787;
end
Akhir Program
1 M N
µ= ∑∑ Pij
MN i =1 j =1
(9.47)
M N
1
σ=
MN
∑∑ ( P
i =1 j =1
ij − µ )2 (9.48)
M N
∑ ∑ (P
i =1 j =1
ij − µ )3
θ= (9.49)
MNσ 3
M N
∑∑ ( P
i =1 j =1
ij − µ )4
γ= −3 (9.50)
MNσ 4
Definisi di atas membuat distribusi normal standar memiliki kurtosis nol. Nilai
positif mengindikasikan bahwa distribusi bersifat lancip dan nilai negatif
menyatakan distribusi yang datar (lihat Gambar 9.9). Perlu diketahui, pada
Persamaan 9.47 hingga 9.50, M adalah tinggi citra, N menyatakan lebar citra, dan
Pij adalah nilai warna pada baris i dan kolom j.
Program : statwarna.m
RGB = double(imre
ead(berkas));
[m,n,d] = size(RG
GB);
if (d ~= 3)
disp('Citra harus
h berupa citra berwarna');
return;
end
% Hitung rerata
mean_r = jum_r / jum_piksel;
mean_g = jum_g / jum_piksel;
mean_b = jum_b / jum_piksel;
% Inisialisasi pe
erhitungan deviasi standar,
% skewness, da
an kurtosis
jum_dev_r = 0;
jum_dev_g = 0;
jum_dev_b = 0;
jum_skew_r = 0;
jum_skew_g = 0;
jum_skew_b = 0;
jum_cur_r = 0;
jum_cur_g = 0;
jum_cur_b = 0;
% Hitung skewness
skew_r = jum_skew_r/ (jum_piksel * (dev_r^3));
skew_g = jum_skew_g/ (jum_piksel * (dev_g^3));
skew_b = jum_skew_b/ (jum_piksel * (dev_b^3));
% Hitung kurtosis
cur_r = jum_cur_r / (jum_piksel * (dev_r^4)) - 3;
cur_g = jum_cur_g / (jum_piksel * (dev_g^4)) - 3;
cur_b = jum_cur_b / (jum_piksel * (dev_b^4)) - 3;
% Tentukan keluaran
stat.mean_r = mean_r;
stat.mean_g = mean_g;
stat.mean_b = mean_b;
stat.dev_r = dev_r;
stat.dev_g = dev_g;
stat.dev_b = dev_b;
stat.skew_r = skew_r;
stat.skew_g = skew_g;
stat.skew_b = skew_b;
stat.cur_r = cur_r;
stat.cur_g = cur_g;
stat.cur_b = cur_b;
Akhir Program
>> S = statwarna('C:\Image\lapangan.png')
S =
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 =
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
>>
berwarna. Untuk melihat efek kecerahan dan kontras, cobalah beberapa perintah
berikut.
>>Img=imread('C:\Image\inns.png');
>>imshow(Img)
>>
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);
>>
K(:,:,1) = 2 * K(:,:,1);
membuat hanya komponen R saja yang dinaikkan dua kali. hasilnya ditunjukkan
pada Gambar 9.10(d).
384 Pengolahan Citra Teori dan
an Aplikasi
(a) Cit
itra inns.png (b) Efek pencerahan melalu
alui
C = Img + 30;
Gambar 9.10Penc
ncerahan dan peningkatan kontras pada cit
citra berwarna
Program : jumwarna.m
function [jumlah]
] = jumwarna(berkas)
% JUMWARNA Menghi
itung jumlah warna pada citra RGB
% Masukan:
% berkas berup
pa citra warna
% Nilai balik ber
rupa jumlah warna
RGB = double(imre
ead(berkas));
Pengolahan Citra Berwarna 385
[m,n,d] = size(RGB);
if (d ~= 3)
disp('Citra harus berupa citra berwarna');
return;
end
RGB = double(RGB);
Data = zeros(1, m * n); % Array kosong
jum = 0;
for i=1:m
for j=1:n
jum = jum + 1;
r = RGB(i,j,1);
g = RGB(i,j,2);
b = RGB(i,j,3);
jumlah = jwarna;
Akhir Program
Pada Octave dan MATLAB, penggeseran bit dilakukan melalui fungsi bitshift.
386 Pengolahan Citra Teori dan Aplikasi
Bit
23 16 15 8 7 0
R G B
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
>>
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)
0 x ≤ a,
( x − a ) /(b − a )
a < x ≤ b,
Λ ( x; a , b , c ) = (9.51)
(c − x ) /(c − b) b < x ≤ c,
0 x>c
1 1
0 0
a b c a b c d
0 x ≤ a,
( x − a) /(b − a ) a < x ≤ b,
Π ( x; a, b, c) = 1 b < x ≤ c, (9.52)
(c − x) /(c − b) c < x ≤ d,
0 x>d
Citra berwarna
Citra biner
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
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_trapesium(a,b,c,d,h)
ℎIHKv = ∑•%T
cŒ= ∑ŠŒ= €_21‰‰w( cŠ , +cŠ , 0cŠ )
‹%T
}‰1Kℎ = ∑•%T
cŒ= ∑ŠŒ= €_1‰Ž( cŠ , +cŠ , 0cŠ )
‹%T
JvwIw2 = ∑•%T
cŒ= ∑ŠŒ= €_z‰yyR•( cŠ , +cŠ , 0cŠ )
(9.53)
‹%T
dst.
390 Pengolahan Citra Teori dan
an Aplikasi
•K1wK ŽR}wIwK
ŽR}wIwKw = max(hijau, merah, kuning)
‚v‰1z(•K1wK
•K1wK): •K1wK ŽR}wIwKw = warna
Program : cariwarna.m
if (strcmp(warna,,'merah')) || ...
(strcmp(warna,
,'biru')) || ...
(strcmp(warna,
,'cyan')) || ...
(strcmp(warna,
,'hijau')) || ...
(strcmp(warna,
,'magenta')) || ...
(strcmp(warna,
,'jingga')) || ...
(strcmp(warna,
,'merah muda')) || ...
(strcmp(warna,
,'ungu')) || ...
(strcmp(warna,
,'putih')) || ...
(strcmp(warna,
,'hitam')) || ...
(strcmp(warna,
,'abu-abu')) || ...
(strcmp(warna,
,'kuning'))
disp('Tunggu..
..');
else
disp(['Untuk sementara warna yang bisa dipakai: '
'...
'merah,
, biru, cyan, hijau, magenta, jingga,
, ' ...
'merah muda, ungu, ' ...
'putih hitam abu-abu kuning']);
return;
end
berkas = dir(lokd
dir);
jum=0;
indeks=0;
for i=3:length(be
erkas)
Pengolahan Citra Berwarna 391
% 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;
mem_val = f_red(h,s,v);
if mem_val > 0
anggota_merah = anggota_merah + mem_val;
end
mem_val = f_blue(h,s,v);
if mem_val > 0
anggota_biru = anggota_biru + mem_val;
end
mem_val = f_cyan(h,s,v);
if mem_val > 0
anggota_cyan = anggota_cyan + mem_val;
end
mem_val = f_green(h,s,v);
if mem_val > 0
anggota_hijau = anggota_hijau + mem_val;
392 Pengolahan Citra Teori dan Aplikasi
end
mem_val = f_magenta(h,s,v);
if mem_val > 0
anggota_magenta = anggota_magenta + mem_val;
end
mem_val = f_orange(h,s,v);
if mem_val > 0
anggota_oranye = anggota_oranye + mem_val;
end
mem_val = f_yellow(h,s,v);
if mem_val > 0
anggota_kuning = anggota_kuning + mem_val;
end
mem_val = f_pink(h,s,v);
if mem_val > 0
anggota_pink = anggota_pink + mem_val;
end
mem_val = f_purple(h,s,v);
if mem_val > 0
anggota_ungu = anggota_ungu + mem_val;
end
mem_val = f_white(h,s,v);
if mem_val > 0
anggota_putih = anggota_putih + mem_val;
end
mem_val = f_black(h,s,v);
if mem_val > 0
anggota_hitam = anggota_hitam + mem_val;
end
mem_val = f_gray(h,s,v);
if mem_val > 0
anggota_abu_abu = anggota_abu_abu + mem_val;
end
end
end
if strcmp(warna,'merah')
if maks == anggota_merah
jum = jum +1 ;
Hasil{jum}.nama = nama_file;
Hasil{jum}.bobot = anggota_merah;
end
elseif strcmp(warna,'biru')
Pengolahan Citra Berwarna 393
if maks == anggota_biru
jum = jum +1 ;
Hasil{jum}.nama = nama_file;
Hasil{jum}.bobot = anggota_biru;
end
elseif strcmp(warna,'cyan')
if maks == anggota_cyan
jum = jum +1 ;
Hasil{jum}.nama = nama_file;
Hasil{jum}.bobot = anggota_cyan;
end
elseif strcmp(warna,'hijau')
if maks == anggota_hijau
jum = jum +1 ;
Hasil{jum}.nama = nama_file;
Hasil{jum}.bobot = anggota_hijau;
end
elseif strcmp(warna,'magenta')
if maks == anggota_magenta
jum = jum +1 ;
Hasil{jum}.nama = nama_file;
Hasil{jum}.bobot = anggota_magenta;
end
elseif strcmp(warna,'jingga')
if maks == anggota_oranye
jum = jum +1 ;
Hasil{jum}.nama = nama_file;
Hasil{jum}.bobot = anggota_oranye;
end
elseif strcmp(warna,'pink')
if maks == anggota_pink
jum = jum +1 ;
Hasil{jum}.nama = nama_file;
Hasil{jum}.bobot = anggota_pink;
end
elseif strcmp(warna,'ungu')
if maks == anggota_ungu
jum = jum +1 ;
Hasil{jum}.nama = nama_file;
Hasil{jum}.bobot = anggota_ungu;
end
elseif strcmp(warna,'putih')
if maks == anggota_putih
jum = jum +1 ;
Hasil{jum}.nama = nama_file;
Hasil{jum}.bobot = anggota_putih;
end
elseif strcmp(warna,'hitam')
if maks == anggota_hitam
jum = jum +1 ;
Hasil{jum}.nama = nama_file;
Hasil{jum}.bobot = anggota_hitam;
end
elseif strcmp(warna,'abu-abu')
if maks == anggota_abu_abu
jum = jum +1 ;
Hasil{jum}.nama = nama_file;
Hasil{jum}.bobot = anggota_abu_abu;
end
394 Pengolahan Citra Teori dan Aplikasi
elseif strcmp(warna,'yellow')
if maks == anggota_kuning
jum = jum + 1 ;
Hasil{jum}.nama = nama_file;
Hasil{jum}.bobot = anggota_kuning;
end
end
end
Hasil{q+1} = x;
end
end
if jum>24
jum = 24;
end
if jum >= 20
m=5; n=5;
else
if jum>=16
m=5; n=4;
else
m=4; n=4;
end
end
if jum>0
close;
figure(1);
for i=1:jum
% Tampilkan citra dan nama depan file
nama = Hasil{i}.nama;
subplot(m,n,i);
Citra = imread(nama);
imshow(Citra);
[pathstr, name, ext] = fileparts(nama);
title([name ext]);
end
end
Pengolahan Citra Berwarna 395
return
% -----------------------------------------
% Bagian untuk menghitung keanggotaan fuzzy
% -----------------------------------------
function derajat=f_red(h, s, v)
if (h==0) && (s==0)
derajat = 0.0;
else
derajat = f_segitiga_kanan(0,21, h) + ...
f_segitiga_kiri(234,255, h);
end
function derajat=f_green(h, s, v)
if (h==0) && (s==0)
derajat = 0.0;
else
derajat = f_trapesium(43,65,105,128, h);
end;
function derajat=f_purple(h,s,v)
if (h==0) && (s==0)
derajat = 0.0;
else
derajat = f_segitiga(180,191,213, h);
end
function derajat=f_cyan(h,s,v)
if (h==0) && (s==0)
derajat = 0.0;
else
derajat = f_segitiga(105,128,155, h);
end;
function derajat=f_orange(h,s,v)
if (h==0) && (s==0)
derajat = 0.0;
else
derajat = f_segitiga(0,21,43, h);
end;
function derajat=f_magenta(h,s,v)
if (h==0) && (s==0)
derajat = 0.0;
396 Pengolahan Citra Teori dan Aplikasi
else
derajat = f_segitiga(191,213,234, h);
end
function derajat=f_pink(h,s,v)
if (h==0) && (s==0)
derajat = 0.0;
else
derajat = f_segitiga(213,234,255, h);
end;
function derajat=f_trapesium(a,b,c,d,h)
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
>>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:
Latihan
4. Apakah ruang warna HIS, HSV, dan HSL itu sama? Kalau berbeda, di mana
perbedaannya?
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_green(h, s, v)
400 Pengolahan Citra Teori dan Aplikasi
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
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.
Citra masukan
Segmentasi
Citra
Objek daun
Ekstraksi
Fitur
Fitur-fitur
pada daun
Pengklasifikasi
Jenis tanaman
10.2Deteksi Garis
−1 −1 −1 −1 −1 2 −1 2 −1 2 −1 −1
2 2 2 −1 2 −1 −1 2 −1 −1 2 −1
−1 −1 −1 2 −1 −1 −1 2 −1 −1 −1 2
Fungsi deteks
ksi berikut berguna untuk menguji cadar-cada
dar yang terdapat
pada Gambar 10.4. Fungsi
F tersebut sekaligus dapat dipakai untuk
uk menguji cadar-
cadar yang lain.
Program : deteksi.m
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);
F2=double(F);
Segmentasi Citra 407
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:
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
Gambar 10.6Contoh hasil deteksi garis untuk empat arah yang berbeda
terhadapgambar pada Gambar 10.5(a)
10.3Deteksi Tepi
, +∆ ,
Turunan Bentuk kontinu Bentuk diskret
lim
∆
f(y,x+1)f(y,x)
∆ →
+∆ , ,
lim
∆
f(y+1,x)f(y,x)
∆ →
∇ ,
,
[f(y, x+1)f(y,x),
f(y+1,x)f(y,x)]
, +∆ ,
lim
f(y,x+1)- 2f(y,x)+f(y,x-1)
∆ → ∆
Segmentasi Citra 411
∆ → ∆
∇ ,
+
f(y,x+1)+f(y,x-1) -
4f(y,x)+f(y+1,x)+f(y-1,x)
Nilai maksimum
Batas
(b) Deteksi tepi
derivatif orde pertama
a b
Persilangan nol
(zero-crossing)
2
2
(c) Deteksi tepi
derivatif orde kedua
Gambar 10.7Deteksi tepi orde pertama dan orde kedua pada arah x
412 Pengolahan Citra : Teori dan Aplikasi
Profil aras
keabuan
Turunan
pertama
Turunan
kedua
Tepi
tanjakan
Tepi garis
Tepi
undakan
Tepi atap
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:
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
0/ 0/
∇ $ *+, ∇f $ .% +% / $2 + 3 (10.2)
∇ ≈% +% (10.3)
∇ , $ +
5 , 5 ,
5 5
(10.4)
• Cadar yang digunakan pada deteksi tepi dalam buku ini telah
disesuaikan agar proses terhadap citra dapat dilakukan secara
korelasi (bukan konvolusi). Itulah sebabnya, ada kemungkinan
cadar yang digunakan pada buku ini berbeda dengan cadar di
literatur lain.
Operator Robe
berts,yang pertama kali dipublikasikan pada ta
tahun 1965,terdiri
atas dua filter berukur
uran 2x2. Ukuran filter yang kecil membuatt kkomputasi sangat
cepat. Namun, keleb
ebihan ini sekaligus menimbulkan kelemaha
han, yakni sangat
terpengaruh oleh dera
erau. Selain itu, operator Roberts memberikann tanggapan yang
lemah terhadap tepi,
i, kecuali
k kalau tepi sangat tajam (Fisher,dkk.,., 2003).
2
x x+1
y z1 z2 1 0 0 -1
y+1 z3 z4 0 -1 1 0
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
[m, n] = size(F);
;
416 Pengolahan Citra : Teori dan Aplikasi
F=double(F);
for y=1 : m-1
for x=1 : n-1
G = uint8(G);
Akhir Program
>> 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
6 , $ sqrt((f(y-1,x-1)+f(y,x-1)+f(y+1,x-1) -
f(y-1,x+1)-f(y,x+1)-f(y+1,x+1))^2 + (10.6)
(f(y+1,x-1)+ f(y+1,x) + f(y+1,x+1) -
f(y-1,x-1) - f(y-1,x) - f(y-1,x+1))^2))
418 Pengolahan Citra : Teori
Te dan Aplikasi
x-1 x x+1
y-1 z1 z2 z3 1 0 -1 -1 -1 -1
y z4 z5 z6 1 0 -1 0 0 0
y+1 z7 z8 z9 1 0 -1 1 1 1
(a) Posisi
isi pada citra f (b) Gx (c) Gy
Gambar 10.10
10Operator Prewitt (b) dan (c) serta posisi pada
pa citra f
Fungsi prew
witt berikut berguna untuk melakukan pen
engujian operator
Prewitt terhadap citra
tra berskala keabuan.
Program : prewitt.m
[m, n] = size(F);
;
F=double(F);
G=zeros(m,n);
for y=2 : m-1
for x=2 : n-11
G(y, x) = sqrt((F(y-1,x-1) + F(y,x-1) + F(y+1 1,x-1) - ...
F(y,
,x) - F(y,x+1) - F(y+1,x+1))^2 + ...
(F(y
y+1,x-1)+ F(y+1,x) + F(y+1,x+1) - ....
F(y-
-1,x-1) - F(y-1,x) - F(y-1,x+1))^2) ;
end
end
G = uint8(G);
Akhir Program
>>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
>>Img = rgb2gray(imread('C:\Image\mainan.png'));
>> Gx = [ 1 0 -1; 1 0 -1; 1 0 -1];
>> G = deteksi(Img, Gx); imshow(G)
>>
Operator Sobel dapat dilihat pada Gambar 10.12. Operator Sobel lebih
sensitif terhadap tepi diagonal daripada tepi vertikal dan horizontal Hal ini
berbeda dengan operator Prewitt, yang lebih sensitif terhadap tepi vertikal dan
horizontal (Crane, 1997).
Segmentasi Citra 421
x-1 x x+1
y-1 z1 z2 z3 -1 0 1 1 2 1
y z4 z5 z6 -2 0 2 0 0 0
y+1 z7 z8 z9 -1 0 1 -1 -2 -1
(a) Posisi
isi pada citra f (b) Gx (c) Gy
Fungsi sobel
l berikut berguna untuk melakukan pengujian
ian operator Sobel
terhadap citra berskal
ala keabuan.
Program : sobel.m
[m, n] = size(F);
;
F=double(F);
G=zeros(m,n);
for y=2 : m-1
for x=2 : n-11
G(y, x) = sqrt(...
(F(y
y-1,x+1)+2*F(y,x+1)+F(y+1,x+1) - ...
F(y-
-1,x-1)-F(y,x-1)-F(y+1,x-1))^2 + ...
(F(y
y-1,x-1)+2*F(y-1,x)+F(y-1,x+1) - ...
F(y+
+1,x-1)-2*F(y+1,x)-F(y+1,x+1))^2) ;
end
end
G = uint8(G);
Akhir Program
>>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.
y-1 z1 z2 z3 -1 0 1 1 √2 1
y z4 z5 z6 -√2 0 √2 0 0 0
y+1 z7 z8 z9 -1 0 1 -1 -√2 -1
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
[m, n] = size(F);
;
akar2 = sqrt(2);
F=double(F);
G=zeros(m,n);
for y=2 : m-1
for x=2 : n-11
G(y, x) = sqrt(...
(F(y
y-1,x+1)+akar2*F(y,x+1)+F(y+1,x+1) - ...
F(y-
-1,x-1)-F(y,x-1)-F(y+1,x-1))^2 + ...
(F(y
y-1,x-1)+akar2*F(y-1,x)+F(y-1,x+1) - ...
F(y+
+1,x-1)-akar2*F(y+1,x)-F(y+1,x+1))^2)) ;
end
end
G = uint8(G);
Akhir Program
>>Img = rgb2
2gray(imread('C:\Image\mainan.png'))
);
>> G=freiche
en(Img);
>> imshow(G)
)
>>
x-1 x x+1
y-1 z1 z2 z3 0 -1 0 -1 -1 -1
y z4 z5 z6 -1 4 -1 -1 8 -1
y+1 z7 z8 z9 0 -1 0 -1 -1 -1
(a) Posisi
isi pada citra f (b) #1 (c) #2
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
[m, n] = size(F);
;
G=zeros(m,n); % Semua berisi nol
F=double(F);
for y=2 : m-1
for x=2 : n-11
G(y, x) = 8 * F(y,x) - ...
(F(y
y-1,x)+ F(y,x-1)+F(y,x+1)+F(y+1,x) + ...
F(y
y-1,x-1)+ F(y-1,x+1)+F(y+1,x-1)+F(y+1
1,x+1));
Segmentasi Citra 427
end
end
G = uint8(G);
Akhir Program
>>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.
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
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).
1 + G H5 IJ5
@A% , $ L − 2N F 5K5
M M
1 + G H5 IJ5
@A% , $ L1 − NF 5K5
OM 9 2M
Segmentasi Citra 429
0 0 -1 0 0
0 -1 -2 -1 0
-1 -2 16 -2 -1
0 -1 -2 -1 0
0 0 -1 0 0
Contoh penggunaanLoG:
>>Img = rgb2gray(imread('C:\Image\mainan.png'));
>> H = [ 0 0 -1 0 0
0 -1 -2 -1 0
-1 -2 16 -2 -1
0 -1 -2 -1 0
0 0 -1 0 0];
>> G=deteksi(Img, H); imshow(G)
>>
Hasil deteksi tepi pada citra mainan.png dapat dilihat pada Gambar 10.22.
430 Pengolahan Citra : Teori dan Aplikasi
Nixon & Aguado (2002) memberikan cara yang dapat digunakan untuk
memperoleh cadar LoG berdasarkan nilai σ dan ukuran. Cara tersebut tertuang
dalam algoritma berikut.
Masukan:
• Ukuran : ukuran cadar
• σ: Deviasi standar
Keluaran:
• h (M, N): Cadar LoG
cadarLoG(ukuran, σ):
1. cx ←floor((ukuran-1) / 2)
2. cy ← cx
3. jum ← 0
4. FORy←0 TO ukuran -1
FORx ← 0TO ukuran -1
nx ← x – cx
ny ← y – cy
Segmentasi Citra 431
G QH5 I QJ5
nilai ←C5 2 − 23 F
0 P 5E P 5
5K5
C5
h(y+1, x+1)
x+ ←nilai
jum ← jum + nilai
END--FOR
END-F FOR
5. // Laku
kukan normalisasi
FOR y ← 1 TO ukuran
FOR
OR y ← 1 TO ukuran
h x) ← h(y, x) / jum
h(y,
END
ND-FOR
END-F FOR
6. RETUR URN h
Program : cadarLoG.m
function [H] = ca
adarLoG(ukuran, sigma)
% CADARLOG Mengha
asilkan cadar LoG berdasarkan
% Nixon dan Aguido
A (2002)
% Masukan:
% ukuran : uk
kuran cadar
% sigma : Dev
viasi standar
% Keluaran : H = cadar LoG
cx = floor((ukura
an-1) / 2);
cy = cx;
jum = 0;
H = zeros(ukuran,, ukuran);
for y=0 : ukuran--1
for x=0 : ukuuran -1
nx = x - cx;
ny = y - cy;
% Lakukan normaliisasi
for y=1 : ukuran
432 Pengolahan Citra : Teori dan Aplikasi
Akhir Program
>>
>> cadarLoG(7, 1)
ans =
>>
G H5 IJ5 G H5 IJ5
5 5
RA% . $ −
T 5KU T 5K5
CU 5 C5 5
(10.9)
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
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
>>Img = rgb2gray(imread('C:\Image\mainan.png'));
>> H = [ 0 0 -1 -1 -1 0 0
0 -2 -3 -3 -3 -2 0
-1 -3 5 5 5 -3 -1
-1 -3 5 16 5 -3 -1
-1 -3 5 5 5 -3 -1
0 -2 -3 -3 -3 -2 0
0 0 -1 -1 -1 0 0 ];
>> G=deteksi(Img, H); imshow(G)
>>
Hasil deteksi tepi pada citra mainan.png dapat dilihat pada Gambar 10.24.
Segmentasi Citra 435
Operator Canny, yang dikemukakan oleh John Canny pada tahun 1986,
terkenal sebagai operator deteksi tepi yang optimal.Algoritma ini memberikan
tingkat kesalahan yang rendah, melokalisasi titik-titik tepi (jarak piksel-piksel tepi
yang ditemukan deteksi dan tepi yang sesungguhnya sangat pendek), dan hanya
memberikan satu tanggapan untuk satu tepi.
Terdapat enam langkah yang dilakukan untuk mengimplementasikan
deteksi tepi Canny (Green, 2002). Keenam langkah tersebut dijabarkan berikut
ini.
Langkah 1:
Pertama-tama dilakukan penapisan terhadap citra dengan tujuan untuk
menghilangkan derau. Hal ini dapatdilakukan dengan menggunakan filter
Gaussian dengan cadar sederhana. Cadar yang digunakan berukuran jauh lebih
kecil daripada ukuran citra. Contoh ditunjukkan pada Gambar 10.25.
436 Pengolahan Citra : Teori dan Aplikasi
2 4 5 4 2
4 9 12 9 4
1 / 115 5 12 15 12 5
4 9 12 9 4
2 4 5 4 2
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:
Langkah 4:
Setelah arah tepi diperoleh, perlu menghubungkan antara arah tepi dengan
sebuah arah yang dapat dilacak dari citra. Sebagai contoh, terdapat susunan piksel
berukuran 5x5 seperti terlihat pada Gambar 10.26. Dengan melihat piksel “a”
tampak bahwa a hanya memiliki 4 arah berupa 0o, 45o, 90o, dan 135o.
Segmentasi Citra 437
X X X X X
X X X X X
X X a X X
X X X X X
X X X X X
Gambar 10.26Matriks piksel berukuran 5x5
Selanjutnya, arah tepi yang diperoleh akan dimasukkan ke dalam salah satu
kategori dari keempat arah tadi berdasarkan area yang tertera pada Gambar 10.27.
Berikut adalah aturan konversi yang berlaku:
0 ( H) ( HI)
45 yi = f ∑wij xj
( H)
j
arah = (10.12)
90 y = f (T) w (TH) y (H)
135 i ∑ ij j
j
90o
135o 45o
Semua arah tepi yang berkisar antara 0 dan 22,5 serta 157,5 dan 180 derajat
(warna biru) diubah menjadi 0 derajat. Semua arah tepi yang berkisar antara 22,5
dan 67,5 derajat (warna kuning) diubah menjadi 45 derajat. Semua arah tepi yang
438 Pengolahan Citra : Teori dan Aplikasi
berkisar antara 67,5 dan 112,5 derajat (warna merah) diubah menjadi 90 derajat.
Semua arah tepi yang berkisar antara 112,5 dan 157,5 derajat (warna hijau) diubah
menjadi 135 derajat.
Langkah 5
Setelah arah tepi diperoleh, penghilangan non-maksimum dilaksanakan.
Penghilangan non-maksimum dilakukan di sepanjang tepi pada arah tepi dan
menghilangkan piksel-piksel (piksel diatur menjadi 0) yang tidak dianggap
sebagai tepi. Dengan cara seperti itu, diperoleh tepi yang tipis.
Langkah 6:
Langkah keenam berupa proses yang disebut hysteresis. Proses ini
menghilangkan garis-garis yang seperti terputus-putus pada tepi objek. Caranya
adalah dengan menggunakan dua ambang T1 dan T2. Lalu, semua piksel citra
yang bernilai lebih besar daripada T1 dianggap sebagai piksel tepi. Selanjutnya,
semua piksel yang terhubung dengan piksel tersebut dan memiliki nilai lebih
besar dari T2 juga dianggap sebagai piksel tepi.
Bagian penting yang perlu dijelaskan adalah penghilangan non-maksimum
dan peng-ambangan histeresis. Penghilangan non-maksimum dilakukan dengan
mula-mula menyalin isi larikGrad (yang berisi besaran gradien) ke Non_max.
Selanjutnya, penghilangan non-maksimum dilaksanakan dengan memperhatikan
dua titik tetangga yang terletak pada arah tepi (yang tersimpan dalam Theta).
Misalnya, arah tepi adalah 0. Apabila titik yang menjadi perhatian mempunyai
koordinat (r, c), dua titik tetangga berupa (r, c-1) dan (r, c+1). Apabila gradien titik
perhatian lebih besar daripada gradien kedua tetangga, nilainya akan
dipertahankan. Sebaliknya, jika nilai titik perhatian lebih kecil daripada nilai salah
satu atau kedua gradien tetangga, nilainya akan diabaikan (diubah menjadi nol).
Seluruh kemungkinan proses seperti itu dijabarkan dalam Gambar 10.28.
Segmentasi Citra 439
i, j
i+1, j-1
if (Grad(i,j) <= Grad(i,j+1)) || ...
(Grad(i,j)<= Grad(i,j-1))
Non_max(i,j) = 0; if (Grad(i,j) <= Grad(i-1,j+1)) || ...
end (Grad(i,j) <= Grad(i+1,j-1))
Non_max(i,j) = 0;
end
i, j i, j
i, j+1 i, j+1
j-1 j j+1
i-1 255 255 255 255 255 255
Gambar 10.29
.29Pengujian untuk mengubah nilai 128 men
enjadi 255
Program : canny.m
% Menentukan nila
ai ambang bawaan
if nargin < 2
ambang_bawah = 0.1;
end
if nargin < 2
ambang_atas = 0.3;
end
% Kernel Gaussian
ns
HG = [ 2 4 5 4 2
4 9 12 9 12
5 12 15 12
2 5
4 9 12 9 12
2 4 5 4 2 ] / 115.0;
[hHG, wHG] = size
e(HG);
h2 = floor(hHG / 2);
w2 = floor(wHG / 2);
% Kenakan operasi
i Gaussian
G = double(deteks
si(F, HG, true));
% Pastikan hasiln
nya berada antara 0 sampai dengan 255
5
[m, n] = size(G);
;
Segmentasi Citra 441
for i = 1 : m
for j = 1 : n
G(i, j) = round(G(i, j));
if 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;
elseif Theta(i,j) == 45
if (Grad(i,j) <= Grad(i-1,j+1)) || ...
(Grad(i,j) <= Grad(i+1,j-1))
Non_max(i,j) = 0;
end
elseif Theta(i,j) == 90
if (Grad(i,j) <= Grad(i+1,j) ) || ...
(Grad(i,j) <= Grad(i-1,j))
Non_max(i,j) = 0;
end
else
if (Grad(i,j) <= Grad(i+1,j+1)) || ...
(Grad(i,j) <= Grad(i-1,j-1))
Non_max(i,j) = 0;
end
end
end
end
% Pengambangan histeresis
ambang_bawah = ambang_bawah * max(max(Non_max));
ambang_atas = ambang_atas * max(max(Non_max));
Histeresis = Non_max;
% 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
>> 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
Operator zero-crossing atau dikenal dengan nama lain yaitu operator Marr-
Hildrethsebenarnya adalah operatorLoGyang dilengkapi dengan upaya untuk
menemukan zero crossing. Zero-crossing menyatakan tanda perubahan pada tepi-
tepi dalam citra. Sebagaimana telah dibahas di depan, zero-crossing merupakan
perpotongan dengan sumbu X pada turunan kedua (Gambar 10.7). Operasi inilah
yang membuat operator Marr-Hildreth mampu menghasilkan kurva yang tertutup,
yang tidak dapat dipenuhi oleh operator Canny.
Ada beberapa teknik yang dapat digunakan untuk melakukan pemrosesan
zero-crossing, misalnya seperti yang dibahas pada Crane (1997) atau pada Nixon
dan Aguido (2002). Algoritma yang didasarkan pada Nixon dan Aguido dapat
dilihat berikut ini.
Segmentasi Citra 445
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
terbesar ← max(bag)
terkecil ← min(bag)
3. RETURN k
Bagian 1 Bagian
ian 3
Bagian 2 Bagian
n4
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
H = cadarLoG(ukur
ran, sigma);
pembulatan = fals
se;
potong = true;
G = deteksi(F, H,
, potong, pembulatan);
for p = x-1 : x
for q = y-1 : y
jum = jum + G(q,p);
end
end
rerata0 = jum / 4;
jum = 0;
for p = x-1 : x
for q = y : y+1
jum = jum + G(q,p);
end
end
rerata1 = jum / 4;
jum = 0;
for p = x : x+1
for q = y-1 : y
jum = jum + G(q,p);
end
end
rerata2 = jum / 4;
jum = 0;
for p = x : x+1
for q = y : y+1
jum = jum + G(q,p);
end
end
rerata3 = jum / 4;
return
Akhir Program
>> Img=imread('C:\Image\lena256.png');
>> G = zerocross(Img, 7,1); imshow(G)
>>
448 Pengolahan Citra : Teori dan Aplikasi
(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
>> Img=imread('C:\Image\bangunan2.png');
>> G=zerocross(Img,7,1); imshow(G)
>>
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).
1 1 −1 5 −3 −3 1 0 −1 1 0 −1
1 −2 −1 5 0 −3 1 0 −1 2 0 −2
Timur
1 1 −1 5 −3 −3 1 0 −1 1 0 −1
H1
1 −1 −1 −3 −3 −3 0 −1 −1 0 −1 −2
1 −2 −1 5 0 −3 1 0 −1 1 0 −1
Timur Laut
1 1 −1 5 5 −3 1 1 0 2 1 0
H2
−1 −1 −1 −3 −3 −3 −1 −1 −1 −1 −2 −1
1 −2 1 −3 0 −3 0 0 0 0 0 0
Utara
1 1 1 5 5 5 1 1 0 1 2 −1
H3
−1 −1 1 −3 −3 −3 1 1 −1 −2 −1 0
−1 −2 1 −3 0 5 1 −2 −1 −1 0 1
Barat Laut
1 1 1 −3 5 5 1 1 −1 0 1 2
H4
−1 1 1 −3 −3 5 −1 0 1 −1 0 1
−1 −2 1 −3 0 5 −1 0 1 −2 0 2
Barat
−1 1 1 −3 −3 −3 −1 0 1 −1 0 1
H5
1 1 1 −3 5 5 0 1 1 0 1 2
−1 −2 1 −3 0 5 −1 0 1 −1 0 1
Barat Daya
−1 −1 1 −3 −3 −3 −1 −1 0 −2 −1 0
H6
1 1 1 5 5 5 1 1 1 1 2 1
1 −2 1 −3 0 −3 0 0 0 0 0 0
Selatan
−1 −1 −1 −3 −3 −3 −1 −1 −1 −1 −2 −1
H7
1 1 1 5 5 −3 1 1 0 2 1 0
−1 −2 1 5 0 −3 1 0 −1 1 0 −1
Tenggara
−1 −1 1 −3 −3 −3 0 −1 −1 0 −1 −2
H8
Program : kompas.m
if nargin < 2
jenis = 1;
end
% Operator kompas
s
Prewitt1 = [1 1 -1;1
- -2 -1;1 1 -1];
Prewitt2 = [1 -1 -1;1 -2 -1;1 1 -1];
Prewitt3 = [-1 -1
1 -1;1 -2 1;1 1 1];
Prewitt4 = [-1 -1
1 1;-1 -2 1;1 1 1];
Prewitt5 = [-1 1 1;-1 -2 1;-1 1 1];
Prewitt6 = [1 1 1;-1
1 -2 1;-1 -1 1];
Prewitt7 = [1 1 1;1
1 -2 1;-1 -1 -1];
Prewitt8 = [1 1 1
1;-1 -2 1;-1 -1 1];
Kirsch1 = [5 -3 -3;5
- 0 -3;5 -3 -3];
Kirsch2 = [-3 -3 -3;5 0 -3; 5 5 -3];
Kirsch3 = [-3 -3 -3;-3 0 -3;5 5 5];
Kirsch4 = [-3 -3 -3;-3 0 5;-3 5 5];
Kirsch5 = [-3 -3 5;-3 0 5;-3 -3 -3];
Kirsch6 = [-3 5 5;-3
5 0 5;-3 -3 -3];
Kirsch7 = [5 5 5;
;-3 0 -3;-3 -3 -3];
Kirsch8 = [5 5 -3
3;5 0 -3;-3 -3 -3];
Prewitt(:,:,1) = Prewitt1;
Prewitt(:,:,2) = Prewitt2;
Prewitt(:,:,3) = Prewitt3;
Prewitt(:,:,4) = Prewitt4;
Prewitt(:,:,5) = Prewitt5;
Prewitt(:,:,6) = Prewitt6;
Prewitt(:,:,7) = Prewitt7;
Prewitt(:,:,8) = Prewitt8;
Kirsch(:,:,1) = Kirsch1;
Kirsch(:,:,2) = Kirsch2;
Kirsch(:,:,3) = Kirsch3;
Kirsch(:,:,4) = Kirsch4;
Kirsch(:,:,5) = Kirsch5;
Kirsch(:,:,6) = Kirsch6;
Kirsch(:,:,7) = Kirsch7;
Kirsch(:,:,8) = Kirsch8;
Robinson3(:,:,1) = Robinson3_1;
Robinson3(:,:,2) = Robinson3_2;
Robinson3(:,:,3) = Robinson3_3;
Robinson3(:,:,4) = Robinson3_4;
Robinson3(:,:,5) = Robinson3_5;
Robinson3(:,:,6) = Robinson3_6;
Robinson3(:,:,7) = Robinson3_7;
Robinson3(:,:,8) = Robinson3_8;
Robinson5(:,:,1) = Robinson5_1;
Robinson5(:,:,2) = Robinson5_2;
Robinson5(:,:,3) = Robinson5_3;
Robinson5(:,:,4) = Robinson5_4;
Robinson5(:,:,5) = Robinson5_5;
Robinson5(:,:,6) = Robinson5_6;
Robinson5(:,:,7) = Robinson5_7;
Robinson5(:,:,8) = Robinson5_8;
maks = max(Grad);
G(y-1, x-1) = maks;
end
end
G = uint8(G);
Akhir Program
>>Img = rgb2gray(imread('C:\Image\mainan.png'));
>> G=kompas(Img, 1);
>> imshow(G)
>>
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
1, YZ[Y\ , ≥ ^`
W , $ $X
0, YZ[Y\ , <^
(10.13)
Pada rumus di atas, T menyatakan ambang intensitas. Dalam praktik, nilai 1 atau 0
pada Persamaan 10.13dapat dipertukarkan.
Peng-ambangan intensitas biasa digunakan untuk memisahkan tulisan
hitam yang berada di atas secarik kertas putih. Namun, perlu diketahui, peng-
ambangan ini mempunyai kelemahan,yaitu:
Segmentasi Citra 455
1) tidak mem
mperlihatkan hubungan spasial antarpiksel;
2) sensitif ter
terhadap pencahayaan yang tidak seragam;
3) hanya ber
erlaku untuk keadaan yang ideal (misalnya
ya, latarbelakang
hitam dann objek berwarna putih).
(a) ipomo
oea.png (b) Histogram citra
Gam
ambar 10.36Citra daun dan histogramnya
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
>> 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.
Acharya & Ray, 2005). Algoritma untuk menentukan T secara iteratif adalah
seperti berikut.
Masukan:
• f (M,N): Citra berskala keabuan berukuran M baris dan N
kolom
Keluaran:
• nilai ambang T
ambang_adaptif(f):
1. Pilihlah satu nilai untuk menentukan nilai ambang (T ← To).
2. Bagilah citra menjadi dua bagian dengan menggunakan T
sebagai nilai ambang.
a Ea
3. Hitunglah nilai rata-rata pada kedua area (µ1 dan µ2).
4. Hitunglah nilai ambang: T ← U 5
5. Ulangi langkah 2 sampai dengan 4 sampai tidak ada
perubahan nilai T.
6. RETURN T
Program : titeratif.m
[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
t0 = t1;
end
t1 = floor(t1);
Akhir Program
>> 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.
Objek
lingkaran
T1 T2
Objek kotak
Masukan:
• f(MxN): Citra berskala keabuan (berukuran MxN)
Keluaran:
• g (M, N): Citra biner
ambang_aras_jamak(ukuran, σ):
FOR y ←1 TO ukuran -1
FOR x ← 1 TO ukuran -1
nx ← x – cx
ny ← y – cy
Segmentasi Citra 461
G QH5 I QJ5
←C5 2 − 23 F
0 P 5E P 5
5K5
C5
n
nilai
hh(y+1, x+1) ← nilai
ju ← jum + nilai
jum
END
ND-FOR
END-FFOR
7. RETUR
URN g
Implementasi berdasa
sarkan algoritma di atas dapat dilihat di bawah
ah ini.
Program : arasjamak.m
function [G] = ar
rasjamak(F, t1, t2)
% Pengambanan den
ngan dua nilai ambang
% F = Citra berskala
b keabuan
% t1 = nilai ambang bawah
% t2 = nilai ambang atas
%
% Keluaran: G = Citra
C biner
[m, n] = size(F);;
for i=1 : m
for j=1:n
if F(i,j)) <= t1 || F(i,j) >= t2
G(i,j
j) = 0;
else
G(i,j
j) = 1;
end
end
end
Akhir Program
>> 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).
(c) Nilai ambang t1=175 dan t2=200 (d) Nilai ambang t1=220 dan t2=230
(e) Nilai ambang t1=235 dan t2=250 (f) Nilai ambang t1=220 dan t2=250
>> 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.
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).
Kelas 1 Kelas 2
b c $ , b c ≥ 0, ∑0gh b c $ 1
Pd
e
(10.14)
i0 [ $ ∑jkl0 b c (10.15)
i [ $ ∑mkljE0 b c $ 1 − i0 [ (10.16)
Dalam hal ini, L menyatakan jumlah aras keabuan. Rerata kedua kelas dihitung
melalui:
M0 [ $ ∑jkl0 1 − *0 .
o k
pU j
(10.19)
M [ $ ∑mkljE0 1 − * .
o k
p5 j
(10.20)
M [ $ Mp [ + Mq [ (10.21)
Mp [ $ n0 [ . M0 [ + n [ .M [ (10.22)
Rumus di atas menunjukkan bahwa WCV adalah jumlah varians kelas secara
individual yang telah diboboti dengan probabilitas kelas masing-masing. Adapun
BCV dinyatakan dengan
Segmentasi Citra 465
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 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;
Akhir Program
Contoh:
>> Img=imread('C:\Image\ipomoea.png');
>> t=otsu(Img)
t =130
>>
Segmentasi Citra 467
10.8Peng-ambangan
an Adaptif
Peng-ambangan
an adaptif (adaptive thresholding) merupakann peng-ambangan
yang menggunakan nnilai ambang lokal, yang dihitung secara ada
daptif berdasarkan
statistika piksel-pikse
ksel tetangga. Hal ini didasarkan kenyataann bahwa bagian-
bagian kecil dalam citra
c mempunyai iluminasi yang sama, sehin
hingga lebih tepat
kalau nilai ambangg dihitung berdasarkan bagian-bagian kecill dalam
d citra dan
bukan berdasarkan se
seluruh piksel dalam citra.
Ada tiga pend
ndekatan yang biasa digunakan untuk mew
ewujudkan peng-
ambangan ini. Pend
ndekatan pertama menggunakan statistika rerata terhadap
intensitas lokal. Terka
kadang, nilai yang konstan ikut dilibatkan. Rumusnya
Ru sebagai
berikut.
∑ J,H ∈u k,ss
^$ −w
ev
(10.24)
Program : adapmean.m
468 Pengolahan Citra : Teori dan Aplikasi
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
delta = floor(w/2);
if c < 0
G = zeros(m, n); % Diasumsikan berlatarbelakang 0
else
G = ones(m, n); % Diasumsikan berlatarbelakang 1
end
F=double(F);
for y=1+delta : m-delta
for x=1+delta : n-delta
rerata = 0.0;
jum = w * w;
for p=1 : w
for q=1 : w
rerata = rerata + F(y-round(w/2)+p, ...
x-round(w/2)+q);
end
end
Akhir Program
>> 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
(c) w = 2, c = -2 (d) w = 3, c = -4
^ $ *F c+Z , , , ∈n −w (10.25)
Segmentasi Citra 471
Program : adapmedian.m
if nargin == 0
disp('Penggun
naan adapmean(Citra, ukuran, konstant
ta');
return;
end
if nargin == 1
w = 2;
c = 0;
end
if nargin == 2
c = 0;
end
% Lakukan pemrose
esan citra
[m, n] = size(F);
;
delta = floor(w/2
2);
if c < 0
G = zeros(m, n); % Diasumsikan berlatarbelakang
g 0
else
G = ones(m, n);
n % Diasumsikan berlatarbelakang
g 1
end
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;
Akhir Program
>> 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
^$
xy , , , ∈p E xkP , , , ∈p
(10.26)
474 Pengolahan Citra : Teori
Te dan Aplikasi
Program : adapmaxmin.m
if nargin == 0
disp('Penggun
naan adapmean(Citra, ukuran, konstant
ta');
return;
end
if nargin == 1
w = 2;
c = 0;
end
if nargin == 2
c = 0;
end
% Lakukan pemrose
esan citra
[m, n] = size(F);
;
delta = floor(w/2
2);
if c < 0
G = zeros(m, n); % Diasumsikan berlatarbelakang
g 0
else
G = ones(m, n);
n % Diasumsikan berlatarbelakang
g 1
end
Akhir Program
>> Img=imread('C:\Image\ipomoea.png');
>> G=adapmaxmin(Img, 10, -30); imshow(G)
>>
>> 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.
(c) w = 3, c = 5 (d) w = 7, c = 10
b c $ d
, ∑mz0
kl k $1 c $ 0,1,2, … , @ − 1
e
(10.27)
Dalam hal ini, N adalah jumlah piksel citra, dan Lmenyatakanjumlah aras
keabuan. Selanjutnya, apabila t adalah nilai ambang, entropi latarbelakang adalah:
Segmentasi Citra 479
|} [ $ − ∑jkl . ln
o k o k
~‚ j ~‚ j
(10.28)
|• [ $ − ∑mz0 . ln
o k o k
kljE
E0 ~ j ~„ j
(10.29)
„
€} [ $ ∑jkl b c , €• [ $ ∑mz0
kljE0 b c
(10.30)
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
>> Img=imread('C:\Image\ipomoea.png');
>> t=kapur(Img); G=ambang(Img, t); imshow(G)
>>
…
|} [ $ <Z 2∑jkl 3
0 o k
0z… ~‚ j
(10.32)
Segmentasi Citra 483
…
|• [ $ <Z 2∑mz0 3
0 o k
0z… kljE0 0z~„ j
(10.33)
Program : renyi.m
function [ambang]
] = renyi(F, rho)
% RENYI Memperole
eh nilai ambang menggunakan metode en
ntropi Renyi
% berdasarkan rumus pada Acharya dan Ray (2005)
% F = Citra be
erskala keabuan
F = double(F);
[m, n] = size(F);
;
jum_piksel = m * n;
% Kosongkan histo
ogram
for i=1 : 256
h(i) = 0.0;
end
% Hitung histogra
am
for i=1 : m
for j=1 : n
intensita
as = F(i,j);
h(intensi
itas+1) = h(intensitas+1) + 1;
end
end
% Hitung p(i)
for i=1 : 256
p(i) = h(i) / jum_piksel;
end
% Hitung t optimaal
ambang = 0;
varMaks = 0;
for t=0 : 255
% Hitung Pb(tt)
pbt = 0.0;
for i=0 : t
pbt = pbt + p(i+1);
end
% Hitung Hb(t
t)
484 Pengolahan Citra : Teori dan Aplikasi
hbt = 0;
for i = 0 : t
if pbt ~= 0
hbt = hbt + (p(i+1) / pbt) ^ rho;
end
end
if hbt == 0
hbt = 0;
else
hbt = 1 / (1 - rho) * log(hbt);
end
% Hitung Ho(t)
hot = 0;
for i = t+1 : 255
hot = hot + (p(i+1) / 1-pbt) ^ rho;
end
if hot == 0
hot = 0;
else
hot = 1 / (1 - rho) * log(hot);
end
% Hitung w(t)
wt = hot + hbt;
if wt > varMaks
varMaks = wt;
ambang = t;
end
end
Akhir Program
Program : segwarna.m
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));
;
% Ubah waarna
if h < 111
h = 0;
0
elseif h < 32
h = 21;
2
elseif h < 54
h = 43;
4
elseif h < 116
h = 85;
8
elseif h < 141
h = 128;
1
elseif h < 185
h = 170;
1
elseif h < 202
h = 191;
1
elseif h < 223
h = 213;
2
elseif h < 244
h = 234;
2
else
h = 0;
0
end
% Ubah ko
omponen H
H(y,x) = h;
% Ubah ko
omponen S
if S(y,x)
) >= 200
S(y,x)
) = 255;
elseif S(
(y,x) <= 20
S(y,x
x) = 0;
Segmentasi Citra 487
else
S(y,x) = 128;
end
% Ubah komponen L
if L(y,x) >= 200
L(y,x) = 255;
elseif L(y,x) <= 20
L(y,x) = 0;
else
L(y,x) = 128;
end
end
end
Akhir Program
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
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
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
Segmentasi ju
juga dapat dilakukan melalui perantaraan citr
itra biner. Contoh
ditunjukkan pada skri
krip segdaun2.m.
Program : segdaun2.m
% SEGDAUN2 Contoh
h segmentasi daun melalui citra biner
r
\Image\ficus.png');
RGB = imread('C:\
[m,n,dim] = size(
(RGB);
% Konversi ke cit
tra berskala keabuan
for baris=1 : m
for kolom=1 : n
r = RGB(b
baris,kolom,1);
492 Pengolahan Citra : Teori dan Aplikasi
g = RGB(baris,kolom,2);
b = RGB(baris,kolom,3);
kelabu = r * 0.2989 + g * 0.5870 + b * 0.1140;
A(baris,kolom) = kelabu;
end
end
figure(1); imshow(A);
A = double(A);
B = uint8(B);
for kolom=1 : n
D(1,kolom) = 1;
D(m,kolom) = 1;
end
figure(3); imshow(D);
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
Latihan
Isyarat asli
Isyarat asli + derau
Derau
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.
. = 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
=σ
√
(11.4)
Dalam hal ini, µ adalah nilai rerata dan σ adalah deviasi standar (atau akar
varians) variabel random.PDF-nya ditunjukkan pada Gambar 11.2.
Restorasi Citra 501
p(z)
1
√2
0,607
√2
z
µ-σ µ µ+σ
= ! ! ∗ + # (11.5)
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.
(c) σ = 25 (d) σ = 50
Gambar 11.3 Derau Gaussian untuk tiga nilai deviasi standar (σ)
Cara seperti di atas berlaku untuk citra berskala keabuan. Kalau dikehendaki,
derau Gaussian juga dapat diterapkan pada citra berwarna. Dalam hal ini, derau
perlu ditambahkan ke komponen R, G, dan B masing-masing. Contoh penerapan
derau Gaussian ditunjukkan pada Gambar 11.4.
504 Pengolahan Citra Teori
Te dan Aplikasi
(a) Citra ba
bangunan.png (b) σ = 10
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
if nargin < 3
mu = 0;
Restorasi Citra 505
end
if nargin < 2
sigma = 10;
end
[m, n] = size(F);
F = double(F);
for i=1 : m
for j=1 : n
derau = sqrt(-2 * sigma * sigma * log(1 - rand));
theta = rand * 1.9175345E-4 - 3.14159265;
derau = derau * cos(theta);
derau = derau + mu;
G = uint8(G);
Akhir Program
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
Masukan:
• f : Citra berskala keabuan berukuran M x N
• p : Probabilitas pembangkitan derau (0 s/d 1)
Keluaran:
• g : Citra yang telah ditambahi dengan derau
derauImpuls(f, p):
1. Salin citra f ke g
Restorasi Citra 507
2. FOR y ←1 TO M
FOR
OR x ← 1 TO N
nilai_acak
ak←pembangkit_random
IF nilai_ac
acak < p / 2
g(y, x) ← 0 // merica (berwarna hitam)
EL
ELSE
IF nilai_acak > p / 2 AND nilai_acak <= p
g(y, x) ← 255 // Garam (berwarna putih
tih)
END
E
END-IF
END
ND-FOR
END-F FOR
3. RETUR
URN g
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;
[m, n] = size(F);
;
G = double(F);
for i=1 : m
for j=1 : n
nilai_aca
ak = rand;
if nilai_
_acak <= probabilitas / 2
G(i,j
j) = 0;
elseif (n
nilai_acak > probabilitas / 2) && ...
.
(n
nilai_acak <= probabilitas)
G(i,j
j) = 255;
end
end
508 Pengolahan Citra Teori dan Aplikasi
end
G = uint8(G);
Akhir Program
>> Img=imread('C:\Image\innsbruck.png');
>>imshow(Img)
>> G = drimpuls(Img, 0.005); imshow(G)
>> imshow(Img)
>>
, (!)(* 0 ≤
%&'
< ~.
=$
0, < 0
(11.6)
Dalam hal ini, z adalah nilai aras keabuan I dan a>0. Reratanya berupa
#=
&
(11.7)
=& (11.8)
p(z)
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
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 = uint8(G);
Akhir Program
>> 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
&2 3 2 4
1 = 5% !
%&3
(11.10)
Dalam hal ini, x adalah nilai aras keabuan, a>0, b berupa bilangan bulat positif,
dan tanda ! menyatakan faktorial. Rerata dan varians berupa:
512 Pengolahan Citra Teori dan Aplikasi
5
#=
&
(11.11)
dan
5
=
&
(11.12)
p(x)
7
0,607 8−1 8−1
7= − 8−1
8−1 !
(b-1)/a x
1 = 9 + 9 + ⋯ + 95 (11.13)
Program : drgamma.m
if nargin ~= 3
error('Penggu
unaan: drgamma(F, a, b)');
end
if (a <= 0) || (a
a ~= round(a))
error('Argume
en kedua harus berupa integer > 0');
end
if b < 1 || (b ~=
= round(b))
error('Argume
en ketiga harus berupa integer > 0');
;
end
[m, n] = size(F);
;
alpha = b;
varians = b / (a * a);
p = sqrt(varians * a ) / 2.0;
F = double(F);
for i=1 : m
for j=1 : n
k = -1 / a;
derau = 0;
0
for p=1 : b
derau
u = derau + k * log(1 - rand);
end
G(i,j) = round(F(i,j)+derau);
if G(i,j)
) > 255
G(i,j
j) = 255;
end
end
end
G = uint8(G);
Akhir Program
514 Pengolahan Citra Teori dan Aplikasi
>> 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.
− % '%& /5
, ≥ .
1 = 1 = ;5
0, <0
(11.14)
Dalam hal ini, x adalah nilai aras keabuan. Rerata dihitung dengan menggunakan
rumus
#=> / 2 (11.15)
5 ?%
=
?
(11.16)
Bentuk PDF-nya dapat dilihat pada Gambar 11.10.Derau Rayleigh biasa muncul
pada jangkauan radar dan citra bergerak (Myler dan Weeks, 1993).
p(x)
2
0,607@
8
8
+@
2
= + >8 ln 1 − ! (11.17)
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 = 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.
, AB* ≤ 1 ≤ 8 .
1 =; 5%&
1, (!)(* C B!!D
(11.18)
518 Pengolahan Citra Teori dan Aplikasi
&E5
#= (11.19)
Varians-nya berupa
5%&
= (11.20)
p(x)
1
8−
8
x
Pembangkit bilangan acak dapat dihitung melalui rumus (Gonzalez, dkk., 2004):
= + 8− ∗ ! (11.21)
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
G = uint8(G);
Akhir Program
Contoh pengg
ggunaan fungsi druniform:
read('C:\Image\innsbruck.png');
>> Img=imr ;
>> G = dru
uniform(Img, 1800, 0); imshow(G
G)
520 Pengolahan Citra Teori dan Aplikasi
>>
Beberapa contoh hasil penerapan derau uniform dapat dilihat pada Gambar 11.13.
(c) a = 10, bx
x = -3, by = 4 (d) a = 20, bx = 10, by = 10
Gambar 11.14Citra
11 dengan derau berupa gelombang
ng sinus
Gambar 11.14
14 menunjukkan contoh citra yang telah diberi
ri tambahan derau
periodis berbentuk sinus.
s Tambahan derau seperti itu dapat dilakukan
di dengan
menggunakan fungsi
si drperiodik. Implementasi fungsi tersebu
but dapat dilihat di
bawah ini.
Program : drperiodik.m
function [G] = dr
rperiodik(F, a, bx, by)
% DRPERIODIK Meng
ghasilkan citra yang teklah ditambahi
i
% derau period
dis.
%
% F = Citra be
erskala keabuan
% b = penegas derau (1, 2, 3, ...)
% ax dan ay me
enentukan kemiringan derau
522 Pengolahan Citra Teori dan Aplikasi
if nargin < 4
a = 3; bx = 3; by = 5;
end
[m, n] = size(F);
for i=1:m
for j=1:n
X(i,j) = j;
Y(i,j) = i;
end
end
G = uint8(double(F) + derau);
Akhir Program
>> Img=imread('C:\Image\pantai.png');
>> G=drperiodik(Img, 20, 10, 10); imshow(G)
>>
>> Img=imread('C:\image\absam.png');
>> G=drperiodik(Img,10,1,50000);
>> G=drperiodik(G,10,50000,1); imshow(G)
>>
Restorasi Citra 523
berukuran 3x3. Contoh ditunjukkan pada Gambar 11.16. Pada cadar tersebut,
semua koefisien telah dinormalisasi sehingga total nilai koefisien adalah 1. Cadar
pada Gambar 11.16(b) dan 11.16(c) adalah contoh cadar yang memiliki
tanggapan impuls seperti berikut:
1 8 1
F = G8 8 8H
1 8 1
(11.22)
1 1 1
1
F = 9 G1 1 1H
1 1 1
(a)
1 1 1
1
F = 10 G1 2 1H
1 1 1
(b)
1 2 1
1
F = 16 G2 4 2H
1 2 1
(c)
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 =
1 1 1
1
9
G1 1 1H
1 1 1
(b)
1 1 1
1
10
G1 2 1H
1 1 1
(c)
1 2 1
1
16
G2 4 2H
1 2 1
(d)
hasilnya digunakan sebagai nilai piksel pada citra keluaran. Dengan demikian,
jika g menyatakan citra yang terkena derau dan K adalah citra yang deraunya telah
dihilangkan, hubungan kedua fungsi tersebut dapat ditulis menjadi
K D, 1 = ∑ P,Q ∈STU ,O
LM
(11.23)
Filter ini cocok untuk menghilangkan derau uniform dan Gaussian, tetapi akan
sedikit mengaburkan citra.
Dalam praktik, pendekatan rerata di atas dapat dilakukan melalui
konvolusi antar g dan cadar H ataupun tanpa konvolusi. Dalam hal ini, semua
LM
koefisien dalam cadar H bernilai . Filter rerata aritmetik tidak lain adalah filter
g K
x x
7 5 7
y 3 2 6 y 5
1 4 7
2+6+7+4+1+3+7+5+7 42
= = 4,6667 ≈ 5
9 9
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);
;
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);
>>
(a) Citra pantai.png yang telah diberi (b) Filter rerata aritmetika 3 x 3
derau Gaussian dengan σ = 10
(a) Citra pantai.png yang telah diberi (b) Filter rerata aritmetika 3 x 3
derau garam dan merica, p = 0,01
K D, 1 = LM
4
∑ Z,[ ∈\TU
(11.24)
Y Z,[
Restorasi Citra 531
g K
x x
7 5 7
y 3 2 6 y 3
1 4 7
9
1 1 1 1 1 1 1 1 1 = 3,1266 ≈ 3
+ + + + + + + +
2 6 7 4 1 3 7 5 7
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
G = uint8(G);
Akhir Program
>> Img=imread('C:\Image\pantai.png');
>>G=drgaussian(Img, 10);
>> K=filharmonik(G); imshow(K);
>>
(a) Citra kartun.tif yang telah diberi (b) Filter rerata harmonik 3 x 3
derau Gaussian, σ = 10
(a) Citra kartun.png yang telah diberi (b) Filter rerata harmonik 3 x 3
derau garam dan merica, p = 0,01
untuk membuang de
derau garam (Gonzalez dan Woods, 2002).. Sebagai
S contoh,
perhitungan pada filte
lter rerata kontraharmonik ditunjukkan pada Gambar
Ga 11.24.
g fK
x x
7 5 7
y 3 2 6 y 6
1 4 7
Q=1
Gambar 11.24Ilus
ustrasi perhitungan dengan filter rerata kon
ontraharmonik
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
G = uint8(G);
Akhir Program
>> Img=imread('C:\Image\boneka.png');
>> G=drgaussian(Img, 5);
>> K=filkontra(G,3); imshow(K);
>>
(a) Citra boneka.png yang telah diberi (b) Filter rerata kontraharmonik 3 x 3
derau Gaussian, σ = 10 Orde = 2
(a) Citra boneka.png yang telah diberi (b) Filter rerata kontraharmonik 3 x 3
derau garam dan merica, p =0,01 Orde = 2 (Menghilangkan merica)
Filter rerata Yp (Yp mean filter) adalah jenis filter nonlinear yang
didefinisikan sebagai berikut (Myler dan Weeks, 1993):
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);
;
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
>>
median piksel-piksel di dalam jendela sebagai keluaran K. Jadi, filter median dapat
ditulis sebagai berikut:
g Kf
x x
7 5 7
y 3 2 6 y 5
1 4 7
Pengurutan
1, 2, 3, 4, 5, 6, 7, 7, 7
1 2 3 4 5 6 7 8 9 Indeks
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
(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
Program : filmed.m
if nargin < 2
ukuran = 3;
end
[m, n] = size(F);
Nilai(q+1) = x;
end
end
G = uint8(G);
Akhir Program
>> Img=imread('C:\Image\innsbruck.png');
>> G=drimpuls(Img, 0.01); imshow(G)
>> K=filmed(G); imshow(K);
>>
Gambar 11.30Efek filter median pada citra yang tidak diberi derau
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
g Kf
x x
7 5 7
y 3 2 6 y 7
1 4 7
Bilangan
terbesar
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
G = uint8(G);
Akhir Program
>> Img=imread('C:\Image\innsbruck.png');
>> G=drimpuls(Img, 0.01);
>> K=filmax(G); imshow(K);
>>
Warna hitam
berkurang
Gambar 11.33Efek filter max pada citra yang tidak diberi derau
550 Pengolahan Citra Teori
Te dan Aplikasi
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:
g fK
x x
7 5 7
y 3 2 6 y 1
1 4 7
Bilangan
terkecil
Program : filmin.m
function [G] = fi
ilmin(F, ukuran)
% FILMIN Melakuka
an penghilangan derau dengan
% menggunakan
n filter min.
% F = Citra berskala
b keabuan
% ukuran = uk
kuran jendela
Restorasi Citra 551
if nargin < 2
ukuran = 3;
end
[m, n] = size(F);
G = uint8(G);
Akhir Program
>> Img=imread('C:\Image\boneka.png');
>> K=filmin(Img); imshow(K);
>>
Gambar 11.35Efek filter min pada citra yang tidak diberi derau
Restorasi Citra 553
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
g Kf
x x
7 5 7
y 3 2 6 y 4
1 4 7
Maks
aksimum = 7
Minim
inimum = 1
Titik
itik tengah
t = (maksimum + minimum) / 2 = 4
G
Gambar 11.36Ilustrasi filter titik tengah
Program : filmid.m
554 Pengolahan Citra Teori dan Aplikasi
if nargin < 2
ukuran = 3;
end
[m, n] = size(F);
G = uint8(G);
Akhir Program
>> Img=imread('C:\Image\innsbruck.png');
>> G=drgaussian(Img, 10);
>> K=filmid(G,3,2); imshow(K);
>>
Restorasi Citra 555
dapat dipakai untuk menghapus derau periodis pada citra. Filter notch berguna
untuk menolak atau meloloskan frekuensi-frekuensi pada suatu frekuensi pusat.
Filter ini sebenarnya adalah filter band-reject yang memiliki pita sempit (bentuk
filter band-reject ditunjukkan pada Gambar 11.38).
Amplitudo
Amplitudo
Frekuensi Frekuensi
Derau yang bersifat berulang seringkali terlihat sebagai bintik yang cerah
pada citra kawasan frekuensi dibandingkan pada citra aslinya. Sebagai contoh
dapat dilihat pada Gambar 11.39(d), yang ditandai dengan lingkaran merah. Nah,
apabila bintik-bintik seperti itu dihilangkan, derau pun akan tereduksi. Hal itu
ditunjukkan pada Gambar 11.39(e).
Restorasi Citra 557
Program : filnotch.m
% 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 jarak D(
(v,u)
D = sqrt(V.^2 + U.^2);
U
% 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
>>
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);
CitraBerderau = drperiodik(CitraBerderau,10,100000,-1);
% Hitung FFT
F = fft2(double(CitraBerderau),p,q);
Akhir Program
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;
1̅ = 1 − 1h, Di = D + (11.31)
1̅ = 1 − 1h, Di = D − Dh (11.32)
1̅ = 1 + O Di = D − Dh (11.33)
Restorasi Citra 563
1̅ = 1 + O Di = D + (11.34)
Kuadran IV Kuadran I
(x4,y4) Frekuensi
(x4,y3) (0,0)
(x2,y2)
(x1,y1)
Bintik cerah
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)
>>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
(d) Hasil penapisan dengan ambang (e) Hasil filter inversi gambar d
frekuensi = 0,15
Program : inversi.m
Img=imread(berkas
s);
[a,b] = size(Img)
);
% 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
Program : fillrb.m
function H=fillrb
b(F, d0, n)
% FILLRB Digunaka
an untuk membentuk fungsi transfer
% filter lolos
s-rendah Butterworth.
% F = citra be
erskala keabuan
% d0 = ambang frekuensi (0 s/d 1)
% n = orde fil
lter
[a, b] = size(F);
; %Peroleh ukuran citra
% Menentukan ukur
ran baru untuk perluasan citra
r = nextpow2(2 * max(a, b));
p = 2 ^ r;
q = p;
% Menentukan jang
gkauan frekuensi u dan v
u = 0:(p - 1);
v = 0:(q - 1);
% Hitung jarak D(
(v,u)
D = sqrt(V.^2 + U.^2);
U
% Menentukan n ka
alau n tidak disebutkan
if nargin == 2
n = 1;
end
Akhir Program
11.7Filter Wiener
j = k. F + l (11.37)
568 Pengolahan Citra Teori dan Aplikasi
m%n
k= o
(11.38)
pq9 = 9r B, A − K B, A s ≈ tu ∑t
fw ∑vw
u
B, A − K B, A (11.39)
dengan M adalah tinggi citra dan N adalah lebar citra. Solusi atas problem di atas
dikenal dengan nama filter Wiener. Dalam kawasan frekeuensi, solusi untuk filter
Wiener berupa (McAndrew, 2004):
{ k|
|o f,v |
k B, A ≈ xo f,v |o f,v | Ez
B, A (11.40)
DiOctave, Pe
Persamaan 11.40dapat dihitung dengan mudah.
m Contoh
ditunjukkan pada skri
krip berikut.
Program : filwien.m
Img=imread(berkas
s);
[a,b] = size(Img)
);
% 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
Fi = fft2(Fa
a,p,q) .* abs(H).^2 ./ (abs(H) .^ 2 + k) ./ H;
570 Pengolahan Citra Teori
Te dan Aplikasi
>> filwien
n('C:\Image\pantai.png',0.17, 1);
1
pq9 = ∑t
f
fw ∑u
vw & B, A − 5 B, A
tu
(11.41)
Program : msecitra.m
nilai = 0;
for i=1 : m
for j=1 : n
nilai = nilai + (Fa(i,j) - Fb(i,j))^2;
end
end
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
2. Sebutkan empat jenis derau menurut kelas dan berikan penjelasan secara
singkat masing-masing.
&2 3 2 4
1 = %&3
5% !
1 α%
1 = %3/&
α−1 ! α
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.
msecitra(Img,K)
dan
msecitra(K,Img)
1. Pencarian citra: Fitur dipakai untuk mencari objek-objek tertentu yang berada
di dalam database.
Pemerolehan Fitur Bentuk dan Kontur 577
= − ̅ + − (12.1)
578 Pengolahan Citra Teori dan Aplikasi
Dalam hal ini, ( , ̅ ) menyatakan pusat massa kontur, yang diperoleh melalui
rumus
= ∑ , = ∑ (12.2)
d(1)
d(2)
d(n) d(3)
d(4)
, ̅
ALGORITMA
MA 10.1 – Memperoleh tanda-tangan objek
Masukan:
• f(M,N)
N) : citra biner berukuran M x N
Keluaran:
• jarak sebanyak
s piksel batas
tandatangan((BW):
←inbound_tracing(f)
1. batas←
2. jum← jumlah piksel batas
yp ←pusat massa objek dalam f
3. [xp, yp]
4. FOR pp←1 TO jum
←jarak antara piksel batas (batas(p)) dan
Jarak(p)←
titik pusat massa
END-F
FOR
5. RETUR
URN jarak
Program : tandatangan.m
[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
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.
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);
Akhir Program
"# $%
= ∑ . exp ! & , = 0,1,2, … , + − 1 (12.3)
Pemerolehan Fitur Bentuk
Be dan Kontur 583
>> Img=im2bw
w(imread('C:\Image\ikan-5.png'), 0.5
5);
>> Kontur=in
nbound_tracing(Img);
>> F = perol
lehFD(Kontur);
>> length(
(F)
ans =544
>>
>> [m,n]=s
size(Img); m * n
ans =62500
0
>>
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
>> plotFD(
(F)
Hasilnya ditunjukkan
an pada Gambar 12.4(b),yang menunjukkan kontur
ko objek.
(a) Cit
Citra asli (b) Hasil melalui deskripto
iptor Fourier
ourier
Gambarr 12.4Gambar kontur melaluideskriptorFou
Dalam praktik
tik, deskriptor sebanyak 544 pada contoh di
d depan terlalu
banyak kalau dijadik
ikan sebagai fitur objek. Oleh karena itu, ju
jumlah fitur yang
perlu dikurangi. Adap
apun cara yang digunakan untuk mereduksi deskriptor
de Fourier
dapat dilihat berikutt ini.
i
Program : fiturFourier.m
Pemerolehan Fitur Bentuk dan Kontur 585
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
K1 = fftshift(F) n=4
F K1 delta = (8-4)/2 =2
a + ib m + in 1 + delta
c + id o + ip
e + if q + ir
g + ih s + it
m + in a + ib
o + ip c + id
q + ir e + if
n + delta
s + it g + ih
8 elemen
a + ib q + ir
c + id s + it
q + ir a + ib
s + it c + id
G K2
K1 = ifftshift(F)
(f) n = 25 (e) n = 20
(g) n = 15 (h) n = 10
Agar deskript
ptor Fourier mempunyai sifat yang bebas ter
terhadap translasi,
rotasi, penyekalaan,, dan
d letak awal kontur, perlu dilakukan norma
malisasi. Pertama-
tama yang perlu diket
ketahui, kecuali komponen DC (a0), semua koe
oefisien yang lain
tidak dipengaruhi oleh
ol translasi (Zhang, 2002). Oleh karenaa itu, komponen
a0dapat diabaikan. Agar
A bebas dari penyekalaan, semua koefisi
isien perlu dibagi
dengan a0. Selanjutny
tnya, berdasarkan kenyataan bahwa dalam kaw
kawasan frekuensi
ternyata rotasi hany
nya akan menyebabkan perbedaan dalam ffase, maka fase
diabaikan dengan han
anya menggunakan besaran koefisien. Kalauu kkoefisien setelah
pembagian dengan aomenjadibn, |bn| akan menghasilkan bes
esaran koefisien.
Implementasinya Dap
apat dilihat pada fungsi normalisasiFD berikut.
ber
Program : normalisasiFD.m
function [G] = no
ormalisasiFD(F)
% NORMALISASIFD Digunakan
D untuk melakukan normalisasi
i
% agar FD beb
bas dari transalasi, rotasi,
% penyekalaan
n, dan perubahaan titik awal.
G = F;
Akhir Program
Hasil
il normalisasiFD tidak dapat digun
unakan untuk
mereko
ekonstruksi kontur.
Pemerolehan Fitur Bentuk
Be dan Kontur 589
Untuk mengam
amati fitur yang dihasilkan dengannormalis
sasiFD, fungsi
amatiFD berikut dap
apat digunakan.
Program : amatiFD.m
function [] = ama
atiFD(berkas)
% AMATIFD Digunak
kan untuk mengamati deskriptor Fourie
er
% yang telah dinormalisasi.
Img = im2bw(imrea
ad(berkas),0.5);
K = inbound_traci
ing(Img);
F = perolehFD(K);
;
G = fiturFourier(
(F,30);
H = normalisasiFD
D(G);
bar(H);
Akhir Program
Contoh pengg
ggunaan fungsi amatiFD:
>>amatiFD(
('C:\Image\guppi-1.png');
(a) Citra ikan-1.png (b) FD ikan-1.png (c) Citra ikan-2.png (d) FD ikan-2.png
(e) Citra ikan-3.png (f) FD ikan-3.png (g) Citra ikan-4.png (h) FD ikan-4.png
(i) Citra ikan-5.png (j) FD ikan-5.png (k) Citra guppi-1.png (l) FD guppi-1.png
12.4Sifat Bundar
-.
,= (12.4)
/.
01 = ∑ | , − 3 , ̅3 | (12.5)
dan σr berupa
Pemerolehan Fitur Bentuk
Be dan Kontur 591
41 = ∑ 5| , − 3 , ̅3 | − 01 6 (12.6)
Contoh fungsi
gsi berikut dimaksudkan untuk memperoleh fitur
fi sifat bundar.
Fungsi memerlukan masukan
m berupa citra biner.
Program : sifatbundar.m
function [c] = si
ifatbundar(BW)
% SIFATBUNDAR Dig
gunakan untuk memperoleh fitur sifat bundar.
% Masukan: BW
W adalah citra biner.
[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;
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
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)
Masukan:
• P = n piksel
Keluaran:
• Himpunan convex hull
GrahamScan(BW):
1. P0←Titik jangkar
(a) (b)
(c) (d)
(f)
(e)
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.
(a) (b)
Program : convexhull.m
jum = length(Kont
tur);
terkecil = i;
else
if Kontur(i,1) < Kontur(terkecil, 1)
terkecil = i;
end
end
end
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;
Piksel(q+1) = x;
end
end
% Siapkan tumpukan
H = [];
top = 0;
% Proses pemindaian
Pemerolehan Fitur Bentuk dan Kontur 599
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;
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
% Balik urutannya
for i=1 : indeks
CH(indeks+1-i,1) = C(i,1);
CH(indeks+1-i,2) = C(i,2);
end
dx = 0.00000001;
end
s = atan(dy / dx);
if s < 0
s = s + pi;
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:
p1 p1
p3
p2
p2 p3
(a) p3 di kiri garis. Dalam hal ini, p2 (b) p3 di kanan garis. Dalam hal ini,
berputar ke kanan untuk menuju p2 berputar ke kiri untuk
p3 menuju p3
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:
1 1
100 1
602 Pengolahan Citra Te
Teori dan Aplikasi
100 100
0
1 100
0
1 10
0
50 60
0
34 40
0
>> H = conve
exhull(M)
H =
1 1
1 100
0
100 100
0
100 1
>>
Hasil H menunjukka
kan bahwa semua titik pada M terlingkupi ooleh sabuk yang
ditentukan oleh titik-ttitik (1,1), (1, 100), (100, 100), dan (100, 1).
Untuk mempe
permudah dalam mempraktikkan fungsi conv
vexhull, fungsi
bernama tesconve
exdapat digunakan. Fungsi ini mengasumsik
ikan bahwa citra
yang akan diprose
ses memiliki objek yang mudah dibe
ibedakan dengan
latarbelakangnya.
Program : tesconvex.m
function [] = tes
sconvex(berkas)
% TESCONVEX Digun
nakan untuk membuat convex hull
% pada objek.
.
% Masukan: Na
ama berkas yang berisi objek biner.
hold off;
Akhir Program
>> tesconvex('C:\Image\guppi-1.png')
Program : konveksitas.m
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
Fungsi berikut
ut berguna untuk mendapatkan soliditas.
Pemerolehan Fitur Bentuk
Be dan Kontur 605
Program : soliditas.m
Kontur = inbound_
_tracing(BW);
CHull = convexhul
ll(Kontur);
X = CHull(:,2);
Y = CHull(:,1);
X = [X; X(1)];
Y = [Y; Y(1)];
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
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
>> soliditas
s(Img2)
ans =0.79644
4
>>
Contoh pener
erapan fitur konveksitas dan soliditas padaa sejumlah objek
dapat dilihat pada Tab
abel 12.3.
Tabel
el 12.3Fitur yang memanfaatkan convex hul
ull
Objek
O Konveksitas Soliditas
tas
ika
kan-1.png
0.8930 0.8577
ika
kan-2.png
0.8930 0.8577
ika
kan-3.png
0.8925 0.8546
ika
kan-4.png
0.8840 0.8582
ika
kan-5.png
0.8276 0.8514
gup
uppi-1.png
0.7876 0.7964
kun
unci.png
0.7352 0.7147
608 Pengolahan Citra Te
Teori dan Aplikasi
12.6 Proyeksi
Proyeksi citra
itra adalah bentuk satu dimensi isi citra
ra yang dihitung
berdasarkan sumbu ko
koordinat. Definisinya sebagai berikut:
JK ? L = ∑# N L, ;# (12.9)
JB>? ; = ∑M
# N LA , ; (12.10)
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
>> Img2 = im
m2bw(imread('c:\Image\abjad.png'), 0.5);
0
>> [V,H]=pro
oyeksi(Img2);
Pemerolehan Fitur Bentuk dan Kontur 609
>>
Proyeksi horizontal
Proyeksi vertikal
O # = ∑M
Q ∑P #
N , (12.11)
Adapun momen pusat adalah momen spasial yang dihitung relatif terhadap pusat
massa. Jika pusat massa adalah ( , ̅ ), momen pusat ditulis seperti berikut:
0 # = ∑M
Q ∑P − ̅ − #
N , (12.12)
Momen di atas bersifat invariant (tidak terpengaruh) terhadap translasi. Dalam hal
ini, ̅ dan diperoleh melalui:
MRS M
̅= , = MSR (12.13)
MSS SS
-UV Y#Y
ŋ # = W ,X = (12.14)
- SS
Program : normomen.m
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
% MOMEN_PUSAT Men
nghitung momen pusat berorde p, q
[m, n] = size(F);
;
m00 = momen_spasi
ial(F, 0, 0);
xc = momen_spasia
al(F, 1, 0) / m00;
yc = momen_spasia
al(F, 0, 1) / m00;
mpq = 0;
for y=1 : m
for x=1 : n
if F(y,x)
) ~= 0
mpq = mpq + (x-xc)^p * (y-yc)^q;
end
end
end
hasil = mpq;
Akhir Program
612 Pengolahan Citra Te
Teori dan Aplikasi
Program : momen_spasial.m
% 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:
ŋ = -0.0024 ŋ Z = -5.6067e--4
ŋ = 0.0458 ŋZ = 0.0132
ŋ = 0.1606 ŋ = -8.7615e--4
ŋ = 0.0024
ikan-2.png
ŋ = -0.0025 ŋ Z = -5.4819e--4
ŋ = 0.0456 ŋZ = 0.0132
ŋ = 0.1612 ŋ = -8.8123e--4
ŋ = 0.0024
ikan-3.png
ŋ = 0.0529 ŋ Z = 0.0031
ŋ = 0.0811 ŋZ = 0.0038
ŋ = 0.1251 ŋ = 0.0051
ŋ = 0.0054
ikan-4.png
ŋ = -0.0021 ŋ Z = -5.0026e--4
ŋ = 0.0463 ŋZ = 0.0135
ŋ = 0.1596 ŋ = -0.0010
ŋ = 0.0023
ikan-5.png
ŋ = 0.0370 ŋ Z = 0.0104
ŋ = 0.0706 ŋZ = -0.0449
ŋ = 0.1671 ŋ = 0.0080
ŋ = -0.0109
guppi-1.png
ŋ = -0.0032 ŋ Z = -0.0268
ŋ = 0.2029 ŋZ = -0.0016
ŋ = 0.0796 ŋ = 0.0012
ŋ = 0.0221
kunci.png
Hasil di Tabe
bel 12.4 menunjukkan bahwa momen pusa
sat ternormalisasi
memberikan hasil yang
yan berbeda saat ikan diputar (ikan-4.png). Namun,
N translasi
ataupun pengecilan m
menghasilkan nilai yang hampir sama. Unntuk objek yang
berbeda, terdapat perb
erbedaan yang cukup nyata.
Fitur momen
en invariant bermanfaat untuk menyatakan
an objek dengan
memperhitungkan area
are objek. Fitur ini menggunakan dasar mom
omen pusat yang
ternormalisasi. Mom
men yang dihasilkan dapat digunakan untuk
un menangani
translasi, penyekalaa
aan, dan rotasi gambar. Penciptanya, Hu (Theodoridis
(T dan
Koutroumbas, 2006),, menciptakan tujuh momen invariant seperti
rti berikut.
∅ = ŋ +ŋ
∅ = ŋ −ŋ + 2ŋ
614 Pengolahan Citra Te
Teori dan Aplikasi
∅Z = ŋZ − 3ŋ + ŋ Z − 3ŋ (12.15)
∅\ = ŋZ + ŋ + ŋ Z +ŋ
∅] = ŋZ − 3ŋ ŋZ + ŋ 5 ŋZ + ŋ −3 ŋ +ŋ Z 6+
ŋ Z − 3ŋ ŋ Z +ŋ 5 ŋ Z +ŋ −3 ŋ + ŋZ 6
∅^ = ŋ −ŋ 5 ŋZ + ŋ − ŋ +ŋ Z 6+
4ŋ ŋZ + ŋ ŋ Z +ŋ
∅` = 3ŋ −ŋ Z ŋZ + ŋ 5 ŋZ + ŋ −3 ŋ +ŋ Z 6
ŋZ − 3ŋ ŋ +ŋ Z 5 ŋ Z +ŋ − 3 ŋZ + ŋ 6
Implementasi
si untuk menghitung ketujuh momen Hu ditunj
njukkan di bawah
ini.
Program : momenhu.m
norm_20 = normome
en(F, 2, 0);
norm_02 = normome
en(F, 0, 2);
norm_11 = normome
en(F, 1, 1);
norm_30 = normome
en(F, 3, 0);
norm_12 = normome
en(F, 1, 2);
norm_21 = normome
en(F, 2, 1);
norm_03 = normome
en(F, 0, 3);
Momen.m1 = norm_2
20 + norm_02;
Momen.m2 = (norm_
_20 - norm_02)^2 + 4 * norm_11^2;
Momen.m3 = (norm_
_30 + 3 * norm_12)^2 + ...
(3 * norm_21 - no
orm_03)^2;
Momen.m4 = (norm_
_30 + norm_12)^2 + (norm_21 + norm_03
3)^2;
Pemerolehan Fitur Bentuk dan Kontur 615
Akhir Program
>>format('long');
>>Img = im2bw(imread('C:\Image\guppi-1.png'),0.5);
>> X = momenhu(Img)
X =
m1 = 0.237749187513244
m2 = 0.0147674602596600
m3 = 0.00229069589208390
m4 = 0.00135857111738100
m5 = 3.52803525223293e-006
m6 = 1.33488327285475e-004
m7 = 4.00783048172902e-006
>>
616 Pengolahan Citra Te
Teori dan Aplikasi
Contoh hasil
il perhitungan
p ketujuh momen Huuntuk sejum
mlah objek dapat
dilihat di Tabel 12.5.. Di tabel tersebut terlihat bahwa penyekalaan
an, transalasi, dan
rotasi pada ikan meng
nghasilkan nilai-nilai yang hampir sama.
Apabila objek
ek berupa kontur saja (misalnya berupa bentu
ntuk suatu pulau),
momen dapat dihitu
tung melalui jarak titik pada kontur terhada
adap pusat massa
(Rangayyan, 2005).
). Dalam hal ini, momen ke-p untuk sed
ederet jarak d(n)
didefinisikan sebagai
ai berikut:
Pemerolehan Fitur Bentuk dan Kontur 617
b= = ∑ | |= (12.16)
O= = ∑ | − b |= (12.17)
MU
O= = (12.19)
Mc U/c
R
Mc f ∑g
ijR|h % "@R |
c
e = =
g
R g (12.20)
@R ∑ h %
g ijR
R g
Mk ∑ |h % "@R |k
e = k = R
g ijR
k/c (12.21)
Mc c l ∑g
ijR|h % "@R | m
c
g
R g
Mn ∑ |h % "@R |n
eZ = = g ijR
c (12.22)
Mc c R
l ∑g |h % "@R |c m
g ijR
k R g
k
Mk f ∑ijR|h % "@R |k
o
e = =
g
R g (12.23)
@R ∑ h %
g ijR
n R g
n
Mn f ∑ijR|h % "@R |n
o
eZ = =
g
R g (12.24)
@R ∑ h %
g ijR
Fakta yang menarik, kumpulan fitur {F1, F2’, F3’} mempunyai sifat-sifat
seperti berikut (Rangayyan, 2005).
618 Pengolahan Citra Te
Teori dan Aplikasi
Semua fitur da
dapat diperbandingkan secara langsung.
F3’ menyataka
kan kekasaran kontur yang lebih baik daripa
pada F3. Semakin
besar nilai, sem
semakin besar kekasaran kontur.
Program : mjarakpusat.m
Fitur.F1 = sqrt(m
momen_pusat_ke_p(F, 2)) / momen_ke_p(
(F, 1);
Fitur.F2 = momen_
_pusat_ke_p(F, 3) / (momen_ke_p(F, 2)
)^1.5);
Fitur.F3 = momen_
_pusat_ke_p(F, 4) / (momen_ke_p(F, 2)
)^2);
Fitur.F2a = momen
n_pusat_ke_p(F, 3)^(1/3) / momen_ke_p
p(F, 1);
Fitur.F3a = momen
n_pusat_ke_p(F, 4)^(1/4) / momen_ke_p
p(F, 1);
Fitur.mf = Fitur.
.F3a - Fitur.F1;
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
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
Akhir Program
F1 = 0.358466495430004
F2 = 0.0501126615340028
F3 = 0.0239217027470453
F2a = 0.391651322336318
F3a = 0.417780786529233
mf = 0.0593142910992286
>>
T
Tabel 12.6Fitur momen ke jarak pusat
Ob
Objek Fitur
F1 = 0.2526 F2’ = 0.277
776
F2 = 0.0195 F3’ = 0.298
988
F3 = 0.0070 Mf = 0.046
463
ikan-1.pngg
F1 = 0.2526 F2’ = 0.277
776
F2 = 0.0195 F3’ = 0.298
988
F3 = 0.0070 Mf = 0.046
463
ikan-2.pngg
F1 = 0.2542 F2’ = 0.279
796
F2 = 0.0199 F3’ = 0.301
012
F3 = 0.0073 Mf = 0.047
470
ikan-3.pngg
F1 = 0.2484 F2’ = 0.274
744
F2 = 0.0189 F3’ = 0.296
969
F3 = 0.0069 Mf = 0.048
485
ikan-4.pngg
F1 = 0.2422 F2’ = 0.265
658
F2 = 0.0173 F3’ = 0.285
857
F3 = 0.0059 Mf = 0.043
434
ikan-5.pngg
F1 = 0.3372 F2’ = 0.399
991
F2 = 0.0541 F3’ = 0.446
469
F3 = 0.0322 Mf = 0.109
096
guppi-1.png
ng
F1 = 0.3585 F2’ = 0.391
917
F2 = 0.0501 F3’ = 0.417
178
F3 = 0.0239 Mf = 0.059
593
kunci.pngg
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
dengans adalah radius dari (y,x) ke pusat massa (centroid), t adalah sudut antara r
dan sumbu x (lihat Gambar 12.26), dan Rpq(r) adalah polinomial radial ortogonal
seperti berikut:
="|q| / ="C !
x=q s = ∑C −1 C
U||V| U}|V| ~=" C
(12.26)
C!! "C&!! "C&!
c c
Dalam hal ini, n=0,1,2,….; 0 < |q|< n, j= √−1, , dan p-|q| bernilai genap. Beberapa
polinomial yang digunakan untuk memperoleh momen Zernikeditunjukkan pada
Tabel 12.7 (Flusser, dkk., 2009).PolinomialZernike hingga orde 12 dibahas pada
Duin, dkk. (2007). Adapun sembilanpolinomialZernike pertama ditunjukkan pada
Gambar 12.17.
622 Pengolahan Citra Teori dan Aplikasi
r
Lingkaran:
x2 + y2 < 1
Centroid
R00
R40 R11
R22 R33
R44
R42
R31
R20
=Y
‡=q = ˆP ˆQ ‰ , . p ∗ =q , ; + ≤1 (12.27)
$
Dengan p berupa bilangan bulat nol atau positif dan n p-|q| bernilai genap dan |q| <
p.
Apabila f(y,x) adalah citra digital, persamaan di atas dapatdihampiri
dengan
624 Pengolahan Citra Teori dan Aplikasi
=Y
‡=q = ∑P ∑Q ‰ , . p ∗ =q , (12.29)
$
Perhitungan Normalisasi
ZMD ZMD
Ž Ž
o
= f , o
= f (12.31)
@SS @SS
Ž
Komponen f adalah faktor penyekala. Dalam hal ini, β adalah suatu nilai yang
@SS
telah ditentukan terlebih dulu (pada contoh di belakang, β dipilih sebesar 20000)
dan m0,0(momen spasial orde (0,0)) tidak lain adalah luas objek.
Normalisasi translasi dilakukan dengan cara menggeser pusat massa ke
tengah citra. Dalam hal ini, nilai X dan Y pusat massa dihitung melalui rumus:
@ @
3 = @RS , 3 = @SR (12.32)
SS SS
Pada persamaan di atas, (yc, xc) adalah sentroid, m1,0 adalah momen spasial order
(1,0) dan m1,0 adalah momen spasial order (0,1). Dengan demikian, nilai x dan y
baru dapat diperoleh melalui
626 Pengolahan Citra Teori dan Aplikasi
M
o
= 3 − , o
= 3 − (12.33)
•UV
‡=q o = @ (12.34)
SS
selang = 2 / (m-1);
ii = 0;
for i=-1 : selang : 1
ii = ii + 1;
jj = 0;
for j=-1 : selang : 1;
jj = jj + 1;
X(ii, jj) = j;
Y(ii, jj) = i;
end
end
Dalam hal ini, m adalah tinggi atau lebar citra (karena tinggi dan lebar citra dibuat
sama).
Berdasarkan koordinat yang tercantum dalam X dan Y di atas, posisi setiap
piksel di dalam citra yang berada dalam lingkaran dapat diperoleh. Dengan
demikian, informasi ρ dan θdapat dihitung berdasarkan posisi piksel terhadap
pusat lingkaran.
Implementasi momen Zernikedapat dilihat pada fungsi zermoment.
Pemerolehan Fitur Bentuk
Be dan Kontur 627
Program : zermoment.m
function A = zerm
moment (F, orde, tampil)
% ZERMOMENT Mengh
hasilkan koefisien momen Zernike.
% Masukan:
% F = Citr
ra biner
% orde = order
o momen Zernike
% tampil = true untuk menampilkan gambar
if nargin < 3
tampil = fals
se;
end
[m, n] = size(B);
;
C = imresize(B, [m1,
[ n1]);
[m, n] = size(C);
;
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;
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 lingkaran
DidalamL = find(L <=1);
Lingkaran = zeros(m,n);
Lingkaran(DidalamL) = 1;
luas = 0;
for i=1 : m
for j=1: n
if Lingkaran(i,j) == 1
luas = luas + 1;
end
end
end
Pemerolehan Fitur Bentuk dan Kontur 629
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;
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
p = 0;
if n == 2
630 Pengolahan Citra Teori dan Aplikasi
switch (l)
case 0, p = 2*(rho.^2)-1;
case 2, p = (rho.^2);
end;
elseif n == 3
switch (l)
case 1, p = 3*(rho.^3)-2*rho;
case 3, p = (rho.^3);
end;
elseif n == 4
switch (l)
case 0, p = 6*(rho.^4)-6*(rho.^2)+1;
case 2, p = 4*(rho.^4)-3*(rho.^2);
case 4, p = (rho.^4);
end;
elseif n == 5
switch (l)
case 1, p = 10*(rho.^5)-12*(rho.^3)+3*rho;
case 3, p = 5*(rho.^5)- 4*(rho.^3);
case 5, p = (rho.^5);
end;
elseif n == 6
switch (l)
case 0, p = 20*(rho.^6)-30*(rho.^4)+12*(rho.^2)-1;
case 2, p = 15*(rho.^6)-20*(rho.^4)+ 6*(rho.^2);
case 4, p = 6*(rho.^6)- 5*(rho.^4);
case 6, p = (rho.^6);
end;
elseif n == 7
switch (l)
case 1, p = 35*(rho.^7)-60*(rho.^5)+30*(rho.^3)-4*rho;
case 3, p = 21*(rho.^7)-30*(rho.^5)+10*(rho.^3);
case 5, p = 7*(rho.^7)- 6*(rho.^5);
case 7, p = (rho.^7);
end;
elseif n == 8
switch (l)
case 0, p = 70*(rho.^8)-140*(rho.^6)+...
90*(rho.^4)-20*(rho.^2)+1;
case 2, p = 56*(rho.^8)-105*(rho.^6)+ ...
60*(rho.^4)-10*(rho.^2);
case 4, p = 28*(rho.^8)- 42*(rho.^6)+15*(rho.^4);
case 6, p = 8*(rho.^8)- 7*(rho.^6);
case 8, p = (rho.^8);
end;
elseif n == 9
switch (l)
case 1, p = 126*(rho.^9)-280*(rho.^7)+ ...
210*(rho.^5)-60*(rho.^3)+5*rho;
case 3, p = 84*(rho.^9)-168*(rho.^7)+ ...
105*(rho.^5)-20*(rho.^3);
case 5, p = 36*(rho.^9)- 56*(rho.^7)+ 21*(rho.^5);
case 7, p = 9*(rho.^9)- 8*(rho.^7);
case 9, p = (rho.^9);
end;
elseif n == 10
switch (l)
case 0, p = 252*(rho.^10)-630*(rho.^8)+ ...
560*(rho.^6)-210*(rho.^4)+30*(rho.^2)-1;
Pemerolehan Fitur Bentuk dan Kontur 631
for i=1 : m0
for j=1: n0
if F(i,j) == 1
if min_y > i
min_y = i;
end
632 Pengolahan Citra Teori dan Aplikasi
if max_y < i
max_y = i;
end
if min_x > j
min_x = j;
end
if max_x < j
max_x = j;
end
end
end
end
Akhir Program
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
Hasil momen
en Zernike dengan orde 4 untuk berbagai citra
cit diperlihatkan
pada Tabel 12.8.
T
Tabel 12.8Fitur momen Zernike orde 4
Objek Fitur
Z20 =0,067489 Z40 =0,031
31014
Z22 =0,655700 Z42 =0,187
87538
Z31 =0,015904 Z44 =0,575
75370
ikan-1.png Z33 =0,014320
Z20 = 0,067489 Z40 = 0,031
31014
Z22 = 0,655700 Z42 = 0,187
87538
Z31 = 0,015904 Z44 = 0,575
75370
ikan-2.png Z33 = 0,014320
Z20 = 0,066243 Z40 = 0,030
30826
Z22 = 0,634994 Z42 = 0,182
82968
Z31 = 0,014238 Z44 = 0,552
52235
ikan-3.png Z33 = 0,008975
634 Pengolahan Citra Te
Teori dan Aplikasi
Objek Fitur
Z20 = 0,087641 Z40 = 0,050
50947
Z22 = 0,585965 Z42 = 0,191
91575
Z31 = 0,013469 Z44 = 0,403
03293
ikan-4.png Z33 = 0,042353
Z20 = 0,065993 Z40 = 0,029
29108
Z22 = 0,655143 Z42 = 0,187
87842
Z31 = 0,008639 Z44 = 0,570
70436
ikan-5.png Z33 = 0,036051
Z20 = 0,073650 Z40 = 0,034
34444
Z22 = 0,611287 Z42 = 0,180
80690
Z31 = 0,058099 Z44 = 0,470
70811
guppi-1.png Z33 = 0,058516
Z20 = 0,099800 Z40 = 0,015
15126
Z22 = 0,440984 Z42 = 0,192
92140
Z31 = 0,112749 Z44 = 0,122
22398
Z33 = 0,010853
kunci.png
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) tidak perlu mengetahui informasi kontur yang boleh saja tidak tersedia;
b) dapat menangkap isi dalam bentuk;
c) lebih andal terhadap variasi bentuk.
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.
? $
Je ~, ∅ = ∑? ∑ ‰ s, t exp 5y2• ~+ ∅ 6 (12.35)
1 ‘
dengan:
Cara untuk memproses dengan PFT2 seperti berikut. Misalnya, citra yang
akan diproses berupa I = {f(x, y); 0<x<M, 0<y<N}. Citra ini dikonversikan dari
ruang Kartesian ke ruang polar menjadi Ip = {f(r, t); 0<r<R, 0< t< 2• }, dengan
R adalah radius maksimum bentuk. Titik pusat ruang polar dijadikan sebagai pusat
bentuk dengan tujuan agar bentuk tidak tergantung pada translasi. Pusat bentuk
dihitung berdasarkan:
3 = ∑Q " , 3 = ∑M"
P (12.36)
M
P"P“
s= − 3 + − 3 , t = <s, < (12.37)
Q"Q“
—˜ , —˜ , —˜ ,% —˜ @, —˜ @,%
”e• = { , ,…, ,…, ,…, } (12.38)
$? c —˜ , —˜ , —˜ , —˜ ,
Program : gfd.m
Kontur = inbound_
_tracing(F);
jum = length(Kont
tur);
[x_pusat, y_pusat
t] = centroid(F);
panjang = ((x
xi-x_pusat)^2+(yi-y_pusat)^2)^0.5;
if panjang > rad_maks
rad_maks = panjang;
end
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
F
FI(rad+1, ang+1) = FI(rad+1, ang+1) - ...
638 Pengolahan Citra Teori dan Aplikasi
F(y, x) * ...
sin(2 * 3.14 * rad * ...
(radius / rad_maks) + ang * theta);
end
end
end
end
% Peroleh GFD
for rad=0 : m
for ang=0 : n
if (rad==0) && (ang==0)
dc = (FR(1,1)^2+FI(1,1)^2)^.5;
GFD(1) = dc /(pi * rad_maks^2);
else
GFD(rad * n+ang+1)=(FR(rad+1, ang+1)^2+ ...
FI(rad+1,ang+1)^2)^.5 / dc;
end
end
end
Akhir Program
>> Img=im2bw(imread('C:\Image\ikan-1.png'),0.5);
>> X=gfd(Img,4,6)
X =
Columns 1 through 6:
0.0933387
7 0.0168520 0.0384655 0.017178
87 0.0299010
0.0500069
0.0469270
0 0.0394526 0.0039343 0.032143
31 0.0205917
0.0125721
Column 31:
0.0162803
3
>>
gfd(Img,4,6)
Ob
Objek Fitur
GFD1 = 0.396156
GFD2 = 0.020570
GFD3 = 0.261192
ikan-3.png
ng GFD4 = 0.017805
GFD1 = 0.393667
GFD2 = 0.020181
GFD3 = 0.258510
ikan-4.png
ng GFD4 = 0.019910
GFD1 = 0.396182
GFD2 = 0.021021
GFD3 = 0.255305
ikan-5.png
ng GFD4 = 0.020895
GFD1 = 0.262418
GFD2 = 0.073336
GFD3 = 0.303962
guppi-1.png
ng GFD4 = 0.249740
GFD1 = 0.386401
GFD2 = 0.003771
GFD3 = 0.346719
kunci.pngg GFD4 = 0.291891
Kotak pemba
batas (bounding box) adalah kotak terkec
kecil yang dapat
melingkupi sebuah objek.
o Kotak pembatas dibedakan menjadii ddua buah: kotak
pembatas yang berori
rientasi citra dan kotak pembatas yang berorie
rientasi pada objek
(Pratt, 2001). Perbeda
daan kedua kotak pembatas ditunjukkan padaa Gambar
G 12.23.
β
α
θ
X
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:
-R,R
t= < "
›- œ (12.41)
c,S "-S,c
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
Program : bboxcitra.m
[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
>>
Program : bboxobjek.m
if nargin < 2
tampil = true;
end
jum = length(Kontur);
[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
% 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
>> Img=im2b
bw(imread('C:\Image\ikan-3.png'),
,0.5);
>> rasio = bboxobjek(Img)
rasio = 0.
.60112
>>
Tabel 12.10R
Rasio kotak pembatas berorientasi objek dan
da citra
Objek Rasio Berorientasi Rasio Beror
orientasi
Citra Objek
jek
ikan-1.png
ng
0.592211 0.59379
791
ikan-2.png
ng
0.592211 0.59379
791
ikan-3.png
ng
0.599856 0.60111
117
ikan-4.png
ng
0.544270 0.59008
088
ikan-5.png
ng 0.588815 0.59014
142
646 Pengolahan Citra Te
Teori dan Aplikasi
guppy-1.pn
png
0.522930 0.50697
971
kunci.png
ng
0.536716 0.52406
068
Latihan
1. Jelaskan penger
ertian tanda tangan kontur. Berikan ilustrasi untuk
menjelaskannya.
2. Manakah sifat ber
erikut yang dipenuhi oleh tanda tangan kontur?
ur?
(a) Translasi
(b) Rotasi
(c) Penyekalaan
3. Jelaskan mekanis
nisme deskriptor Fourier dalam mewakili
li bentuk dengan
menggunakan seju
ejumlah titik.
4. Jelaskan istilah berikut.
be
(a) Convex hull
(b) Soliditas
(c) Konveksitas
5. Jelaskan pengertia
tian proyeksi citra.
6. Apa kelebihan moomen Hu dibandingkan dengan momen pusat?
at?
7. Apa yang dimaksu
ksud dengan momen jarak ke pusat?
8. Berikan penjelasa
san singkat tentang prinsip kerja momen Zernik
nike.
9. Berapa jumlah mo
momen Zernike untuk orde:
(a) 4
Pemerolehan Fitur Bentuk dan Kontur 647
(b) 6
(c) 10
10. Apa keunggulan PFT terhadap momen Zernike?
11. Jelaskan perbedaan antara kotak pembatas berorientasi citra dan kotak
pembatas berorientasi objek? Fitur apa yang dapat diperoleh dari kedua kotak
pembatas tersebut?
12. Cobalah untuk membuat tanda tangan kontur agar dapat bersifat bebas
terhadap rotasi dan penyekalaan. Bantuan: Gunakan deskriptor Fourier untuk
membantu menyelesaikan masalah ini.
648 Pengolahan Citra Teori dan Aplikasi
>
BAB 13
Ekstraksi
Fitur Tekstur
setiap citra.Tekstur pada Gambar 13.1(c), dari sisi keteraturan pola, adalah yang
paling mudah untuk dikenali.
yang tersusun atas pola-pola periodis. Dalam hal ini, warna/intensitas serta bentuk
elemen tekstur diulang dengan interval yang sama.
(a) (b)
=∑ . ( ) (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
= ∑ ( − ) () (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)
=∑ () (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)
# =1− %&'
(13.6)
Program : stattekstur.m
% STATTEKSTUR Mem
mperoleh statistika tekstur.
% Masukan: F = citra berskala keabuan.
% Keluaran: Stat
S = berisi statistika tekstur
%
% Didasarkan pada Gonzalez, Woods, dan Eddins, 20
004
[m, n] = size(F);
;
% Hitung frekuens
si aras keabuan
L = 256;
Frek = zeros(L,1)
);
F = double(F);
for i = 1 : m
for j = 1 : n
intensitas = F(i,
,j);
Frek(intensitas+1
1) = Frek(intensitas+1) + 1;
end
end
% Hitung probabil
litas
jum_piksel = m * n;
for i=0 : L-1
Prob(i+1) = Frek(
(i+1) / jum_piksel;
end
% Hitung mu
Pemerolehan Fitur Tekstur 657
mu = 0;
for i=0 : L-1
mu = mu + i * Prob(i+1);
end
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
% 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;
Stat.mu = mu;
Stat.deviasi = deviasi;
Stat.skewness = skewness;
Stat.energi = energi;
Stat.entropi = entropi;
Stat.smoothness = smoothness;
Akhir Program
>>Img=imread('C:\Image\sidikjari.png');
658 Pengolahan Citra Teori dan Aplikasi
>> G=stattekstur(Img)
G =
mu = 125.130203247070
deviasi = 45.8705882891252
skewness = 0.0268669028523393
energi = 0.00630368571728468
entropi = 5.10425454860202
smoothness = 0.0313442386279402
>>
( =∑ ( − )* ) ( . ( ) (13.7)
)* = ∑ . ( ) (13.8)
Momen kedua, yakni varians aras keabuan, yang berlaku sebagai ukuran
ketidakhomogenan, berupa
( = =∑ ( − )( ) . ( ) (13.9)
+,
=
+' ,/'
(13.10)
+
. = + /' (13.11)
'
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):
L3 1 2 1
E3 -1 0 1
-1 2 -1
S3
Selain cadar yang berukuran 1x3, terdapat cadar yang berukuran 1x5.
Kelima cadar berupa:
L5 = [1 4 6 4 1]
E5 = [-1 -2 0 2 1]
S5 = [-1 0 2 0 -1]
R5 = [1 -4 6 -4 1]
W5 = [ -1 2 0 -2 1]
Sebagai tambahan, R berasal dari kata “Ripple detection” dan W berasal dari
“Wave detection”. Karakteristik variasi bobot piksel kelima filter ditunjukkan
pada Gambar 13.6.
L5 1 4 6 4 1
E5 -1 -2 0 2 1
S5 -1 0 2 0 -1
W5 -1 2 0 -2 1
R5 1 -4 6 -4 1
1 −1 2 −1
022 −1 2 −1 = 0−2 4 −22 (13.12)
1 −1 2 −1
Oleh karena itu, dengan cadar berukuran 1x3 dapat diperoleh kombinasi perkalian
sebanyak 9, sedangkan dengan cadar berukuran 1x5 dapat terbentuk 25 kombinasi
perkalian. Tabel 13.2 menunjukkan kesembilan kombinasi ketiga cadar
1x3.Adapun Tabel 13.3memperlihatkan kombinasi pada cadar 1x5.
Fungsi berna
rnama laws berikut merupakan imple
lementasi untuk
memperoleh citra yan
ang berisi energi tekstur.
Program : laws.m
function [E] = la
aws(F, cadar1, cadar2, w)
% LAWS Berguna un
ntuk memperoleh citra yang berisi
% energi tek
kstur.
% Masukan: F = Citra berskala keabuan.
% cadar1
c dan cadar2 = nama cadar
% (S3,
( S5, E3, dst.)
% w = ukuran jendela.
F = double(F);
% Memperoleh ener
rgi tekstur. Hasil berupa
% citra beruk
kuran sama dengan F.
% w = ukuran jendela
L3 = [1 2 1];
E3 = [-1 0 -1];
S3 = [-1 2 -1];
L5 = [1 4 6 4 1];
;
E5 = [-1 -2 0 2 1];
1
S5 = [-1 0 2 0 -1
1];
R5 = [1 -4 6 -4 1
1];
W5 = [-1 2 0 -2 1
1];
% Cek cadar 1
ifstrcmp(cadar1, 'L3') == 1
Cd1 = L3;
ukuran1 = 3;
elseifstrcmp(cadaar1, 'E3') == 1
Cd1 = E3;
ukuran1 = 3;
elseifstrcmp(cadaar1, 'S3') == 1
Cd1 = S3;
ukuran1 = 3;
elseifstrcmp(cadaar1, 'L5') == 1
664 Pengolahan Citra Teori dan Aplikasi
Cd1 = L5;
ukuran1 = 5;
elseifstrcmp(cadar1, 'E5') == 1
Cd1 = E5;
ukuran1 = 5;
elseifstrcmp(cadar1, 'S5') == 1
Cd1 = S5;
ukuran1 = 5;
elseifstrcmp(cadar1, 'R5') == 1
Cd1 = R5;
ukuran1 = 5;
elseifstrcmp(cadar1, 'W5') == 1
Cd1 = W5;
ukuran1 = 5;
else
ukuran1 = 0;
end
% Cek cadar 2
ifstrcmp(cadar2, 'L3') == 1
Cd2 = L3;
ukuran2 = 3;
elseifstrcmp(cadar2, 'E3') == 1
Cd2 = E3;
ukuran2 = 3;
elseifstrcmp(cadar2, 'S3') == 1
Cd2 = S3;
ukuran2 = 3;
elseifstrcmp(cadar2, 'L5') == 1
Cd2 = L5;
ukuran2 = 5;
elseifstrcmp(cadar2, 'E5') == 1
Cd2 = E5;
ukuran2 = 5;
elseifstrcmp(cadar2, 'S5') == 1
Cd2 = S5;
ukuran2 = 5;
elseifstrcmp(cadar2, 'R5') == 1
Cd2 = R5;
ukuran2 = 5;
elseifstrcmp(cadar2, 'W5') == 1
Cd2 = W5;
ukuran2 = 5;
else
ukuran2 = 0;
end
H=ones(w,w)/(w^2);
E=konvolusi2(E, H);
Akhir Program
>> Lena=imread('C:\Image\lena256.png');
>> G=laws(Lena,'R5','S5',15);
>>imshow(G)
>>
13.5 Lacunarity
Lacunarity merupakan
m ukuran fraktal yang dapat di
digunakan untuk
memperoleh fitur tekstur
te (Petrou&Sevilla, 2006).Definisi lacu
acunarity sebagai
berikut.
M N
1
∑∑ P
2
mnn
MN m =1 n =1 (13.13)
Ls = 2
−1
1 M N
MN
∑ ∑
k =1 l =1
Pkl
M N
1 Pmn
La =
MN
∑∑ 1 M N
−1 (13.14)
m =1 n =1
MNN
∑∑P k =1 l =1
kl
1/ p
p
1 M N
Pmn
Lp = ∑∑ − 1 (13.15)
1 M N
MN m =1 n =1
∑ ∑ Pkl
MMN k =1 l =1
Dalam Hal ini, M x N menyatakan ukuran citra, Pmn menyatakann intensitas piksel
pada (m, n), dan p ber
ernilai 2, 4, 6, dan seterusnya.
Implementasi
si lacunarity dapat dilihat di bawah ini.F
Fungsi bernama
lacunarity memerluka
kan masukan berupa citra berwarna.
Program : lacunarity.m
function [H] = la
acunarity(RGB)
% LACUNARITY Berg
guna untuk memperoleh fitur lacunarit
ty.
% Masukan: RG
GB = Citra berwarna
%
% Keluaran: H = Nilai balik berupa lacunarity
GR = im2bw(RGB, 0
0.5);
[tinggi, lebar] = size(GR);
RGB = double(RGB));
GR = double(GR);
668 Pengolahan Citra Teori dan Aplikasi
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;
(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;
Akhir Program
>>Img = imread('C:\Image\lapangan.png');
>> G = lacunarity(Img)
G =
lsr = 0.241901390093493
lsg = 0.309382645500090
Pemerolehan Fitur Tekstur 671
lsb = 0.330578855094647
ls = 2.62283837310405
lar = 2.26230885876551e-016
lag = -6.26450950373207e-015
lab = 1.98432322425409e-015
la = 5.19464568545421e-013
l2r = 0.491834718267793
l2g = 0.556221759283250
l2b = 0.574959872595208
l2 = 1.61951794466923
l4r = 0.624600061772115
l4g = 0.712312444691126
l4b = 0.754989005910267
l4 = 1.92692968430085
l6r = 0.703270891746616
l6g = 0.810362947598715
l6b = 0.864331218749092
l6 = 2.11922715098243
l8r = 0.753937245024470
l8g = 0.872513094744670
l8b = 0.932269246020702
l8 = 2.23333538990262
l10r = 0.789310933422419
l10g = 0.914539454662371
l10b = 0.977728062526614
l10 = 2.30607817570218
>>
Perlu diketahui:
13.6GLCM
statistikadidasarkan pada nilai piksel citra asli semata, seperti varians, dan tidak
memperhatikan hubungan ketetanggaan piksel.Pada orde kedua, hubungan
antarpasangan dua piksel citra asli diperhitungkan (Hall-Beyer, 2007).
Misalkan, f(x, y) adalah citra dengan ukuran Nx dan Ny yang memiliki
piksel dengan kemungkinan hingga L level dan 445 adalah vektor arah ofset spasial.
6789:5 ( , <)didefinisikan sebagai jumlah piksel dengan < ∈ 1, . . , 7 yang terjadi
pada ofset445 terhadap piksel dengan nilai ∈ 1, . . , 7, yang dapat dinyatakan
dalam rumus (Newsam dan Kammath, 2005):
0 1 2 3 0 1 2 3
0 1 2 3
0 2 2 1 0
1 0 2 0 0
2 0 0 3 1
3 0 0 0 1
Komposisi piksel 3
dengan 3
(c) Jumlah pasangan piksel
4 2 1 0
L Q
K24 24 24 24P
2 4 0 0
K P
K24 24 24 24P
K1 0 6 1P
K24 24 24 24P
K0 0 1 2P
J24 24 24 24O
Dalam hal ini, L menyatakan jumlah level yang digunakan untuk komputasi.
Kontras yang merupakan ukuran keberadaan variasi aras keabuan piksel
citra dihitung dengan cara seperti berikut:
([ \]( ,T)'
YZ9 = ∑ ∑T
%( T)'
(13.19)
Korelasi yang
ng merupakan ukuran ketergantungan linea
ear antarnilaiaras
keabuan dalam citraa dihitung
d dengan menggunakan rumus:
dengan
Implementasi
si GLCM untuk mendapatkan beberapa fitur
fi yang telah
dijelaskan khusus unt
ntuk jarak satu ditunjukkan di bawah ini.
Program : glcm.m
GLCM45 = zeros(25
56, 256);
total_piksel45 = 0;
Pemerolehan Fitur Tekstur 677
% -- Sudut 45
a = F(y, x);
b = F(y-1, x+1);
GLCM45(a+1, b+1) = GLCM45(a+1, b+1) + 1;
total_piksel45 = total_piksel45 + 1;
% -- Sudut 90
a = F(y, x);
b = F(y-1, x);
GLCM90(a+1, b+1) = GLCM90(a+1, b+1) + 1;
total_piksel90 = total_piksel90 + 1;
% -- Sudut 135
a = F(y, x);
b = F(y-1, x-1);
GLCM135(a+1, b+1) = GLCM135(a+1, b+1) + 1;
total_piksel135 = total_piksel135 + 1;
end
end
if (GLCM45(a+1, b+1) ~= 0)
entropi45 = entropi45 - (GLCM45(a+1, b+1) * ...
(log(GLCM45(a+1, b+1))));
end
if (GLCM90(a+1, b+1) ~= 0)
entropi90 = entropi90 - (GLCM90(a+1, b+1) * ...
(log(GLCM90(a+1, b+1))));
end
if (GLCM135(a+1, b+1) ~= 0)
entropi135 = entropi135 - (GLCM135(a+1, b+1) * ...
(log(GLCM135(a+1, b+1))));
end
end
end
% -- Hitung kovarians
% -- Hitung px [] dan py [] dulu
korelasi0 = 0.0;
px0 = 0;
py0 = 0;
reratax0 = 0.0;
reratay0 = 0.0;
Pemerolehan Fitur Tekstur 679
stdevx0 = 0.0;
stdevy0 = 0.0;
korelasi45 = 0.0;
px45 = 0;
py45 = 0;
reratax45 = 0.0;
reratay45 = 0.0;
stdevx45 = 0.0;
stdevy45 = 0.0;
korelasi90 = 0.0;
px90 = 0;
py90 = 0;
reratax90 = 0.0;
reratay90 = 0.0;
stdevx90 = 0.0;
stdevy90 = 0.0;
korelasi135 = 0.0;
px135 = 0;
py135 = 0;
reratax135 = 0.0;
reratay135 = 0.0;
stdevx135 = 0.0;
stdevy135 = 0.0;
% Hitung korelasi
for a = 0 : 255
for b = 0 : 255
korelasi0 = korelasi0 + ((a-px0)*(b-py0)* ...
GLCM0 (a+1, b+1)/(stdevx0*stdevy0));
korelasi45 = korelasi45 + ((a-px45)*(b-py45)* ...
GLCM45 (a+1, b+1)/(stdevx45 * stdevy45));
korelasi90 = korelasi90 + ((a-px90)*(b-py90)* ...
GLCM90 (a+1, b+1)/(stdevx90 * stdevy90));
korelasi135 = korelasi135 + ((a-px135)*(b-py135)* ...
GLCM135 (a+1, b+1)/(stdevx135 * stdevy135));
end
end
G0.asm = asm0;
G0.kontras = kontras0;
G0.idm = idm0;
G0.entropi = entropi0;
G0.korelasi = korelasi0;
G45.asm = asm45;
G45.kontras = kontras45;
G45.idm = idm45;
G45.entropi = entropi45;
G45.korelasi = korelasi45;
G90.asm = asm90;
G90.kontras = kontras90;
G90.idm = idm90;
G90.entropi = entropi90;
G90.korelasi = korelasi90;
G135.asm = asm135;
G135.kontras = kontras135;
G135.idm = idm135;
G135.entropi = entropi135;
G135.korelasi = korelasi135;
Akhir Program
>>Batik=rgb2gray(imread('C:\Image\batik.png'));
>> [G0, G45, G90, G135] = glcm(Batik)
G0 =
Pemerolehan Fitur Tekstur 681
asm = 6.5150e-004
kontras = 537.71
idm = 0.10643
entropi = 8.4453
korelasi = 6.8221e-004
G45 =
asm = 5.6409e-004
kontras = 778.22
idm = 0.085559
entropi = 8.5749
korelasi = 5.8479e-004
G90 =
asm = 6.6484e-004
kontras = 350.20
idm = 0.10536
entropi = 8.3458
korelasi = 7.5820e-004
G135 =
asm = 5.8796e-004
kontras = 705.20
idm = 0.092194
entropi = 8.5474
korelasi = 6.1446e-004
>>
Pada contoh di atas, G0, G45, G90, dan G135 secara berturut-turut berisi lima
buah fitur tekstur pada arah 00, 450, 900, dan 1350.
Perlu diketahui, fitur GLCM bergantung pada rotasi.Oleh karena itu,
pendekatan yang dapat dilakukan adalah dengan meratakan nilai fitur untuk
keempat sudut.
Latihan
6. Gambarkan tiga cadar berukuran 1x3 yang digunakan oleh Laws untuk
mendapatkan energi tekstur. Apa kegunaan setiap cadar?
7. Apa yang dimaksud lacunarity? Bagaimana perumusannya?
8. Mengapa GLCM digolongkan sebagai tekstur statistisberorde dua?
9. Implementasikan fungsi untuk menghitung skewness dan kurtosis berdasarkan
PDF yang dibahas di Subbab 13.3. Ujilah pada tiga citra yang menurut Anda
berbeda dalam tekstur.
10. Modifikasilah fungsi lacunarity agar dapat dipakai untuk menghitung fitur
tekstur citra berskala keabuan.
11. Tulislah fungsi untuk mengeksplorasi rumus
1/ p
p
1 M N
Pmn
Lp = ∑∑ − 1
1 M N
MN m =1 n =1
∑ ∑ Pkl
MN
k =1 l =1
dengan menjadikan p sebagai argumen.
12. Lakukan eksperimen untuk memotret suatu objek yang mengandung suatu
pola. Kemudian lakukan pemutaran dengan berbagai sudut. Hitunglah nilai
rerata fitur-fitur yang didasarkan pada GLCM untuk empat sudut (0o, 45o, 90o,
dan 135o) untuk setiap citra. Apakah hasilnya mirip?
13. Kembangkan fungsi GLCM yang bisa mengukur pada jarak lebih dari 1
piksel.
684 Pengolahan Citra Teori dan Aplikasi
BAB 14
Aplikasi
Temu Kembali
Citra
Setelah bab ini berakhir, diharapkan pembaca dapat
memahami berbagai hal yang berhubungan dengan temu
kembali citra dan mampu mempraktikkannya.
Citra
Masukan Prapemrosesan dan
Segmentasi
Database
Ekstraksi
Fitur
Perhitungan
Jarak Fitur
Pengurutan
Jarak
Pemilihan n Citra
Hasil
, = ∑ − (14.1)
688 Pengolahan Citra Teori dan Aplikasi
Dalam hal ini, v1 dan v2 adalah dua vektor yang jaraknya akan dihitung dan N
menyatakan panjang vektor. Apabila vektor memiliki dua nilai, jarak Euclidean
dapat dibayangkan sebagai sisi miring segitiga (Gambar 14.2(a)).
2 + 2
y+x max(y, x)
y y y
x x x
= [ 4, 3, 6]
= [ 2, 3, 7]
Jarak Euclidean merupakan jarak yang umum dipakai dalam temu kembali
citra. Beberapa penelitian yang memanfaatkan jarak ini antara lain dilakukan oleh
Hastuti, dkk. (2009) dan Kadir, dkk. (2011a).
, =∑ | − | (14.2)
Aplikasi Temu Kembali Citra 689
Dalam hal ini, v1 dan v2 adalah dua vektor yang jaraknya akan dihitung dan N
menyatakan panjang vektor. Apabila vektor memiliki dua nilai, jarak city-block
dapat dibayangkan sebagai jarak vertikal plus horizontal dari vektor pertama ke
vektor kedua (Gambar 14.2(b)).
Sebagai contoh, terdapat dua vektor seperti berikut:
= [ 4, 3, 6]
= [ 2, 3, 7]
= |4 − 2| + |3 − 3| + |6 − 7| = 3
, = max → | − | (14.3)
Dalam hal ini, v1 dan v2 adalah dua vektor yang jaraknya akan dihitung dan N
menyatakan panjang vektor. Apabila vektor memiliki dua nilai, jarak dapat
dibayangkan sebagai jarak terpanjang antara jarak horizontal dan jarak vertikal
(Gambar 14.2(c)).
Sebagai contoh, dengan dua vektor yang sama dengan di depan ( =
[ 4, 3, 6]dan = [ 2, 3, 7]), jarak kotak catur kedua vektor tersebut berupa
%/'
, = ∑ | − |$ (14.4)
Dalam hal ini, v1 dan v2 adalah dua vektor yang jaraknya akan dihitung dan N
menyatakan panjang vektor. Apabila p bernilai 1, jarak berupa city-block.Apabila
p bernilai 2, jarak berupa Euclidean.
Sebagai contoh, dengan dua vektor yang sama dengan di depan ( =
[ 4, 3, 6]dan = [ 2, 3, 7]), jarak Minkowskikedua vektor tersebut untuk p
berupa 3 berupa:
%/) %/)
= 4−2 ( + 3−3 ( + 6−7 ( = √9 = 2,0801
|.% /.0 |
, = ∑ |.% |1|.% |
(14.5)
Dalam hal ini, v1 dan v2 adalah dua vektor yang jaraknya akan dihitung dan N
menyatakan panjang vektor.
Sebagai contoh, dengan dua vektor yang sama dengan di depan ( =
[ 4, 3, 6]dan = [ 2, 3, 7]), jarak Canberrakedua vektor tersebut berupa
|4 − 2| |3 − 3| |6 − 7| 2 0 1
= + + = + + = 0,4103
4+2 3+3 6+7 6 6 13
Jarak Bray Curtis atau jarak Sorensen (Putra, 2010) didefinisikan sebagai
berikut:
∑2
34%|.% /.0 |
, = ∑2 ∑2 (14.6)
34% .% 1 34% .0
Aplikasi Temu Kembali Citra 691
Dalam hal ini, v1 dan v2 adalah dua vektor yang jaraknya akan dihitung dan N
menyatakan panjang vektor.
Sebagai contoh, dengan dua vektor yang sama dengan di depan ( =
[ 4, 3, 6]dan = [ 2, 3, 7]), jarak BrayCurtiskedua vektor tersebut berupa
|4 − 2| + |3 − 3| + |6 − 7| 2 + 1
= = = 0,12
4+2+3+3+6+7 25
.%
56 , =∑ 789 (14.6)
.0
Dalam hal ini, v1 dan v2 adalah dua vektor yang jaraknya akan dihitung dan N
menyatakan panjang vektor.
Sebagai contoh, dengan dua vektor yang sama dengan di depan ( =
[ 4, 3, 6]dan = [ 2, 3, 7]), jarak menurut divergensiKullbackLeibler kedua
vektor tersebut berupa
4 3 6
= 4 ∗ log > ? + 3 ∗ log > ? + 6 ∗ log > ? = 1,8477
2 3 7
∗ .% ∗ .0
@A , =∑ . 789 . + . 789 (14.6)
% 1 .0 .% 1 .0
Dalam hal ini, v1 dan v2 adalah dua vektor yang jaraknya akan dihitung dan N
menyatakan panjang vektor.
692 Pengolahan Citra Te
Teori dan Aplikasi
Sebagai conto
toh, dengan dua vektor yang sama dengann di depan ( =
[ 4, 3, 6]dan = [ 2
2, 3, 7]), jarak menurut divergensi Jensen
en Shannonkedua
vektor tersebut berupa
pa
2∗4 2∗3 2∗6
= 4 ∗ log > ? + 3 ∗ log > ? + 6 ∗ log > ?+
4+2 3+3 6+7
∗ ∗( ∗F
2 ∗ log C E + 3 ∗ log C E + 7 ∗ log C E = 0,3
,3783
D1 (1( G1F
Untuk mema
mahami manfaat jarak dua vektor dala
lam pengolahan
citra,perhatikan conto
toh berikut.
Program : queryzer.m
function queryzer
r(berkas)
% QUERYZER Bergun
na untuk melakukan query dengan
% menggunakan
n momen Zernike.
% Proses momen Ze
ernike dan hitung jarak City-block
Query = im2bw(imr
read(berkas), 0.5);
ZQuery = zermomen
nt(Query, 10);
Hasil = [];
for i=1 : length(
(Citra)
disp(sprintf(
('proses terhadap citra %s', Citra{i}
}));
Ref = im2bw(i
imread(Citra{i}), 0.5);
ZRef = zermom
ment(Ref, 10);
jarak = 0;
for j=1 : len
ngth(ZRef)
jarak = jarak
j + abs(ZRef(j) - ZQuery(j));
end
Hasil(i).nama
a = Citra{i};
Hasil(i).jara
ak = jarak;
end
Aplikasi Temu Kembali Citra 693
Hasil(q+1) = x;
end
end
% Tampilkan hasil
disp('Hasil pencocokan: ');
for i=1 : jum
disp(sprintf('Citra %s - Jarak: %f',Hasil(i).nama, ...
Hasil(i).jarak));
end
Akhir Program
>>queryzer('C:\Image\ikan-5.png')
proses terhadap citra C:\Image\ikan-4.png
proses terhadap citra C:\Image\ikan-2.png
proses terhadap citra C:\Image\ikan-3.png
proses terhadap citra C:\Image\ikan-1.png
694 Pengolahan Citra Te
Teori dan Aplikasi
proses terh
hadap citra C:\Image\guppi-4.pn
ng
proses terh
hadap citra C:\Image\guppi-2.pn
ng
proses terh
hadap citra C:\Image\guppi-3.pn
ng
proses terh
hadap citra C:\Image\guppi-1.pn
ng
Hasil penco
ocokan:
Citra C:\Im
mage\ikan-3.png - Jarak: 0.3115
540
Citra C:\Im
mage\ikan-2.png - Jarak: 0.3172
283
Citra C:\Im
mage\ikan-1.png - Jarak: 0.3172
283
Citra C:\Im
mage\ikan-4.png - Jarak: 1.0636
666
Citra C:\Im
mage\guppi-2.png - Jarak: 1.896
6431
Citra C:\Im
mage\guppi-1.png - Jarak: 1.901
1020
Citra C:\Im
mage\guppi-3.png - Jarak: 1.908
8009
Citra C:\Im
mage\guppi-4.png - Jarak: 1.913
3503
>>
Sebagai pembanding
ng, guppi-5.png dapat dipakai sebagai bah
ahan query.Akan
terlihat bahwa ikan guppi-1.png
g hingga guppi-4.png akan mem
miliki jarak yang
lebih pendek dibandin
ing dengan kelompok ikan-1.png hingga ikan--4.png.
14.4 Pengembangan
n Lebih Lanjut
Program : dbfitur.m
% DBFITUR Berguna
a untuk menghitung fitur
Aplikasi Temu Kembali Citra 695
Akhir Program
>>dbfitur
Menghitung fitur citra C:\Image\ikan-4.png
Menghitung fitur citra C:\Image\ikan-2.png
Menghitung fitur citra C:\Image\ikan-3.png
Menghitung fitur citra C:\Image\ikan-1.png
Menghitung fitur citra C:\Image\guppi-4.png
Menghitung fitur citra C:\Image\guppi-2.png
Menghitung fitur citra C:\Image\guppi-3.png
Menghitung fitur citra C:\Image\guppi-1.png
>>
696 Pengolahan Citra Te
Teori dan Aplikasi
Program : queryzer2.m
function queryzer
r2(berkas)
% QUERYZER2 Bergu
una untuk melakukan query dengan
% menggunakan
n momen Zernike dengan membaca
% data acuan dari file dbfitur.
% Proses momen Ze
ernike dan hitung jarak City-block
Query = im2bw(imr
read(berkas), 0.5);
ZQuery = zermomen
nt(Query, 10);
Hasil = [];
jumFitur = length
h(Fitur(1).momen);
for i=1 : length(
(Fitur)
nama = Fitur(
(i).nama;
jarak = 0;
for j=1 : jum
mFitur
jarak = jarak
j + abs(ZQuery(j) - Fitur(i).mome
en(j));
end
Hasil(i).nama
a = Fitur(i).nama;
Hasil(i).jara
ak = jarak;
end
% Urutkan data pa
ada array Hasil
jum = length(Hasi
il);
for p = 2: jum
x = Hasil(p);
;
Hasil(q+1
1) = x;
end
end
Aplikasi Temu Kembali Citra 697
Akhir Program
>>queryzer2('C:\Image\ikan-5.png')
Hasil pencocokan dapat dilihat pada jendela gambar
>>
Hasilnya dapat dilihat pada Gambar 14.3. Gambar tersebut memperlihatkan citra
query dan citra-citra hasil yang dilengkapi dengan nilai jarak antara citra
bersangkutan terhadap citraquery, yang telah diurutkan dari jarak terpendek ke
jarak terpanjang.
698 Pengolahan Citra Teori dan Aplikasi
Gambar 14.3 Hasil query secara visual berdasar urutan besar jarak
Latihan
= [ 3, 8, 6,5]
= [ 4, 6, 7,8]
identik dengan
∑ | − |
, =
∑ +
a) jarak Euclidean
b) jarak Canberra
c) jarak Chebychef
d) jarak Bray Curtis