用Sobel算子提取图像边缘
function out=Sobel(Im)
Im=double(Im);
[r,c]=size(Im);
hist(1:256)=0;
for i=2:r-1
for j=2:c-1
Horizontal=abs( Im(i-1,j+1) + 2*Im(i,j+1) + Im(i+1,j+1) - Im(i-1,j-1) - 2*Im(i,j-1) - Im(i+1,j-1) );
Vertical=abs( Im(i-1,j-1) + 2*Im(i-1,j) + Im(i-1,j+1) - Im(i+1,j-1) - 2*Im(i+1,j) - Im(i+1,j+1) );
if Horizontal>255
Horizontal=255;
end
if Vertical>255
Vertical=255;
end
if Horizontal>Vertical
out(i,j)=Horizontal;
hist(Horizontal+1)=hist(Horizontal+1)+1;
else
out(i,j)=Vertical;
hist(Vertical+1)=hist(Vertical+1)+1;
end
end
end
Rate=0.015;
PixelNum=(r-1)*(c-1);
Count=0;
i=256;
while Count/PixelNum<Rate
Count=Count+hist(i);
i=i-1;
end
gate=i;
for i=1:r-1
for j=1:c-1
if out(i,j)>gate
out(i,j)=255;
else
out(i,j)=0;
end
end
end