五种边缘检测算法(附代码)
一、Roberts 边缘检测算子
Roberts边缘检测算子根据任意一对互相垂直方向上的差分可用来计算梯度的原理,采用对角线方向相邻两像素之差,即: 然后根据式(1.9.2)计算出Roberts的梯度幅度值: 它们的卷积算子为: Roberts检测器较为简单,但具有一些功能上的限制,例如,它是非对称的,而且不能检测诸如45°倍数的边缘。然而,它还是经常用于硬件实现中,因为它既简单又快速。
二、Sobel 边缘检测算子
对数字图像的每个像素,考察它上下左右邻点灰度的加权差,与之接近的邻点的权大。据此,定义Sobel算子如下: 卷积算子为: Sobel 算子很容易在空间上实现,边缘检测效果较好,且受噪声的影响也较小。邻域增大抗噪性会更好,但计算量也会增大,得出的边缘也会相应变粗。Sobel算子会检测出许多伪边缘,边缘定位精度不够高,在精度要求不高时是一种较常用的边缘检测方法。
三、Prewitt 边缘检测算子
Prewitt 边缘检测算子模板如下: 图像中的每个像素都用这两个核作卷积,一个核对垂直边缘影响最大,另一个核对水平边缘影响最大。两个卷积的绝对值的最大值作为该点的输出值。不能简单的将小于0的值处理为0,这样会丢失信息。它比Sobel检测器在计算上要简单一些,但比较容易产生一些噪声。
四、 LoG 检测器
高斯函数 其中,r2=x2+y2,σ是标准偏差。这是一个平滑函数,若和一幅图像卷积,则会使图像变模糊。模糊程度由σ的值决定。该函数的拉普拉斯算子为: 求二阶导数是线性运算,所以 ▽2h®用对图像进行卷积与先用平滑函数对图像卷积再计算结果的拉普拉斯算子是一样的。这是LoG检测器最关键的概念,用 ▽2h®对图像卷积会产生两个效果:是图像变平滑(从而减少噪声);计算拉普拉斯算子,以便产生双边缘图像。然后,定位边缘就是找到两个边缘之间的零交叉。
五、Canny边缘检测器
Canny检测器的效果较好,更适合用于检测真正的弱边缘。Canny算子给出了一个好的边缘检测算子的3个指标:低失误率,即真正的边缘点尽可能提取,非边缘点尽可能不提取;高位置精度,检测的边缘应尽可能接近真实边缘;对每一个边缘点有唯一的响应,即得到单像素宽度的边缘。
六、代码
clear all; I = imread(‘d:office.bmp’); I=rgb2gray(I); BW1 = edge(I,‘sobel’); %利用Sobel算子进行边缘检测 BW2 = edge(I,‘roberts’); %利用roberts算子进行边缘检测 BW3 = edge(I,‘prewitt’); %利用prewitt算子进行边缘检测 BW4 = edge(I,‘log’); %利用log算子进行边缘检测 BW5 = edge(I,‘canny’); %利用canny算子进行边缘检测 subplot(2,3,1),imshow(I) subplot(2,3,2),imshow(BW1) subplot(2,3,3),imshow(BW2) subplot(2,3,4),imshow(BW3) subplot(2,3,5),imshow(BW4) subplot(2,3,6),imshow(BW5)
