这篇是上一篇的延申,列出了常用的边缘检测算子及测试结果。
一、边缘检测的各种算子
一阶导有以下几种:
1. Roberts算子
roberts算子其实就是一阶导定义的对角线方向,它没有噪声抑制能力,它对45°和135°方向的梯度变化更敏感。
2. Prewitt算子
Prewitt算子是常用的梯度算子,算子里面融合了一个均值降噪,把它分解出来就能看清楚了,以水平方向为例(垂直方向同理):
可以理解为Prewitt在检测边缘的同时做了垂直方向的三均值,好处是有一定的降噪性能,坏处是一些细小的边缘检测不出来。
3. Sobel算子
Sobel算是用的最多的梯度算子了,很多论文也是在Sobel算子的基础上改进的,它里面藏了个高斯,还是以x轴为例(y方向同理):
Sobel可以认为是Prewitt的升级版,均值变高斯了,高斯滤波会给中心点分配更大的权重,有利于保持边缘,所以Sobel也有降噪性能,其保边能力要略高于Prewitt。
- Canny算子
Canny在我的理解中它不能被当作一个算子,它应该说成是“Canny算法”更合适,但是很多论文中就是把它叫做“Canny算子”,那就只能这么用下去咯。
Canny算子计算边缘分四步,高斯滤波、计算图像梯度、非最大抑制以及双阈值边缘连接,这里的第二步“计算图像梯度”可以用上面3个一阶导中的任意一个。它的优越性主要体现在以下三点:
第一是抗噪性能,Canny先做了二维的高斯滤波,后面又用双阈值抑制了一部分弱边缘,最大限度降低了噪声的干扰,所以Canny的降噪性能是很优越的。
第二是边缘单值化,通常卷积后得到梯度边缘宽度超过一个像素,Canny利用非最大抑制算法挑出局部梯度变化中最为突出的那个,其它梯度值直接置0,这样就实现了边缘的宽度只有一个像素。
第三是强化弱边缘,也就是边缘连接,上面的两步肯定会误伤一部分真实的边缘,所以Canny又把弱边缘的8连通域搜索了一遍,只要里面有一个强边界,就把这个弱边缘也定义成强边缘。
这一通操作下来,Canny成功进阶一阶算子的王者,但是计算量也是王者级的。
二阶导有以下几种:
1. Laplacian
上面我们给出了二阶导x方向的公式,把y方向也写下来:
两个二阶导相加得到:
把它写成算子如下所示:
上面这个只有水平和垂直两个方向,所以得到了一个4邻域的算子,如果加上两个对角线方向,会得到下面这个8邻域的算子:
所以对图像做拉普拉斯卷积等价于对图像求了二阶导,二阶导对精细细节的反应非常大,在孤立点处达到最大值,所以图像二阶导对噪声特别敏感。此外,拉普拉斯还具有各向同性,就是说无论哪个方向,响应都是一样的。
2. Log
Log全称为Laplacian and Gaussian,由于拉普拉斯对噪声敏感,所以要先对图像做一个高斯滤波,然后再应用Laplacian对降噪后的图像进行运算。其实就是对输入图像连续做了两次卷积,第一用高斯算子,第二次用拉普拉斯算子。
3. Dog
Dog全称为Difference of Gaussian,就是两个Gauss做减法,本质上是一个带通滤波器,它的作用是把特别高频的分量给剔除,保留中频部分,当然也具备降噪性能,由于高斯核是可调节大小的,所以通过调整高斯核就可以调整边缘提取的频段。
二、边缘检测效果与对比
还是用Lena图,这幅图既有细节又有平坦区域,很适合用于测试边缘检测,另外,为了测试算子的抗噪性能,给Lena图加了一点儿高斯噪声。
先看一阶导的测试图像,一阶导均显示三幅图像,水平和垂直的浮雕图以及梯度幅值图。
Roberts的细节有一部分都淹没在噪声里面了,即使拿阈值做二值化提取,大概率也不会获得好结果。Prewitt和Sobel的效果差不多,视觉上觉得Sobel更清晰是因为Sobel里面的高斯,它给中心点分配了更大的权重,会让边缘更突出一些。
由于本章要讨论的是各种求导算子对图像的处理效果,而Canny其实是一种算法,对于一个边缘检测算法来说,还需要配合阈值提取清晰的图像边界,但是本章不涉及阈值部分,所以Canny这里直接使用了matlab中的函数,这个函数给边缘检测的结果做了二值化,看看效果就好。Canny在实际使用的时候需要做阈值调试,所以下面的这个效果仅供参考。
然后是二阶算子的处理效果,二阶算子会在图像边缘处产生双像素,所以在显示的时候求了绝对值,正负边缘凑在一起会觉得边缘变粗了,但实际上不是的,下图9从左往右分别是Laplacian、Log和Dog的效果。
从效果上来看,Laplacian确实是对噪声很敏感,Log因为做了高斯,检测出来边缘里面少了很多噪声,Dog的效果介于二者中间。本章对二阶导不做进一步分析,因为后面还有图像锐化算法,等介绍图像锐化的时候还要进一步深入分析二阶导及其算子。这里还是要强调一下以上效果仅供参考,实际使用看需求,算法可以根据实际情况做改进。
另外,为了方便查阅和掌握各种求导算子的性能,这里给出一张算子对比的表格,也是仅供参考。
名称 | 类型 | 幅值计算方法 | 降噪性能 | 边缘响应效果 | 复杂度 |
Roberts | 一阶 | 绝对值相加 | 无噪声抑制能力 | 单像素边缘和双像素边缘 | 简单 |
Prewitt | 一阶 | 绝对值取max | 单向均值降噪 | 单像素边缘和双像素边缘 | 一般 |
Sobel | 一阶 | 绝对值取max | 单向高斯降噪 | 单像素边缘和双像素边缘 | 一般 |
Canny | 一阶 | 绝对值相加 | 二维高斯降噪 | 唯一单边缘 | 复杂 |
Laplace | 二阶 | 绝对值 | 对噪声敏感 | 孤立点和双像素边缘 | 一般 |
Log | 二阶 | 绝对值 | 二维高斯降噪 | 双像素边缘 | 一般 |
Dog | 二阶 | 绝对值 | 二维高斯降噪 | 双像素边缘 | 一般 |