分享

canny算子

 学海无涯GL 2012-09-10

canny算子

分类: 图像处理 37人阅读 评论(0) 收藏 举报
canny算子????

1. Canny边缘检测基本原理

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

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

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

2. Canny边缘检测算法

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

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

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

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

step1:高斯平滑函数

Step2:一阶微分卷积模板

step3:非极大值抑制

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

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



图1非极大值抑制

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

即:

Step4:阈值化

减少假边缘段数量的典型方法是对N[ij]使用一个阈值。将低于阈值的所有值赋零值。但问题是如何选取阈值?

解决方法:双阈值算法。双阈值算法对非极大值抑制图象作用两个阈值τ1τ2,且2τ1≈τ2,从而可以得到两个阈值边缘图象N1i,j]和N2ij]。由于N2ij]使用高阈值得到,因而含有很少的假边缘,但有间断(不闭合)。双阈值法要在N2ij]中把边缘连接成轮廓,当到达轮廓的端点时,该算法就在N1i,j]的8邻点位置寻找可以连接到轮廓上的边缘,这样,算法不断地在 N1i,j]中收集边缘,直到将N2i,j]连接起来为止。

前两步比较简单,实现的关键在于后两步。这里对第二步也概括的说一下,求纵横梯度的算子是很多的,像3×3的sobel算子,其卷积核是 [1,0,-1;1,0,-1;1,0,-1]和[1,1,1;0,0,0;-1,-1,-1];2×2的robert算子,其卷积核是 [1,-1;1,-1]和[1,1;-1,-1]。而我们学习matlab中canny检测的算法,在第一步滤波和第二步求纵横梯度时用的都是高斯模版。注意,滤波的模版系数之和为1,求梯度的模版系数之和为0,这是卷积模版的一个规律。我们滤波和求梯度的模版都是二维的高斯模版,但是用纵横2次两个一维的高斯卷积模版进行卷积可以达到和一个二维模版一样的效果,同时减小了总计算量,所以,在第一步滤波的时候我们用两个一维高斯模版代替一个二维高斯模版,但是第二步的高斯模版牵扯到梯度方向,所以还是用一个二维的高斯模版来直接卷积。

第3步的非极大抑制要用到第2步得到的3个梯度图,其实第2步的“综合梯度图”已经可以看出图像边缘的轮廓了,只是边缘较粗且我们还没有对此梯度图上的边缘强度进行二值化(因为后面还有双阈值),这里的边缘含有大量的“假边缘”,它们的灰度值可能不如真边缘大,但是一个渐近的变化过程,非极大抑制的目的就是结合“梯度方向”和“梯度强度”去除这些“假边缘”。

第4步的边缘连接,其实是强边缘到弱边缘的连接,我们经过第3步,得到一个二值化的“非极大抑制后的边缘图”,它和第二步得到的“综合梯度图”不同,一是去掉了大量伪边缘,二是它已经二值化了边缘灰度是统一的。这时,为什么我们还需要第4步?我在上面开始时的总结处说是为了进一步去除假边缘,这是有道理的,只不过这里的“假边缘”和第三步要去的“假边缘”性质不同,第3步处的假边缘可以理解成是真正依附在真边缘周围的假边缘(这样的边缘在第3步后就剩下很细的真边缘),甚至是依附在假边缘周围的假边缘(这样的边缘全是假边缘,经过第3步还会剩下一部分假边缘),两者中的后者正是第4步要处理的,第4步最重要的参数是两个自适应的阈值,所以说第4步对假边缘的鉴定是根据其灰度是否太弱来确定的(小于强阈值),而不是像第3步那样,鉴定的依据是其灰度值与周围灰度值的比较。在经由强阈值确定了真边缘后,再利用弱阈值对真边缘进行连接处理,以保证边缘的顺滑真实。注意,第4步的“连接方法”是自定义一个“染色的嵌套函数”来对一个点的8邻域点进行染色操作,这种编程方法对图像中具有相同性质(灰度值等)的联通区域进行染色操作是很有用的。

3. canny算法程序实现

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

l 生成高斯滤波系数;

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

l 求滤波后图像的梯度;

l 进行非最大抑制;

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

l 利用函数寻找边界起点;

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

    本站是提供个人知识管理的网络存储空间,所有内容均由用户发布,不代表本站观点。请注意甄别内容中的联系方式、诱导购买等信息,谨防诈骗。如发现有害或侵权内容,请点击一键举报。
    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多