Prewitt算子
为了提高精度,对于每个像素考虑它与周围8个邻域中像素值的加权差,卷积核Gx=[1,0,-1;1,0,-1;1,0,-1];Gy=[-1,-1,-1;0,0,0;1,1,1]
Sobel算子
Sobel算子与Prewitt算子相同,考虑周围8个像素的加权差,但是该算子认为靠近中心像素的点应该给予更高的权重。卷积核Gx=[1,0,-1;2,0,-2;1,0,-1];Gy=[-1,-2,-1;0,0,0;1,2,1]
注:需要注意的就是卷积核与对应窗口中的元素对应相乘然后求新矩阵的所有元素和就行了。
还有阈值需要自己选,根据运行结果找一个最合适的阈值。
Prewitt代码:
F=imread('Lena.jpg');
f=double(rgb2gray(F));
[row,col]=size(f);
f2=rgb2gray(F);
imshow(f2);
f1=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(abs(