APP下载

一种改进的图像骨架提取算法

2018-10-19叶福玲

关键词:毛刺细化像素点

叶福玲

(福州大学a.数学与计算机科学学院;b.网络信息安全与计算机技术国家级实验教学示范中心,福州 350116)

0 引言

随着图像识别技术的进步和计算机性能的发展,机器视觉领域重要的研究方向之一就是基于骨架的识别技术。骨架作为一种能够使图像降维的有力手段,能够保持与原图像相同的拓扑结构,存于对称轴上,减少冗余干扰信息。对于图像本身来说,它的整体框架和边界信息能够被保存下来,为识别保留了最关键的部分。

H.Blum最早提出中轴算法[1-2],即对于区域内的每一个点,在边界中搜索到的最近的点多于一个时,则该点为图像的骨架单元。但该方法比较费时,且对噪声比较敏感,不能保证骨架线的连通。Dey等[3]通过构造模型的 Voronoi图得到了近似中轴的骨架,但该方法仅适用于比较简单的骨架提取,对复杂的模型并不适用,且对边界噪声也很敏感。曹铁勇[4]提出了一种基于势能平衡方式的二值图像骨架抽取算法。该方法将边界点作为零势能的等势点,计算出处于势能平衡点上的基本骨架点,由此构建出的骨架,抗噪能力较强,但参与计算的边界点的半径较难确定。刘俊涛等[5]提出的梯度最短路径的算法,首先计算物体距离变换的梯度,用搜索梯度最短路径的方法来连接关键点,得到物体的线形骨架。该方法得到的线形骨架能很好地反映物体拓扑和形状特征,并不易受边界噪声干扰。

本文引入Zhang-Suen[6]提出的以四个判别条件来判断当前点是否为可删除点的方法。通过分析并发现了该算法的不足之处,提出了一种提取图像骨架的改进算法。首先,根据提取的骨架特点设计细化模板,将骨架进行细化并且保持骨架的连通性和满足单像素,便于后续处理;其次,利用8邻域像素找出骨架的分支点,骨架减去分支点形成多个不连通区域,根据骨架特点选择不同的阈值,去除小于该阈值的连通分支,从而去除骨架毛刺,该步骤高效地除去了多余的噪音和毛刺,优化了骨架的整体视觉效果。

2 改进的图像骨架提取算法

Zhang算法[6]能够充分考虑到图像骨架的连通性,并且对于有弧度的曲线、拐点以及交叉点,都能够比较精确的提取出来,使得骨架与原图像保持相对一致的结构,效果较好。但是由于不同图像的特点以及该算法对边界敏感,细化之后得到的骨架会有多余的像素,不符合单像素骨架,且有部分毛刺没有能够识别出来。因此,本文在这个方法的基础上,对提取出来的骨架进行进一步完善,删除多余像素以及识别并消除毛刺。本文针对不足之处主要从细化单像素和去除毛刺两方面入手,使得提取出来的骨架能够更好符合单像素和光滑性,更加符合视觉感受。

2.1 骨架细化为单像素

将使用Zhang算法细化后的骨架图像放大,我们可以发现提取出来的骨架并没有满足单像素的原则。通过仔细分析Zhang的算法思想和原理,我们可以得知:非单像素是由于冗余点没有满足S(P)=1而没有被删除,使得骨架不满足单像素。本文在Zhang细化算法得出的骨架的基础上,设计了用于细化的模板来判断该点是否为冗余点,从而决定像素点的保留或者删除,使得得到的骨架线条能够符合单像素[7-9]。

单像素算法是基于如图1所示模板。假设当前的目标色为像素点P,它的8领域为Pi=(1≤i≤8)。若P的8领域满足图1(b)的模板,即以P为目标点,若它的邻域P3、P5为目标点,则将该目标像素P删去(即设为背景点),细化模板中的*号表示的是该位置可以为目标点或者背景点。同时该细化模板还包括逆时针旋转90°,180°,270°的情况。

图1 细化算法的模板说明

单像素细化算法实现具体步骤:1.扫描整幅已用Zhang细化算法得到的细化效果图;2.若遇到当前点为目标点,检索8邻域是否符合细化模板;若符合细化模板,则将该目标像素点置为背景点,否则不做改动;3.重复步骤2直到扫描完整幅图像,输出图像。

下面是采用该算法细化成单像素的效果与Zhang快速并行细化算法得到的细化的骨架进行对比,如图2所示,前面为改进前的,后面为改进后的效果。

图2 单像素细化前后效果对比

2.2 去除多余的骨架毛刺

仔细观察毛刺会发现,毛刺的长度一般难以归纳,但是相对骨架中心来说,毛刺的长度显得短许多[10-12]。利用这个特性,统计目标像素8邻域中值为1的像素点,然后确定相对目标像素点的类型,形成的多个不连通区域,利用图像特点来定义毛刺的特征,将像素点少的区域删除来消除毛刺,对骨架进行改进和完善。改进的去除毛刺的具体实现步骤如下:

1.在2.1所得到的细化为单像素的骨架之后,设改进后的骨架图像为f(x,y),对于目标像素点i即f(xi,yi)=1,计算点i的8邻域模板中的目标像素和,计入counti中。对每一个像素进行该操作直到所有的像素计算完毕。

2.分析counti的值,若counti>3,说明该点至少有3个方向有目标,则该点是分支点,记录在Pi中;

3.在改进后的骨架图像f(x,y),减掉分支点的像素,这样一来原本连通的区域会变成多个不连通的小区域。对区域进行标记,从而得到标记后的不连通图g(x,y)。

4.对于不连通的标记图g(x,y),从顶点出发计算不连通区域的长度,由于在单像素图像上面进行计算,计算长度也就是计算面积即连通区域的像素和,记为Li。

5.设置阈值的大小T,若Li≤T,则删去该小区域;否则,不作处理。

6.将刚才所删除的分支点恢复,使图像变为连通的区域,这样就得到了去除了毛刺的骨架效果图,并且重复步骤5的操作,得出精确的骨架图。

3 实验结果与分析

在实验中,原始图像首先采用的是Zhang细化算法来提取得到的骨架,如图3所示。

图3 算法改进效果图

由以上4幅图像可以看出,图3中用经典的Zhang细化算法来提取的骨架数字和字母上面会有长度不等的毛刺,影响整体骨架的视觉感官。根据上面的实验结果可以明显看出:利用骨架单像素后再去除毛刺,图3(d)上面的毛刺相比图3(b)来说减少了很多,使骨架更加接近真实,骨架效果更好。本文在处理毛刺的过程中根据图像的特点,通过反复多次实验,得到不同的合理阈值,能够灵活地应用在各毛刺类型不同的图像上面,显示出重要的实用性。

图4 火烈鸟提取

图5 航拍河流提取

图6 脑血管的骨架线提取

图7 文字骨架提取

为了验证改进算法的有效性,下面将算法应用在其他方面的图像,实验效果如图4~7所示。

根据以上4个实验的效果对比可以看出,改进算法比Zhang细化算法的效果更好,通过对阈值的设定来定义毛刺,能够有效地去除毛刺且保持骨架的连通性以及主干骨架的存在。对于同一图像,阈值设置的大小不同,骨架的最终提取效果也会有差异,因此需要尝试阈值来提取最佳的骨架图像。

4 结语

本文在深入研究Zhang细化算法的基础上,针对图像骨架没有单像素化以及毛刺没有有效处理的问题,进行了算法的优化和改进,并用MATLAB将其实现。通过实验的分析和对比,可以看出改进的算法能够有效的去除毛刺,优化骨架的视觉美感,效果优于Zhang细化算法。此外,论文利用指定模板来决定像素点的保留或者删除,还存在一定的局限性,今后将进一步研究这方面的工作。

猜你喜欢

毛刺细化像素点
阀芯去毛刺工艺研究
基于局部相似性的特征匹配筛选算法
一种铸铁钻孔新型去毛刺刀具的应用
一种筒类零件孔口去毛刺工具
基于5×5邻域像素点相关性的划痕修复算法
中小企业重在责任细化
“细化”市场,赚取百万财富
基于canvas的前端数据加密
可抑制毛刺的钻头结构
“住宅全装修”政策亟需细化完善