边缘检测是图像处理的主要组成部分。 尽管基于卷积神经网络等基于深度学习的技术可以执行非常复杂的边缘检测(即具有变化的曲率,噪声,颜色等的边缘),但在某些情况下,经典的边缘检测方法仍然具有很高的意义! 例如,如果已知数据是简单且可预测的; 与CNN相比,Canny边界检测可以立即使用,而CNN的实现通常较为复杂。
边缘检测的基本知识
大多数经典的边缘检测算法都是基于一阶导数的概念。在下图中,我们可以看到一个理论边缘轮廓,y轴是像素强度,x轴是图像中的物理位置。在图像的边缘位置,有一个从低强度到高强度的快速过渡,反之亦然。这个过渡的速度越快,边缘将会出现。为了检测边缘,我们只需取像素强度的一阶导数,然后寻找如下图所示的最大值!
Canny边缘检测
通常将该导数与高斯滤波器相结合,一步完成图像平滑和边缘检测。由于导数和高斯滤波器的卷积都是线性运算,所以我们直接对图像应用微分高斯滤波器即可!下面的示例5×5过滤器完成了这个操作,使用这个过滤器= 1。
本文转载自:https://www.gylmap.com
这样会产生一个输出,该输出已经高亮显示了边缘的位置! 但是,Canny的优点是可以产生非常薄和干净的边缘。 下一步,非最大抑制(NMS)将实现这一目标。 通过跟踪输出图像中的高值,然后检查3×3邻域中的最大梯度来完成NMS。 中心像素必须在垂直于边缘的方向上最高,否则将被设置为0。
在下面的示例中,我们看到一个7×7矩阵,其中的采样输出来自高斯滤波器。 较高的值将表明该位置的一阶导数较高! 为了执行NMS,我们沿着边缘方向进行跟踪,然后将其设置为0(如果它们不是边缘法线方向的最大值)(即红色轴)。 因此,在NMS之后,蓝色单元将保留,灰色单元将全部设置为0。 我们看到这提供了只有一个像素宽的精细边缘输出!
Canny边缘检测的另一个重要组成部分是滞后阈值。 这听起来超级复杂,但是非常简单! 此步骤与NMS一起执行,其主要思想是防止噪声边缘在最终边缘检测中引起碎片。 选择2个阈值,其中T1> T2。 仅当梯度值大于T1时才开始NMS跟踪,仅当梯度值小于T2时才停止NMS跟踪。 这样可以确保NMS跟踪对边缘的噪声具有一定的鲁棒性,该边缘可以通过T1和T2值进行控制。
总结
Canny 边缘检测是很流行的边缘检测算法,是在1986年由John F.Canny提出的。尽管Canny 边缘检测和各种经典的边缘检测方法似乎被流行的CNN和深度学习方法所掩盖,但我们不应该忘记它们的简单性和有效性。 有时,尝试经典解决方案要容易得多,并且它可能比您预期的要好!