理论教育 Canny边缘检测算法及工作原理

Canny边缘检测算法及工作原理

时间:2023-07-16 理论教育 版权反馈
【摘要】:常用的微分边缘检测算子有Roberts、Prewitt、Sobel、LoG、Canny算子等。其中,Canny边缘检测算子是John F.Canny于1986年提出的一个多级边缘检测算法,是当前广泛使用的图像边缘检测算法。使用Canny边缘检测算子检测边缘时,首先采用二维的高斯函数沿任意一个方向的一阶方向导数与图像像素进行卷积滤波;继而在滤波后的图像中寻觅图像梯度变化的部分最大值,最大值处便是边缘,这就是Canny边缘检测算子的工作原理。图4-9边缘检测示意图

Canny边缘检测算法及工作原理

边缘检测算子(Edge Detectors)是一组用于在灰度函数中定位变化的局部图像处理方法,边缘是灰度函数发生剧烈变化的位置,在图像中一般表现为阶跃边缘、屋顶边缘和线条边缘。在微积分中,用导数描述连续函数的变化,图像函数依赖于两个变量,即图像平面的坐标。因此,描述边缘的检测算子使用在两个坐标上的偏导数。边缘是一个具有幅值和方向的向量,边缘幅值是梯度的幅值,边缘方向是梯度方向旋转-90°的方向。

常用的微分边缘检测算子有Roberts、Prewitt、Sobel、LoG、Canny算子等。其中,Canny边缘检测算子是John F.Canny于1986年提出的一个多级边缘检测算法,是当前广泛使用的图像边缘检测算法。

使用Canny边缘检测算子检测边缘时,首先采用二维高斯函数沿任意一个方向的一阶方向导数与图像像素进行卷积滤波;继而在滤波后的图像中寻觅图像梯度变化的部分最大值,最大值处便是边缘,这就是Canny边缘检测算子的工作原理。其具体步骤是:首先定义二维高斯函数为

记Gn为G(x,y)沿n方向的一阶方向导数:

式中:n=(cosθ,sinθ)为边缘的法向向量,该方向应与边缘方向垂直;∇G=(∂G/∂x,∂G/∂y)为梯度向量。

用Gn与图像f(x,y)作卷积运算,同时持续改变方向,Gn*f(x,y)取最大值时对应的n是正交于检测边缘的方向。(www.daowen.com)

记图像在点(x,y)处的边缘强度为A(x,y),图像在点(x,y)处沿边缘法线方向的向量为θ,有

为了剔除伪边缘,需要对梯度幅值进行非极大值抑制。非极大值抑制方式如下:检测每一个幅角偏向的绝对值极大的点(边缘点),对每一个极大值点的8个方向上图像的像素进行检测,对比每一个极大值点的偏导值和相邻点的绝对值,获得的最大值处为边缘点,最后将边缘点的灰度值置为0。

同时,还需要使用双阈值算法检测和连接边缘。对G(x,y)使用阈值能够减少边缘检测的计算数量。阈值大小直接影响检测结果,相比较于采用单阈值处理,采用一大一小的双阈值检测边缘,能够降低阈值影响。双阈值检测过程中,分别使用两个阈值对同一幅图像进行检测得到图像1和图像2,较大阈值检测得到的图像2能去除噪声干扰信号。但是同时还会去除部分有用的边缘信息,这部分有用信息需要较小阈值检测图像来保留得到结果图像1,两个阈值结合,可以弥补不足之处使检测结果更加可靠。

边缘连接是Canny算子的最后步骤。扫描图像2,非零灰度像素p(x,y)为轮廓线的起始点,对其进行跟踪检测,直到找到其结束点q(x,y)。对图像1中与q(x,y)点位置相对应的点s(x,y)的8个邻近区域进行扫描,如果非零像素存在于点s(x,y)的8邻近区域中,则将其包含到图像2中,当作r(x,y)点。继续从点r(x,y)开始跟踪检测,直到两个图像中都无法继续跟踪。

连接完包括p(x,y)的轮廓线后,首先需要将这条轮廓线标记为已经检测,以避免重复跟踪扫描;然后选择其他轮廓起始点重新进行跟踪检测,直到图像2中找不到新轮廓线,Canny算子的边缘检测就算结束。边缘检测结果如图4-9所示。

图4-9 边缘检测示意图

免责声明:以上内容源自网络,版权归原作者所有,如有侵犯您的原创版权请告知,我们将尽快删除相关内容。

我要反馈