天天看点

Canny边缘检测算子原理

canny算子是图像处理中比较常用的算法,之前曾用canny来进行边缘检测,方便接下来的用Hough对图像进行处理,其中Canny算子的算法原理中有好多基本的概率都很重要,为了温故所以写篇Canny,有不做和错误的地方欢迎指征。

首先介绍一下Canny对边缘检测质量进行分析提出了三个原则:1.信噪比准则、2.定位精度准则、3.但边缘响应准则,具体什么意思这里就不贴了。边缘检测算法难点在于需要在排除噪声和精准定位方面,正所谓鱼和熊掌不可兼得。Canny算子可以在这两者之间比较好的折衷

算法步骤

(1)用高斯滤波器平滑图像

这里为什么用对图像进行平滑,有一种解释是在后期边缘检测的时候可以获得比较圆润的边缘,坑击噪声对图像的干扰

Canny边缘检测算子原理

(1)是高斯函数,但是在canny算子中用的是不带系数的高斯函数,G(x,y)=F(x,y)*H(x,y),G为滤波后的图像,F为原始图像

(2)用一阶偏导的有限差分计算梯度幅值和方向

Canny边缘检测算子原理

(2)数学表达式

Canny边缘检测算子原理

(3)计算模板

Canny边缘检测算子原理

(4)计算梯度幅值和方向

附:在canny算子中使用的是一阶偏导如(2),二阶偏导的数学表达式:f(x+1)-f(x)-(f(x)-f(x-1))=f(x+1)+f(x1)-2f(x)

(3)对梯度幅值进行非极大值抑制

在http://blog.csdn.net/xiaxiazls/article/details/47841435这篇文章中的这部分介绍很详细。要进行非极大值抑制,就首先要确定像素点C的灰度值在其8值邻域内是否为最大。图1中蓝色的线条方向为C点的梯度方向,这样就可以确定其局部的最大值肯定分布在这条线上,也即出了C点外,梯度方向的交点dTmp1和dTmp2这两个点的值也可能会是局部最大值。因此,判断C点灰度与这两个点灰度大小即可判断C点是否为其邻域内的局部最大灰度点。如果经过判断,C点灰度值小于这两个点中的任一个,那就说明C点不是局部极大值,那么则可以排除C点为边缘。这就是非极大值抑制的工作原理。

Canny边缘检测算子原理

(4)用双阈值方法检测和连接边缘

使用两个阈值T1和T2(T1<T2),首先使用高阈值得到一个边缘图像,但是该边缘图像由于采用的是高阈值,所以存在不连续的情况比较多,这个时候在高阈值边缘图像的端点8领域处寻找可以连接的到轮廓上的边缘,当满足阈值T1时连接。

继续阅读