目录
图像边缘两侧的像素点灰度值发生明显的变化。因此可以通过图像灰度值的一阶导数或二阶导数来进行图像边缘的检测。
Canny 算子
Canny 边缘检测算法被普遍认为是最优的边缘检测算法。其旨在满足下面三个评价标准:
低错误率:检测出尽可能多实际存在的边缘,且尽可能地减少噪声产生的误差。
高定位性:检测出的边缘与图像中实际存在的边缘尽可能接近。
最小响应:每条边缘只检测一次,且可能存在的噪声不应标示为边缘。
Canny 边缘检测算法步骤:
1. 消除噪声。使用高斯滤波来去除噪声。如下图所示:
2. 计算梯度幅值和方向。可以采用 Sobel 滤波器来进行。如下图所示:
3. 非极大值抑制。排除非边缘像素,仅保留一些细线条(候选边缘)。
4. 滞后阈值。包括高阈值和低阈值。
若某一像素位置的梯度幅值超过高阈值,该像素被保留为边缘像素。
若某一像素位置的梯度幅值小于低阈值,该像素被排除。
若某一像素位置的梯度幅值在两个阈值之间,该像素仅仅在连接到一个高于高阈值的像素时被保留。
通常高低阈值比在 2:1 到 3:1 之间。
Canny() 函数原型:
void Canny(InputArray image, OutputArray edges, double threshold1, double threshold2, int a