OpenCV学习(14) 细化算法(2)

      前面一篇教程中,咱们实现了Zhang的快速并行细化算法,从算法原理上,咱们能够知道,算法是基于像素8邻域的形状来决定是否删除当前像素。还有不少与此算法类似的细化算法,只是判断的条件不同。在综述文章, Thinning Methodologies-A Comprehensive Survey中描述了各类细化算法的实现原理,有兴趣能够阅读一下。算法

      下面看看图像细化的定义以及细化算法的分类:编码

图像细化(Image Thinning),通常指二值图像的骨架化(Image Skeletonization) 的一种操做运算
     所谓的细化就是通过一层层的剥离,从原来的图中去掉一些点(一般是轮廓上的点),但仍要保持原来的形状,直到获得图像的骨架。
3d

     骨架,能够理解为图象的中轴,以下面的字母H,白色的线即为起中轴,该中轴也能够称做H的骨架。blog

image
好的细化算法必定要知足下面几个条件:
教程


  • 收敛性保证细化后细线的连通性保持原图的基本形状减小笔画相交处的畸变细化结果是原图像的中心线
    细化的快速性和迭代次数少。


依据是否使用迭代运算能够分为两类:
非迭代算法:一次即产生骨架,如基于距离变换的方法,游程编码细化等。
迭代算法:即重复删除图像边缘知足必定条件的像素,最终获得单像素宽带骨架。索引


迭代方法依据其检查像素的方法又能够再分红两类:
串行算法:是否删除像素在每次迭代的执行中是固定顺序的,它不只取决于前次迭代的结果,也取决于本次迭代中已处理过像素点分布状况。
并行算法:像素点删除与否与像素值图像中的顺序无关,仅取决于前次迭代的结果。get

 

经常使用的迭代算法包括:Hilditch、Pavlidis、Rosenfeld细化算法以及基于索引表查询的细化算法等等。it

 

Hilditch算法使用于二值图像,该算法是并行串行结合的算法。
Pavlidis算法经过并行和串行混合处理来实现,用位运算进行特定模式的匹配,所得的骨架是8链接的,用于0-1二值图像。
Rosenfeld算法是一种并行细化算法,所得的骨架形态是8-链接的,使用于0-1二值图像。io

索引表细化算法:通过预处理后获得待细化的图像是0、1二值图像。像素值为1的是须要细化的部分,像素值为0的是背景区域。基于索引表的算法就是依据必定的判断依据,所作出的一张表,而后根据要细化的点的八个邻域的状况查询,若表中元素是1,若表中元素是1,则删除该点(改成背景),如果0则保留。由于一个像素的8个邻域共有256中可能状况,所以,索引表的大小通常为256,索引表细化算法速度很快。原理

相关文章
相关标签/搜索