BAB 7 Morfologi untuk Pengolahan Citra Setelah bab ini berakhir, diharapkan pembaca memahami berbagai hal berikut dan mampu mempraktikkannya. Pengertian operasi morfologi Matematika yang melatarbelakangi Operasi dilasi Operasi erosi Bentuk dan ukuran elemen penstruktur Operasi opening Operasi closing Transformasi Hit-or-Miss Skeleton Thickening Convex hull Transformasi Top-Hat Transformasi Bottom-Hat
210
Pengolahan Citra, Teori dan Aplikasi
7.1 Pengertian Operasi Morfologi Operasi morfologi merupakan operasi yang umum dikenakan pada citra biner (hitam-putih) untuk mengubah struktur bentuk objek yang terkandung dalam citra. Sebagai contoh, lubang pada daun dapat ditutup melalui operasi morfologi sebagaimana ditunjukkan pada Gambar 7.1. Objek-objek daun yang saling berhimpitan pun dapat dipisahkan melalui morfologi, sebagaimana ditunjukkan pada Gambar 7.2. Beberapa contoh lain aplikasi morfologi adalah sebagai berikut.
Membentuk filter spasial, seperti yang telah dibahas pada Bab 6.
Memperoleh skeleton (rangka) objek.
Menentukan letak objek di dalam citra.
Memperoleh bentuk struktur objek.
Gambar 7.1 Tulang daun dapat dianggap sebagai bagian daun melalui morfologi
Morfologi untuk Pengolahan Citra
211
Gambar 7.2 Daun-daun yang bersinggungan dapat dipisahkan melalui morfologi, yang memperkecil ukurannya
Operasi morfologi sesungguhnya juga dapat dikenakan pada citra aras keabuan. Pembicaraan mengenai hal ini dilakukan di bagian akhir di bab ini.
Inti operasi morfologi melibatkan dua larik piksel. Larik pertama berupa citra yang akan dikenai operasi morfologi, sedangkan larik kedua dinamakan sebagai kernel atau structuring element (elemen penstruktur) (Shih, 2009). Contoh kernel ditunjukkan pada Gambar 7.3. Pada contoh tersebut, piksel pusat
(biasa
diberi nama hotspot) ditandai dengan warna abu-abu. Piksel pusat ini yang menjadi
pusat
dalam
melakukan
operasi
terhadap
citra,
sebagaimana
diilustrasikan pada Gambar 7.4.
0
1
0
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
0
1
0
1
1
1
1 1
1
1
1
1
1
1
1
1
1
Gambar 7.3 Contoh beberapa kernel
1
212
Pengolahan Citra, Teori dan Aplikasi
Hotspot
Citra
0
1
0
1
1
1
0
1
0
Kernel
Gambar 7.4 Operasi kernel terhadap citra
Dua operasi yang mendasari morfologi yaitu dilasi dan erosi. Dua operasi lain yang sangat berguna dalam pemrosesan citra adalah opening dan closing dibentuk melalui dua operasi dasar itu. 7.2 Matematika yang Melatarbelakangi Untuk himpunan
memahami
operasi
seperti interseksi dan
morfologi, gabungan
pemahaman mutlak
terhadap
diperlukan.
operasi
Selain
itu,
pemahaman terhadap operasi logika, seperti “atau” dan ‘dan” juga diperlukan. 7.2.1 Teori Himpunan Misalkan, terdapat himpunan A yang berada di dalam bidang Z2 (berdimensi dua). Apabila a=(a1 , a2 ) adalah suatu elemen atau anggota di dalam A, a dapat ditulis menjadi
𝑎∈𝐴
(7.1)
Arti notasi di atas, a adalah anggota himpunan A. kebalikannya, jika a bukan anggota himpunan A, a ditulis seperti berikut: 𝑎 𝐴
(7.2)
Morfologi untuk Pengolahan Citra
213
Sebagai contoh, s = (1, 2) dan t = (1, 4), sedangkan himpunan A berisi seperti berikut:
A = { (1,1), (1,2), (1, 3), (2, 1), (2, 2) }
Pada contoh tersebut, A memiliki 5 anggota. Berdasarkan contoh tersebut, dapat dituliskan fakta berikut:
𝑠∈𝐴 𝑡𝐴 Perlu diketahui, setiap elemen hanya dapat menjadi anggota himpunan satu kali. Dengan demikian, A = {(1,1), (1,1), (2,1), (2,3), (2,1)} sesungguhnya hanya mempunyai 3 anggota, yaitu A = {(1,1), (2,1), (2,3)} Notasi biasa terdapat dalam pembicaraan himpunan. Simbol tersebut menyatakan himpunan kosong, yaitu himpunan yang tidak memiliki anggota sama sekali. Apabila A dan B adalah himpunan dan setiap anggota himpunan B merupakan anggota himpunan A, dikatakan bahwa B adalah subhimpunan A. Notasi yang biasa digunakan untuk kepentingan ini: BA
(7.3)
Union adalah penggabungan dari dua buah himpunan. Misalnya: C=AB
(7.4)
214
Pengolahan Citra, Teori dan Aplikasi
yang menyatakan bahwa C memiliki anggota berupa semua anggota A ditambah dengan semua anggota B. Gambar 7.5 memperlihatkan contoh nilai-nilai piksel penyusun dua citra biner dan menunjukkan hasil operasi union. Semua nilai 1 pada citra tersebut menyatakan anggota himpunan baru, yang cenderung meluas.
1
2
3
4
5
1
2
3
4
5
1
0
1
0
0
0
1
1
0
0
0
2
0
1
1
0
0
0
1
0
0
0
3
0
1
1
1
0
0
0
1
0
0
4
0
1
1
0
0
0
1
0
0
0
5
0
1
0
0
0
1
0
0
0
0
A={(1,2), (2,2), (2,3), (3,2), (3,3), (3,4), (4,2), (4,3), (5,2)}
B={(1,1), (2,1), (2,2), (3,3), (4,2), (5,1)}
C=AB 1
1
0
0
0
0
1
1
0
0
0
1
1
1
0
0
1
1
0
0
1
1
0
0
0
C={(1,1), (1,2), (2,2), (2,3), (3,2), (3,3),(3,4) (4,2), (4,3), (5,1), (5,2)}
Gambar 7.5 Operasi union pada citra biner
Interseksi menyatakan operasi yang menghasilkan himpunan semua anggota yang terdapat di kedua himpunan. Misalnya: C=AB
(7.5)
berarti bahwa C berisi anggota-anggota yang ada di himpunan A dan juga terdapat di himpunan B. Hasilnya cenderung menyempit. Contoh dapat dilihat pada Gambar 7.6.
Morfologi untuk Pengolahan Citra
215
1
2
3
4
5
1
2
3
4
5
1
0
1
0
0
0
1
1
0
0
0
2
0
1
1
0
0
0
1
0
0
0
3
0
1
1
1
0
0
0
1
0
0
4
0
1
1
0
0
0
1
0
0
0
5
0
1
0
0
0
1
0
0
0
0
A={(1,2), (2,2), (2,3), (3,2), (3,3), (3,4), (4,2), (4,3), (5,2)}
B={(1,1), (2,1), (2,2), (3,3), (4,2), (5,1)}
C=AB 1
1
0
0
0
0
1
1
0
0
0
1
1
1
0
0
1
1
0
0
1
1
0
0
0
C={(1,2), (2,2), (3,3), (4,1)}
Gambar 7.6 Operasi interseksi pada citra biner Komplemen himpunan A biasa dinotasikan dengan Ac dan menyatakan semua elemen yang tidak terdapat pada A. Secara matematis, komplemen ditulis seperti berikut: Ac = { w | w A }
(7.6)
Notasi di atas dibaca “semua elemen yang tidak menjadi anggota A”. Komplemen atau juga disebut inversi dapat dibayangkan seperti saling menukarkan warna hitam dan putih. Nilai yang semula berupa nol diganti satu dan nilai satu diganti dengan nol. Contoh dapat dilihat di Gambar 7.7. Di bidang fotografi dengan film, inversi menghasilkan gambar negatif. Istilah komplemen juga berarti ”pelengkap”, karena bila A digabung dengan operasi union akan menyempurnakan citra menjadi citra yang semua pikselnya bernilai 1.
216
Pengolahan Citra, Teori dan Aplikasi
1
2
3
4
5
1
2
3
4
5
1
0
1
0
0
0
1
0
1
1
1
2
0
1
1
0
0
1
0
0
1
1
3
0
1
1
1
0
1
0
0
0
1
4
0
1
1
0
0
1
0
0
1
1
5
0
1
0
0
0
1
0
1
1
1
A={(1,2), (2,2), (2,3), (3,2), (3,3), (3,4), (4,2), (4,3), (5,2)}
Ac = {(1,1), (1,3), (1,4), (1,5), (2,1), (2,4), (2,5), (3,1), (3,5), (4,1), (4,4), (4,5), (5,1), (5,3), (5,4), (5,5)}
Gambar 7.7 Operasi komplemen
Operasi selisih dua himpunan dapat ditulis seperti berikut: A – B = { w | w A, w B } = A Bc Contoh ditunjukkan di Gambar 7.8.
(7.7)
Morfologi untuk Pengolahan Citra
217
1
2
3
4
5
1
2
3
4
5
1
0
1
0
0
0
1
1
0
0
0
2
0
1
1
0
0
0
1
0
0
0
3
0
1
1
1
0
0
0
1
0
0
4
0
1
1
0
0
0
1
0
0
0
5
0
1
0
0
0
1
0
0
0
0
A={(1,2), (2,2), (2,3), (3,2), (3,3), (3,4), (4,2), (4,3), (5,2)}
B={(1,1), (2,1), (2,2), (3,3), (4,2), (5,1)}
C=A-B
C=B-A
0 0 0
0
0
0
0
1
0
0
0
0
0
1
0
0
0
0
0
0
0
0
0
0
1
0
0
0
0
0
0
0
0
1
0
0
0
0
0
0
0
0
1
0
0
0
1
0
0
0
0
C = { (2,3), (3,4), (4,3), (5,2) }
C = { (1,1), (5,1) }
Gambar 7.8 Contoh selisih dua himpunan Contoh di atas menunjukkan bahwa A – B B – A. Refleksi B dinotasikan dengan 𝐵̂ dan didefinisikan sebagai berikut: 𝐵̂ = {𝑤|𝑤 = −𝑏, 𝑢𝑛𝑡𝑢𝑘 𝑏 ∈ 𝐵 }
(7.8)
Refleksi sebenarnya menyatakan percerminan terhadap piksel pusat. Contoh ditunjukkan pada Gambar 7.9. Bayangan cermin 2-D terjadi melalui pencerminan pada arah x dan dilanjutkan pada arah y. namun, ternyata hasilnya sama dengan pemutaran di bidang citra 180o .
218
Pengolahan Citra, Teori dan Aplikasi
1
2
3
4
5
1
2
3
4
5
1
0
0
0
0
0
0
0
0
0
0
2
0
1
1
0
0
0
0
0
0
0
3
0
1
1
1
0
0
1
1
1
0
4
0
0
0
0
0
0
0
1
1
0
5
0
0
0
0
0
0
0
0
0
0
A={(2,2), (2,3), (3,2), (3,3), (3,4)}
𝐴 = {(3,2), (3,3), (3,4), (4,3), (4,4)}
Gambar 7.9 Contoh refleksi
Translasi himpunan A terhadap titik z=(z1 , z2 ) disimbolkan dengan (A)z. Definisinya sebagai berikut:
(𝐴)𝑧 = {𝑐|𝑐 = 𝑎 + 𝑧, 𝑢𝑛𝑡𝑢𝑘 𝑎 ∈ 𝐴}
(7.9)
Contoh dapat dilihat pada Gambar 7.10.
1
2
3
4
5
1
2
3
4
5
1
0
0
0
0
0
0
0
0
0
0
2
0
1
1
0
0
0
0
0
0
0
3
0
1
1
1
0
0
0
0
0
0
4
0
0
0
0
0
0
0
1
1
0
5
0
0
0
0
0
0
0
1
1
1
A={(2,2), (2,3), (3,2), (3,3), (3,4)}
(A)(2,1) = {(4,3), (4,4), (5,3), (5,4), (5,5)}
Gambar 7.10 Contoh translasi satu piksel ke kanan dan dua piksel ke bawah 7.2.2 Operasi Nalar Operator nalar didasarkan pada aljabar Boolean. Sebagaimana diketahui, aljabar Boolean adalah pendekatan matematis yang berhubungan dengan nilai kebenaran (benar atau salah). Ada tiga operator nalar dasar yang akan dibahas,
Morfologi untuk Pengolahan Citra
219
yaitu AND, OR, serta NOT. Tabel kebenaran ketiga operator tersebut dapat dilihat pada Tabel 7.1 dan 7.2. Operasi AND melibatkan dua masukan dan mempunyai sifat bahwa hasil operasinya bernilai 1 hanya jika kedua masukan bernilai 1. Pada operasi OR, hasil berupa 1 kalau ada masukan yang bernilai 1.
Berbeda dengan AND dan OR,
operasi NOT hanya melibatkan satu masukan. Hasil NOT berupa 1 kalau masukan berupa 0 dan sebaliknya akan menghasilkan nilai 0 kalau masukan berupa 1.
Tabel 7.1 Tabel kebenaran AND dan OR Masukan 1 0 0 1 1
Masukan 2 0 1 0 1
AND 0 0 0 1
OR 0 1 1 1
Tabel 7.2 Tabel kebenaran NOT Masukan
Keluaran
0
1
1
0
Selain ketiga operator yang disebut di depan, operator lain yang kadangkadang digunakan adalah XOR dan NAND. Sifat XOR dan NAND ditunjukkan pada Tabel 7.3. Tabel 7.3 Tabel kebenaran XOR dan NAND Masukan 1 0 0 1 1
Masukan 2 0 1 0 1
XOR 0 1 1 0
NAND 1 1 1 0
220
Pengolahan Citra, Teori dan Aplikasi
Berbagai efek operasi AND, OR, NOT, XOR, dan NAND ditunjukkan pada Gambar 7.11. Adapun program yang digunakan untuk membentuk operasi tersebut dapat dilihat pada nalar.m.
Gambar 7.1 Hasil-hasil operasi nalar atas dua buah citra A dan B Program : nalar.m
% NALAR Contoh penggunaan NOT, AND, OR, XOR, dan % kombinasinya. Lingkaran = imread('C:\Image\lingkaran.png'); Persegi = imread('C:\Image\persegi.png'); close all; Citra1 = Lingkaran; subplot(3,3,1); imshow(Citra1, [0 1]); title('A'); Citra2 = Persegi; subplot(3,3,2); imshow(Citra2, [0 1]); title('B');
Morfologi untuk Pengolahan Citra
221
Citra3 = not(Lingkaran); subplot(3,3,3); imshow(Citra3, [0 1]); title('not(A)'); Citra4 = and(Lingkaran, Persegi); subplot(3,3,4); imshow(Citra4, [0 1]); title('and(A, B)'); Citra5 = xor(Lingkaran, Persegi); subplot(3,3,5); imshow(Citra5, [0 1]); title('xor(A, B)'); Citra6 = or(Lingkaran, Persegi); subplot(3,3,6); imshow(Citra6, [0 1]); title('or(A, B)'); Citra7 = not(and(Lingkaran, Persegi)); subplot(3,3,7); imshow(Citra7, [0 1]); title('not(and(A, B))'); Citra8 = not(xor(Lingkaran, Persegi)); subplot(3,3,8); imshow(Citra8, [0 1]); title('not(xor(A, B))'); Citra9 = not(or(Lingkaran, Persegi)); subplot(3,3,9); imshow(Citra9, [0 1]); title('not(or(A, B))');
Akhir Program
7.3 Operasi Dilasi Operasi dilasi biasa dipakai untuk mendapatkan efek pelebaran terhadap piksel yang bernilai 1. Operasi ini dirumuskan seperti berikut (Gonzales & Woods, 2002): A B = {𝑧| [(𝐵̂ )𝑧 ∩ 𝐴] ∁ 𝐴} Dalam hal ini, a) 𝐵̂ = {𝑤|𝑤 = −𝑏, 𝑢𝑛𝑡𝑢𝑘 𝑏 ∈ 𝐵 } b) (𝐵 )𝑧 = {𝑐|𝑐 = 𝑎 + 𝑧, 𝑢𝑛𝑡𝑢𝑘 𝑎 ∈ 𝐴} c) z=(z1, z2)
(7.10)
222
Pengolahan Citra, Teori dan Aplikasi
Burger & Burge (2008) mendefinisikan operasi dilasi sebagai berikut: A B = {𝑧|𝑧 = 𝑎 + 𝑏, dengan 𝑎 ∈ 𝐴 𝑑𝑎𝑛 𝑏 ∈ 𝐵 }
(7.11)
Hasil dilasi berupa penjumlahan seluruh pasangan koordinat dari I dan H. Contoh operasi dilasi dengan menggunakan Persamaan 7.11 dapat dilihat pada Gambar 7.11. Pada contoh tersebut, A = { (2,2), (2,3), (2,4), (3,2), (3,3), (3,4), (4,3) } B = { (-1, 0), (0,0), (1,0) } Dengan demikian, A B = { (2,2) + (-1, 0) , (2,2) + (0, 0) + (2,2) + (1, 0), (2,3) + (-1, 0) , (2,3) + (0, 0) + (2,3) + (1, 0), (2,4) + (-1, 0) , (2,4) + (0, 0) + (2,4) + (1, 0), (3,2) + (-1, 0) , (3,2) + (0, 0) + (3,2) + (1, 0), (3,3) + (-1, 0) , (3,3) + (0, 0) + (3,3) + (1, 0), (3,4) + (-1, 0) , (3,4) + (0, 0) + (3,4) + (1, 0), (4,3) + (-1, 0) , (4,3) + (0, 0) + (4,3) + (1, 0) } = { (1,2), (2,2), (3,2), (1,3), (2,3), (3,3), (1,4), (2,4), (3,3), (2,2), (3,2), (4,2), (2,3), (3,3), (4,3), (2,4), (3,4), (4,4), (3,3), (4,3), (5,3) } = { (1,2), (1,3), (1,4), (2,2), (2,3), (2,4), (3,2), (3,3), (3,4), (4,2), (4,3), (4,4), (5,3) }
Morfologi untuk Pengolahan Citra
1
2
3
4
223
5
-1
1
-1
2
0
3
1
0
1
4 5 A
B Hotspot vertikal Penambahan piksel akibat dilasi
AB
Gambar 7.11 Efek dilasi dengan hotspot vertikal
Operasi dilasi bersifat komutatif. Artinya, AB=B A Selain itu, operasi dilasi bersifat asosiatif. Artinya, (A B) C = A (B C)
Algoritma
untuk
ditunjukkan berikut ini.
melakukan
operasi
dilasi
berdasar
Persamaan
7.11
224
Pengolahan Citra, Teori dan Aplikasi
ALGORITMA 7.1 – Operasi dilasi
Masukan:
f (citra berukuran m x n)
h (elemen penstruktur berukuran s x t)
hoty (ordinat hotspot -> nomor baris)
hotx (absis hotpsot -> nomor kolom)
Keluaran:
g (citra berukuran m x n yang menyatakan hasil operasi dilasi)
1. g(i,j) nol (untuk semua i dan j) 2. Cari nilai r sehingga memenuhi 2r > 2m – 1 3. p 2q 4. q 2q
Implementasi dalam bentuk program dapat dilihat berikut ini. Program : dilasi.m
function G = dilasi(F, H, hotx, hoty) % DILASI Berguna untuk melaksanakan operasi dilasi. % Masukan: % F = citra yang akan dikenai dilasi % H = elemen pentruksur % (hy, hx) koordinat pusat piksel [th, lh]=size(H); [tf, lf]=size(F); if nargin < 3 hotx = round(lh/2); hoty = round(th/2);
Morfologi untuk Pengolahan Citra
225
end Xh = []; Yh = []; jum_anggota = 0; % Menentukan koordinat piksel bernilai 1 pada H for baris = 1 : th for kolom = 1 : lh if H(baris, kolom) == 1 jum_anggota = jum_anggota + 1; Xh(jum_anggota) = -hotx + kolom; Yh(jum_anggota) = -hoty + baris; end end end G = zeros(tf, lf); % Nolkan semua pada hasil dilasi % Memproses dilasi for baris = 1 : tf for kolom = 1 : lf for indeks = 1 : jum_anggota if F(baris, kolom) == 1 xpos = kolom + Xh(indeks); ypos = baris + Yh(indeks); if (xpos >= 1) && (xpos <= lf) && ... (ypos >= 1) && (ypos <= tf) G(ypos, xpos) = 1; end end end end end
Akhir Program
Contoh penggunaan fungsi dilasi ditunjukkan di bawah ini. >> F = [ 0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
1
1
1
1
0
0
0
1
1
1
1
0
0
0
0
1
1
1
0
0
0
0
0
0
0
0
0
1
1
0
0
0
0
0
0
0
0
0
0
0];
226
Pengolahan Citra, Teori dan Aplikasi
>> H = [0 1 0; 1 1 1; 0 1 0]; >> G = dilasi(F,H) G = 0
0
0
0
0
0
0
0
0
1
1
1
1
0
0
1
1
1
1
1
1
0
1
1
1
1
1
1
0
0
1
1
1
1
1
0
1
1
1
1
1
0
1
1
1
1
0
0
0
0
1
1
0
0
0
0
>>
Contoh pada Gambar 7.11 diproses dengan cara seperti berikut: >> F = [ 0 0 0 0 0; 0 1 1 1 0; 0 1 1 1 0; 0 1 0 0 0; 0 0 0 0 0]; >> H = [0 1 0 0 1 0 0 1 0]; >> G = dilasi(F,H) G = 0
1
1
1
0
0
1
1
1
0
0
1
1
1
0
0
1
1
1
0
0
1
0
0
0
Morfologi untuk Pengolahan Citra
227
>>
Dengan menggunakan data F dan H di atas, perintah berikut dapat dicoba: >> G = dilasi(F,H, 2, 1) G = 0
0
0
0
0
0
1
1
1
0
0
1
1
1
0
0
1
1
1
0
0
1
1
1
0
>>
Angka 2 dan 1 pada argumen fungsi dilasi menyatakan bahwa hotspot pada H terletak pada kolom kedua dan baris pertama. Jadi, yang berfungsi sebagai hotspot adalah nilai 1 pada H yang terletak paling atas, bukan yang di tengah. Mengapa hasilnya seperti itu? Cobalah untuk menganalisisnya. Perlu diketahui, pada saat menentukan posisi hotspot, pemetaan seperti pada Gambar 7.12 harus digunakan. 1
2
3
1 2 3
Hotspot dengan: hx = 2 hy = 1
Gambar 7.12 Penentuan hotspot menggunakan acuan angka 1 untuk pojok kiri atas kernel
228
Pengolahan Citra, Teori dan Aplikasi
Untuk melihat efek dilasi pada citra, kode berikut dapat dicoba. >> close all; >> Bravo = imread('C:\image\bravo.png'); >> BW = im2bw(Bravo, 0.5); >> H = ones(4); >> imshow(dilasi(BW, H)); >>
Gambar asli dan hasil operasi dilasi dapat dilihat pada Gambar 7.13. Gambar 7.13(a) menyatakan gambar asli. Gambar 7.13(b) adalah hasil konversi ke bentuk biner dengan menggunakan fungsi bawaan bernama im2bw. Gambar 7.13(c) adalah hasil dilasi melalui perintah di depan. Hasil tersebut diperoleh dengan menggunakan struktur elemen berukuran 4 x 4 yang keseluruhan bernilai 1. Hal itu diperoleh melalui ones(4). Adapun Gambar 7.13(d) adalah hasil kalau elemen penstruktur yang digunakan (H) berukuran 7x7 dengan seluruh elemen bernilai 1.
Morfologi untuk Pengolahan Citra
229
Gambar 7.13 Contoh operasi dilasi pada citra 7.4 Operasi Erosi Operasi erosi mempunyai efek memperkecil struktur citra. Operasi ini dirumuskan seperti berikut (Gonzalez & Woods, 2002). A B = {𝑧|(𝐵 )𝑧 𝐴}
(7.12)
230
Pengolahan Citra, Teori dan Aplikasi
Adapun Burger & Burge (2008) mendefinisikan erosi sebagai berikut: A B = {𝑝 ∈ 𝑍 2 | (𝑎 + 𝑏) ∈ 𝐼, 𝑢𝑛𝑡𝑢𝑘 𝑠𝑒𝑡𝑖𝑎𝑝 𝑏 ∈ 𝐵 }
(7.13)
Makna yang tersirat pada Persamaan 7.12 dan 7.13 sebenarnya sama. Berdasarkan Persamaan 7.13, posisi p terdapat pada A B jika seluruh nilai 1 di B terkandung di posisi p tersebut. Implementasi fungsi erosi berikut didasarkan makna di atas.
Program : erosi.m
function G = erosi(F, H, hotx, hoty) % EROSI Berguna untuk melaksanakan operasi erosi. % Masukan: % F = citra yang akan dikenai dilasi % H = elemen pentruksur % (hy, hx) koordinat pusat piksel [th, lh]=size(H); [tf, lf]=size(F); if nargin < 3 hotx = round(lh/2); hoty = round(th/2); end Xh = []; Yh = []; jum_anggota = 0; % Menentukan koordinat piksel bernilai 1 pada H for baris = 1 : th for kolom = 1 : lh if H(baris, kolom) == 1 jum_anggota = jum_anggota + 1; Xh(jum_anggota) = -hotx + kolom; Yh(jum_anggota) = -hoty + baris; end end end G = zeros(tf, lf); % Nolkan semua pada hasil erosi % Memproses erosi for baris = 1 : tf for kolom = 1 : lf cocok = true; for indeks = 1 : jum_anggota
Morfologi untuk Pengolahan Citra
231
xpos = kolom + Xh(indeks); ypos = baris + Yh(indeks); if (xpos >= 1) && (xpos <= lf) && ... (ypos >= 1) && (ypos <= tf) if F(ypos, xpos) ~= 1 cocok = false; break; end else cocok = false; end end if cocok G(baris, kolom) = 1; end end end
Akhir Program
Contoh penggunaan fungsi erosi dapat dilihat berikut ini. >> F = [ 0
0
0
0
0
0
1
1
1
0
0
1
1
1
0
0
1
0
0
0
0
0
0
0
0];
>> H = [0
1
0
0
1
0
0
1
0];
>> G = erosi(F, H) G =
>>
0
0
0
0
0
0
0
0
0
0
0
1
0
0
0
0
0
0
0
0
0
0
0
0
0
232
Pengolahan Citra, Teori dan Aplikasi
Gambar berikut memperlihatkan bentuk visual untuk contoh di atas.
Hanya ini yang cocok dengan elemen penstruktur A
B
AB
Gambar 7.14 Contoh visualisasi operasi erosi
Operasi erosi bersifat komutatif. Artinya, A B=B A Selain itu, operasi erosi bersifat asosiatif. Artinya, (A B) C = A (B C)
Contoh penggunaan operasi erosi pada citra dapat dicoba dengan menggunakan perintah berikut: >> Daun = imread('C:\image\dedaunan.png'); >> BW = im2bw(Daun, 0.1);
Morfologi untuk Pengolahan Citra
233
>> H = ones(4); >> G = erosi(BW, H); >> imshow(G, [0 1])
Citra asli dan hasil pemrosesan dengan operasi erosi dapat dilihat pada Gambar 7.15. Terlihat bahwa dengan menggunakan elemen penstruktur 1 1 1 𝐻= 1 1 [1
1 1 1 1 1 1
1 1 1 1 1 1
1 1 1 1 1 1
1 1 1 1 1 1
1 1 1 1 1 1]
yang diperoleh melalui H = ones(6), semua daun yang bersinggungan dapat dipisahkan. Namun, sebagai konsekuensinya, bentuk beberapa daun agak berubah.
234
Pengolahan Citra, Teori dan Aplikasi
(a) Citra asli daun.png
(c) Erosi dengan H = ones(4)
(b) Hasil konversi ke citra biner
(d) Erosi dengan H = ones(6)
Gambar 7.15 Contoh operasi erosi pada citra
Operasi erosi dapat dimanfaatkan untuk memperoleh tepi objek. Sebagai contoh, kode berikut dapat dicoba: >> Img = imread('C:\Image\daun_gray.png'); >> BW = im2bw(Img, 0.65); >> BW = not(BW); >> imshow(BW); Hasilnya ditunjukkan pada Gambar 7.16(a).
Morfologi untuk Pengolahan Citra
235
Perintah BW = not(BW); digunakan
untuk
melakukan operasi komplemen.
mengingat
latarbelakang
Hal ini perlu dilakukan
gambar asli berwarna putih.
Selanjutnya,
perintah
berikut dapat dicoba: >> H = ones(5); >> G = erosi(BW, H); >> Ap = BW - G; >> imshow(Ap);
Hasilnya ditunjukkan pada Gambar 7.16(b). Kuncinya sangat sederhana. Tepi objek sesungguhnya dapat diperoleh melalui: Ap = A – (A B)
(7.14)
236
Pengolahan Citra, Teori dan Aplikasi
(a) Hasil konversi ke biner
(b) Hasil operasi perolehan tepi
Gambar 7.16 Contoh erosi untuk mendapatkan tepi objek 7.5 Bentuk dan Ukuran Elemen Penstruktur Berdasarkan contoh pada Gambar 7.13, terlihat bahwa ukuran elemen penstruktur menentukan hasil operasi dilasi. Selain ukuran, bentuk elemen penstruktur juga menentukan hasil operasi morfologi. Bentuk yang umum digunakan pada operasi morfologi adalah cakram atau lingkaran. Efek yang diberikan merata pada segala arah. Bentuk dua buah cakram dapat dilihat pada Gambar 7.17.
Morfologi untuk Pengolahan Citra
237
Gambar 7.17 Dua bentuk elemen penstruktur berbentuk cakram
Bentuk elemen penstruktur yang lain yaitu belah ketupat, garis, persegi panjang, bujur sangkar, dan oktagon. Gambar 7.18 menunjukkan contoh bentukbentuk tersebut.
238
Pengolahan Citra, Teori dan Aplikasi
Gambar 7.18 Berbagai bentuk elemen penstruktur
Untuk menyediakan
kepentingan fungsi
bernama
memperoleh strel.
elemen
Sayangnya,
penstruktur,
MATLAB
fungsi seperti ini belum
diimplementasikan pada Octave. Sebagai contoh, elemen penstruktur berbentuk cakram dengan radius 8 diperoleh dengan menggunakan perintah seperti berikut: >> strel('disk', 8)
ans =
Morfologi untuk Pengolahan Citra
239
Flat STREL object containing 185 neighbors. Decomposition: 4 STREL objects containing a total of 24 neighbors
Neighborhood: 0
0
0
0
1
1
1
1
1
1
1
0
0
0
0
0
0
0
1
1
1
1
1
1
1
1
1
0
0
0
0
0
1
1
1
1
1
1
1
1
1
1
1
0
0
0
1
1
1
1
1
1
1
1
1
1
1
1
1
0
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
0
1
1
1
1
1
1
1
1
1
1
1
1
1
0
0
0
1
1
1
1
1
1
1
1
1
1
1
0
0
0
0
0
1
1
1
1
1
1
1
1
1
0
0
0
0
0
0
0
1
1
1
1
1
1
1
0
0
0
0
>>
Agar hasil strel dapat dimanfaatkan untuk fungsi erosi ataupun dilasi, elemen penstruktur dapat diperoleh dengan memberikan perintah semacam berikut: >> H = getnhood(strel('disk', 8))
Dengan cara seperti itu, H dapat digunakan pada fungsi erosi atau dilasi. Contoh: >> G=erosi(BW, H);
240
Pengolahan Citra, Teori dan Aplikasi
>> imshow(G, [0 1]); >>
Hasilnya dapat dilihat di Gambar 7.19(b). Gambar 7.19 juga sekaligus memperlihatkan efek berbagai ukuran elemen penstruktur. Terlihat bahwa dengan menggunakan erosi, objek tertentu (yang ukurannya lebih kecil daripada elemen penstruktur) akan hilang. Hasil pada gambar tersebut juga menunjukkan bahwa semakin besar ukuran elemen penstruktur, objek semakin mengecil.
Gambar 7.19 Contoh penggunaan elemen penstruktur yang bersumber strel dan dikenakan pada erosi
Morfologi untuk Pengolahan Citra
241
Perlu diketahui, fungsi strel memberikan berbagai pilihan dalam membuat elemen penstruktur. Tabel 7.4 memperlihatkan beberapa contoh.
Tabel 7.4 Contoh strel untuk membuat berbagai bentuk elemen penstruktur Penentu Bentuk Contoh ‘disk’ (berbentuk cakaram)
strel(‘disk’, 4) radius 4
‘diamond’ (berbentuk belah
strel(‘diamond’, 4) radius 4
ketupat) strel(‘line’, 3, 0) panjang 3 dan sudut
‘line’ (berbentuk garis)
0 derajat (datar) strel(‘line’, 3, 45) panjang 3 dan sudut 45 derajat (datar) ‘octagon’ (berbentuk segi
strel(‘octagon’, 6)
delapan)
Argumen kedua harus kelipatan 3
‘rectangle’ (berbentuk
strel(‘rectangle’, [4 2]) 4 baris 2
persegi panjang)
kolom
‘square’ (berbentuk bujur
strel(‘square’, 4) bujur sangkar 4 x 4
sangkar)
Perlu juga diketahui,
Octave
dan MATLAB mendukung fungsi untuk
kepentingan dilasi bernama imdilate dan untuk erosi bernama erode. Contoh penggunaannya seperti berikut: >> Img = imread('C:\Image\struktur.png'); >> BW = im2bw(Img, 0.1); >> H = ones(11,11); >> H(1,1)=0;H(1,2)=0;H(2,1)=0; >> H(10,1)=0;H(10,2)=0;H(11,1)=0; >> H(1,10)=0;H(1,11)=0;H(2,11)=0; >> H(10,11)=0;H(11,10)=0;H(11,11)=0;
242
Pengolahan Citra, Teori dan Aplikasi
>> G = imerode(BW,H); >> imshow(G, [0 1]); >>
Perintah H = ones(11,11); H(1,1)=0;H(1,2)=0;H(2,1)=0; H(10,1)=0;H(10,2)=0;H(11,1)=0; H(1,10)=0;H(1,11)=0;H(2,11)=0; H(10,11)=0;H(11,10)=0;H(11,11)=0; identik dengan perintah MATLAB strel('disk', 6)
Hasilnya dapat dilihat pada Gambar 7.20.
(a) Citra struktur.png
(b) Hasil imerode dengan strel(‘disk’, 6)
Gambar 7.20 Erosi dengan fungsi erode 7.6 Operasi Opening Operasi opening adalah operasi erosi yang diikuti dengan dilasi dengan menggunakan
elemen
penstruktur
yang
sama.
Operasi ini berguna untuk
Morfologi untuk Pengolahan Citra
243
menghaluskan kontur objek dan menghilangkan seluruh piksel di area yang terlalu kecil untuk ditempati oleh elemen penstruktur. Dengan kata lain, semua struktur latardepan
yang berukuran lebih kecil daripada elemen penstruktur akan
tereliminasi oleh erosi dan kemudian penghalusan dilakukan melalui dilasi. Definisi operasi opening seperti berikut: A B = (A B) B
(7.15)
Contoh efek opening dapat diperoleh dengan memberikan perintah berikut: >> Img = imread('C:\Image\struktur.png'); >> BW = im2bw(Img, 0.1); >> H = [ 0
0
1
1
1
1
1
0
0
0
1
1
1
1
1
1
1
0
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
0
1
1
1
1
1
1
1
0
0
0
1
1
1
1
>> G = dilasi(BW, H); >> M = erosi(G, H); >> imshow(M,[0 1]) >>
Hasilnya dapat dilihat pada Gambar 7.21(c).
1
0
0 ];
244
Pengolahan Citra, Teori dan Aplikasi
Gambar 7.21 Perbandingan operasi erosi, opening, dan closing
Gambar 7.21 menunjukkan bahwa operasi erosi membuat objek mengecil dan bahkan ada yang hilang. Adapun operasi opening membuat ukuran objek relatif tetap sama, walaupun juga menghilangkan objek yang berukuran kecil (kurus). Namun, perlu diketahui, operasi opening membuat penghalusan di bagian tepi. Perhatikan, ujung segitiga tidak tajam setelah dikenai operasi opening. Sebagai pembanding, Gambar 7.21(d) menunjukkan hasil penggunaan operasi closing, yang akan dibahas sesudah subbab ini.
Morfologi untuk Pengolahan Citra
245
Operasi opening sering dikatakan sebagai idempotent. Artinya, jika suatu citra
telah
dikenai operasi opening,
pengenaan opening
dengan elemen
penstruktur yang sama tidak membawa efek apapun. Sifat ini dapat dituliskan secara matematis seperti berikut: (A B) B = (A B)
(7.16)
Operator opening dapat dimanfaatkan sebagai filter lolos-rendah, filter lolos-tinggi, maupun sebagai tapis lolos-bidang apabila elemen penstruktur yang digunakan berupa cakram (Shih, 2009). Berikut adalah rumusannya:
filter lolos-rendah (low-pass): A Bh ;
filter lolos-tinggi (high-pass): A – (A Bh );
filter lolos-bidang (band-pass): (A Bh1 )- (A Bh2 ), dengan diameter Bh1 < Bh2 .
Skrip berikut digunakan untuk menangani operasi opening:
Program : opening.m
function G = opening (F, H) % OPENING Melakukan operasi opening. G = dilasi(erosi(F, H), H);
Akhir Program
7.7 Operasi Closing Operasi closing berguna untuk menghaluskan kontur dan menghilangkan lubang-lubang kecil. Definisinya seperti berikut:
246
Pengolahan Citra, Teori dan Aplikasi
A B = (A B) B
(7.17)
Jadi, operasi closing dilaksanakan dengan melakukan operasi dilasi terlebih dahulu dan kemudian diikuti dengan operasi erosi. Contoh berikut menunjukkan efek penutupan lubang pada daun: >> Img = imread('C:\Image\daun_gray.png'); >> BW = im2bw(Img, 0.65); >> BW = not(BW); >> imshow(BW, [0 1] ) Perintah di atas menampilkan hasil seperti terlihat pada Gambar 7.22(a). Selanjutnya, perintah berikut dapat dicoba: >> Img = imread('C:\Image\daun_gray.png'); >> BW = im2bw(Img, 0.65); >> BW = not(BW); >> H = ones(5); >> G = dilasi(BW, H); >> M = erosi(G, H); >> imshow(M,[0 1]) Hasilnya ditunjukkan pada Gambar 7.22(b).
Morfologi untuk Pengolahan Citra
(a) Hasil konversi ke biner
247
(b) Hasil operasi closing
Gambar 7.22 Lubang kecil tertutup oleh operasi closing
Berikut adalah implementasi operasi closing: Program : closing.m
function G = closing (F, H) % CLOSING Melakukan operasi opening. G = erosi(dilasi(F, H), H);
Akhir Program
248
Pengolahan Citra, Teori dan Aplikasi
7.8 Transformasi Hit-or-Miss Transformasi Hit-or-Miss (THM) pada citra biner A didefinisikan sebagai berikut: 𝐴 * 𝐵 = (𝐴 𝐵1 ) (𝐴̅ 𝐵2 )
(7.18)
Dalam hal ini, biasanya B2 = ̅̅̅ 𝐵1 . Morfologi seperti itu dipakai untuk pemrosesan dan pengenalan bentuk pada citra biner.
Transformasi Hit-or-Miss
terkadang disebut Hit-and-Miss
(Efford, 2000).
THM merupakan dasar untuk skeleton, thinning, dan pruning.
Sebagai contoh, terdapat pola seperti terlihat pada Gambar 7.23(a). Target yang dikehendaki adalah menemukan pola tersebut pada citra yang terlihat pada Gambar 7.23(b).
0
0
0
0
1
0
0
0
0
0
0
0
0
1
0 0 0
0
0
0
0
1
0
0
1
0
0
0
0
0
1
0
0
0
1 1 1
0
0
1
1
1
1
0
0
1
0
1
1
1
1
0
1
0
0
0
1 0
0
0
1
1
1
1
1
0
1
1
1
1
0
1
0
0
1
0
0
0
1
0
0
0
1
0
0
0
0
1
0
1
1
1
1
0
0
0
1
0
0
0
1
1
0
0
0
0
1
0
0
0
0
0
0
0
0
0
0
0
0
0
1
(a) Target
(b) Citra yang berisi target
Gambar 7.23 Contoh target dan citra yang berisi target
Secara manual dapat dilihat bahwa target yang dicari ada tiga buah. Untuk menemukan posisinya, dapat digunakan 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
0
1
0
0
0
0
0
0
0
0
0
0
0
0
0
1
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
1
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
Gambar 7.24 Hasil erosi. Arsiran dimaksudkan untuk menunjukkan letak target yang dicari Nah, sekarang digunakan komplemen atas target yang dicari. Dalam hal ini, H2 = ̅̅ 𝐻̅̅1 . Jadi, >> H2 = not(H1)
250
Pengolahan Citra, Teori dan Aplikasi
H2 =
0
1
1
1
0
1
1
0
0
0
0
0
1
1
1
0
1
1
1
0
>>
Gambar 7.25 menunjukkan keadaan H2 dan komplemen citra.
1
1
1
1
0
1
1
1
1
1
1
1
1
0
1 0 1
1
1
1
1
0
1
1
0
1
1
1
1
1
0
1
1
1
0 1 0
1
1
0
0
0
0
1
1
0
1
0
0
0
0
1
0
1
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
(a) 𝐻2 = 𝐻1
(b) Komplemen citra
Gambar 7.25 Mencari kebalikan target H1 pada komplemen citra
Pencarian seperti pada Gambar 7.25 dapat dilakukan dengan menggunakan: >> erosi(not(Citra), not(H1)) Hasilnya ditunjukkan pada Gambar 7.26.
Morfologi untuk Pengolahan Citra
251
0
0
0
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
0
0 1 0
0
0
0 0 0 0 0
1
0
0
0
1
0
0
0
0
0
0
0
0
0
0
0
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
0
1
1
1
0 1 0
1
1
0
0
0
1 1
1
1
1
(a) 𝐻2 = 𝐻1
0
(b) Komplemen citra
Gambar 7.26 Hasil pencarian kebalikan H1 pada komplemen citra dengan menggunakan erosi
Hasil THM diperoleh dengan melakukan interseksi antara hasil yang terletak pada 7.24 dan 7.26. Secara visual terlihat bahwa
interseksi kedua hasil tersebut
menghasilkan satu nilai saja, yaitu pada posisi yang terlihat pada Gambar 7.27. Hasil THM 0 0 0 0 0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0 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
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
Gambar 7.27 Hasil THM Hasil di atas menyatakan bahwa pola yang dicari hanya ditemukan satu kali pada citra dengan posisi seperti yang ditunjukkan oleh angka 1. Bagian yang diarsir lebih terang menyatakan pola yang dicari. Dalam hal ini, interseksi diperoleh dengan menggunakan AND. Jadi, solusi THM secara lengkap sebagai berikut: >> and(erosi(Citra, H1) , erosi(not(Citra), not(H1)))
THM yang dikupas di atas mempunyai kelemahan, yakni perbedaan satu piksel saja akan membuat pola tidak dikenal. Dalam praktik, terkadang
252
Pengolahan Citra, Teori dan Aplikasi
dikehendaki agar THM bersifat sedikit pemaaf, sehingga pola yang sedikit berbeda dalam citra tetap dianggap sama dengan target. Pembahasan mengenai hal itu dapat dilihat pada Solomon & Breckon (2011).
Untuk keperluan menangani transformasi Hit-or-Miss, Octave dan MATLAB menyediakan fungsi bernama bwhitmiss. Bentuk pemakaiannya: bwhitmiss(Citra, SE1, SE2) Dalam hal ini, argumen pertama menyatakan citra dan SE1 serta SE2 menyatakan elemen penstruktur yang merupakan pola untuk pencarian.
Untuk kepentingan memudahkan implementasi yang melibatkan THM, sebuah fungsi bernama thm ditunjukkan berikut ini.
Program : thm.m
function G = thm(F, H) % THM Digunakan untuk menangani transformasi Hit-or-Miss % F adalah citra yang akan dikenai operasi % H adalah elemen penstruktur [tinggi, lebar] = size(H); H1 = H; H2 = not(H1); G = and(erosi(F, H1) , erosi(not(F), H2));
Akhir Program
Contoh berikut menunjukkan cara menemukan batas kiri objek kunci dengan memanfaatkan fungsi thm:
Morfologi untuk Pengolahan Citra
253
>> Kunci = imread('C:\Image\kunci.png'); >> H = [0 1 1; 0 1 1; 0 1 1]; >> G = thm(Kunci, H); imshow(G)
Pada contoh di atas, elemen pentruktur yang digunakan untuk memperoleh batas kiri objek berupa:
0
1
1
0 1 0
1
1
1
1
1
Gambar 7.28 Elemen penstruktur untuk memperoleh batas kiri kunci Hasilnya
ditunjukkan
pada
Gambar
7.29(b).
Adapun
perintah
berikut
memberikan hasil seperti terlihat pada Gambar 7.29(c). >> H = [ 0 0 0; 1 1 1 ; 1 1 1]; >> G = thm(Kunci, H); imshow(G)
(a) Citra kunci.png
(b) Batas kiri kunci
(c) Batas atas kunci
Gambar 7.29 Contoh memperoleh batas kiri dan batas atas kunci
Pada
beberapa
kasus,
elemen
penstruktur
yang
digunakan
untuk
melakukan THM melibatkan bit-bit yang disebut dengan istilah “don’t care” (dampak nilai 1 atau 0 sama saja). Contoh:
254
Pengolahan Citra, Teori dan Aplikasi
1 𝑥 𝐵 = [1 0 1 𝑥
𝑥 𝑥] 𝑥
(7.19)
Pada contoh di atas, x menyatakan “don’t care” atau bebas (0 atau 1). Nah, untuk menangani kasus seperti itu,
dapat dibuat transformasi Hit_or_Miss seperti
berikut.
Program : thm2.html
function G = thm2(F, H) % THM2 Digunakan untuk menangani transformasi Hit-or-Miss % F adalah citra yang akan dikenai operasi % H adalah elemen penstruktur % H bisa mengandung nilai -1 untuk menyatakan % don't care [tinggi, lebar] = size(H); % Membentuk H1 % Periksa nilai don't care (yaitu -1) dan gantilah dengan nol H1 = H; for baris = 1 : tinggi for kolom = 1 : lebar if H1(baris, kolom) == -1 H1(baris, kolom) = 0; end end end % Membentuk H2 sebagai komplemen H1 % Periksa nilai don't care (yaitu -1) dan gantilah dengan nol for baris = 1 : tinggi for kolom = 1 : lebar if H(baris, kolom) == -1 H2(baris, kolom) = 0; else H2(baris, kolom) = not(H(baris, kolom)); end end end G = and(erosi(F, H1) , erosi(not(F), H2)); return
Morfologi untuk Pengolahan Citra
255
Akhir Program
Secara prinsip, bagian yang bernilai -1 (“don’t care”) selalu diubah menjadi nol. Ketika dikomplemenkan, nilai -1 juga menghasilkan nilai 0. Dengan demikian, H1 AND H2 akan selalu menghasilkan nilai 0 pada setiap elemen. Contoh penggunaan thm2 akan diberikan ketika membahas convex hull. 7.9 Skeleton Ada beberapa cara yang digunakan untuk membentuk skeleton. Skeleton merupakan bentuk unik suatu objek, yang menyerupai rangka suatu objek. Skeleton mempunyai tiga karakteristik seperti berikut (Young, dkk., 1998): 1) ketebalannya 1 piksel, 2) melewati tengah objek, dan 3) menyatakan topologi objek. Namun, dalam praktik, ada kasus tertentu yang tidak dapat dipenuhi oleh skeleton. Contoh ditunjukkan pada Gambar 7.35.
Gambar 7.30 Contoh gambar yang tidak dapat dipenuhi oleh skeleton (Sumber: Young, dkk., 1998) Skeleton digunakan untuk representasi dan pengenalan tulisan tangan, pola sidik jari, struktur sel biologis, diagram rangkaian, gambar teknik, rencana jalur
256
Pengolahan Citra, Teori dan Aplikasi
robot, dan semacam itu (Shih, 2009). Terkadang istilah skeletonisasi objek disebut sebagai Medial Axis Transform (Myler & Weeks, 1993). Salah satu cara untuk mendapatkan skeleton adalah melalui thinning. Thinning
(pengurusan)
adalah
operasi
morfologi
yang
digunakan
untuk
memperkecil ukuran geometrik objek dengan hasil akhir berupa skeleton atau rangka, dengan definisinya sebagai berikut: thinning(A, B) = A B = A ^ B = A – hit_or_miss(A, B) = A (hit_or_miss)c (7.20) Dalam hal ini, A adalah citra biner dan B adalah delapan elemen penstruktur B1 ..Bn . Satu fase perhitungan thinning dilakukan dengan menggunakan delapan elemen penstruktur. Beberapa fase diperlukan sampai diperoleh hasil yang tidak lagi mengubah struktur citra.
Operasi thinning menyerupai erosi. Perbedaannya, thinning tidak
akan membuat komponen objek terputus, melainkan
mengecilkan
hingga
hasil akhirnya
berupa
rangka
dengan
ketebalan 1 piksel.
B1
B2
B3
B4
0
0
0
1
1
1
0
1
1
1
1
0
1 1 1
1
1
1
1
1
0
1
1
1
1
0
1
1
0
0
0
0
1
1
1
1
0
1
B5
B6
B7
B8
1
1
1
1
1
0
0
1
0
1 0 0
1
1
1
1
0
0
1
1
1
0
0
1
1
0
0
1
1
1
1
0
0
1 1 1
1 1
1
Gambar 7.31 Contoh 8 elemen penstruktur untuk melakukan operasi thinning
Morfologi untuk Pengolahan Citra
257
Contoh delapan elemen penstruktur yang digunakan untuk thinning ditunjukkan pada Gambar 7.28 (Meyer dan Weeks, 1993). Fase pertama operasi thinning dilakukan sebagai berikut: A B = ((((((((A B1 ) B2 ) B3 ) B4 ) B5 ) B6 ) B7 ) B8 )
(7.21)
Implementasi thinning ditunjukkan berikut ini.
Program : thinning.m
function G = thinning(F, fase) % THINNING Untuk melakukan operasi thinning terhadap citra F % Argumen fase menentukan hasil thinning untuk % fase tersebut. Jika fase tidak disebutkaan, % operasi thinning dilakukan sampai cstruktur citra % tidak berubah lagi if nargin == 1 % Kalau fase tidak disebutkan fase = 1000000000; % Isi dengan bilangan yang besar end % Elemen H1 = [ 0 H2 = [ 1 H3 = [ 0 H4 = [ 1 H5 = [ 1 H6 = [ 1 H7 = [ 1 H8 = [ 0
penstruktur 0 0; 1 1 1; 1 1; 1 1 1; 1 1; 0 1 1; 1 0; 1 1 0; 0 0; 1 1 0; 1 1; 0 1 1; 1 1; 1 1 0; 0 1; 0 1 1;
1 0 0 1 1 0 1 1
1 0 1 1 1 0 0 1
1 0 1 0 1 1 0 1
]; ]; ]; ]; ]; ]; ]; ];
[tinggi, lebar] = size(F); C = F; for p = 1 : fase C1 = C; C = and(C, not(thm(C,H1))); C = and(C, not(thm(C,H2))); C = and(C, not(thm(C,H3))); C = and(C, not(thm(C,H4))); C = and(C, not(thm(C,H5))); C = and(C, not(thm(C,H6))); C = and(C, not(thm(C,H7))); C = and(C, not(thm(C,H8))); % Periksa hasil C1 dan C sama atau tidak sama = true;
258
Pengolahan Citra, Teori dan Aplikasi
for baris = 1 : tinggi for kolom = 1 : lebar if C1(baris, kolom) ~= C(baris, kolom) sama = false; break; end end if sama == false break; end end if sama == true break; % Akhiri kalang end end G = C;
Akhir Program
Contoh penggunaan fungsi thinning: >> F = im2bw(imread('C:\Image\bentuk.png'), 0.5); >> G = thinning(F); imshow(G)
Hasilnya ditunjukkan pada Gambar 7.32.
(a) Berbagai bentuk objek
(b) Skeleton morfologi
Gambar 7.32 Citra yang berisi berbagai bentuk dan hasil akhir setelah mengalami operasi thinning
Morfologi untuk Pengolahan Citra
259
Adapun contoh berikut menunjukkan pengenaan elemen penstruktur untuk fase kedua: >> G = thinning(F,2); imshow(G)
Hasilnya ditunjukkan pada Gambar 7.33(a). Hasil fase keenam diperoleh dengan menggunakan perintah berikut: >> G = thinning(F,6); imshow(G)
Hasilnya ditunjukkan pada Gambar 7.33(b).
Gambar 7.33 Hasil thinning pada berbagai fase
260
Pengolahan Citra, Teori dan Aplikasi
Skeleton juga dapat diperoleh melalui morfologi, seperti yang diajukan oleh Serra (1982).
Definisi skeleton
dijelaskan berikut ini. Misalnya, A
menyatakan citra biner dengan 1 menyatakan piksel objek dan 0 menyatakan piksel-piksel latarbelakang. Skeleton A diperoleh dengan menggunakan rumus: 𝑆 (𝐴) = ⋃𝐾𝑘=0 𝑆𝑘 (𝐴)
(7.22)
Dalam hal ini, 𝑆𝑘 (𝐴) = (𝐴 𝑘𝐵 − (𝐴 𝑘𝐵) 𝐵
(7.23)
B adalah elemen penstruktur dan K adalah bilangan terbesar sebelum membuat A tererosi menjadi himpunan kosong. Kondisi pada K tersebut dapat ditulis secara matematis seperti berikut: 𝐾 = max(𝑘|𝐴 𝑘𝐵 ≠ ∅)
(7.24)
Perlu diketahui, 𝐴 𝑘𝐵 = (((𝐴 𝐵) 𝐵) … ) 𝐵
(7.25)
yang menyatakan bahwa hasil erosi dierosi ulang sampai terjadi k erosi. Contoh yang menunjukkan proses pembuatan skeleton suatu objek dengan cara di atas ditunjukkan pada Gambar 7.36. Pada contoh tersebut, S 2 (A) berupa himpunan kosong mengingat semua elemen bernilai nol. Dengan demikian, K = 1 atau S(A) = S1 (A).
Morfologi untuk Pengolahan Citra
261
0 0 0
1
1
1
0
0
0
0
1
1
0
1 0 1
1
1
1
0
0
0
1
1
0
1
1
1
0
0
0
0
1
1
1
0
1
1
1
0
0
0
0
0
1
1
1
1
1
1
0
0
1
1
1
1
1
0
1
1 1 1
0
1
1
1
1
0
0
0
0
0
0
0
0
0
B
A 0 0 0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
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
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
AB
(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
0
0
S1(A) = (A B) - (A B) B
S2(A)
Gambar 7.34 Skeleton secara morfologis Namun, cara seperti itu tidak menjamin terjadinya skeleton yang titik-titiknya terkoneksi. Hal ini telah diutarakan oleh Gonzalez dan Woods (2002). Di Octave dan MATLAB, skeleton dapat diperoleh dengan menggunakan fungsi bwmorph. Contoh: >> Img = imread('C:\Image\bentuk.png');
262
Pengolahan Citra, Teori dan Aplikasi
>> Img = im2bw(Img, 0.5); >> G = bwmorph(Img, 'skel', inf); >> imshow(G) Perlu diketahui, im2bw digunakan 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
membentuk skeleton. Hasil operasi di depan ditunjukkan pada Gambar 7.35.
Gambar 7.35 Hasil bwmorph untuk memperoleh skeleton
dalam
Morfologi untuk Pengolahan Citra
263
7.10 Thickening Thickening (penebalan) adalah operasi yang berkebalikan dengan thinning. Fungsinya adalah memperbesar ukuran geometris objek. Operasi ini didefinisikan sebagai berikut: A B = A hit_or_miss(A, B)
(7.26)
Dalam hal ini, A adalah citra biner dan B adalah delapan elemen penstruktur B1 ..Bn . Satu fase perhitungan thickening dilakukan dengan menggunakan delapan elemen penstruktur. Contoh kedelapan elemen penstruktur disajikan pada Gambar 7.36.
B1
B2
B3
B4
1
1
1
0
0
0
1
0
0
0
0
0 1 0
0
0
0
0
0
1
0
0
0
0
1 2 1
0
0
1
1
1
1
0
0
0
0
1
1
B5
B6
B7
B8
0
0
0
0
0
1
1
0
1
0 0 1
0
0
0
0
1
1
0
0
0
1
1
0
0
1
1
0
0
0
0
1
1
0 1 0
0 0
1
Gambar 7.36 Contoh 8 elemen penstruktur untuk operasi thickening Fase pertama operasi thickening dilakukan sebagai berikut: A B = ((((((((A B1 ) B2 ) B3 ) B4 ) B5 ) B6 ) B7 ) B8 ) (7.27)
Implementasi thickening ditunjukkan berikut ini.
264
Pengolahan Citra, Teori dan Aplikasi
Program : thickening.m
function G = thickening(F, n_iterasi) % THICKENING Digunakan untuk menebalkan objek yang terdapat pada % citra F. % Argumen n_iterasi menyatakan jumlah iterasi atau % fase yang dikehendaki untuk melakukan % penebalan objek' H1 H2 H3 H4 H5 H6 H7 H8
= = = = = = = =
[ [ [ [ [ [ [ [
C = F; for p = C = C = C = C = C = C = C = C = end
1 0 1 0 0 0 0 1
1 0 0 0 1 0 0 1
1; 0; 0; 1; 1; 0; 0; 0;
0 0 1 0 0 1 0 1
0 0 0 0 0 0 0 0
0; 0; 0; 1; 1; 0; 1; 0;
0 1 1 0 0 1 0 0
0 1 0 0 0 1 1 0
0 1 0 1 0 0 1 0
]; ]; ]; ]; ]; ]; ]; ];
% Salin citra F ke C 1 : n_iterasi or(C, thm(C,H1)); or(C, thm(C,H2)); or(C, thm(C,H3)); or(C, thm(C,H4)); or(C, thm(C,H5)); or(C, thm(C,H6)); or(C, thm(C,H7)); or(C, thm(C,H8));
G = C;
Akhir Program
Contoh >> F = imread(’C:\Image\morfo.png’); >> G = thickening(F,1); imshow(G) Hasil untuk berbagai fase ditunjukkan pada Gambar 7.37.
Morfologi untuk Pengolahan Citra
265
Gambar 7.37 Contoh operasi thickening 7.11 Convex Hull Himpunan konveks (cembung) adalah himpunan yang mencakup semua titik yang menghubungkan dua titik yang berada di dalam himpunan. Adapun convex hull adalah bentuk poligon terkecil yang dapat melingkupi objek. Poligon ini dapat dibayangkan sebagai gelang elastis yang dapat melingkupi tepi objek, Hal seperti itu kadang diperlukan untuk kepentingan mengenali objek, dengan menghilangkan tepian objek yang cekung.
266
Pengolahan Citra, Teori dan Aplikasi
Convex
hull diperoleh dengan melibatkan transformasi Hit_or_Miss
(THM) dengan elemen-elemen penstruktur yang dirotasi sebesar 90o . Contoh elemen penstruktur ditunjukkan pada Gambar 7.38.
B1
B2
B3
B4
1
x
x
1
1
1
x
x
1
x
x
1 1 1
0
x
x
0
x
x
0
1
x
0
x 2x
x
x
x
x
x
x
x
1
1
1
1
1
Gambar 7.38 Empat elemen penstruktur untuk membentuk convex hull Pada contoh di atas, x menyatakan “don’t care”. Langkah awal untuk melakukan perhitungan convex hull dilaksanakan dengan memberikan X0 1 = A, dengan A adalah citra yang akan diproses. Selanjutnya, dilakukan perhitungan sebagai berikut: 𝑋𝑘𝑖 = 𝑡ℎ𝑚(𝑋𝑘−1 , 𝐵 𝑖 ) ∪ 𝐴 𝑖 = 1,2,3,4 𝑑𝑎𝑛 𝑘 = 1,2,3, …
(7.28)
𝑖 𝑖 Konvergensi tercapai ketika 𝑋𝑘𝑖 = 𝑋𝑘−1 . Nah, bila Di = 𝑋𝑘𝑜𝑛𝑣𝑒𝑟𝑔𝑒𝑛 , convex hull A
berupa 𝐶 (𝐴) = ⋃4𝑖=1 𝐷 𝑖
(7.29)
Contoh untuk memperoleh convex hull ditunjukkan pada Gambar 7.39. Pada contoh tersebut, hasil setelah konvergen untuk 𝑋𝑘𝑖, 𝑋𝑘𝑖, 𝑋𝑘𝑖, 𝑋𝑘𝑖 diperlihatkan.
Morfologi untuk Pengolahan Citra
267
0 0 0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0 0 0
0
1
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
1 𝑋𝑘𝑜𝑛𝑣 =3
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
1
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
2 𝑋𝑘𝑜𝑛𝑣 =1
3 𝑋𝑘𝑜𝑛𝑣 =2
0 0 0
0
0
1
0
0
0
0
0
0
1
1
1
0
0
0
0
1
1
1
1
1
0
0
1
1
1
1
1
0
0
1
1
1
0
0
1
1
0
0
0
0
0
0
0
0
0
1
0
0
0
0
0
0
0 0 0
0
1
1
1
0
0
0
0
0
0
0
1
1
1
1
1
0
0
0
0
0
0
1
1
1
1
1
1
0
0
0
1
0
0
0
0
1
1
1
1
1
1
0
0
1
1
1
0
0
0
1
1
1
1
1
1
1
0
0
1
1
1
0
0
0
0
0
1
1
1
1
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
4 𝑋𝑘𝑜𝑛𝑣 =4
𝐶(𝐴)
Gambar 7.39 Proses pembentukan convex hull
268
Pengolahan Citra, Teori dan Aplikasi
Implementasi pembentukan convex hull dituangkan pada fungsi bernama convhull, dengan kode sebagai berikut.
Program : convhull.m
function G = convhull(A) % CONVHULL Untuk melakukan operasi convex hull terhadap citra A % dengan menggunakan 4 elemen penstruktur % G = Convex hull [tinggi, lebar] = size(A); % Elemen penstruktur H1 = [ 1 -1 -1; 1 0 -1; 1 -1 -1 H2 = [ 1 1 1; -1 0 -1; -1 -1 -1 H3 = [ -1 -1 1; -1 0 1; -1 -1 1 H4 = [ -1 -1 -1; -1 0 -1; 1 1 1 C C C C C
= = = = =
]; ]; ]; ];
zeros(tinggi, lebar); or(C, chull(A, H1)); or(C, chull(A, H2)); or(C, chull(A, H3)); or(C, chull(A, H4));
G = C; function [G, k] = chull(A, B) % A = Citra % B = elemen penstruktur % G = Hasil yang konvergen % k = iterasi hingga korvergen [tinggi, lebar] = size(A); k=1; Ckmin1 = A; while (true) Ck = or(Ckmin1, thm2(Ckmin1,B)); % Cek Ckmin1 apa sama dengan Ck sama = true; for baris = 1 : tinggi for kolom = 1 : lebar if Ckmin1(baris, kolom) ~= Ck(baris, kolom) sama = false; break; end end if sama == false
Morfologi untuk Pengolahan Citra
269
break; end end if sama == true break; % Berarti sudah konvergen end % Ke iterasi berikutnya k = k + 1; Ckmin1 = Ck; end k = k-1; G = Ckmin1;
Akhir Program
Contoh penggunaan fungsi convhull: >> Garpu = im2bw(imread('C:\image\fork-3.png'), 0.5); >> G = convhull(Garpu); imshow(G)
Hasilnya ditunjukkan pada Gambar 7.40(b). Gambar 7.40(c) menunjukkan keadaan yang dinamakan defisiensi konveks. Defisiensi konveks menyatakan selisih antara convex hull dan citra asli. Hasil tersebut diperoleh melalui: >> imshow(G – Garpu)
(a) Citra fork-3.png
(b) Convex hull
(c) Convex hull – Citra asli
Gambar 7.40 Hasil convex hull dan defisiensi konveks Bentuk convex hull dapat diubah agar tidak berbentuk kotak. Sebagai contoh, terdapat delapan elemen penstruktur seperti terlihat pada Gambar 7.41.
270
Pengolahan Citra, Teori dan Aplikasi
B1
B2
B3
B4
1
1
1
1
1
x
1
x
x
x
x
1 1x
0
x
1
0
x
1
0
x
1
0
x 2 x
x
x
1
x
x
1
1
x
1
1
1
1
B5
B6
B7
B8
x
1
x
1
1
1
1
1
1
x 0 x
0
1
x
0
1
x
0
1
1
x
1
1
x
x
1
x
x
x
x
x
x
x 1 1 1
0 1
Gambar 7.41 Contoh 8 elemen penstruktur untuk melakukan operasi convex hull Dengan menggunakan delapan elemen penstruktur tersebut, diperoleh hasil seperti terlihat pada Gambar 7.42.
(a) Convex hull
(b) Convex hull – Citra asli
Gambar 7.42 Convex hull dan defisiensi konveks yang melibatkan delapan elemen penstruktur 7.12 Morfologi Aras Keabuan Sejauh ini, pembicaraan mengenai morfologi terbatas pada citra biner. Sesungguhnya, morfologi juga dapat dikenakan pada citra beraras keabuan. Namun, tentu saja terdapat perbedaan dalam melakukan operasi morfologi ini. Beberapa operasi morfologi untuk citra beraras keabuan dibahas di subbab ini.
Morfologi untuk Pengolahan Citra
271
7.12.1 Dilasi Beraras Keabuan Dilasi pada aras keabuan didefinisikan sebagai berikut (Gonzalez & Woods, 2002): (𝐴 𝑔 𝐵)(𝑢, 𝑣) = 𝑚𝑎𝑥 (𝑖,𝑗)∈𝐻 (A(u-i,v-j)+B(i,j))
(7.30)
dengan A adalah citra dan B adalah elemen penstruktur. Jadi, nilai yang dihasilkan berupa nilai terbesar antara A+B, dengan proses penambahan dilakukan seperti yang terjadi pada konvolusi citra. Simbol g sesudah tanda menyatakan bahwa operasi dilasi tersebut berlaku untuk citra beraras keabuan. Ilustrasi dilasi beraras keabuan dapat dilihat pada Gambar 7.43. Pada contoh tersebut, nilai terbesar A+B adalah 25. Nilai tersebut dijadikan sebagai nilai dalam A g B.
A (Citra) 11
12
14
15
17
18
Himpunan hasil
B 13 16
1
3
8
2
7
6
5
9
4
19
11+4
12+9
13+5
14+6
15+7
16+2
17+8
18+3
19+1
Diputar 180o 4
9
5
6
7
2
8
3
1
1
Terbesar = 25
+
Hasil
25
Gambar 7.43 Contoh penentuan nilai dalam dilasi beraras keabuan
272
Pengolahan Citra, Teori dan Aplikasi
Implementasi dilasi dapat dilihat pada program berikut.
Program : gdilasi.m
function G = gdilasi(F, H, hotx, hoty) % GDILASI Berguna untuk melaksanakan operasi dilasi pada % citra beraras keabuan. % Masukan: % F = citra yang akan dikenai dilasi % H = elemen pentruksur % (hy, hx) koordinat pusat piksel [th, lh]=size(H); [tf, lf]=size(F); if nargin < 3 hotx = round(lh/2); hoty = round(th/2); end G = zeros(tf, lf); % Nolkan semua pada hasil dilasi % Memproses dilasi for baris = 1 : tf for kolom = 1 : lf terbesar = 0; 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 terbesar < nilai terbesar = nilai; end end end end % Potong nilai terbesar kalau melebihi 255 if terbesar > 255 terbesar = 255; end % Berikan nilai terbesar ke G G(baris, kolom) = terbesar; end end
Morfologi untuk Pengolahan Citra
273
G = uint8(G);
Akhir Program
Pada contoh di atas, fungsi uint8 digunakan untuk memastikan bahwa hasil perhitungan dilasi berkisar antara 0 sampai dengan 255. Contoh
berikut
menunjukkan
penggunaan
fungsi
gdilasi
yang
dikenakan pada citra mandrill.png dengan menggunakan elemen penstruktur berukuran 9x9 dengan bentuk cakram. >> Img = imread('C:\Image\mandrill.png'); >> H = [ 0
0
1
1
1
1
1
0
0
0
1
1
1
1
1
1
1
0
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
0
1
1
1
1
1
1
1
0
0
0
1
1
1
1
1
0
0 ];
>> G = gdilasi(Img, H); imshow(G)
Hasilnya dapat dilihat pada Gambar 7.44.
274
Pengolahan Citra, Teori dan Aplikasi
(a) Citra mandrill.png
(c) Dilasi dengan elemen struktur berukuran 3x3 dan seluruhnya bernilai 1
(b) Dilasi dengan elemen struktur berukuran 3x3 dan seluruhnya bernilai 0
(d) Dilasi dengan elemen struktur berukuran 9x9 dan berbentuk bola
Gambar 7.44 Efek dilasi pada citra beraras keabuan 7.12.2 Erosi Beraras Keabuan Erosi pada citra beraras keabuan didefinisikan sebagai berikut: (𝐴 𝑔 𝐵)(𝑢, 𝑣) = 𝑚𝑖𝑛 (𝑖,𝑗)∈𝐻 (A(u+i,v+j)-B(i,j))
(7.31)
dengan A adalah citra dan B adalah elemen penstruktur. Simbol g sesudah tanda menyatakan bahwa operasi dilasi tersebut berlaku untuk citra beraras keabuan.
Morfologi untuk Pengolahan Citra
275
Jadi, nilai yang dihasilkan berupa nilai terkecil antara A-B. Contoh perhitungan erosi ditunjukkan pada Gambar 7.45.
A (Citra) 11
12
14
15
17
18
Himpunan hasil
B 13 16
1
3
8
2
7
6
5
9
4
19
11-2
12-3
13-8
14-2
15-7
16-6
17-5
18-9
19-4 1
Terkecil = 5 Hasil
5
Gambar 7.45 Contoh penentuan nilai dalam erosi beraras keabuan
Implementasi erosi pada citra beraras keabuan diwujudkankan dengan fungsi bernama gerosi. Kodenya seperti berikut.
Program : gerosi.m
function G = gerosi(F, H, hotx, hoty) % GEROSI Berguna untuk melaksanakan operasi dilasi % citra beraras keabuan. % Masukan: % F = citra yang akan dikenai erosi % H = elemen pentruksur % (hy, hx) koordinat pusat piksel [th, lh]=size(H); [tf, lf]=size(F); if nargin < 3 hotx = round(lh/2); hoty = round(th/2); end
276
Pengolahan Citra, Teori dan Aplikasi
G = zeros(tf, lf); % Nolkan semua pada hasil erosi % Memproses erosi for baris = 1 : tf for kolom = 1 : lf terkecil = 255; for p=1:th for q=1:lh ypos = baris + p - hoty; xpos = kolom + q - hotx; if (xpos >= 1) && (xpos <= lf) && ... (ypos >= 1) && (ypos <= tf) nilai = F(ypos, xpos) + H(p, q); if terkecil > nilai terkecil = nilai; end end end end % Berikan nilai ke G if terkecil < 0 terkecil = 0; end G(baris, kolom) = terkecil; end end G = uint8(G);
Akhir Program
Contoh penggunaan gerosi seperti berikut: >> Img = imread('C:\Image\mandrill.png'); >> H = [ 0
0
1
1
1
1
1
0
0
0
1
1
1
1
1
1
1
0
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
0
1
1
1
1
1
1
1
0
Morfologi untuk Pengolahan Citra
0
0
1
277
1
1
1
1
0
0 ];
>> G = gerosi(Img, H); imshow(G) Hasilnya dapat dilihat pada Gambar 7.46.
(a) ) Citra mandrill.tif
(c) Erosi dengan elemen struktur
berukuran 3x3 dan seluruhnya bernilai 1
(b) Erosi dengan elemen penstruktur berukuran 3x3 dan seluruhnya bernilai 0
(d) Erosi dengan elemen struktur berukuran 9x9 dan berbentuk bola
Gambar 7.46 Efek erosi pada citra beraras keabuan
278
Pengolahan Citra, Teori dan Aplikasi
Aplikasi erosi dan dilasi pada citra beraras keabuan adalah untuk memperoleh gradien morfologis. Dalam hal ini, gradien morfologis diperoleh dengan melakukan pengurangan hasil dilasi dengan nilai hasil erosi. Contoh: >> >> >> >>
Img = imread('C:\Image\boneka.png'); X = gdilasi(Img, ones(3)); Y = gerosi(Img, ones(3)); imshow(X-Y)
Hasilnya dapat dilihat pada Gambar 7.47(d). Adapun hasil pemrosesan dilasi dan erosi secara berturutan dapat dilihat pada Gambar 7.47(b) dan 7.47(c).
(a) Citra boneka.png
(c) Erosi dengan elemen struktur berukuran 3x3 dan seluruhnya bernilai 1
(b) Dilasi dengan elemen struktur berukuran 3x3 dan seluruhnya bernilai 1
(d) Hasil dilasi – hasil erosi
Gambar 7.47 Gradien morofologis melalui pengurangan dilasi dengan erosi pada citra beraras keabuan
Morfologi untuk Pengolahan Citra
279
7.12.3 Opening dan Closing Secara prinsip, operasi opening dan closing pada citra beraras keabuan serupa pada citra biner. Definisinya sebagai berikut. Opening:
A g B = (A g B) g B
(7.32)
Closing:
A g B = (A g B) g B
(7.33)
Contoh perbedaan hasil operasi opening dan closing pada citra beraras keabuan dapat dilihat pada Gambar 7.48. Terlihat bahwa operasi opening berkecenderungan menghilangkan bagian yang cerah tetapi berukuran kecil (perhatikan pada bagian mata pada hasil opening). Adapun operasi closing mempertahankan objek kecil yang berwarna terang.
Gambar 7.48 Operasi opening dan closing pada citra beraras keabuan menggunakan elemen penstruktur 5x5 yang seluruhnya bernilai 0
280
Pengolahan Citra, Teori dan Aplikasi
Untuk kepentingan kemudahan dalam mencoba operasi opening pada citra berskala keabuan, dapat digunakan fungsi bernama gopening. Kodenya sebagai berikut.
Program : gopening.m
function G = gopening(F, H) % GOPENING berguna untuk melaksanakan operasi opening % citra beraras keabuan % Masukan: % F = citra yang akan dikenai erosi % H = elemen pentruksur G = gdilasi(gerosi(F, H), H);
Akhir Program
Untuk kepentingan kemudahan dalam mencoba operasi closing pada citra berskala keabuan, dapat digunakan fungsi bernama gclosing. Kodenya sebagai berikut.
Program : gclosing.m
function G = gclosing(F, H) % GCLOSING Berguna untuk melaksanakan operasi closing % citra beraras keabuan. % Masukan: % F = citra yang akan dikenai erosi % H = elemen pentruksur G = gerosi(gdilasi(F, H), H);
Akhir Program
Morfologi untuk Pengolahan Citra
281
Contoh berikut menunjukkan penggunaan gopening: >> Img = imread('C:\Image\lena256.png'); >> G = gopening(Img, ones(5)); >> imshow(G) Adapun contoh berikut menunjukkan penggunaan gclosing: >> Img = imread('C:\Image\lena256.png'); >> G = gclosing(Img, ones(5)); >> imshow(G) 7.13 Transformasi Top-Hat Transformasi Top-Hat didefinisikan sebagai perbedaan antara citra dan citra setelah mengalami operasi opening (Solomon & Breckon, 2011) atau dapat disajikan secara matematis seperti berikut: TTH(A, B) = A - (A g B)
(7.34)
Pada rumus di atas, A menyatakan citra dan B sebagai elemen penstruktur. Simbol g menyatakan bahwa operasi tersebut berlaku untuk citra beraras keabuan. Transformasi ini berguna untuk mendapatkan bentuk global suatu objek yang mempunyai intensitas yang bervariasi. Sebagai contoh, perhatikan Gambar 7.49(a). Pada citra tersebut, butiran-butiran nasi
memiliki intensitas yang tidak
seragam. Melalui opening, diperoleh hasil seperti terlihat pada Gambar 7.49(b). Hasil transformasi Top-Hat ditunjukkan pada Gambar 7.49(c). Perhatikan bahwa hasil butiran nasi pada Gambar 7.49(c) terlihat memiliki intensitas yang lebih seragam dibandingkan pada citra asal.
282
Pengolahan Citra, Teori dan Aplikasi
(a) Citra rice.png
(b) Hasil Opening
(c) ) Hasil Top-Hat
Gambar 7.49 Transformasi Top-Hat menggunakan elemen penstruktur berukuran 9x9 berbentuk cakram Pada contoh berikut, TH menyatakan hasil transformasi Top-Hat: >> Img = imread('C:\Image\rice.png'); >> H = [ 0
0
1
1
1
1
1
0
0
0
1
1
1
1
1
1
1
0
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
0
1
1
1
1
1
1
1
0
0
0
1
1
1
1
1
0
0 ];
>> G = gopening(Img, H); >> TH = Img - G; >> imshow(TH)
File
rice.png tidak disediakan di CD yang disertakan
bersama buku. File tersebut adalah milik MATLAB.
Hasil transformasi Top-Hat pada contoh seperti di atas akan menghasilkan citra biner yang lebih baik daripada kalau citra biner diperoleh secara langsung
Morfologi untuk Pengolahan Citra
283
dari citra asal. Sebagai gambaran, Gambar 7.50 memberikan contoh hasil konversi ke citra biner menggunakan citra rice.png dan hasil konversi citra biner menggunakan hasil transformasi Top-Hat.
(a) Citra rice.png
(b) ) Konversi citra biner melalui rice.png secara langsung
(c) Konversi citra biner melalui hasil Top-Hat
Gambar 7.50 Efek transformasi Top-Hat untuk memperoleh citra biner
Perhatikan bahwa jumlah butir padi pada Gambar 7.50(c) bagian bawah lebih banyak daripada pada Gambar 7.50(b). 7.14 Transformasi Bottom-Hat Transformasi Bottom-Hat didefinisikan sebagai berikut: TBH(A, B) = (A g B) - A
(7.35)
Secara prinsip, operasi ini memperbesar warna putih melalui dilasi,
diikuti
dengan pengecilan warna putih melalui erosi dan kemudian dikurangi dengan citra asal. Dilasi yang diikuti dengan erosi memberikan efek berupa objek-objek yang berdekatan menjadi semakin dekat. Pengurangan oleh citra asal membuat penghubung antarobjek menjadi hasil yang tersisa. Dengan kata lain, hasil yang tersisa
adalah
piksel-piksel yang digunakan untuk
“penghubung objek”.
mengisi “lubang”,
atau
284
Pengolahan Citra, Teori dan Aplikasi
Latihan 1. Terdapat dua buah himpunan seperti berikut: A = {(1,1), (1,2), (2,1), (2,3), (2,1)} B = {(1,1), (1,3), (2,2), (2,3), (3,1)}
Berapa hasil operasi berikut? (a) A B (b) A B
2. Perhatikan gambar berikut:
0
0
0
0
0
0
1
1
0
0
0
1
1
1
0
0
0
1
0
0
0
1
0
0
0
(a) Bagaimana bentuk komplemen citra tersebut? (b) Bagaimana bentuk refleksinya?
3. Jelaskan kegunaan operasi dilasi.
4. Perhatikan citra berikut:
0
0
0
0
0
0
1
1
0
0
0
1
1
1
0
0
0
1
0
0
0
1
0
0
0
Morfologi untuk Pengolahan Citra
285
Perlihatkan hasilnya jika dikenai operasi dilasi dengan elemen penstruktur seperti berikut?
1
1
Dalam hal ini, yang diarsir adalah hotspot. Hitung soal di atas secara manual dan kemudian bandingkan dengan hasil kalau menggunakan fungsi bernama erosi.
Bagaimana hasilnya kalau hotspot justru terletak yang kanan? Lakukan secara manual dan juga melalui komputasi dengan fungsi erosi.
5. Jelaskan bahwa hasil operasi erosi sebenarnya menyatakan letak elemen penstruktur di dalam citra yang dikenai operasi tersebut.
6. Jelaskan hubungan operasi berikut terhadap operasi dilasi dan erosi: (a) operasi opening (b) operasi closing
7. Operasi opening sering dikatakan idempotent. Apa maksudnya?
8. Jelaskan kegunaan operasi thinning?
9. Cobalah memodifikasi operasi pada thinning.m dengan menggunakan elemen penstruktur seperti berikut:
286
Pengolahan Citra, Teori dan Aplikasi
B1
B2
B3
B4
0
0
0
1
0
0
1
1
0
1
1
1
1 1 1
1
1
1
1
1
1
1
0
1
1
0
1
1
1
1
1
1
1
0
1
0
0
1
B5
B6
1
1
1
1 1 0
1 0
B7
B8
1
1
0
1
1
0
0
1
1
1 0 0
1
1
0
1
1
0
1
1
0
0
0
1
0
1
1
1
1
1
1
Kenakan
pada
citra
bentuk.png.
Perhatikan
bahwa
elemen-elemen
penstruktur di atas sama dengan elemen-elemen penstruktur pada contoh di depan, tetapi letaknya dipertukarkan. Bandingkan hasilnya dengan contoh pada Gambar 7.32. 10. Cobalah untuk mengimplementasikan convex hull yang melibatkan delapan elemen penstruktur.
11. Buatlah fungsi bernama tth yang berguna untuk melaksanakan operasi transformasi Top-Hat. Lalu, ujilah fungsi tersebut untuk menapis rice.png.