pic=imread('1.jpg');
r=pic(:,:,1);%% Red
g=pic(:,:,2);%%Green
b=pic(:,:,3);%%Blue
s=size(r);
tem=1/52*[1 1 2 1 1;1 2 4 2 1;2 4 8 4 2;1 2 4 2 1;1 1 2 1 1];%% gauss template
H1=[-1 -1;1 1];%%一阶差分模板求边缘
H2=[1 -1;1 -1];
r=imfilter(r,tem);%%step1
g=imfilter(g,tem);
b=imfilter(b,tem);
ry=imfilter(r,H1);%%step2
rx=imfilter(r,H2);
gy=imfilter(g,H1);
gx=imfilter(g,H2);
by=imfilter(b,H1);
bx=imfilter(b,H2);
G=rx+ry+gx+gy+bx+by;
zeta=atan(double(ry+gy+by)./double(rx+gx+bx))*180/pi;
fai=G;
for i=2:s(1)-1
for j=2:s(2)-1
if(zeta(i,j)<=22.5&&zeta(i,j)>=-22.5)%%0区
if(G(i,j)<=G(i,j-1)||G(i,j)<=G(i,j+1))
fai(i,j)=0;
end
end
if(zeta(i,j)<=67.5&&zeta(i,j)>=22.5)%%1区
if(G(i,j)<=G(i-1,j+1)||G(i,j)<=G(i+1,j-1))
fai(i,j)=0;
end
end
if((zeta(i,j)<=90&&zeta(i,j)>=67.5)||(zeta(i,j)<=-67.5&&zeta(i,j)>=-90))%%2区
if(G(i,j)<=G(i-1,j)||G(i,j)<=G(i+1,j))
fai(i,j)=0;
end
end
if((zeta(i,j)<=-22.5&&zeta(i,j)>=-67.5))%%3区
if(G(i,j)<=G(i-1,j-1)||G(i,j)<=G(i+1,j+1))
fai(i,j)=0;
end
end
end
end
%% step4阈值化
tao1=8;
tao2=16;
edge1=uint8(fai);
edge2=edge1;
edge1(edge1<tao1)=0;
edge2(edge2<tao2)=0;
%%figure(1);subplot(1,2,1);imshow(edge1);subplot(1,2,2);imshow(edge2);
edge1(edge1>0)=1;
edge2(edge2>0)=1;
edge3=edge1+edge2;
for i=2:s(1)-1
for j=2:s(2)-1
if(edge3(i,j)==2)
edge1(i,j)=255;
edge1(i-1,j)=255;
edge1(i+1,j)=255;
edge1(i,j-1)=255;
edge1(i,j+1)=255;
end
end
end
figure(1);imshow(uint8(edge1));
评论0