
Sinopsis
Penulis banyak sekali melibatkan proses operasi salah satu dari sekian banyaknya yaitu deteksi tepi. Hanya saja kalau penulis menggunakan function edge di matlab menggunakan operasi convolution dengan beragam jenis filter seperi canny, prewit, roberts hanya saja, penulis dibuat KESAL lantaran ada yang terputus hasil edge nya! Padahal tidak boleh putus edge / perimeter nya! Karena akan digunakan untuk analisis chain code / freeman code
Sehingga penulis mendesain suatu algoritma untuk TAHAN terhadap putusnya suatu edge detection!
Bandingkan dengan edge canny bawaan matlab
Bila kalian menggunakan edge detection seperti canny atau lainnya, terkadang akan putus edge nya seperti contoh berikut terjadi putus edge nya, hal ini tentu tidak menarik
Trace boundary
Coba kalian bandingkan dengan gambar dibawah ini yang tidak akan putus
Trace boundary ini akan menggunakan konsep looping untuk pengecekan nilai pixel tetangganya! Lumayan cepat! Dari pada menggunakan convolution Penulis telah sukses menggunakan algoritma tersebut secara luas untuk diterapkan pada kasus-kasus recognition dan analisis contour
function [boundary_pixel]=traceboundaryrevisi1(a) %function yang bertugas untuk melakukan deteksi tepi %menggunakan teknik traceboundary %oleh : mulkan.ms@gmail.com %update : 1 februari 2015 %web : www.softscients.web.id %tambah padding %tambahkan margin 1 pixel kiri_tepi = zeros(size(a,1),1); a = [kiri_tepi,a,kiri_tepi]; atas_tepi = zeros(1,size(a,2)); a = [atas_tepi;a;atas_tepi]; inc = 1; boundary_pixel = zeros(size(a,1),size(a,2)); for i=1:size(a,1) for j=1:size(a,2) %cek atas jika if (i-1)>=1 if a(i,j)~=0 && a(i-1,j)==0 a(i,j)=inc; boundary_pixel(i,j)=1; end end %cek bagian bawah jika if (i+1)<=size(a,1) if a(i,j)~=0 && a(i+1,j)==0 a(i,j)=inc; boundary_pixel(i,j)=1; end end %cek bagian kiri jika if (j-1)>=1 if a(i,j)~=0 && a(i,j-1)==0 a(i,j)=inc; boundary_pixel(i,j)=1; end end %cek bagian kanan jika if (j+1)<=size(a,2) if a(i,j)~=0 && a(i,j+1)==0 a(i,j)=inc; boundary_pixel(i,j)=1; end end inc = inc+1; end end %hilangkan padding lagi boundary_pixel = boundary_pixel(2:end-1,2:end-1);
Cara menggunakannya
clc;clear all;close all; I = imread('cog.jpg'); bw = im2bw(I); figure,imshow(traceboundaryrevisi1(bw)),title('trace boundary') figure,imshow(edge(bw,'canny')),title('edge canny')