算子 | 优缺点比较 |
---|---|
Roberts | 对具有陡峭的低噪声的图像处理效果较好, 但利用Roberts算子提取边缘的结果是边缘比较粗, 因此边缘定位不是很准确。 |
Sobel | 对灰度渐变和噪声较多的图像处理效果比较好, Sobel算子对边缘定位比较准确。 |
Kirsch | 对灰度渐变和噪声较多的图像处理效果较好。 |
Prewitt | 对灰度渐变和噪声较多的图像处理效果较好。 |
Laplacian | 对图像中的阶跃性边缘点定位准确, 对噪声非常敏感, 丢失一部分边缘的方向信息, 造戌一些不连续的检测边缘。 |
LoG | LoG算子子经常出现双边缘像素边界, 而且该检测方法对噪声比较敏感,所以很少用LoG算子检测边缘,而是用来判断边缘像素是位于凸显过的明区还是暗区。 |
Canny | 此方法不容易受噪声的干扰,能够检测到真正的弱边缘。在edge函数中,最有效的边缘检测方法是Canny方法,该方法 的优点在于使用不同的阈值分别检测强边缘和弱边缘,并且仅当弱边缘与强边缘相连时,才将弱边缘包含在输出图像中。因此,这种方法不容易被噪声“填充”,跟容易检测出真正的弱边缘 |
SUSAN检测方法是一种基于窗口模板的检测方法,主要是通过在图像每个像素点位置处建立一个窗口,这个窗口是圆形的,这里为了得到各方向同性的响应,窗口内可以是常数权值或高斯权值,一般情况下,窗口半径为3.4个像素(即窗口内总有37个像素)。 这样的窗口模板被放置在每个像素的位置,确定点之间强度相似程度可以由下面的图来描述,这里的x轴是指像素点之间强度差别,y轴指的相似程度,为1就指完全相似。
考虑为了运算简单,一般情况下使用a线(上图),最后统计所以同中心点相似的点数(即相似程度为1的点)相似点所在区域被称为USAN(Univalue Segment Assimilating Nucleus),而特征边缘或角点就是在这个点数值局部最小地方。图中的分界点(区分是否相似的像素差别)实际上反映了图像特征的最小对比程度,及被排除噪声的最大数目。
SUSAN边缘及角点检测没有用到图像像素的梯度(导数),因为这个原因,所以即使在噪声存在情况下,也能有好的表现。因为只要噪声足够的少,没有包含到所有相似像素的点,那么噪声就可以被排除。在计算时,单个值的集合统一消除了噪声的影响,所以SUSAN对于噪声具有较好的鲁棒性。
SUSAN是通过比较像素点邻域同其中心相似程度,所以也具有了光强变化不变性(因为像素点差别不会变化),及旋转不变性(旋转不会改变局部像素间的相似程度),及一定程度的尺度不变性(角点的角度在尺度放大并不会变化,这里的一定程度是指在尺度放大时,局部的曲度会慢慢平滑)。另外SUSAN使用的参数也非常的少,所以对于计算量及储存量要求低。
SUSAN方法被提出来,主要是为针对于边缘检测和角点检测的,然后其对于噪声较高的鲁棒性,也会用于在噪声消除中,被用于去选择最佳局部平滑邻域(相似程度的点最多的地方)。本文重点描述SUSAN方法用于边缘检测和角点检测的思路,并简要介绍下SUSAN方法是如何应用于噪声消除领域的。
SUSAN边缘检测总共包括5个步骤:
首先考虑到图像以每点像素为中心的圆形模板(半径为3.4个像素,模板内共有37个像素),对于其内的每个邻域点都作如下相似度衡量的计算(标准是上图的a线),这里的r是领域像素距离中心的长度,而r0是中心位置,t指相似度分界值(其决定了特征同背景的最小区别程度,及最大可被排除的噪声数)。
当然我们也可以用平滑的线来从代替这种直接的分割方式(如下图b线),这样可以获得更稳定而敏感的结果,虽然计算复杂但是可以通过查找表来获得较快的速度。公式如下:
并计算总共的相似程度:
接下来,将n同一个固定的阈值g比较(一般设置为最大同中心相似点数nmax的0.75倍左右),初始的边缘响应可以用下面等式计算:
这里g是为了排除噪声的影响,而当n小于这个阈值时,才能被考虑其的边缘是否是边缘,n越小,其边缘响应就越大。如果一个阶跃边缘被考虑,如果这个点在边缘上,那么其USAN的值应当是小于或等于0.5倍的最大值,而对于曲线边缘来说,这个值应该会更少(因为曲度会更小,所以在窗口内,曲线内的区域会更小),所以g的加入不会影响原来的边缘检测的结果的(即所得的边缘响应R是不会为0的)。
为什么要计算边缘方向呢?首先,非极大值抑制需要找到边缘方向(这个之后再解释),另外确定子像素级精度也需要找到边缘方向(这个好理解),最后,一些应用可以会用到边缘方向(也包括位置及长度),一个像素若其边缘长度不会0,那么便有边缘方向,边缘一般有两种情况:
一种是标准的边缘点(如同中的a和b,其刚好位于边缘的一边或另一边),而c是另一种情况,其刚好位于左右两边的过渡带间,而过渡带的强度恰好为左右像素强度的一半。这里还引入了一个概念,USAN的引力中心(USAN区域即图像模板内的白色区域,就是同中心相似的区域),其可以由下式计算:
其中a和b情况可以被视一种像素间边缘,引力中心同模板中心的向量恰好垂直于局部边缘方向,我们可以通过这种方式来找到其边缘方向。 而上图c的情况就完全不一样了,其引力中心同模板中心恰好在一点上(这被视为一种像素内边缘),此时边缘的方向就要找到USAN区域内最长的对称轴方向,这个可以通过如下公式来获得:
前两项的比值可以用于确定边缘的方向(度数),而后一项的符号用于确定一个倾斜边缘其梯度的符号(往那边倾斜)。 接下来的问题就是如何自动决定每点是属于以上哪种的边缘,首先如果USAN区域(像素数)比模板直径(像素数)要小,那么这应该是像素内边缘(如c)。如果要大的话,然后又找到USAN的引力中心,那么这应该是像素间边缘情况(如a和b)。如果引力中心同模板中心的距离小于1个像素的话,此时用于像素内边缘情况(如c)来计算更为精确。
CANNY算子中已有介绍,此处不再赘述。
链接: 二阶微分算子.
对于每一个边缘点,首先找到边缘方向,然后在边缘垂直方向上减少边缘宽度,之后剩下的边缘点做3点二次曲线拟合,而曲线的转折点(一般情况下同最初边缘点的距离应当少于半个像素)被视为边缘的精确位置。
即窗口模板增大,不会改变检测的边缘的位置,即SUSAN具有尺度不变性,另外其对于视点改变后的图像检测重复率也非常高,因为视点变化不会影响其角点是否存在。
首先找到USAN的引力中心,然后计算引力中心同模板中心的距离,当USAN恰好能指示一个正确角点时,其引力中心同模板中心将不会靠得太近,而如果是条细线的话,引力中心同模板中心将会很近(如上图a和b所示)。另外的操作就是要加强USAN的邻近连续性,在真实图像里,非常容易出现小的噪声点,而这些噪声点可能分布于USAN内。所以对于模板内所有的像素,如果其是位于引力中心同模板中心所连的直线上,那么都应该视为USAN的一部分。
SUSAN角点检测方法同基于导数检测方法一个非常大的优势在于,其不会在靠近中心相邻的区域不会与中心区域的角响应很难区分,所以局部的非极大值抑制中需要简单地选择局部的最大值就可以了。
SUSAN噪声滤波方法主要是通过仅平滑那些同中心像素相似的区域(即USAN),而由此保留图像的结构信息。而USAN的平滑主要就是找到其中所以像素的平均值,而不会对其相邻的不相关区域进行操作。 不过在区分相似度的公式上,却没有用到原来的公式,而是如下:
参考网站Glab.