Prewitt边缘增强,使用Prewitt算子:gx=和gy= 。
得到x方向上的梯度,y方向上的梯度,总梯度。设置阈值200,进行二值化的边缘显示。
F=imread('D:\Desktop\1.png');
F=rgb2gray(F);
f=double(F);
[row,col]=size(f);
f1=zeros(row,col);
f2=zeros(row,col);
f3=zeros(row,col);
gx=[1,0,-1;1,0,-1;1,0,-1];
gy=[-1,-1,-1;0,0,0;1,1,1];
for i=2:row-1
for j=2:col-1
fx=[f(i-1,j-1),f(i-1,j),f(i-1,j+1);f(i,j-1),f(i,j),f(i,j+1);f(i+1,j-1),f(i+1,j),f(i+1,j+1)];
fy=[f(i-1,j-1),f(i-1,j),f(i-1,j+1);f(i,j-1),f(i,j),f(i,j+1);f(i+1,j-1),f(i+1,j),f(i+1,j+1)];
Gx=gx.*fx;
Gy=gy.*fy;
A=abs(sum(Gx,'all'));
B= abs(sum(Gy,'all'));
C=((sum(Gx,'all'))^2+(sum(Gy,'all'))^2)^0.5;
if A>=200
f1(i,j)=255;
end
if B>=200
f2(i,j)=255;
end
if C>=200
f3(i,j)=255;
end
end
end
subplot(2,2,1),imshow(F);title('原始图像');
subplot(2,2,2),imshow(f1);title('prewitt x方向梯度');
subplot(2,2,3),imshow(f2);title('prewitt y方向梯度');
subplot(2,2,4),imshow(f3);title('prewitt总梯度');
sobel边缘增强,使用sobel算子:gx=和gy= 。
得到x方向上的梯度,y方向上的梯度,总梯度。设置阈值200,进行二值化的边缘显示。
F=imread('D:\Desktop\1.png');
F=rgb2gray(F);
f=double(F);
[row,col]=size(f);
f1=zeros(row,col);
f2=zeros(row,col);
f3=zeros(row,col);
gx=[-1,0,1;-2,0,2;-1,0,1];
gy=[-1,-2,-1;0,0,0;1,2,1];
for i=2:row-1
for j=2:col-1
fx=[f(i-1,j-1),f(i-1,j),f(i-1,j+1);f(i,j-1),f(i,j),f(i,j+1);f(i+1,j-1),f(i+1,j),f(i+1,j+1)];
fy=[f(i-1,j-1),f(i-1,j),f(i-1,j+1);f(i,j-1),f(i,j),f(i,j+1);f(i+1,j-1),f(i+1,j),f(i+1,j+1)];
Gx=gx.*fx;
Gy=gy.*fy;
A=abs(sum(Gx,'all'));
B= abs(sum(Gy,'all'));
C=((sum(Gx,'all'))^2+(sum(Gy,'all'))^2)^0.5;
if A>=200
f1(i,j)=255;
end
if B>=200
f2(i,j)=255;
end
if C>=200
f3(i,j)=255;
end
end
end
subplot(2,2,1),imshow(F);title('原始图像');
subplot(2,2,2),imshow(f1);title('sobel x方向梯度');
subplot(2,2,3),imshow(f2);title('sobel y方向梯度');
subplot(2,2,4),imshow(f3);title('sobel总梯度');