You are on page 1of 3

function [X3,X5]=Canny_Edge_Detection(imagex,upper,lower)

if(ndims(imagex)==3)
image=im2double(rgb2gray(imagex));
else
image=im2double(imagex);
end
nx=size(image);
% Gaussian mask with sigma 1.4
gauss_mask=Gaussian_template(5,1.4);
% apply Gaussian mask on image for Smoothing
for i=1:nx(1)-4
for j=1:nx(2)-4
gauss_image(i,j)=gauss_mask(1,1)* image(i,j)+gauss_mask(1,2)* image(i,j+1)+gau
ss_mask(1,3)* image(i,j+2)+gauss_mask(1,4)* image(i,j+3)+gauss_mask(1,5)* ima
ge(i,j+4)+...
gauss_mask(2,1)*image(i+1,j)+gauss_mask(2,2)*image(i+1,j+1)+gau
ss_mask(2,3)*image(i+1,j+2)+gauss_mask(2,4)*image(i+1,j+3)+gauss_mask(2,5)*image
(i+1,j+4)+...
gauss_mask(3,1)*image(i+2,j)+gauss_mask(3,2)*im
age(i+2,j+1)+gauss_mask(3,3)*image(i+2,j+2)+gauss_mask(3,4)*image(i+2,j+3)+gauss
_mask(3,5)*image(i+2,j+4)+...
gauss_mask(4,1)*image(i+3,j)+gauss_mask(4,2)*im
age(i+3,j+1)+gauss_mask(4,3)*image(i+3,j+2)+gauss_mask(4,4)*image(i+3,j+3)+gauss
_mask(4,5)*image(i+3,j+4)+...
gauss_mask(5,1)*image(i+4,j)+gauss_mask(5,2)*im
age(i+4,j+1)+gauss_mask(5,3)*image(i+4,j+2)+gauss_mask(5,4)*image(i+4,j+3)+gauss
_mask(5,5)*image(i+4,j+4);
end
end
% Find Edge Using Canny Operator
nx=size(gauss_image);
for i=1:nx(1)-2
for j=1:nx(2)-2
Gx(i,j)=gauss_image(i,j)+0-gauss_image(i,j+2)+2*(gauss_image(i+1,j)+0-gauss_imag
e(i+1,j+2))+gauss_image(i+2,j)+0-gauss_image(i+2,j+2);
Gy(i,j)=gauss_image(i,j)+2*gauss_image(i,j+1)+gauss_image(i,j+2)+0+0+0-gauss_ima
ge(i+2,j)-2*gauss_image(i+2,j+1)-gauss_image(i+2,j+2);
end
end
X1=((Gx).^2+(Gy).^2).^(0.5);
X2=atan2d(double(Gy),double(Gx));
mx1=find(X2>=0 & X2<22.5);
X2(mx1)=0;
mx2=find(X2>=22.5 & X2<67.5);
X2(mx2)=45;
mx3=find(X2>=67.5 & X2<112.5);
X2(mx3)=90;
mx4=find(X2>=112.5 & X2<157.5);
X2(mx4)=135;
mx5=find(X2>=157.5);
X2(mx5)=180;
mx6=find(X2<=0 & X2>-22.5);
X2(mx6)=0;
mx7=find(X2<=-22.5 & X2>-67.5);
X2(mx7)=-45;

mx8=find(X2<=-67.5 & X2>-112.5);


X2(mx8)=-90;
mx9=find(X2<=-112.5 & X2>-157.5);
X2(mx9)=-135;
mx10=find( X2<=-157.5);
X2(mx10)=-180;
% Non Maximum suppression tech1
nx=size(Gx);
for i=2:nx(1)-1
for j=2:nx(2)-1
if(X2(i,j)==0||X2(i,j)==180||X2(i,j)==-180)
if(X1(i,j)>X1(i,j-1) && X1(i,j)>X1(i,j+1))
X3(i-1,j-1)=X1(i,j);
else
X3(i-1,j-1)=0;
end
elseif(X2(i,j)==90||X2(i,j)==-90)
if(X1(i,j)>X1(i-1,j) && X1(i,j)>X1(i+1,j))
X3(i-1,j-1)=X1(i,j);
else
X3(i-1,j-1)=0;
end
elseif(X2(i,j)==45||X2(i,j)==-135)
if(X1(i,j)>X1(i-1,j+1) && X1(i,j)>X1(i+1,j-1))
X3(i-1,j-1)=X1(i,j);
else
X3(i-1,j-1)=0;
end
elseif(X2(i,j)==135||X2(i,j)==-45)
if(X1(i,j)>X1(i-1,j-1) && X1(i,j)>X1(i+1,j+1))
X3(i-1,j-1)=X1(i,j);
else
X3(i-1,j-1)=0;
end
end
end
end
%
%
%
%
%
%
%
%
%
%
%
%
%
%
%
%
%

imshow(X1);
figure;imshow(X3);
Non Maximum suppression tech2
nx=size(X1);
for i=2:nx(1)-1
for j=2:nx(2)-1
M1=(Gy(i,j)/Gx(i,j))*X1(i-1,j+1)+((Gx(i,j)-Gy(i,j))/Gx(i,j))*X1(i-1,j);
M2=(Gy(i,j)/Gx(i,j))*X1(i+1,j-1)+((Gx(i,j)-Gy(i,j))/Gx(i,j))*X1(i+1,j);
if(X1(i,j)>M1 && X1(i,j)>M2)
X4(i-1,j-1)=X1(i,j);
else
X4(i-1,j-1)=0;
end
end
end
X4=uint8(X4);

X5=im2uint8(X3);
% Hysteresis thresholding

nx=size(X5);
% for i=1:nx(1)-2
% for j=1:nx(2)-2
% if(X5(i+1,j+1)>=upper & X5(i+1,j+1)~=255)
% X5(i+1,j+1)=255;
% X5=connect(i,j,X5,lower);
% end
% end
% end
for i=1:nx(1)-2
for j=1:nx(2)-2
if(X5(i+1,j+1)>=upper & X5(i+1,j+1)~=255)
X5(i+1,j+1)=255;
elseif(X5(i+1,j+1)<=lower)
X5(i+1,j+1)=0;
elseif(X5(i+1,j+1)<upper & X5(i+1,j+1)>lower)
for n=i:i+2
for m=j:j+2
if(X5(n,m)==255)
X5(i+1,j+1)=255;
end
end
end
end
end
end
end
%
%
%
%
%
%
%
%
%
%
%
%
%
%
%
%
%
%
%

function[X]=check_connect(i,j,image)
nx=size(image);
if(i>=1 & j>=1 & i<=nx(1)-2 & j<=nx(2)-2)
X=1;
else
X=0;
end
end
function[X5]=connect(x,y,X5,lower)
for i=x:x+2
for j=y:y+2
if(X5(i,j)>=lower & X5(i,j)~=255 & check_connect(i,j,X5))
X5(i,j)=255;
X5=connect(i,j,X5,lower);
end
end
end
end

You might also like