Jelajahi eBook
Kategori
Jelajahi Buku audio
Kategori
Jelajahi Majalah
Kategori
Jelajahi Dokumen
Kategori
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 adalah opening 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,
BA (7.3)
C=AB (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=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=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
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
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 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
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
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
Dengan demikian,
1 2 3 4 5 -1 0 1
1 -1
2 0
3 1
4
5
A B
Hotspot vertikal
AB
AB=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.
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
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
[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
AB
A B=B A
(A B) C = A (B C)
>> 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]
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
>>
Agar hasil strel dapat dimanfaatkan untuk fungsi erosi ataupun dilasi,
elemen penstruktur dapat diperoleh dengan memberikan perintah semacam
berikut:
Dengan cara seperti itu, H dapat digunakan pada fungsi erosi atau dilasi. Contoh:
>> 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)
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)
(A B) B = (A B) (7.16)
Program : opening.m
Akhir Program
A B = (A B) B (7.17)
Program : closing.m
Akhir Program
248 Pengolahan Citra, Teori dan Aplikasi
𝐴 * 𝐵 = (𝐴 𝐵1 ) (𝐴̅ 𝐵2 ) (7.18)
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 0 1 0 0 0 0 0 1 0 0 1 0 0 0 0 0
1
1 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
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
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
>>
0 1 1 1 1 1 1 1 1 0 1 1 1 1 1 1 1 1
0 0
1 1 0 1 1 1 1 1 0 1 1 0 1 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 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
0 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 1 1
0 0 0
1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0
0
1
0 1
0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
1
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
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
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 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
1
0 1 1
1
Gambar 7.28 Elemen penstruktur untuk
memperoleh batas kiri kunci
>> 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
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 thm2 akan diberikan ketika membahas convex hull.
7.9 Skeleton
Gambar 7.30 Contoh gambar yang tidak dapat dipenuhi oleh skeleton
(Sumber: Young, dkk., 1998)
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.
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 1 0 0 0 0 1 1 1 1 0
1
B5 B6 B7 B8
1 0 0 1 1 1 1 1 1 0 0 1
1 0
1 0 0 1 1 1 1 0 0 1 1
1
1 1 1 0 0 1 1 0 0 1 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:
𝐾 = max(𝑘|𝐴 𝑘𝐵 ≠ ∅) (7.24)
Perlu diketahui,
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 1 1 1 0 0 0 0 1 1 1
0
0 1 1 1 0 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
1
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 0 1 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 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)
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:
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 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 2
0 0 0 0 0 1 0 0 0 0 1
1
0 0 0 1 1 1 1 0 0 0 0 1
1
B5 B6 B7 B8
0 1 1 0 0 0 0 0 0 1 1 0
0 0
0 1 1 0 0 0 0 1 1 0 0
1
0 0 0 1 1 0 0 1 1 0 0 0
1
A B = ((((((((A B1 ) B2 ) B3 ) B4 ) B5 ) B6 ) B7 ) B8 ) (7.27)
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 2x
1
1 x x x x x x x 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 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 1
𝑋𝑘𝑜𝑛𝑣 =3
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 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 3
𝑋𝑘𝑜𝑛𝑣 =1 𝑋𝑘𝑜𝑛𝑣 =2
0 0 0 1 0 0 0 0 0 0 0 0 1 0 0 0 0 0
0
0 0 1 1 1 0 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
4
𝑋𝑘𝑜𝑛𝑣 =4 𝐶(𝐴)
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
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 x
1 2
0 x 1 0 x 1 0 x 1 0 x
1x
x x 1 x x 1 1 x 1 1 1
1
B5 B6 B7 B8
x x x x x 1 x 1 1 1 1 1
x 0
0 1 x 0 1 x 0 1 x 0 1
1
1 1 1 x 1 1 x x 1 x x x
1
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.
Hasil
25
Program : gdilasi.m
[th, lh]=size(H);
[tf, lf]=size(F);
if nargin < 3
hotx = round(lh/2);
hoty = round(th/2);
end
% 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
G = uint8(G);
Akhir Program
Pada contoh di atas, fungsi uint8 digunakan untuk memastikan bahwa hasil
perhitungan dilasi berkisar antara 0 sampai dengan 255.
(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 Pengolahan Citra 275
Jadi, nilai yang dihasilkan berupa nilai terkecil antara A-B. Contoh perhitungan
erosi ditunjukkan pada Gambar 7.45.
1
Terkecil = 5
Hasil
Program : gerosi.m
[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
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.
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
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
Akhir Program
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
Akhir Program
Morfologi untuk Pengolahan Citra 281
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
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
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)}
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 1 0 1 0 0
1
B5 B6 B7 B8
1 1 1 1 1 1 0 1 1 0 0 1
1 1 1 0
0 1 1 0 1 1 0 1 1
1
0 0 0 0 0 1 0 1 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.