计算机视觉 特征检测与匹配 边缘检测

1、边缘检测综述

        虽然兴趣点对于查找可以在2D中准确匹配的图像位置很有用,但边缘点要丰富得多,并且通常带有重要的语义关联。例如,对象的边界也对应于 3D 中的遮挡事件,通常有可见轮廓。其他类型的边缘对应于阴影边界或折痕边缘,其中表面方向快速变化。孤立的边缘点也可以分组为更长的曲线或轮廓,以及直线段。

        给定图像,我们如何找到显着边缘?考虑下图中的彩色图像。如果有人让你指出最“显着”或“最强”的边缘或对象边界,你会追踪哪些?你的感知与下图中显示的边缘图像有多接近?

人为边界识别

        边缘出现在不同颜色、强度或纹理的区域之间的边界处。不过将图像分割成连贯区域是一项艰巨的任务。通常,最好只使用纯局部信息来检测边缘。

        在这种情况下,合理的方法是将边缘定义为快速强度或颜色变化的位置。将图像视为高度场。在这样的表面上,边缘出现在陡坡的位置,或者等效地,出现在等高线密集的区域(在地形图上)。

        定义表面坡度和方向的数学方法是通过其求其梯度,

        局部梯度向量 J 指向强度函数中上升最陡的方向。它的大小表示变化的斜率或强度,而它的方向指向垂直于局部轮廓的方向。

        不过获取图像导数会突出高频并因此放大噪声,因为在高频下噪声与信号的比例更大。因此,可以考虑在计算梯度之前使用低通滤波器平滑图像。因为我们希望边缘检测器的响应与方向无关,所以需要一个圆对称平滑滤波器。高斯是唯一可分离的圆对称滤波器,因此它被用于大多数边缘检测算法。Canny (1986) 讨论了替代过滤器,许多研究人员回顾了替代边缘检测算法并比较了它们的性能。

        因为微分是线性运算,所以它与其他线性滤波运算可互换。 因此,平滑图像的梯度可以写为即,我们可以将图像与高斯核函数的水平和垂直导数进行卷积

         其中参数\sigma表示高斯的宽度。这与一阶可控滤波器执行的计算相同。

        然而,对于许多应用程序,我们希望对这样的连续梯度图像进行细化以仅返回孤立的边缘,即作为沿边缘轮廓离散位置的单个像素。这可以通过寻找边缘强度(梯度幅度)的最大值来实现 垂直于边缘方向的方向,即沿梯度方向。

扫描二维码关注公众号,回复: 14135920 查看本文章

        找到这个最大值对应于在梯度方向上取强度场的方向导数,然后寻找零交叉。所需的方向导数相当于第二个梯度算子和第一个梯度算子的结果之间的点积,

         梯度算子与梯度的点积称为拉普拉斯算子。卷积核为

         因此称为高斯拉普拉斯算子 (LoG) 核。这个内核可以分成两个可分离的部分,

         它使得可分离过滤更有效的实现。

        在实践中,用高斯差 (DoG) 计算代替高斯卷积的拉普拉斯算子是很常见的,因为核形状在性质上是相似的(下图)。 如果已经计算了“拉普拉斯金字塔”,这将特别方便。

两个低通滤波器的差异导致带通滤波器。 蓝色虚线显示与高斯半倍频程拉普拉斯算子的紧密拟合。

         事实上,在计算边缘场时,并不一定要取相邻层之间的差异。想想高斯图像的“广义”差异中的零交叉代表什么。更精细(更小的内核)高斯是原始图像的降噪版本。较粗(较大的核)高斯分布是对较大区域的平均强度的估计。因此,每当 DoG 图像改变符号时,这对应于(稍微模糊的)图像从相对较暗变为相对较亮,与该邻域的平均强度相比。

        一旦我们计算了符号函数 S(x),我们必须找到它的零交叉点并将它们转换为边元素(边)。 一种检测和表示零交叉的简单方法是寻找符号改变值的相邻像素位置 x_ix_j,即 [S(x_i) >0] \neq [S(x_j) > 0]

        通过计算连接 S(x_i)S(x_j)的“线”的“x 截距”可以得到这个交叉点的子像素位置,

        这种边缘的方向和强度可以通过线性插值在原始像素网格上计算的梯度值来获得。

        另一种边缘表示可以通过链接对偶网格上的相邻边缘以形成边缘,这些边缘位于由原始像素网格中的四个相邻像素形成的每个正方形内。这种表示的优点是边缘现在位于偏移一半的网格上 原始像素网格中的像素,因此更易于存储和访问。 和以前一样,边缘的方向和强度可以通过插值梯度场或从高斯图像的差异估计这些值来计算。 

        在边缘方向的准确性更重要的应用中,可以使用高阶可控滤波器。 这样的过滤器对更细长的边缘更有选择性,并且有可能更好地模拟曲线交叉点,因为它们可以表示同一像素处的多个方向(下图)。它们的缺点是它们的计算成本更高,并且边缘强度的方向导数确实 没有简单的封闭形式解决方案。

 2、尺度选择和模糊估计

        正如我们之前提到的,高斯滤波器的导数、拉普拉斯算子和差分都需要选择空间尺度参数。 如果我们只对检测锐利边缘感兴趣,可以从图像噪声特征确定滤波器的宽度。 然而,如果我们想检测出现在不同分辨率的边缘(下图b-c),可能需要一种检测然后选择不同尺度边缘的尺度空间方法。

缘检测的尺度选择 (Elder and Zucker 1998) © 1998 IEEE:(a) 原始图像; (b-c) Canny/Deriche 边缘检测器调整到更精细(人体模型)和更粗糙(阴影)尺度; (d) 梯度估计的最小可靠尺度; (e) 二阶导数估计的最小可靠尺度; (f) 最终检测到的边缘。

         Elder 和 Zucker (1998) 提出了解决这个问题的原则性方法。 给定已知的图像噪声水平,他们的技术为每个像素计算可以可靠检测到边缘的最小比例(上图d)。 他们的方法首先通过根据梯度大小在不同尺度计算的梯度估计中进行选择,在图像上密集计算梯度。 然后它对有向二阶导数执行类似的最小尺度估计,并使用后一个量的零交叉来稳健地选择边缘(上图e-f)。作为可选的最后一步,可以从二阶导数响应中极值之间的距离减去高斯滤波器的宽度来计算每个边缘的模糊宽度。

3、颜色边缘检测

        虽然大多数边缘检测技术都是针对灰度图像开发的,但彩色图像可以提供额外的信息。 例如,iso-luminant colors(具有相同亮度的颜色)之间的明显边缘是有用的提示,但灰度边缘运算符无法检测到。

        一种简单的方法是将分别在每个色带上运行的灰度检测器的输出组合起来。但是,必须注意一些事项。例如,如果我们简单地将每个色带中的梯度相加,带符号的梯度实际上可能会相互抵消!(考虑一下,例如纯红到绿的边缘。)我们还可以在每个色带中独立检测边缘,然后 将这些结合起来,但这可能会导致难以链接的加厚或双边。

        更好的方法是计算每个频带中的定向能量,例如,使用二阶可控滤波器,然后将 方向加权能量并找到他们共同的最佳方向。 不过这种能量的方向导数可能没有封闭形式的解(如带符号的一阶可控滤波器的情况),因此不能使用简单的基于零交叉的策略。 然而,Elder and Zucker (1998) 所描述的技术可用于以数值方式计算这些过零。

        另一种方法是估计每个像素周围区域的局部颜色统计数据。 这样做的好处是可以使用更复杂的技术(例如,3D 颜色直方图)来比较区域统计数据,并且还可以考虑其他措施,例如纹理。 下图显示了这种检测器的输出。

组合亮度、颜色、纹理边界检测器 。每行显示亮度梯度 (BG)、颜色梯度 (CG)、纹理梯度 (TG) 和组合 (BG+CG+TG) 检测器的输出。 最后一行显示了从手动分割图像数据库中获得的人工标记边界。

         多年来,已经开发了许多其他方法来检测颜色边缘,这可以追溯到 Nevatia (1977) 的早期工作。 Ruzon 和 Tomasi (2001) 以及 Gevers、van deWeijer 和 Stokman (2006) 对这些方法提供了很好的总结,其中包括融合来自多个通道的输出、使用多维梯度和基于向量的方法等想法。

4、结合边缘特征线索

        如果边缘检测的目标是匹配人类边界检测性能,与简单地寻找稳定的特征格式化相反,可以通过组合多个低级线索(如亮度、颜色和纹理)来构建更好的检测器。

        Martin、Fowlkes 和 Malik (2004) 描述了一个系统,该系统结合了亮度、颜色和纹理边缘,以在手动分割的自然彩色图像数据库上产生最先进的性能。首先,他们分别构建和训练用于测量亮度(亮度)、颜色(a* 和 b* 通道、总响应)和纹理(未归一化滤波器组响应)的显着差异的定向半圆盘探测器。 然后使用软非最大抑制技术锐化一些响应。最后,使用各种机器学习技术组合三个检测器的输出,从中发现逻辑回归在速度、空间和准确性之间具有最佳折衷。结果系统显示出优于以前开发的技术。有学者通过将基于局部外观的检测器与基于光谱分割的检测器相结合来改进这些结果。在后续研究中,Maire等(2011)使用分水岭算法的变体在此边缘检测器上构建分层分割。

5、边缘检测代码参考

Opencv学习笔记 边缘检测_bashendixie5的博客-CSDN博客_opencv边缘检测Opencv实现边缘检测https://skydance.blog.csdn.net/article/details/107805904数字图像处理 使用C#进行图像处理四 边缘检测_bashendixie5的博客-CSDN博客_c# 边缘检测c#实现基于拉普拉斯算子、高斯算子、高斯拉普拉斯算子、Sobel算子、Prewitt算子、Kirsch算子的边缘检测。https://skydance.blog.csdn.net/article/details/109624305

猜你喜欢

转载自blog.csdn.net/bashendixie5/article/details/124675066