数字图像处理|Matlab-图像分割与边缘检测实验-使用一阶和二阶检测算子(导数)进行图像的边缘检测

Matlab-分割与边缘检测实验-使用一阶和二阶检测算子(导数)进行图像的边缘检测

代码链接:https://download.csdn.net/download/qq_43571150/12033266

使用一阶和二阶检测算子(导数)进行图像的边缘检测
问题1:编写程序实现一阶Sobel算子,进行图像的边缘提取;
问题2:编写程序实现一阶Prewitt算子,进行图像的边缘提取;
问题3:编写程序实现一阶Roberts算子,进行图像的边缘提取;
问题4:编写程序实现二阶Laplacian算子(3*3),进行图像的边缘提取。
数字图像处理|Matlab-图像分割与边缘检测实验-使用一阶和二阶检测算子(导数)进行图像的边缘检测_第1张图片
数字图像处理|Matlab-图像分割与边缘检测实验-使用一阶和二阶检测算子(导数)进行图像的边缘检测_第2张图片
数字图像处理|Matlab-图像分割与边缘检测实验-使用一阶和二阶检测算子(导数)进行图像的边缘检测_第3张图片
数字图像处理|Matlab-图像分割与边缘检测实验-使用一阶和二阶检测算子(导数)进行图像的边缘检测_第4张图片
图像结果

Matlab代码

clear all;
A=imread('01.jpg'); 
R=rgb2gray(A);
I=double(R);

hx1=[-1 -2 -1;
      0  0  0;
      1  2  1];                 %生产垂直梯度模板
hy1=[-1  0  1;                  %生产水平梯度模板
     -2  0  2;
     -1  0  1];                      

hx2=[-1 -1 -1;
      0  0  0;
      1  1  1];                 %生产垂直梯度模板
hy2=[-1  0  1;                  %生产水平梯度模板
     -1  0  1;
     -1  0  1];                

hx3=[-1  0;
      0  1];                    %生产垂直梯度模板
hy3=[ 0 -1;                     %生产水平梯度模板
      1  0];      
  
hx4=[ 0 -1  0;                  %生产水平梯度模板
     -1  4 -1;
      0 -1  0];
  
hx5=[-1 -1 -1;                  %生产水平梯度模板
     -1  8 -1;
     -1 -1 -1];  

grad1=Edge(I,hx1,hy1);
grad2=Edge(I,hx2,hy2);
grad3=Edge(I,hx3,hy3);
grad4=Laplacian(I,hx4);
grad5=Laplacian(I,hx5);
p1=uint8(grad1);
p2=uint8(grad2);
p3=uint8(grad3);
p4=uint8(grad4);
p5=uint8(grad5);

subplot(3,3,1);imshow(A);title('input'); 
subplot(3,3,2);imshow(R);title('灰度图'); 
subplot(3,3,4);imshow(p1,[]);title('一阶Sobel算子');
subplot(3,3,5);imshow(p2,[]);title('一阶Prewitt算子');
subplot(3,3,6);imshow(p3,[]);title('一阶Roberts算子');
subplot(3,3,7);imshow(p4,[]);title('二阶Laplacian算子四邻域');
subplot(3,3,8);imshow(p5,[]);title('二阶Laplacian算子八邻域');

imwrite(p1,'01 一阶Sobel算子边缘提取.jpg');
imwrite(p2,'01 一阶Prewitt算子边缘提取.jpg');
imwrite(p3,'01 一阶Roberts算子.jpg');
imwrite(p4,'01 二阶Laplacian算子四邻域边缘提取.jpg');
imwrite(p5,'01 二阶Laplacian算子八邻域边缘提取.jpg');


function p = Edge(I,hx,hy)  
gradx=filter2(hx,I,'same');
gradx=abs(gradx);               %计算图像的垂直梯度
  
  
grady=filter2(hy,I,'same');
grady=abs(grady);               %计算图像的水平梯度
   
p=gradx+grady;                  %得到图像的梯度
end

function p = Laplacian(I,hx)  
gradx=filter2(hx,I,'same');
gradx=abs(gradx);               %计算图像的垂直梯度
   
p=gradx;                        %得到图像的梯度
end

你可能感兴趣的:(数字图像处理)