matlab进行Prewitt边缘增强、Sobel边缘增强

 Prewitt边缘增强,使用Prewitt算子:gx=\begin{bmatrix} 1&0& -1\\ 1&0& -1\\ 1&0& -1 \end{bmatrix}和gy=\begin{bmatrix} -1 & -1 &-1 \\ 0 & 0 & 0\\ 1&1&1 \end{bmatrix} 。

得到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=\begin{bmatrix} -1 & 0& 1\\ -2& 0 &2 \\ -1&0 &1 \end{bmatrix}和gy= \begin{bmatrix} -1 & -2 & -1\\ 0&0 &0 \\ 1 & 2 & 1 \end{bmatrix}

得到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总梯度');

猜你喜欢

转载自blog.csdn.net/weixin_56832351/article/details/129198994