APP下载

基于改进ZS细化算法的指针骨架提取

2021-12-30欧阳华侯卓成李厚朴

自动化与仪表 2021年12期
关键词:毛刺指针邻域

胡 鑫,欧阳华,侯卓成,李厚朴

(海军工程大学 电气工程学院,武汉 430033)

在利用图像处理的方法对指针式仪表读数进行识别时,为了得到更为准确的读数值,需要使得指针图像的直线拟合的误差减小。这其中对于指针的细化处理这一步骤十分关键,指针细化的质量好坏直接影响着拟合直线的斜率。因此,对指针图像进行更好程度的细化具有重要意义[1-3]。

细化算法[4-5]根据迭代的方式可以将细化算法分成串行细化算法和并行细化算法。串行算法对于是否删除像素是之前所有迭代的结果和本次迭代中已处理过像素点情况的综合判定;并行算法当前迭代阶段像素点的删除仅取决于上一次迭代的结果。

现存的较为普遍的算法中,Hilditch[6]算法是

串行细化算法的一种,通过多次反复遍历图像进行迭代来删除满足条件的像素,此算法判断依据不够简洁有效,十分费时;Pavlidis[7]算法属于并行细化算法,通过两个模板之间的匹配逐层删除边界像素,此算法最后会使得骨架的冗余像素较多,细化效果不好;基于索引表[8]的算法即利用判定条件生成一张表,然后进行像素查询。此算法运行速度快,但是依赖于索引表的便利,也受限于索引表的信息,结果多出现毛刺和图像骨架畸变;ZS 细化算法[9-11]所代表的基于数学形态学的并行细化方法运行迭代少、速度快,骨架中直线、T 行交叉和拐角与原图像一致,因此更易于实现且计算简单。但是经过ZS 细化算法细化之后,会出现2 个问题:①骨架中会出现冗余像素,不能保证骨架为单像素宽;②骨架中会出现毛刺,影响图像整体的结构。

本文针对ZS 细化算法提取仪表盘上的指针图像骨架时出现的问题做出改进。针对指针细化中斜线时产生冗余像素这一问题引入斜线消除模板使得经过细化之后的骨架为单像素宽。并在此基础上引入路径规划[12-14]的思想,将毛刺看作错误的路径,将去毛刺问题转化为寻找最优路径的问题。通过分析分叉点的8 邻域,找到ZS 细化算法产生毛刺的原因,从而设置条件将错误路径删除,最后得到唯一一条最优路径,也就是没有毛刺的指针骨架,正确地突出指针的结构特征。

1 ZS 快速并行算法

设一个二值图像M,图像M 中的任意一个目标像素点为P0,为了更利于对算法过程进行描述,先给出几个基本概念:

1)8 邻域:与目标像素点P0相邻的8 个像素点所构成的1 个集合S={P1P2P3P4P5P6P7P8},8邻域的像素点围绕着P0以顺时针顺序依次排列,如图1所示。

图1 目标像素8 邻域Fig.1 Target pixel 8 neighborhood

2)目标点和背景点:二值图像中像素值为1 的像素点为目标点,像素值为0 的像素点为背景点。

3)分叉点:当P0的8 邻域内存在3 个及以上的目标点时,P0为分叉点。

4)边界点:8 邻域中至少存在1 个背景点的目标点。

ZS 细化算法是每次迭代分2 个子过程进行,通过不断执行逻辑运算来删除符合条件的非骨架点。其细化过程如下:

第1 步:设一目标点为P0,当其为边界点时,依次判断P0点是否满足以下条件:

条件1 中的N(P0)指的是点P0的8 邻域中属于目标点的个数;条件2 中的S(P0)指的是点P0的8 邻域按顺时针的顺序从P1到P8,这些像素点的值由0 跳变到1 的次数。

第2 步:

第2 步与第1 步的条件1 和2 都是一样,首先是保证了目标点P0的8 邻域中存在连通的目标点,在删除目标点P0后还依旧具备构成骨架的基础。这两个步骤的后2 个条件一共4 个公式的目的是标记8 邻域4 个角的非骨架像素点。

经典ZS 并行细化算法通过迭代这两个步骤,不断标记满足条件的像素点,最后将迭代过程中所标记的像素点全部删除,剩下的像素点构成新的骨架图像,从而达到细化的目的。

2 改进算法

对于处于倾斜状态的指针,ZS 细化算法并不能很好地彻底骨架化,会存在大量的冗余像素,使得细化的骨架达不到单像素宽,这也说明ZS 算法对斜线的细化能力还不够好;另外,细化后的指针骨架上存在着一些毛刺无法消除。为了解决对指针图像的细化过程中存在的问题,将对ZS 细化算法进行针对性的改进。

2.1 骨架单像素化

分析指针经过ZS 细化算法细化之后还存在非单像素宽的现象,其根本原因是两个步骤中的条件2:S(P0)=1 阻止了对这些像素点的删除,结果便造成了像素的冗余。针对此问题,设置4 个倾斜方向的删除模板,如图2和图3所示。对指针细化中可能会遇到的4 种倾斜情况时可删除像素点进行消除。

(1)引入8 邻域的东西南北方向,当像素直线为东北—西南走向时,其删除模板如图2所示的两种情况。

图2 删除模板1Fig.2 Delete template 1

(2)当像素直线为西北—东南走向时,其删除模板又如图3所示的两种情况。

图3 删除模板2Fig.3 Delete template 2

删除模板中的目标点P0应该满足以下条件:

通过上述4 个模板来消除指针细化过程中出现的冗余像素的情况,当目标点P0满足任意一种条件对应的模板,则将此目标点删除,以达到将指针骨架细化成单像素宽。

2.2 消除骨架毛刺

细化产生毛刺的原因是仪表表盘上的标志会与指针在二值化后形成连通区域,在跟随指针一同细化后便形成了指针骨架的毛刺,一定程度上对指针的形状特征造成影响。

在本文中,为了去除毛刺,引入了搜索最优路径的思想。将指针图像的细化骨架认为是唯一的最优路径,而毛刺则被认为是不同的分支路径。从而,去除毛刺的问题就被转化成为如何在有分支路的情况下选择出需要的那条最优路径的问题。

算法的核心思想是传递目标像素点,经过前面步骤的优化,指针图像被细化成单像素宽的骨架。将当前骨架点通过条件的判断传递至下一步,以此来搜索出最优路径。其判断依据是8 邻域的目标像素点个数。根据当前骨架点的8 邻域中目标点个数,分为几种情况展开讨论:

1)当8 邻域的目标点个数为1 时,可能为路径搜索的起点,也可能是任一一条路径的终点;

2)当8 邻域的目标点个数为2 时,此时的2 个目标像素点分别为当前骨架点的上一步和下一步,即表明搜索到下一个骨架点,可以继续传递;

3)当8 邻域的目标点个数为3 个以上时,表明当前骨架点为分叉点。

这里为了避免一次路径搜索过程中像素点的重复遍历,设定规则当前骨架点进行传递的下一步不得为上一个搜索骨架点。并且,为了解决在搜索到分叉点遇到的特殊情况,如图4所示,导致路径搜索陷入死循环,设定规则:当遇到分叉点时,当前骨架点进行传递的下一步也不得为上2 个搜索骨架点。

图4 特殊分叉点Fig.4 Special bifurcation points

整个去除毛刺过程的具体步骤如下:

步骤1遍历所得到的单像素宽指针细化图像,检测出指针骨架的起点和终点;

步骤2开始判断当前骨架点8 邻域中目标像素点的个数n,当n=2 时,即传递方向只有1 个,路径唯一,直接传递到下一步的目标像素点;当n>2时,即出现分支,传递方向不唯一,此时开始进行分支的逐一搜索。当被搜索的分支不为所需的主干骨架,则停止本次搜索,并将此分支去掉,然后开始新一轮的最优路径搜索;

步骤3重复执行步骤2,最后逐一将其余分支去除,搜索到唯一一条满足所有条件的路径,即可得到去除毛刺的单像素宽指针图像。

2.3 改进算法流程

此次改进算法主要分为3 个部分:①通过ZS细化算法得到指针的初步细化图像;②利用增加的删除模板,使得初步细化图像实现骨架单像素宽;③通过最优路径搜索的方式去除毛刺。算法工作流程如图5所示。

图5 算法工作流程Fig.5 Algorithm work flow chart

3 实验仿真

为了验证改进算法的细化效果,实验选取了50幅不同角度的仪表指针图像进行细化处理。将原图、ZS 细化算法和两次优化得到的指针细化图像进行对比。实验使用Matlab2017a 进行图像细化处理。部分图像的细化效果如图6所示。

图6 ZS 细化算法Fig.6 ZS thinning algorithm

由图6可知,经过ZS 细化算法处理过后,指针骨架的大致结构保持良好,但是从图中2 个选定区域可以得知,骨架还是存在着一些冗余像素没有去掉,无法实现单像素宽,并且存在着无法去除的毛刺。

骨架单像素化如图7所示,经过对ZS 细化算法的优化,针对指针而设定的规则使得冗余像素被完全去除,指针骨架实现单像素宽。

图7 骨架单像素化Fig.7 Skeleton single pixel

去除骨架毛刺如图8所示,通过改进算法的应用,成功去除了骨架上的毛刺,使得指针图像经过细化之后的骨架结构上更利于拟合成一条斜线。

图8 去除毛刺Fig.8 Deburring

将经过ZS 算法和两步的改进算法细化后得到的效果进行对比,得到具体情况如表1所示。

表1 细化效果比较Tab.1 Comparison of refinement effects

由表1信息可知,通过本文的两步改进,能够使得指针的细化效果达到最好,既为单像素宽也没有毛刺出现。当利用Hough 直线检测算法来进行指针直线的获取,能够得到更为准确的直线斜率值k,即拟合直线的偏转角更为准确,如图9所示。

图9 直线拟合Fig.9 Straight line fitting

设定指针式仪表的量程为a,拟合直线的偏转角为θ,则其读数的计算如式(13)所示:

4 应用验证

实验装置如图10所示。巡检机器人探头在吊轨上进行移动,进行指针式仪表图像的抓取,并将捕获的图像实时传给远程识别系统。并且根据识别出的读数结果进行分析。

图10 实验装置Fig.10 Experimental device

选取识别为量程650 V 的电压表,在实验过程中将随着电压不断增大,进行多次识别,并进行误差分析,将分别利用ZS 细化算法和改进的算法这两种细化方式参与仪表读数识别,从而验证改进算法的有效性,检测结果如表2所示。

表2 算法识别结果误差分析Tab.2 Error analysis of algorithm recognition results

从表2中可以得出,当使用ZS 细化算法,指针式仪表的识别示数与实际值的误差在-3.61~3.88 V之间,相对误差在3.4%以内,平均相对误差为1.21%;而当使用本文提出的改进算法,识别示数与实际值的误差在-2.73~3.64 V 之间,相对误差在2.47%以内,平均相对误差为0.99%。

两种算法的相对误差对比如图11所示,其中横坐标代表指针的角度,纵坐标代表相对误差,虚线代表运用ZS 细化算法,实线代表运用改进细化算法。从图中也能直观地看出,运用改进算法的读数相对误差在大体趋势上也是低于运用ZS 细化算法得到的读数相对误差。

图11 相对误差对比Fig.11 Comparison of relative errors

因此,通过运用改进的细化算法,指针读数识别的平均相对误差相比与ZS 并行细化算法降低了0.22%,有效提高了指针识别的精度。

5 结语

本文针对ZS 并行细化算法进行改进,以降低冗余像素和去毛刺为目的展开优化。通过引入删除模板得到单像素宽的细化骨架。改进的细化算法中的去毛刺这个步骤,结合了搜索最优路径的思想,依次搜索每条路径并判断是否最优,因此最后的效果较好,不会漏删毛刺。改进细化算法为后续指针直线拟合提高了精度,实验的验证也进一步表明了改进算法的有效性,具有一定的应用价值。

猜你喜欢

毛刺指针邻域
阀芯去毛刺工艺研究
一种铸铁钻孔新型去毛刺刀具的应用
稀疏图平方图的染色数上界
一种筒类零件孔口去毛刺工具
基于邻域竞赛的多目标优化算法
可抑制毛刺的钻头结构
为什么表的指针都按照顺时针方向转动
关于-型邻域空间
基于改进Hough变换和BP网络的指针仪表识别
ARM Cortex—MO/MO+单片机的指针变量替换方法