OpenCV Canny算子 边缘检测 -《Opencv轻松入门-面向python》10
发布网友
发布时间:2024-10-24 01:13
我来回答
共1个回答
热心网友
时间:2024-10-25 23:39
Canny 边缘检测算子是约翰·坎尼于1986年开发的一种多级边缘检测算法。该算法不仅应用于边缘检测,还创立了“边缘检测计算理论”以解释其工作原理。Canny边缘检测算法包含以下步骤:
首先,通过应用高斯滤波器去除图像噪声。此步骤旨在平滑图像中纹理较弱的非边缘区域,从而获取更准确的边缘信息。高斯滤波器的大小对边缘检测效果至关重要:尺寸越大,边缘信息对噪声的敏感度越低,但边缘检测的定位错误增加。通常,5x5的高斯核能满足大多数情况。
其次,计算梯度,主要关注梯度的方向,该方向垂直于边缘。梯度的幅度和方向分别由公式表示。梯度幅度和角度的计算基于图像的水平和垂直方向的导数。梯度方向总是垂直于边缘,通常有8个不同的方向,具体取决于计算结果。例如,右上角点的值“5↑”表示梯度幅度为5,角度为90°。
然后,执行非极大值抑制步骤,以细化边缘。此步骤通过逐点遍历图像,判断当前像素是否为周围像素中具有相同梯度方向的最大值。如果是,则保留该点;否则,抑制该点。该步骤实质上是边缘细化过程。
接下来,应用双阈值确定边缘。设置两个阈值,高阈值maxVal和低阈值minVal,根据当前边缘像素的梯度值与这两个阈值的关系,判断边缘属性。若梯度值≥maxVal,则标记为强边缘;介于maxVal与minVal之间,则标记为虚边缘(需保留);若≤minVal,则抑制边缘像素。在此过程中,虚边缘需要进一步处理,通常通过判断其是否与强边缘连接来确定。
Canny函数在OpenCV中以cv2.Canny()实现。通过调整函数参数threshold1和threshold2的值,可以获取不同数量的图像边缘信息。当这些参数值较小时,可获取更多边缘细节。