Morfologi untuk Pengolahan Citra STMIK PPKIA Pradnya Paramita Sigit Setyowibowo, ST., MMSI
Pengertian Operasi Morfologi Operasi morfologi merupakan operasi yang umum dikenakan pada citra biner (hitam-putih) untuk mengubah struktur bentuk objek yang terkandung dalam citra. Operasi morfologi : Erosi (Erosion) Dilasi (Dilation) Operasi Gabungan (Compound Operations) Beberapa manfaat dari aplikasi morfologi adalah sebagai berikut. Memisahkan objek yang saling berhimpitan. Memperoleh skeleton (rangka) sebuah objek. Memperoleh struktur bentuk objek.
manfaat dari aplikasi morfologi Remove Noise Small Object Fill Holes
manfaat dari aplikasi morfologi Memisahkan objek yang saling berhimpitan
KOMPONEN OPERASI MORFOLOGI 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 (strel) (Shih, 2009). Operasi strel terhadap citra
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 𝑎∈𝐴 Arti notasi di atas, a adalah anggota himpunan A. kebalikannya, jika a bukan anggota himpunan A, a ditulis seperti berikut: 𝑎 𝐴 Sebagai contoh, s = (1, 2) dan t = (1, 4), sedangkan himpunan A berisi seperti berikut: A = { (1,1), (1,2), (1, 3), (2, 1), (2, 2) } Pada contoh tersebut, A memiliki 5 anggota. Berdasarkan contoh tersebut, dapat dituliskan fakta berikut: 𝑠∈𝐴 𝑡 𝐴
Perlu diketahui, setiap elemen hanya dapat menjadi anggota himpunan satu kali. Dengan demikian, A = {(1,1), (1,1), (2,1), (2,3), (2,1)} sesungguhnya hanya mempunyai 3 anggota, yaitu A = {(1,1), (2,1), (2,3)} Notasi biasa terdapat dalam pembicaraan himpunan. Simbol tersebut menyatakan himpunan kosong, yaitu himpunan yang tidak memiliki anggota sama sekali. Apabila A dan B adalah himpunan dan setiap anggota himpunan B merupakan anggota himpunan A, dikatakan bahwa B adalah subhimpunan A. Notasi yang biasa digunakan untuk kepentingan ini: B A
Operasi union Union himpunan A dan B,dinyatakan dengan C = A∪B, adalah himpunan dari semua elemen anggota A, B, atau keduanya
Operasi interseksi/irisan Irisan A dan B, dinyatakan dengan C = A B adalah himpunan dari semua elemen yang merupakan anggota A dan B.
Operasi komplemen/inversi Komplemen himpunan A adalah himpunan elemen yang bukan anggota A Ac = { w | w A } 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
Operasi selisih Operasi selisih dua himpunan dapat ditulis seperti berikut: A – B = { w | w A, w B } = A Bc Contoh menunjukkan bahwa A – B B – A.
Contoh refleksi Refleksi B dinotasikan dengan 𝐵 dan didefinisikan sebagai berikut: 𝐵 = 𝑤|𝑤=−𝑏, 𝑢𝑛𝑡𝑢𝑘 𝑏 ∈𝐵 Refleksi sebenarnya menyatakan percerminan terhadap piksel pusat. Contoh ditunjukkan pada Gambar . 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
Contoh translasi satu piksel ke kanan dan Translasi himpunan A terhadap titik z=(z1, z2) disimbolkan dengan (A)z. Definisinya sebagai berikut: (𝐴) 𝑧 = 𝑐|𝑐=𝑎+𝑧, 𝑢𝑛𝑡𝑢𝑘 𝑎∈𝐴 Himpunan A digeser pada arah z1 dan z2 sesuai dengan nilai z yang diberikan Contoh translasi satu piksel ke kanan dan dua piksel ke bawah
Operasi Nalar Tabel kebenaran
Berbagai efek operasi AND, OR, NOT, XOR, dan NAND ditunjukkan pada Gambar. Hasil-hasil operasi nalar atas dua buah citra A dan B
clear all; % kosongkan semua variabel dalam sistim memori %program andnand.m %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% %%% Program Operasi Logika AND dan NAND antara dua citra digunakan untuk citra biner %%%%%%%%%%%%% %%% Sarifuddin Madenda untuk buku "Pengolahan Citra dan Video Digital: Teori, Aplikasi %%% %%% dan Pemrograman Matlab",2015. %%% %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% clear all; % kosongkan semua variabel dalam sistim memori P=imread('D:\Materi Ngajar\Image\biner1.bmp'); % baca file citra 'biner1.bmp', simpan dalam matriks P figure(1), imshow(P,[]); % tampilkan citra P Q=imread('D:\Materi Ngajar\Image\biner2.bmp'); % baca file citra 'biner2.bmp', simpan dalam matriks Q figure(2), imshow(Q,[]); % tampilkan citra Q [N, M] = size(P); % baca ukuran citra P (ukuran citra Q = P) for n = 1 : N, for m = 1 : M, Citra_and(n,m)=P(n,m) & Q(n,m); % operasi AND antara setiap pixel citra P dan Q Citra_nand(n,m)=~(P(n,m) & Q(n,m)); % operasi NAND antara setiap pixel citra P dan Q end figure(3), imshow( Citra_and); % tampilkan citra hasil operasi AND figure(4), imshow(Citra_nand); % tampilkan citra hasil operasi NAND
clear all; % kosongkan semua variabel dalam sistim memori %program ornor.m %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% %%% Program Operasi Logika OR dan NOR antara dua citra digunakan untuk citra biner %%%%%%%%%%% %%% Sarifuddin Madenda untuk buku "Pengolahan Citra dan Video Digital: Teori, Aplikasi %%% %%% dan Pemrograman Matlab",2015. %%% %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% clear all; % kosongkan semua variabel dalam sistim memori P=imread('D:\Materi Ngajar\Image\biner1.bmp'); figure(1), imshow(P,[]); % tampilkan citra P Q=imread('D:\Materi Ngajar\Image\biner2.bmp'); figure(2), imshow(Q,[]); % tampilkan citra Q [N, M] = size(P); % baca ukuran citra P (ukuran citra Q = P) for n = 1 : N, for m = 1 : M, Citra_or(n,m)=P(n,m) | Q(n,m); % operasi OR antara setiap pixel citra P dan Q Citra_nor(n,m)=~(P(n,m) | Q(n,m)); % operasi NOR antara setiap pixel citra P dan Q end figure(3), imshow( Citra_or); % tampilkan citra hasil operasi OR figure(4), imshow(Citra_nor); % tampilkan citra hasil operasi NOR
clear all; % kosongkan semua variabel dalam sistim memori %Progrmam xorxnor.m %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% %%% Program Operasi Logika XOR dan XNOR antara dua citra %%% %%% digunakan untuk citra biner %%%%%%%%%%%%% %%% Sarifuddin Madenda untuk buku "Pengolahan %%% %%% Citra dan Video Digital: Teori, Aplikasi %%% %%% dan Pemrograman Matlab",2015. %%% %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% clear all; % kosongkan semua variabel dalam sistim memori P=imread('D:\Materi Ngajar\Image\biner1.bmp'); figure(1), imshow(P,[]); % tampilkan citra P Q=imread('D:\Materi Ngajar\Image\biner2.bmp'); figure(2), imshow(Q,[]); % tampilkan citra Q [N, M] = size(P); % baca ukuran citra P (ukuran citra Q = P) for n = 1 : N, for m = 1 : M, Citra_or(n,m)=xor(P(n,m),Q(n,m)); % operasi XOR antara setiap pixel citra P dan Q Citra_nor(n,m)=~(xor(P(n,m),Q(n,m))); % operasi NXOR antara setiap pixel citra P dan Q end figure(3), imshow( Citra_or); % tampilkan citra hasil operasi XOR figure(4), imshow(Citra_nor); % tampilkan citra hasil operasi XNOR
Operasi Dilasi Dilasi adalah operasi morphologi yang akan menambahkan pixel pada batas antar objek dalam suatu citra digital. Operasi dilasi biasa dipakai untuk mendapatkan efek pelebaran terhadap piksel yang bernilai 1. Operasi ini dirumuskan seperti berikut (Gonzales & Woods, 2002): A B = 𝑧| 𝐵 𝑧 ∩𝐴 ∁ 𝐴 Himpunan B disebut “structuring element” dalam dilasi. Persamaan ini didasarkan pada perefleksian B terhadap originnya, dan penggeseran refleksi oleh z.
Rectangle Arbitrary Octagon Periodicline Pair Diamond Square Disk Line
(a) Himpunan obyek; (b) Strel +; (c) Dilasi a oleh b; (d) Strel vertikal; (e) Dilasi a oleh d
SE = strel(‘arbitrary’, NHOOD) Diamond SE = strel('diamond',R) Disk Toolbox MATLAB untuk membuat strel: SE = strel(tipestrel, parameter) Tipe Format fungsi Arbitrary SE = strel(‘arbitrary’, NHOOD) Diamond SE = strel('diamond',R) Disk SE = strel('disk',R,N) Line SE = strel('line',LEN,DEG) Octagon SE = strel('octagon',R) pair SE = strel('pair',OFFSET) periodicline SE = strel('periodicline',P,V) rectangle SE = strel('rectangle',MN) square SE = strel('square',W)
Contoh strel untuk membuat berbagai bentuk Perlu diketahui, fungsi strel memberikan berbagai pilihan dalam membuat elemen penstruktur Contoh strel untuk membuat berbagai bentuk elemen penstruktur
Efek dilasi dengan hotspot vertikal
Contoh operasi dilasi dengan menggunakan Persamaan diatas dapat dilihat pada Gambar berikut Pada contoh tersebut, A = { (2,2), (2,3), (2,4), (3,2), (3,3), (3,4), (4,2) } 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,2) } = { (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,2) }
CONTOH DILASI S A D S = {(0,0),(0,1),(1,0)} A = {(0,0),(0,1),(0,2), (1,0),(1,1),(1,2), (2,0),(2,1),(2,2)} Posisi poros ((x,y) Є A ) Sxy (0,0) {(0,0),(0,1),(1,0)} (0,1) {(0,1),(0,2),(1,1)} (0,2) {(0,2),(0,3),(1,2)} ...... (2,2) {(2,2),(2,3),(3,2)} D
%program dilasi.m clear all; % kosongkan semua variabel dalam sistim memori f=im2bw(imread('D:\Materi Ngajar\Image\biner3.bmp')); % baca citra ‘biner3.bmp’, dan konversi menjadi citra biner B=[1 1 1; 1 1 1; 1 1 1]; % Set matriks B dengan elemen 8 connectivity figure(1), imshow(f); % tampilkan citra biner f [N,M] = size(f); % baca ukuran citra f [I,J] = size(B); % baca ukuran matriks B I=floor(I/2); J=floor(J/2); for n = I+1 : N-I, % loop proses baris citra for m = J+1 : M-J, % loop proses kolom citra dilasi=0; % Inisalisasi nilai dilasi for i= -I:I % loop proses dilasi for j= -J:J bit_dilasi= bitand(B(I+1+i,J+1+j),f(n+i,m+j)); % opeasi logika AND dilasi= bitor(dilasi,bit_dilasi); % operasi logika OR end Citra_dilasi(n,m) = dilasi; % simpan hasil dilasi kedalam matriks citra_dilasi figure(2), imshow((Citra_dilasi)); % tampilkan citra hasil dilasi Citra_dilasi1 = imdilate(f,B); % Citra dilasi menggunakan fungsi dilasi pada Matlab figure(3), imshow(Citra_dilasi1); % tampilkan citra hasil dilasi.
Operasi Erosi Operasi erosi mempunyai efek memperkecil luas permukaan suatu area atau objek. Area atau objek yang dimaksud adalah yang memiliki intersitas putih. Operasi ini dirumuskan seperti berikut (Gonzalez & Woods, 2002). A B = 𝑧| 𝐵 𝑧 𝐴 Adapun Burger & Burge (2008) mendefinisikan erosi sebagai berikut: A B = 𝑝∈ 𝑍 2 | (𝑎+𝑏) ∈𝐼, 𝑢𝑛𝑡𝑢𝑘 𝑠𝑒𝑡𝑖𝑎𝑝 𝑏 ∈𝐵
Toolbox di MATLAB: >> A2 = imerode(A, B) (a) himpunan obyek; (b) strel +; (c) erosi a oleh b; (d) strel vertikal; (e) erosi a oleh d
Contoh visualisasi operasi erosi
CONTOH EROSI D S A S = {(0,0),(0,1),(1,0)} A = {(0,0),(0,1),(0,2), (1,0),(1,1),(1,2), (2,0),(2,1),(2,2)} Posisi poros ((x,y) Є A ) Sxy (0,0) {(0,0),(0,1),(1,0)} (0,1) {(0,1),(0,2),(1,1)} (0,2) {(0,2),(0,3),(1,2)} ...... (2,2) {(2,2),(2,3),(3,2)} D
%program erosi.m clear all; % kosongkan semua variabel dalam sistim memori f=im2bw(imread('D:\Materi Ngajar\Image\biner3.bmp')); % baca citra ‘biner3.bmp’,konversi ke citra biner B=[1 1 1; 1 1 1; 1 1 1]; % Set matriks B dengan elemen 8 connectivity figure(1), imshow(f); % tampilkan citra biner f [N,M] = size(f); % baca ukuran citra f [I,J] = size(B); % baca ukuran matriks B I=floor(I/2); J=floor(J/2); for n = I+1 : N-I, % loop proses baris citra for m = J+1 : M-J, % loop proses kolom citra erosi=1; % Inisalisasi nilai erosi for i= -I:I % loop proses erosi for j= -J:J bit_erosi= bitand(B(I+1+i,J+1+j),f(n+i,m+j)); % opeasi logika AND erosi= bitand(erosi,bit_erosi); % operasi logika AND end Citra_erosi(n,m) = erosi; % simpan hasil erosi kedalam matriks citra_erosi figure(2), imshow((Citra_erosi)); % tampilkan citra hasil erosi Citra_erosi1 = imerode (f,B); % Citra erosi menggunakan fungsi erosi pada Matlab figure(3), imshow(Citra_erosi1); % tampilkan citra hasil erosi.
Operasi Opening Operasi opening adalah operasi erosi yang diikuti dengan dilasi dengan menggunakan elemen penstruktur yang sama. Operasi ini berguna untuk 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
Contoh Opening
Gambar 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 (d) menunjukkan hasil penggunaan operasi closing, Perbandingan operasi erosi, opening, dan closing
%program opening.m clear all; % kosongkan semua variabel dalam sistim memori f=im2bw(imread('D:\Materi Ngajar\Image\biner4.png')); % baca citra ‘Image.bmp’,konversi ke citra biner K=5; % Set ukuran matriks B B=ones(K,K); % Set matriks B KxK dengan elemen K*K - 1 connectivity figure(1), imshow(f); % tampilkan citra biner f [N,M] = size(f); % baca ukuran citra f [I,J] = size(B); % baca ukuran matriks B I=floor(I/2); J=floor(J/2); for n = I+1 : N-I, % loop proses baris citra for m = J+1 : M-J, % loop proses kolom citra erosi=1; % Inisalisasi nilai erosi for i= -I:I % loop proses erosi for j= -J:J bit_erosi= bitand(B(I+1+i,J+1+j),f(n+i,m+j)); % opeasi logika AND erosi= bitand(erosi,bit_erosi); % operasi logika AND end Citra_erosi(n,m) = erosi; % simpan hasil erosi kedalam matriks citra_erosi end % akhir proses erosi
[N,M] = size(Citra_erosi); % baca ukuran citra hasil erosi for n = I+1 : N-I, % mulai proses dilasi for m = J+1 : M-J, dilasi=0; for i=-I:I for j=-J:J bit_dilasi= bitand(B(I+1+i,J+1+j),Citra_erosi(n+i,m+j)); % opeasi logika AND dilasi= bitor(dilasi,bit_dilasi); % opeasi logika OR end Citra_opening(n,m) = dilasi; end % akhir proses dilasi figure(2), imshow((Citra_opening)); % tampilkan citra hasil opening Citra_opening1 = imopen(f,B); % hirung citra opening menggunakan Matlab figure(3), imshow((Citra_opening1)); % tampilkan citra hasil opening Matlab
Operasi Closing Operasi closing berguna untuk menghaluskan kontur dan menghilangkan lubang-lubang kecil. Definisinya seperti berikut: A B = (A B) B Jadi, operasi closing dilaksanakan dengan melakukan operasi dilasi terlebih dahulu dan kemudian diikuti dengan operasi erosi.
Contoh Closing
%program closing.m clear all; % kosongkan semua variabel dalam sistim memori f=im2bw(imread('D:\Materi Ngajar\Image\biner4.png')); % baca citra ‘Image.bmp’,konversi ke citra biner K=5; % Set ukuran matriks B B=ones(K,K); % Set matriks B KxK dengan elemen K*K - 1 connectivity figure(1), imshow(f); % tampilkan citra biner f [N,M] = size(f); % baca ukuran citra f [I,J] = size(B); % baca ukuran matriks B I=floor(I/2); J=floor(J/2); for n = I+1 : N-I, % loop proses baris citra for m = J+1 : M-J, % loop proses kolom citra dilasi=0; % Inisalisasi nilai dilasi for i= -I:I % loop proses dilasi for j= -J:J bit_dilasi= bitand(B(I+1+i,J+1+j),f(n+i,m+j)); % opeasi logika AND dilasi= bitor(dilasi,bit_dilasi); % operasi logika OR end Citra_dilasi(n,m) = dilasi; % simpan hasil dilasi kedalam matriks citra_dilasi end % proses dilasi selesai
[N,M] = size(Citra_dilasi); % baca ukuran citra hasil dilasi for n = I+1 : N-I, % mulai proses erosi for m = J+1 : M-J, erosi=1; for i=-I:I for j=-J:J bit_erosi= bitand(B(I+1+i,J+1+j),Citra_dilasi(n+i,m+j)); % opeasi logika AND erosi= bitand(erosi,bit_erosi); % opeasi logika AND end Citra_closing(n,m) = erosi; end % proses erosi selesai figure(2), imshow((Citra_closing)); % tampilkan citra hasil closing Citra_closing1 = imclose(f,B); % hitung citra closing menggunakan Matlab figure(3), imshow(Citra_closing1); % tampilkan citra hasil closing Matlab
Bagaimana bentuk komplemen citra tersebut? Latihan 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)} gambarkan bentuk citranya Berapa hasil operasi berikut? A B A B A – B B - A Perhatikan gambar berikut: Bagaimana bentuk komplemen citra tersebut? Bagaimana bentuk refleksinya? Jelaskan kegunaan operasi dilasi.
Perhatikan citra berikut: Perlihatkan hasilnya jika dikenai operasi dilasi dengan elemen penstruktur seperti berikut? Jelaskan bahwa hasil operasi erosi sebenarnya menyatakan letak elemen penstruktur di dalam citra yang dikenai operasi tersebut. Jelaskan hubungan operasi berikut terhadap operasi dilasi dan erosi: operasi opening operasi closing