Canny算子 边缘检测(Canny算子)实现原理
目前,边缘检测算法在实际应用中的应用越来越广泛,技术趋势发展迅速。很多朋友或多或少都知道,需要实现各种功能,尤其是一些复杂的需求,才能达到更好的过滤和更好的提取效果,这在一段时间内是不可能的。
下面小编将带你了解边缘检测算子的实现原理。因为边缘检测算子的常用方法有很多。),我们将以Canny算子为例,向大家展示简单的实现原理。
边缘检测有什么作用?一般来说,边缘检测主要是对一些数据信息进行处理,提取出想要的目标,消除一些无关的干扰和无用的信息,通过较少的数据信息获得更多的关注信息。
Canny算子简介Canny边缘检测算法是由John F. Canny于1986年提出的一种多级边缘检测算法。该算法被很多人认为是边缘检测的最佳算法,其识别图像边缘的准确率远高于其他边缘检测算法。
最优边缘检测的特点;
低错误率: 标识出尽可能多的实际边缘,同时尽可能的减少噪声产生的误报高定位性: 标识出的边缘要与图像中的实际边缘尽可能接近最小响应: 图像中的边缘只能标识一次Canny算子边缘检测流程H被预设为计算图像
04非最大抑制
抑制非最大数据也可以理解为排除非最大数据是边缘的可能性。图像梯度振幅矩阵中8附近的元素值越大,图像中该点的梯度值就越大。结合检测点的梯度方向,可以定位出近似的边缘信息。
非最大抑制的两个特征:
当前位置的梯度值与梯度方向上两侧的梯度值比较梯度方向是垂直于边缘方向示例如下图所示
每个点的x方向和y方向的梯度方向矩阵
各点梯度方向的梯度角矩阵
Canny算子计算Gy/Gx的绝对值,以及OpenCV中的梯度角矩阵
每个点的梯度矩阵
综上所述,计算出的梯度值和梯度方向可以大致判断这8个邻域中值的边缘信息,如下图所示
梯度方向同时包含多个梯度值,需要对梯度方向两侧的梯度值进行线性插值。插值系数β有以下要求:越接近梯度方向的梯度值所占比例越大。
非最大抑制完成后,将获得二值图像。非边缘点的灰度值全部为0,可能的边缘点的灰度值为255。这样的检测结果仍然包含大量由噪声等原因造成的伪边缘,需要双阈值筛选。
05滞后阈值
采用双阈值对二值图像进行滤波,通过选择合适的大阈值和小阈值,可以得到最接近图像真实边缘的边缘图像。
具体实现方法是:根据高阈值得到一幅边缘图像,这样的图像包含的伪边缘很少,但由于阈值较高,生成的图像边缘可能不会闭合,所以采用另一种低阈值来解决这个问题。
在高阈值图像中,边缘被链接成轮廓。当到达轮廓的终点时,算法会在断点的8个邻域点中寻找满足低阈值的点,然后根据这些点收集新的边缘,直到整个图像边缘闭合。