赞
踩
图像细化(Image Thinning),一般指二进制图像的骨架化(Image Skeletonization) 的一种操作运算。细化是将图像的线条从多像素宽度减少到单位像素宽度过程的简称;骨架提取与图像细化类似,都是指将二进制图像中一部分像素去掉后,剩下的像素仍然能保持原来的形状,形成图像的骨架。
Zhang-Suen算法是一种经典的细化算法,后续很多的算法是在其基础上进行改进的。在很多的图像处理库(scikit-image, OpenCV)中,该算法都被广泛的使用。
目录
用骨架来表示线划图像能够有效地减少数据量,减少图像的存储难度和识别难度。线划图(包括纸质地图、线画稿、手绘图等)的存储是非常麻烦的,存储和使用起来都很不方便。例如,一张A4大小的线划图存储需要1M的容量,另外一些比较严重的问题就是数据的修改、更新和显示。矢量化是解决这些问题的方法,但这些图的宽度经常是大于一个像素的,这会导致矢量化结果有非常大的问题,为了解决这些问题,细化就成了模式识别和矢量化的先决条件。
所谓的细化就是经过一层层的剥离,从原来的图中去掉一些像素,但仍要保持原来的形状,直到得到图像的骨架。骨架,可以理解为图象的中轴。
好的细化算法一定要满足:
- 收敛性;
- 保证细化后细线的连通性;
- 保持原图的基本形状;
- 减少笔画相交处的畸变;
- 细化结果是原图像的中心线;
- 细化的快速性和迭代次数少;
细化技术的一个主要应用领域是位图矢量化的预处理阶段。相关研究表明,利用细化技术生成的位图的骨架质量受到多种因素的影响,其中包括图像自身的噪声、线条粗细不均匀、端点的确定以及线条交叉点选定等,因而对线划图像进行细化从而生成高质量骨架的方法进行研究具有现实意义。但与此同时,细化技术并不是绝对有效的:
(1)并非所有形状的图像都可以或者应该细化。细化比较适合由线条组成的物体,例如圆环,但实心圆不适合细化。
(2)任何一种细化方法都不能适用所有的情况。
(3)细化是提取骨架的过程,所提取的骨架必须有实质的意义,而不是由所使用的细化算法来定义骨架。
Zhang-Suen算法是一种经典的细化算法,后续很多的算法是在其基础上进行改进的,来自于T. Y. ZHANG 和 C. Y. SUEN 于1984年在 IPCV(Image Processing and Computer Vision)中发表的论文 " A Fast Parallel Algorithm for Thinning Digital Patterns " 。在很多的图像处理库(scikit-image, OpenCV)中,都被广泛的使用。
Zhang-Suen 算法每运行一次,都需要遍历所有的不为0的像素。在对每个像素(P1)进行删除或保留的判断时,我们需要关注其周围的8个邻居像素(P2, P3, P4, P5, P6, P7, P8)的值。其中 P2 到 P8 的顺序是算法规定,用于判断,共分为两个步骤来判断该点是否需要删除。
判断该点是否满足以下所有条件,如果满足则删除,否则保留。
- 2 ≤ B(P1) ≤6
- A(P1) = 1
- P2 ∗ P4 ∗ P6 = 0
- P4 ∗ P6 ∗ P8 = 0
其中A(P1) 是指从P2到P8从0到1跳变的次数,B(P1) 代表着 8 个邻居中非零邻居的数量。
例如下图中,A(P1) = 2,B(P1) = 3。
判断该点是否满足以下所有条件,如果满足则删除,否则保留。
- 2 ≤ B(P1) ≤6
- A(P1) = 1
- P2 ∗ P4 ∗ P8 = 0
- P2 ∗ P6 ∗ P8 = 0
两个阶段只有后两步有所不同。
阶段一的第3步和第4步是为了移除东侧和南侧的边界线上的点,和西北角上的角落点。
阶段二的第3步和第4步是为了移除西侧和北侧的边界线上的点,和东南角上的角落点。
东南西北的描述如下图所示。
算法需要不断地迭代阶段一和阶段二,直到某个阶段没有新的像素被删除,算法结束。在每次迭代时,算法需要维护两个原图像大小的存储空间,一个用于保存输入图像,另一个则保存遍历过没有被删除的非零点,即新图像。
算法的实现流程,用逻辑框图表示:
最终实现效果:
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。