Deteksi Tepi
Penentuan tepian suatu objek dalam citra merupakan salah satu wilayah pengolahan citra digital yang paling awal dan paling banyak diteliti. Proses ini seringkali ditempatkan sebagai langkah pertama dalam aplikasi segmentasi citra, yang bertujuan untuk mengenali objek-objek yang terdapat dalam citra ataupun konteks citra secara keseluruhan.
Deteksi tepi berfungsi untuk mengidentifikasi garis batas (boundary) dari suatu objek yang terdapat pada citra.
Tepian dapat dipandang sebagai lokasi piksel dimana terdapat nilai perbedaan intensitas citra secara ekstrem. Sebuah edge detector bekerja dengan cara mengidentifikasi dan menonjolkan lokasi-lokasi piksel yang memiliki karakteristik tersebut.
Operasi deteksi tepi dilakukan melalui proses konvolusi matriks menggunakan suatu kernel matriks.
Beberapa contoh kernel matriks pada deteksi tepi di antaranya adalah roberts, prewitt, sobel, dan canny
Source code untuk deteksi tepi citra di atas adalah sebagai berikut
I = double(imread('cameraman.tif')); E_roberts = edge(I,'roberts'); E_prewitt = edge(I,'prewitt'); E_sobel = edge(I,'sobel'); E_canny = edge(I,'canny'); figure,imagesc(I),axis image,colormap gray,colorbar; figure,imagesc(E_roberts),axis image,colormap gray,colorbar; figure,imagesc(E_prewitt),axis image,colormap gray,colorbar; figure,imagesc(E_sobel),axis image,colormap gray,colorbar; figure,imagesc(E_canny),axis image,colormap gray,colorbar;
Berikut ini merupakan contoh aplikasi programmatic GUI matlab untuk mendeteksi tepi suatu objek dalam citra menggunakan operator gradien, operator laplacian, dan operator canny. (Coding dapat dijalankan minimal menggunakan matlab versi r2014b karena menggunakan komponen baru yaitu uitab).
1. Operator Gradien
a. Operator Gradien Orde Satu
2. Operator Laplacian
a. Operator Laplacian dengan kernel I
b. Operator Laplacian dengan kernel II
c. Operator Laplacian dengan kernel III
d. Operator Laplacian of Gaussian
Sedangkan tampilan source codenya adalah:
function deteksi_tepi f = figure('Name','Deteksi Tepi','MenuBar','none',... 'ToolBar','none','NumberTitle','off','Position',[250 130 800 500]); tgroup1 = uitabgroup('Parent', f); tab1 = uitab('Parent', tgroup1, 'Title', 'Operator Gradien'); tab2 = uitab('Parent', tgroup1, 'Title', 'Operator Laplacian'); tab3 = uitab('Parent', tgroup1, 'Title', 'Operator Canny'); tgroup2 = uitabgroup('Parent', tab1); tab4 = uitab('Parent', tgroup2, 'Title', 'Gradien Orde Satu'); tab5 = uitab('Parent', tgroup2, 'Title', 'Selisih Terpusat'); tab6 = uitab('Parent', tgroup2, 'Title', 'Roberts'); tab7 = uitab('Parent', tgroup2, 'Title', 'Prewitt'); tab8 = uitab('Parent', tgroup2, 'Title', 'Sobel'); tab9 = uitab('Parent', tgroup2, 'Title', 'Isotropic'); tab10 = uitab('Parent', tgroup2, 'Title', 'Compass'); tab11 = uitab('Parent', tgroup2, 'Title', 'Kirsch'); ax1 = axes('Parent',tab4,'Position',[.2 .53 .25 .4]); ax2 = axes('Parent',tab4,'Position',[.55 .53 .25 .4]); ax3 = axes('Parent',tab4,'Position',[.2 .1 .25 .4]); ax4 = axes('Parent',tab4,'Position',[.55 .1 .25 .4]); I = double(imread('cameraman.tif')); % Gradien orde satu pada arah horizontal gx = [-1 1]; I1 = conv2(I,gx,'same'); % Gradien orde satu pada arah vertikal gy = [-1;1]; I2 = conv2(I,gy,'same'); % Magnitudo gradien J = sqrt((I1.^2)+(I2.^2)); % Gambar hasil axes(ax1) imagesc(I ),axis image,colormap gray,colorbar,title('Citra asli'); axes(ax2) imagesc(I1),axis image,colormap gray,colorbar,title('Gradien arah horizontal'); axes(ax3) imagesc(I2),axis image,colormap gray,colorbar,title('Gradien arah vertikal'); axes(ax4) imagesc(J ),axis image,colormap gray,colorbar,title('Magnitudo gradien'); ax5 = axes('Parent',tab5,'Position',[.2 .53 .25 .4]); ax6 = axes('Parent',tab5,'Position',[.55 .53 .25 .4]); ax7 = axes('Parent',tab5,'Position',[.2 .1 .25 .4]); ax8 = axes('Parent',tab5,'Position',[.55 .1 .25 .4]); I = double(imread('cameraman.tif')); % Gradien orde satu pada arah horizontal gx = [-1 0 1]; I1 = conv2(I,gx,'same'); % Gradien orde satu pada arah vertikal gy = [-1;0;1]; I2 = conv2(I,gy,'same'); % Magnitudo gradien J = sqrt((I1.^2)+(I2.^2)); % Gambar hasil axes(ax5) imagesc(I ),axis image,colormap gray,colorbar,title('Citra asli'); axes(ax6) imagesc(I1),axis image,colormap gray,colorbar,title('Gradien arah horizontal'); axes(ax7) imagesc(I2),axis image,colormap gray,colorbar,title('Gradien arah vertikal'); axes(ax8) imagesc(J ),axis image,colormap gray,colorbar,title('Magnitudo gradien'); ax9 = axes('Parent',tab6,'Position',[.2 .53 .25 .4]); ax10 = axes('Parent',tab6,'Position',[.55 .53 .25 .4]); ax11 = axes('Parent',tab6,'Position',[.2 .1 .25 .4]); ax12 = axes('Parent',tab6,'Position',[.55 .1 .25 .4]); I = double(imread('cameraman.tif')); % Konvolusi dengan operator Roberts robertshor = [0 1; -1 0]; robertsver = [1 0; 0 -1]; I1 = conv2(I,robertshor,'same'); I2 = conv2(I,robertsver,'same'); J = sqrt((I1.^2)+(I2.^2)); % Gambar Hasil axes(ax9) imagesc(I ),axis image,colormap gray,colorbar,title('Citra asli'); axes(ax10) imagesc(I1),axis image,colormap gray,colorbar,title('Gradien arah horizontal'); axes(ax11) imagesc(I2),axis image,colormap gray,colorbar,title('Gradien arah vertikal'); axes(ax12) imagesc(J ),axis image,colormap gray,colorbar,title('Magnitudo gradien'); ax13 = axes('Parent',tab7,'Position',[.2 .53 .25 .4]); ax14 = axes('Parent',tab7,'Position',[.55 .53 .25 .4]); ax15 = axes('Parent',tab7,'Position',[.2 .1 .25 .4]); ax16 = axes('Parent',tab7,'Position',[.55 .1 .25 .4]); I = double(imread('cameraman.tif')); %Konvolusi dengan operator Prewitt prewitthor = [-1 0 1; -1 0 1; -1 0 1]; prewittver = [-1 -1 -1; 0 0 0; 1 1 1]; I1 = conv2(I,prewitthor,'same'); I2 = conv2(I,prewittver,'same'); J = sqrt((I1.^2)+(I2.^2)); %Gambar Hasil axes(ax13) imagesc(I ),axis image,colormap gray,colorbar,title('Citra asli'); axes(ax14) imagesc(I1),axis image,colormap gray,colorbar,title('Gradien arah horizontal'); axes(ax15) imagesc(I2),axis image,colormap gray,colorbar,title('Gradien arah vertikal'); axes(ax16) imagesc(J ),axis image,colormap gray,colorbar,title('Magnitudo gradien'); ax17 = axes('Parent',tab8,'Position',[.2 .53 .25 .4]); ax18 = axes('Parent',tab8,'Position',[.55 .53 .25 .4]); ax19 = axes('Parent',tab8,'Position',[.2 .1 .25 .4]); ax20 = axes('Parent',tab8,'Position',[.55 .1 .25 .4]); I = double(imread('cameraman.tif')); %Konvolusi dengan operator Sobel sobelhor = [-1 0 1; -2 0 2; -1 0 1]; sobelver = [-1 -2 -1; 0 0 0; 1 2 1]; I1 = conv2(I,sobelhor,'same'); I2 = conv2(I,sobelver,'same'); J = sqrt((I1.^2)+(I2.^2)); %Gambar Hasil axes(ax17) imagesc(I ),axis image,colormap gray,colorbar,title('Citra asli'); axes(ax18) imagesc(I1),axis image,colormap gray,colorbar,title('Gradien arah horizontal'); axes(ax19) imagesc(I2),axis image,colormap gray,colorbar,title('Gradien arah vertikal'); axes(ax20) imagesc(J ),axis image,colormap gray,colorbar,title('Magnitudo gradien'); ax21 = axes('Parent',tab9,'Position',[.2 .53 .25 .4]); ax22 = axes('Parent',tab9,'Position',[.55 .53 .25 .4]); ax23 = axes('Parent',tab9,'Position',[.2 .1 .25 .4]); ax24 = axes('Parent',tab9,'Position',[.55 .1 .25 .4]); I = double(imread('cameraman.tif')); %Konvolusi dengan operator isotropic L1 = [-1 0 1; -sqrt(2) 0 sqrt(2); -1 0 1]; isover = [-1 -sqrt(2) -1; 0 0 0; 1 sqrt(2) 1]; I1 = conv2(I,L1,'same'); I2 = conv2(I,isover,'same'); J = sqrt((I1.^2)+(I2.^2)); %Gambar Hasil axes(ax21) imagesc(I ),axis image,colormap gray,colorbar,title('Citra asli'); axes(ax22) imagesc(I1),axis image,colormap gray,colorbar,title('Gradien arah horizontal'); axes(ax23) imagesc(I2),axis image,colormap gray,colorbar,title('Gradien arah vertikal'); axes(ax24) imagesc(J ),axis image,colormap gray,colorbar,title('Magnitudo gradien'); ax25 = axes('Parent',tab10,'Position',[.08 .53 .25 .4]); ax26 = axes('Parent',tab10,'Position',[.4 .53 .25 .4]); ax27 = axes('Parent',tab10,'Position',[.72 .53 .25 .4]); ax28 = axes('Parent',tab10,'Position',[.08 .1 .25 .4]); ax29 = axes('Parent',tab10,'Position',[.4 .1 .25 .4]); ax30 = axes('Parent',tab10,'Position',[.72 .1 .25 .4]); I = double(imread('cameraman.tif')); %Konvolusi dengan operator compass L1 = [1 1 1; 1 -2 1; -1 -1 -1]; K2 = [-1 -1 -1; 1 -2 1; 1 1 1]; K3 = [-1 1 1; -1 -2 1; -1 1 1]; K4 = [1 1 -1; 1 -2 -1; 1 1 -1]; I1 = conv2(I,L1,'same'); I2 = conv2(I,K2,'same'); I3 = conv2(I,K3,'same'); I4 = conv2(I,K4,'same'); J = sqrt((I1.^2)+(I2.^2)+(I3.^2)+(I4.^2)); %Gambar Hasil axes(ax25) imagesc(I ),axis image,colormap gray,colorbar,title('Citra asli'); axes(ax26) imagesc(I1),axis image,colormap gray,colorbar,title('Gradien arah utara'); axes(ax27) imagesc(I2),axis image,colormap gray,colorbar,title('Gradien arah selatan'); axes(ax28) imagesc(I3),axis image,colormap gray,colorbar,title('Gradien arah timur'); axes(ax29) imagesc(I4),axis image,colormap gray,colorbar,title('Gradien arah barat'); axes(ax30) imagesc(J ),axis image,colormap gray,colorbar,title('Magnitudo gradien'); ax31 = axes('Parent',tab11,'Position',[.03 .58 .15 .25]); ax32 = axes('Parent',tab11,'Position',[.23 .58 .15 .25]); ax33 = axes('Parent',tab11,'Position',[.43 .58 .15 .25]); ax34 = axes('Parent',tab11,'Position',[.63 .58 .15 .25]); ax35 = axes('Parent',tab11,'Position',[.83 .58 .15 .25]); ax36 = axes('Parent',tab11,'Position',[.03 .13 .15 .25]); ax37 = axes('Parent',tab11,'Position',[.23 .13 .15 .25]); ax38 = axes('Parent',tab11,'Position',[.43 .13 .15 .25]); ax39 = axes('Parent',tab11,'Position',[.63 .13 .15 .25]); ax40 = axes('Parent',tab11,'Position',[.83 .13 .15 .25]); I = double(imread('cameraman.tif')); %Konvolusi dengan operator kirsch L1 = [-3 -3 5; -3 0 5; -3 -3 5]; K2 = [-3 5 5; -3 0 5; -3 -3 -3]; K3 = [5 5 5; -3 0 -3; -3 -3 -3]; K4 = [5 5 -3; 5 0 -3; -3 -3 -3]; K5 = [5 -3 -3; 5 0 -3; 5 -3 -3]; K6 = [-3 -3 -3; 5 0 -3; 5 5 -3]; K7 = [-3 -3 -3; -3 0 -3; 5 5 5]; K8 = [-3 -3 -3; -3 0 5; -3 5 5]; I1 = conv2(I,L1,'same'); I2 = conv2(I,K2,'same'); I3 = conv2(I,K3,'same'); I4 = conv2(I,K4,'same'); I5 = conv2(I,K5,'same'); I6 = conv2(I,K6,'same'); I7 = conv2(I,K7,'same'); I8 = conv2(I,K8,'same'); J = sqrt((I1.^2)+(I2.^2)+(I3.^2)+(I4.^2)+(I5.^2)+(I6.^2)+(I7.^2)+(I8.^2)); %Gambar Hasil axes(ax31) imagesc(I ),axis off,colormap gray,title('Citra asli'); axes(ax32) imagesc(I1),axis off,colormap gray,title('Timur'); axes(ax33) imagesc(I2),axis off,colormap gray,title('Timur laut'); axes(ax34) imagesc(I3),axis off,colormap gray,title('Utara'); axes(ax35) imagesc(I4),axis off,colormap gray,title('Barat laut'); axes(ax36) imagesc(I5),axis off,colormap gray,title('Barat'); axes(ax37) imagesc(I6),axis off,colormap gray,title('Barat daya'); axes(ax38) imagesc(I7),axis off,colormap gray,title('Selatan'); axes(ax39) imagesc(I8),axis off,colormap gray,title('Tenggara'); axes(ax40) imagesc(J ),axis off,colormap gray,title('Magnitudo gradien'); tgroup2 = uitabgroup('Parent', tab2); tab11 = uitab('Parent', tgroup2, 'Title', 'Laplacian I'); tab12 = uitab('Parent', tgroup2, 'Title', 'Laplacian II'); tab13 = uitab('Parent', tgroup2, 'Title', 'Laplacian III'); tab14 = uitab('Parent', tgroup2, 'Title', 'Laplacian of Gaussian'); ax41 = axes('Parent',tab11,'Position',[.1 .23 .35 .6]); ax42 = axes('Parent',tab11,'Position',[.55 .23 .35 .6]); I = double(imread('cameraman.tif')); %Konvolusi dengan operator laplacian L1 = [0 -1 0; -1 4 -1; 0 -1 0]; I1 = conv2(I,L1,'same'); %Gambar Hasil axes(ax41) imagesc(I ),axis image,colormap gray,colorbar,title('Citra asli'); axes(ax42) imagesc(I1),axis image,colormap gray,colorbar,title('Hasil deteksi tepi'); ax43 = axes('Parent',tab12,'Position',[.1 .23 .35 .6]); ax44 = axes('Parent',tab12,'Position',[.55 .23 .35 .6]); I = double(imread('cameraman.tif')); %Konvolusi dengan operator laplacian L2 = [-1 -1 -1; -1 8 -1; -1 -1 -1]; I2 = conv2(I,L2,'same'); %Gambar Hasil axes(ax43) imagesc(I ),axis image,colormap gray,colorbar,title('Citra asli'); axes(ax44) imagesc(I2),axis image,colormap gray,colorbar,title('Hasil deteksi tepi'); ax45 = axes('Parent',tab13,'Position',[.1 .23 .35 .6]); ax46 = axes('Parent',tab13,'Position',[.55 .23 .35 .6]); I = double(imread('cameraman.tif')); %Konvolusi dengan operator laplacian L3 = [1 -2 1; -2 4 -2; 1 -2 1]; I3 = conv2(I,L3,'same'); %Gambar Hasil axes(ax45) imagesc(I ),axis image,colormap gray,colorbar,title('Citra asli'); axes(ax46) imagesc(I3),axis image,colormap gray,colorbar,title('Hasil deteksi tepi'); ax47 = axes('Parent',tab14,'Position',[.1 .23 .35 .6]); ax48 = axes('Parent',tab14,'Position',[.55 .23 .35 .6]); I = double(imread('cameraman.tif')); J = edge(I,'log'); axes(ax47) imagesc(I),axis image,colormap gray,colorbar,title('Citra asli'); axes(ax48) imagesc(J),axis image,colormap gray,colorbar,title('Hasil deteksi tepi'); ax49 = axes('Parent',tab3,'Position',[.1 .23 .35 .6]); ax50 = axes('Parent',tab3,'Position',[.55 .23 .35 .6]); I = double(imread('cameraman.tif')); J = edge(I,'canny'); axes(ax49) imagesc(I),axis image,colormap gray,colorbar,title('Citra asli'); axes(ax50) imagesc(J),axis image,colormap gray,colorbar,title('Hasil deteksi tepi');
Materi mengenai aplikasi deteksi tepi untuk mendeteksi obyek pada suatu citra digital dapat dilihat pada: link
Sedangkan file source code lengkap beserta citra untuk proses deteksi tepi pada materi di atas dapat diperoleh melalui halaman berikut ini: Source Code
Penerapan deteksi tepi untuk segmentasi citra ditunjukkan pada video tutorial berikut ini:

permisi mau tanya nih code yang ini I = double(imread(‘cameraman.tif’)); menyesusaikan folder ya tempat image yang disimpan ya .. misal saya simpan di D : kemudian Folder Matlab – isigmbr.jpg.
mohon penjelasannya
terima kasih
betul mas
jika citra cameraman berada dalam satu folder dengan koding matlab, maka tidak perlu dituliskan alamat foldernya
tetapi jika citra tsb berada dalam folder lain maka harus dituliskan alamat foldernya
permisi mas adi, kalau cara menentukan nilai perbandingan ketelitian tiap hasil deteksi tepi bagaimana ya ?
Untuk menentukan tingkat perbandingan hasil deteksi tepi bisa menggunakan nilai error rate
Mad mau nanya kalo menghitung diameter menggunakan metode brute force gimana caranya?
mas mau tanya kalau untuk membuat pola wave sama swiriling itu gimana ???
materi mengenai wave pattern dapat dilihat pada halaman berikut ini
https://www.google.com/url?sa=t&rct=j&q=&esrc=s&source=web&cd=1&cad=rja&uact=8&ved=0ahUKEwiLvKmYybPUAhXCH5QKHQWiDnIQFgghMAA&url=https%3A%2F%2Fwww.mathworks.com%2Fmatlabcentral%2Ffileexchange%2F40034-standing-wave-pattern%3Ffocused%3D3775931%26tab%3Dfunction&usg=AFQjCNEBLbOwX85qG17Ir2kBnf2vCV18aA
mas mau tanya, kalo membuat citra lebih tajam, tapi pake konvolusi itu gimana ya ?
materi mengenai konvolusi citra dapat dilihat pada halaman berikut ini
https://pemrogramanmatlab.com/pengolahan-citra-digital/perbaikan-kualitas-citra/
malam mas, maaf saya mau tanya, kalo untuk aplikasi androidnya dia ada gak yahh kira2??
karna saya udah cari sih gadaaa, kalo mass adi tau aplikasinya boleh mass referensinya, makasih mass sebelumnya.
malam liesa
website ini berisi materi mengenai pemrograman matlab
Ada source code untuk deteksi tepi dengan algoritma genetika dan em algorithm gak ya mas?
Makasiih
semoga ke depan terdapat materi mengenai source code untuk deteksi tepi dengan algoritma genetika dan em algorithm
Assalamualaikum Mas, Mas Adi punya Referensi mengenai Metode Interpolasi gak? baik itu Bilinear, Bicubic, atau Linear yang bahasa Indonesia.
waalaikumsalam teti
semoga ke depan terdapat materi dan referensi mengenai Metode Interpolasi baik itu Bilinear, Bicubic, atau Linear yang berbahasa Indonesia
Source code dan data pada materi di atas dapat diperoleh pada halaman berikut ini
https://pemrogramanmatlab.com/source-code-gui-matlab/
bang kok pake gambar selain .tif kok malah error ya dibagian E_roberts = edge(I,’roberts’); dll?
citra yg diinput harus grayscale
bang mau tanya saya mau mendeteksi garis dari suatu huruf . itu lebih bagus pakai apa yah ?
soalnya kalau pakai canny atau yang lainnya gambar dari citra jadi dua tepi
Sebelum dilakukan deteksi tepi bisa dilakukan perbaikan kualitas citra terlebih dahulu seperti filtering, intensity adjustment, histogram equalization
mas adi mau tanya, saya sudah melakukan deteksi tepi canny dan ingin melakukan tranformasi hough pada hasil deteksi tepi canny, tapi selalu terjadi error. mohon bantuannya mas adi
Ohiya semoga saya bisa membantu
mas adi saya sudah kirim email ke mas adi, mohon di cek mas adi
mau tanya mas, untuk melakukan pencocokan citra dengan metode deteksi tepi caranya bagaimana?
maksud saya cara menggabungkan pencocokan citra dan deteksi tepi mas,makasih sebelumnya..
Pencocokan citra bisa didasarkan pada citra biner hasil deteksi tepi
maaf mas, mau tanya
apakah deteksi tepi ini bisa digunakan untuk megidentifikasi suatu jenis ikan? atau perlu ditambahkan filter lain
makasih sebelumnya
deteksi tepi bisa digunakan untuk mengidentifikasi suatu jenis ikan
bisa juga ditambahkan fitur warna dan tekstur
maaf mas mau tanya, untuk membuat skeleton dalam pengolahan citra itu langkah2 untuk membuatnya bagaimana ya?
Makasih sebelumnya
untuk membuat skeleton bisa menggunakan fungsi imskel pada matlab
Mas mau tanya klu deteksi tepi menggunakan algoritma SUSAN caranya gmn ia??
mudah2an ke depan terdapat materi mengenai deteksi tepi menggunakan algoritma SUSAN
kalau materi tentang masing” operator terlebih , operator laplace ada bang???
Semoga ke depan terdapat materi tentang masing-masing operator terlebih operator laplace
mas mau tanya, ko saya gk bisa mengubah gambar file yah ?
moohon pencerahannya
Ada banyak materi mengenai pengolahan citra digital yang dapat dipelajari
boleh nanya pak…
buku operator kompas metode kirsch dan robinshon
apa judul bukunya pak…
bisa dicoba dicari kembali buku operator kompas metode kirsch dan robinson
Maaf mas, ada gak link Download software matlab yang free,
Semoga ada link download software matlab yang free
terima kasih banyak mas
Mass mau tanya kaloo cameramen tif itu diganti dengan image yang lain bisa kah?
Bisa saja
Diganti saja
Cara untuk memyambungkan garis pada hasil deteksi canny bagaimana ya? Agar dapat membuang yg area yang seharusnya tidak terikut
bisa menggunakan operasi morfologi