canny算子原理分析

1. Canny边缘检测基本原理

 

(1)图象边缘检测必须满足两个条件:一能有效地抑制噪声;二必须尽量精确确定边缘的位置。

(2)根据对信噪比与定位乘积进行测度,得到最优化逼近算子。这就是Canny边缘检测算子。

(3)类似与MarrLoG)边缘检测方法,也属于先平滑后求导数的方法。

 

2. Canny边缘检测算法

     step1:用高斯滤波器平滑图象

     step2:用一阶偏导的有限差分来计算梯度的幅值和方向

     step3:对梯度幅值进行非极大值抑制

     step4:用双阈值算法检测和连接边缘

 

step1:高斯平滑函数

(可以理解下维基百科上关于卷积函数的定义,如下图移动的红色窗口代表我们的高斯和函数,蓝色为图像灰度函数)

通过高斯函数产生k*k的模板如3*3

 

用这个模板对每个像素进行加权平均

 

Step2:一阶微分卷积模板

step3:对梯度幅值进行非极大值抑制

      仅仅得到全局的梯度并不足以确定边缘,因此为确定边缘,必须保留局部梯度最大的点,而抑制非极大值。(non-maxima suppression,NMS

解决方法:利用梯度的方向。



 

图1非极大值抑制

四个扇区的标号为03,对应3*3邻域的四种可能组合。在每一点上,邻域的中心象素M与沿着梯度线的两个象素相比。如果M的梯度值不比沿梯度线的两个相邻象素梯度值大,则令M=0

即: 


 Step4:用双阈值算法检测和连接边缘:  

  对非极大值抑制图像作用两个阈值th1和th2,两者关系th1=0.4th2  。我们把梯度值小于th1的像素的灰度值设为0,得到图像1。然后把梯度值小于th2的像素的灰度值设为0,得到图像2。由于图像2的阈值较高,去除大部分噪音,但同时也损失了有用的边缘信息。而图像1的阈值较低,保留了较多的信息,我们可以以图像2为基础,以图像1为补充来连结图像的边缘。

  链接边缘的具体步骤如下:

  对图像2进行扫描,当遇到一个非零灰度的像素p(x,y)时,跟踪以p(x,y)为开始点的轮廓线,直到轮廓线的终点q(x,y)。

   考察图像1中与图像2中q(x,y)点位置对应的点s(x,y)的8邻近区域。如果在s(x,y)点的8邻近区域中有非零像素s(x,y)存在,则将其包括到图像2中,作为r(x,y)点。从r(x,y)开始,重复第一步,直到我们在图像1和图像2中都无法继续为止。

   当完成对包含p(x,y)的轮廓线的连结之后,将这条轮廓线标记为已经访问。回到第一步,寻找下一条轮廓线。重复第一步、第二步、第三步,直到图像2中找不到新轮廓线为止。

3. canny算法程序实现

   Canny算法程序中将上述的4个步骤再加以细分,分成以下7步:

生成高斯滤波系数;

用生成的高斯滤波系数对原图像进行平滑;

求滤波后图像的梯度;

进行非最大抑制;

l 统计图像的直方图,对阈值进行判定

利用函数寻找边界起点;

根据第6执行的结果,从一个像素点开始搜索,搜索以该像素点为边界起点的一条边界的一条边界的所有边界点;


参考:

http://blog.csdn.net/likezhaobin/article/details/6835049

http://blog.csdn.net/likezhaobin/article/details/6892176

http://blog.csdn.net/likezhaobin/article/details/6892629

http://www.cnblogs.com/cfantaisie/archive/2011/06/05/2073168.html


  • 2
    点赞
  • 26
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值