几种常用的边缘检测算子:

边缘是图像的最重要的特征,。边缘是指周围像素灰度有阶跃变化或屋顶变化的那些像素的集合。边缘检测主要是灰度变化的度量、检测和定位。有很多种不同的边缘检测方法,同一种方法使用的滤波器也不尽相同。图像边缘检测就是研究更好的边缘检测方法和检测算子。

边缘检测的基本思想:

  • 利用边缘增强算子,突出图像中的局部边缘;
  • 然后定义像素的“边缘强度”,通过设置阈值的方法提取边缘点集。由于噪声和模糊的存在,监测到的边界可能会变宽或在某点处发生间断。因此,边界检测包括两个基本内容:

i. 用边缘算子提取出反映灰度变化的边缘点集

ii. 在边缘点集合中剔除某些边界点或填补边界间断点,并将这些边缘连接成完整的线

常用的检测算子有拉普拉斯边缘检测算法、Robert边缘检测算子、Sobel边缘检测算子、Prewitt边缘检测算子、Canny边缘检测算子

在Matlab图像处理工具箱中,提供了edge函数利用以上算子来检测灰度图像的边缘。

代码:

clear;
close all;
img=imread('C:\Users\lenovo\Desktop\15.bmp');
figure('name','原图和二值化图像');
subplot(1,2,1);
imshow(img);
title('原始图像')

img=imbinarize(img); %二值化图像
subplot(1,2,2);
imshow(img)
title('二值化图像')

figure('name','五种边缘检测算子实现图'); 
%edge函数中的图像可以是二值图像也可以是灰度图像,
%因为原图为二维图像采用二值算法进行处理更为方便;
canny= edge(img,'canny');
% 这里采用默认阈值,如果更加复杂的图像可以自定义阈值
%canny= edge(img,'canny'0.51); %自定义阈值
subplot(2,3,1);
imshow(canny);
title('Canny算子实现')


Roberts= edge(img,'Roberts');
subplot(2,3,2);
imshow(Roberts);
title('Roberts算子实现')

Sobel= edge(img,'Sobel');
subplot(2,3,3);
imshow(Sobel);
title('Sobel算子实现')

Prewitt= edge(img,'Prewitt');
subplot(2,3,4);
imshow(Roberts);
title('Roberts算子实现')

Roberts= edge(img,'Roberts');
subplot(2,3,5);
imshow(Prewitt);
title('Prewitt算子实现')

处理结果:

matlab-如何进行边缘检测/边缘提取(对弹孔进行边缘检测)
matlab-如何进行边缘检测/边缘提取(对弹孔进行边缘检测)

本片博客参考下面两位博主的文章:

基于matlab边缘提取的几种方法的比较
edge函数使用

相关文章: