几种常用的边缘检测算子:
边缘是图像的最重要的特征,。边缘是指周围像素灰度有阶跃变化或屋顶变化的那些像素的集合。边缘检测主要是灰度变化的度量、检测和定位。有很多种不同的边缘检测方法,同一种方法使用的滤波器也不尽相同。图像边缘检测就是研究更好的边缘检测方法和检测算子。
边缘检测的基本思想:
- 利用边缘增强算子,突出图像中的局部边缘;
- 然后定义像素的“边缘强度”,通过设置阈值的方法提取边缘点集。由于噪声和模糊的存在,监测到的边界可能会变宽或在某点处发生间断。因此,边界检测包括两个基本内容:
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算子实现')