应用光学, 2020, 41 (2): 302, 网络出版: 2020-04-23  

基于干涉条纹骨架的毛刺去除算法 下载: 640次

Burr removal algorithm based on interference fringe skeleton
作者单位
福建师范大学 医学光电科学与技术教育部重点实验室 福建省光子技术重点实验室,福建 福州 350007
摘要
精确去除骨架毛刺是干涉条纹骨架提取的最为关键的一个环节,可以应用于激光的干涉条纹检测。提出一种基于骨架特征的去除干涉条纹骨架毛刺算法,算法的主要方案包括:获取骨架的特征点、八邻域链表追踪。首先对像素点进行逐个扫描,获取骨架的4种特征点:端点、节点、毛刺点、主干点,其次使用基于特征点的八邻域链表算法提取所有毛刺点、主干点,然后基于节点进行差分运算并剔除毛刺,最后对处理后的图像进行迭代处理直到干涉条纹骨架毛刺完全去除。利用OpenCV机器视觉算法对毛刺图像去除进行仿真,得到的结果通过1 000个毛刺图片验证,毛刺去除的正确率达到94%。该算法相较于传统方案具有较高的针对性,保留骨架主干部分,去除其余毛刺部分,在干涉条纹检测方面具有广阔的应用前景。
Abstract
Accurate removal of the skeletal burrs is the most critical step in the extraction of interference fringe skeleton, which can be applied in laser interference fringe detection. A burrs removal algorithm of interference fringe skeleton based on skeleton features is proposed,which includes the acquisition of feature points of skeleton and the tracking of the eight-neighborhood linked list. First, the pixel points are scanned one by one to obtain the four feature points of the skeleton: endpoints, nodes, glitch points, and backbone points. Then, the algorithm of eight neighborhood linked list based on feature points is used to extract all the glitch points and backbone points, and the difference operation was performed based on nodes to remove the burrs. Finally, the processed image is iterated until the interference fringe skeleton burrs are completely removed. The OpenCV machine vision algorithm was used to simulate the burrs image removal, the results were verified by 1 000 pieces of burrs images, and the correct rate of burrs removal is 94%. Compared with the traditional scheme, the proposed algorithm has a higher pertinence, retains the backbone of the skeleton, and removes the remaining burrs, which has a broad application prospect in interference fringe detection.

1 引言

毛刺去除是将骨架的主干保留,去除骨架中的毛刺部分,在图像处理领域应用广泛,常用于干涉条纹检测、指纹识别、字符检测等多个领域。干涉条纹骨架记录了干涉场的所有干涉条纹的分布特征与状态特征。传统的骨架去除算法[1-2]需要设定阈值来判断毛刺去除条件,但是对于部分毛刺可能会出现不满足阈值设定的条件,无法消除干涉条纹骨架的毛刺部分,且毛刺可能出现较为复杂的情况,传统算法也可能无法解决这些情况的干涉条纹骨架图像处理问题[3]

干涉条纹图像是两束相干性较强的光波(多用于激光)进行干涉行为产生的现象,而干涉条纹骨架最大程度细化了干涉条纹,保留了干涉条纹最基础的信息:分布与状态。骨架分布表示干涉条纹的分布情况,骨架状态表示干涉条纹的长度、拓扑性[4]等特征。在图像分割算法正确的前提下,大部分的毛刺是由于背景噪声的干扰而产生的,而且毛刺的长度是无法确定的。另外,主干、毛刺的顶端也有可能存在其他毛刺,这种情况使得传统的去除毛刺方案非常不理想,甚至出现方案错误处理的情况。因此,本文针对单像素骨架图像提出一种基于骨架结构的毛刺去除算法,以适应各种不同状态、特征的毛刺,并在去除毛刺的同时保留骨架主干部分。本文提出的算法包含2个方面:1) 通过干涉条纹骨架图,利用骨架特征点对图像区域进行分类;2) 利用骨架特征点追踪出所有毛刺点并予以删除处理,当出现较为复杂的骨架特征时,利用多种类型综合定义该特征并予以区分。毛刺去除的难点在于需要保留主干部分、去除毛刺部分,这里需要考虑到多种复杂类型毛刺的层次关系,避免出现毛刺处理错误的情况。本文利用迭代算法逐次去除某一层次毛刺,确保复杂情况下的干涉条纹骨架毛刺能够通过正确的顺序进行去除。最后基于OpenCV库对多个毛刺样本进行同时仿真处理,并依据最终处理的结果提出合理的改进意见。

1 干涉条纹骨架毛刺去除算法原理

本文算法主要框架:分析拓扑特征、毛刺分组、去除毛刺、迭代判断。第1步,对图像进行预处理并根据预处理后的骨架毛刺特征选取出端点、节点。第2步,通过端点与方向链码遍历出所有毛刺点,并根据节点对毛刺分组。第3步,对同一节点的所有毛刺组进行差分运算并去除毛刺,保留主干部分。第4步,对处理后的图像重新进行拓扑分析,判断是否完全除去了毛刺点。

1.1 骨架毛刺特征分析

在单像素骨架图像中,根据八邻域范围内的特征对骨架图像进行拓扑分析。定义本身是骨架点而且在八邻域中有且只有1个相连点的像素为端点,定义本身是骨架点而且在八邻域有且只有2个不相邻点的像素为骨架点。对于其他简单骨架毛刺情况,定义本身是骨架点且八邻域中有大于等于3个相连点的像素为可疑节点,如果可疑节点的八邻域中没有其他可疑节点,那么该点定义为真节点,否则将一个八邻域中有4个或4个以上的可疑点的像素作为真节点,其他作为假节点。一般骨架毛刺的情况如图1所示。

图 1. Characteristic points of interference fringe skeleton burrs

Fig. 1. Characteristic points of interference fringe skeleton burrs

下载图片 查看所有图片

图1中:G为骨架点,D为端点,F为假节点,P为真节点,整个干涉条纹都可以通过这些干涉条纹骨架特征点进行划分。而毛刺点、骨架主干点都可以通过拓扑特征与这些特征点相关联。面对多种其他的复杂毛刺情况,根据对蔡超等[5]的文献进行研究,加入了多种其他复杂的骨架毛刺特征样本,如图2所示。

图2中:F为假节点,P为真节点,其他数值为1的是骨架点。图1图2能够比较详细地表示毛刺的大部分状态。本文基于迭代模式进行多级去除骨架毛刺,但是只有基于骨架毛刺的特征点选取正确,才能有效去除毛刺。

图 2. Characteristic structure of complex burrs

Fig. 2. Characteristic structure of complex burrs

下载图片 查看所有图片

1.2 去除毛刺算法

本文提出一种基于节点的迭代去除毛刺算法,需要考虑以下几个方案。

1) 判断迭代终止条件。迭代终止意味着一条干涉条纹骨架处理完毕。如果一个干涉条纹骨架只有一条主干、多个毛刺组成,不存在骨架主干分支部分,那么迭代终止条件为

$ flag = \left\{ {\begin{array}{*{20}{l}} \!\!\!\!\! {\begin{array}{*{20}{c}} {1,}&{endpoint = 2} \end{array}} \\ \!\!\!\!\! {\begin{array}{*{20}{c}} {0,}&{endpoint > 2} \end{array}} \end{array}} \right. $

式中: $flag$为迭代判断变量; $endpoint$为端点个数。当一条干涉条纹骨架只有2个端点时,则一条干涉条纹处理完毕,否则接着循环处理当前的干涉条纹骨架直到满足判断条件。

2) 选取毛刺并去除的方法。毛刺是由节点引出的一条细线,该细线是由干涉条纹图像的背景噪声造成的。通过端点可以利用方向链码[6]将毛刺追踪至节点,然后将同一节点下的所有毛刺、主干进行差分比较。当端点数个数大于3个时,保留像素点个数最多的骨架部分作为第一次处理结果;当端点个数等于3个时,删除像素点个数最少的毛刺;当对不同节点下的毛刺时,不进行差分比较处理。

$ Trunk = \left\{ {\begin{array}{*{20}{l}} \!\!\!\!\! {\begin{array}{*{20}{l}} {{\rm{Max}}(burr1,burr2, \cdots ,trunk),}\\ {burr1,burr2, \cdots ,trunk \supseteq P\& endpoint > 3} \end{array}} \\ \!\!\!\! {\begin{array}{*{20}{l}} {{\rm{Delete}}({\rm{Min}}(burr1,burr2,trunk)),}\\ {burr1,trunk1,trunk2 \supseteq P\& endpoint = 3} \end{array}} \end{array}} \right. $

式中: $Trunk$为保留下来的骨架; ${\rm{Max}}$为取最大骨架的函数; ${\rm{Delete}}$为删除处理的函数; ${\rm{Min}}$为取最小毛刺的函数; $burr1$$burr2$$trunk$为所有毛刺与主干; $P$为节点; $endpoint$为端点个数。该算法是基于干涉条纹骨架主干部分只有2个端点,其他端点是毛刺产生的。

3) 骨架主干与毛刺分类问题。如果存在复杂骨架的情况,在存在3个以上端点的情况下出现两个主干部分进行比较,采用阈值判断条件。阈值判断条件设置如下:

$ Trunk = \left\{ {\begin{array}{*{20}{l}} \!\!\!\!\! {\begin{array}{*{20}{l}} {{\rm{Skip\;processing}},}\\ {TN > 1\& endpoint > 3} \end{array}} \\ \!\!\!\!\! {\begin{array}{*{20}{l}} {{\rm{Max}}(burr1,burr2, \cdots ,trunk),}\\ {TN < = 1\& endpoint > 3} \end{array}} \end{array}} \right. $

式中: $Trunk$为保留下来的骨架; ${\rm{Max}}$为取最大骨架的函数; ${\rm{Skip\;processing}}$为跳过本次处理;burr1、burr2、trunk为同一节点下的所有毛刺与主干; $TN$为骨架主干个数。这种阈值判断的目的不是选取毛刺而是保存骨架主干。

4) 修复单条骨架断点部分的方案。如果干涉条纹骨架主干部分产生了断点,本文用基于八邻域的简单修复,修补方案如下:如果本身像素点不是骨架点,而且八邻域内存在2个对称的骨架点,则将本身像素点设置为骨架点(见图3)。

图中K周围存在2个对称的骨架点,这种情况将K点设置为骨架点,数值设置为1。这种基于模板的修补方案能够有效提升算法的容错性,并提升骨架样本进行仿真的鲁棒性。

5) 多条干涉条纹骨架毛刺处理方法。干涉条纹图像可能存在多个干涉条纹,细化得到的图像依旧是多个干涉骨架。多个干涉条纹骨架需要分级处理,首先对不同干涉条纹简单标定级次,提取不同级次的骨架图进行独立处理,单条骨架处理结果单独保存,直到所有骨架处理完毕之后将所有骨架图合并输出。

图 3. Repair scheme based on 8 neighborhood template

Fig. 3. Repair scheme based on 8 neighborhood template

下载图片 查看所有图片

根据以上所有方案,本文基于节点的迭代去除毛刺算法步骤如下:

1) 对干涉条纹骨架进行级次标记,对不同级次的骨架单独处理,并进行循环准备;

2) 首先设置迭代条件,并正确判断图内的所有干涉条纹骨架、端点、节点、断点;

3) 修补断点,并根据端点利用八邻域模板进行毛刺追踪到节点终止,并以节点保存所有毛刺、主干的长度与骨架点坐标;

4) 设置主干阈值条件,防止出现错误去除主干部分,并根据节点逐级对毛刺进行删除;

5) 去除毛刺结束后进行迭代判断,如果满足条件,跳出当前骨架处理进入下一条骨架进行处理,否则骨架没有处理完毕还存在其他毛刺接着跳至第3步进行迭代;

6) 所有干涉条纹骨架处理完毕,一起输出当前所有条纹骨架图片。

2 去除毛刺算法的仿真实验

实验采用Visual Studio 2017平台,采用OpenCV库[6]对图像进行形态学骨架提取,软件环境Windows7,硬件环境CPU为i7处理器。首先建立一个C++项目,并包含OpenCV的库目录,最后建立一个头文件和主程序文件。用imread函数[7]读取待处理的图像,并通过imshow函数进行复现[8]

首先对干涉条纹进行级次标定,单次级次标定采用种子点膨胀算法如下:

$ H = R_F^D(I) $

式中: $H$为单条骨架提取图像; $F$为骨架的原图像; $I$为设置的种子点; $D$为dilate膨胀处理; $R_F^D(I)$表示对种子点 $D$进行迭代膨胀处理,直到与种子点膨胀到与对应干涉条纹相同,一个种子点可以膨胀一条骨架,提取出一条骨架之后,要把原图像中的对应骨架去除以便进行下一次提取。种子膨胀提取算法如图4所示。

图 4. Seed expansion extraction algorithm

Fig. 4. Seed expansion extraction algorithm

下载图片 查看所有图片

选取出单条骨架之后,需要对骨架进行预处理防止出现非单像素宽度的问题,这里采用的是Zhang氏细化算法[9]、Rosen细化算法[10]。在此之后,进行图像骨架特征点[11]提取,根据本文第1节的骨架特征提取出端点、假节点、真节点。端点、节点的选取需要通过全图扫描逐点判断并标记,直到全图扫描完毕,如图5所示。

特征点选取出来之后,对所有端点进行链表追踪,追踪时面对复杂图像可能出现追踪过度或者追踪不足的情况,本文根据节点的特性[12],在追踪的算法中加入了以下判定条件:如果追踪点的八邻域中存在真节点,那么循环终止。这里有效利用了节点的特征,同时也为毛刺分类端点打下基础。

图 5. Feature points extraction

Fig. 5. Feature points extraction

下载图片 查看所有图片

根据节点对端点追踪到的毛刺、主干进行分类,如果多个毛刺、主干追踪到同一个节点那么多个毛刺、主干分步保存至OpenCV中的vectorPoint类中,这个类表示一个二重元胞[13],其中元胞内保存的是追踪毛刺点、主干点的坐标。根据节点与毛刺、主干的位置关系将毛刺、主干点的所有坐标保存在vector类的多维元胞中。然后根据第1章的方案进行差分比较去除毛刺,如图6所示。

单个条纹处理完毕之后,进行多个骨架迭代处理[14]直到所有干涉骨架都去除毛刺完毕才最终输出到最终结果上, 如图7所示。

图 6. Deburring

Fig. 6. Deburring

下载图片 查看所有图片

图 7. Final processing results

Fig. 7. Final processing results

下载图片 查看所有图片

3 结果分析

干涉条纹获取的实验装置有632.8 nm半导体激光器、扩束镜、偏振元件、分光棱镜、1/4玻片、待测元件、标准样板等。采用的算法是基于干涉条纹骨架的特征进行的毛刺去除算法,为了保证提出的算法具有合理性与普适性,本文用了多个样本进行算法处理,处理结果如图8所示。

对实例样本进行毛刺去除处理,对其处理结果进行验证:扫描处理结果图中的所有断点、分叉点(节点)、端点,如果处理结果图中每一条骨架主干只包含2个端点,没有断点、分叉点(节点),则处理结果正确,否则处理的结果错误。根据上述的验证方案,本文给出的实例测试结果都满足要求。为了验证算法的普遍性,对样本库中所有毛刺图像进行处理和验证,发现毛刺去除算法的正确率为94%。剩余6%的毛刺图像中包含了更加复杂的黏连情况,多条毛刺与其他骨架主干部分存在“黏连”,需要进行节点扫描,并运用八邻域追踪的处理,将毛刺黏连部分提取出来,再予以处理[15]

图 8. Processing results of multiple samples

Fig. 8. Processing results of multiple samples

下载图片 查看所有图片

通过上面多种骨架的验证,不难发现该种算法具有合理性与普适性。为了在保证处理结果不变的前提下,提升算法的容错性,防止出现主干中的单个像素识别错误当做毛刺处理了,本文添加了骨架修复[16]部分。传统的毛刺去除算法简单地将分叉点(节点)以外的主干、毛刺部分同时进行删减阈值长度,这种方案简便但具有盲目性,而本文中介绍的算法保留了骨架主干部分,具有较高的针对性,只去除骨架中的毛刺部分。

4 结论

本文根据骨架结构特征对干涉条纹骨架的主干、毛刺部分进行提取并差分比较,通过差分比较的结果进行骨架毛刺去除处理,提出一种识别多种特征点的思路,基于该思路进行毛刺图像分析。由于干涉条纹骨架可能存在多级毛刺且毛刺长度有长有短,本文基于节点分类的多个毛刺、骨架差分算法处理,相较于传统的阈值法去除毛刺更具有合理性。本文为预防处理不完整的情况设定了迭代循环去除毛刺,为预防处理过度的情况设定了主干修补模块,相较于传统固定模板的处理方案更加具有灵活应变能力与容错能力。不足之处在于骨架特征点的提取是否能够应对更为复杂的干涉条纹骨架毛刺样本,这个有待验证与提升。其次在于如果存在毛刺部分、主干部分长度相同但是形态不同的部分需要如何处理,这也有待新的算法提出。但是总体来说,本文算法能够处理大多数干涉条纹骨架毛刺图片,是一种行之有效的处理算法。

参考文献

[1] 王婉心, WANG Wanxin, 贾立锋, JIA Lifeng. The method of removing burrs in skeleton extraction[J]. Journal of Guangdong University of Technology, 2014, 31(4): 90-94.

[2] 宁亚辉, NING Yahui, 雷小奇, LEI Xiaoqi, 王功孝, WANG Gongxiao. Improved template-based method of burr removal[J]. Journal of Computer Applications, 2011, 31(z1): 58-59.

[3] 范志刚, FAN Zhigang, LI Runshun, 李润顺, 崔占华, CUI Zhanhua. Study on the processing method of interference fringe pattern[J]. Optic Technique, 2000, 26(5): 258-262.

[4] 唐晓强, TANG Xiaoqiang, 赖惠成, LAI Huicheng. Study on structure elements based on mathematical morphology[J]. Communications Technology, 2010, 43(7): 161-162.

[5] 秦筱楲, QIN Xiaowei, 蔡超, CAI Chao, 周成平, ZHOU Chengping. An algorithm for removing burr of skeleton[J]. Journal of Huazhong University of Science and Technology : Nature Science, 2004, 32(12): 28-31.

[6] 曹增强, CAO Zengqiang, FAN Zhongcheng, 范忠诚. An algorithm for fast eliminating image thorns[J]. Journal of Data Acquisition & Processing, 1992, 7(3): 235-240.

[7] 周山. 结合二值形态学的图象边缘检测方法及其MATLAB实现[D]. 上海: 华东师范大学, 2008.ZHOU Shan. Association of binary mphological image edge detection method realization of MATLAB[D]. Shanghai: East China Nmal University, 2008.

[8] 贾永红. 数字图像处理[M]. 武汉: 武汉大学出版社, 2003.JIA Yonghong. Digital image processing [M]. Wuhan: Wuhan University Press, 2003.

[9] 张翠芳, ZHANG Cuifang, 杨国为, YANG Guowei, YUE Mingming, 岳明明. Improving of Zhang parallel thinning algorithm[J]. Information Technology & Informatization, 2016(6): 69-71.

[10] 张胜军, ZHANG Shengjun, ZHAO Xueping, 赵雪萍. Study on the recognition method of digital symbol image skeleton based on morphology[J]. Computer Era, 2011(5): 38-39.

[11] 张斌, ZHANG Bin, 常森, CHANG Sen, WANG Ju, 王桔. Feature points extraction of laser vision weld seam based on genetic algorithm[J]. Chinese Journal of Lasers, 2019, 46(1): 80-90.

[12] 张永帅, ZHANG Yongshuai, YANG Guowei, 杨国威, 王琦琦, WANG Qiqi. Weld feature extraction based on fully convolutional networks[J]. Chinese Journal of Lasers, 2019, 46(3): 28-35.

[13] 李红云, LI Hongyun, YUN Lijun, 云利军, 高银, GAO Yin. Fog image enhancement algorithm based on boundary-limited weighted least squares filtering[J]. Chinese Journal of Lasers, 2019, 46(3): 247-255.

[14] 晁莹, CHAO Ying, GENG Guohua, 耿国华, 张雨禾, ZHANG Yuhe. Point cloud skeleton extraction algorithm based on region segmentation[J]. Computer Engineering, 2017, 43(10): 222-227, 233.

[15] 王艳, WANG Yan, SHEN Xiaoyu, 沈晓宇, 丁文胜, DING Wensheng. New crack detection method of concrete bridge based on PCNN and genetic algorithm[J]. Application Research of Computers, 2017, 34(10): 3197-3200.

[16] 宰柯楠, ZAI Kenan, 徐江峰, XU Jiangfeng. Method of crack detection based on genetic algorithm and simplified pulse coupled neural network[J]. Application Research of Computers, 2017, 34(6): 1885-1888.

梅启升, 王敏, 梁秀玲. 基于干涉条纹骨架的毛刺去除算法[J]. 应用光学, 2020, 41(2): 302. Qisheng MEI, Min WANG, Xiuling LIANG. Burr removal algorithm based on interference fringe skeleton[J]. Journal of Applied Optics, 2020, 41(2): 302.

引用该论文: TXT   |   EndNote

相关论文

加载中...

关于本站 Cookie 的使用提示

中国光学期刊网使用基于 cookie 的技术来更好地为您提供各项服务,点击此处了解我们的隐私策略。 如您需继续使用本网站,请您授权我们使用本地 cookie 来保存部分信息。
全站搜索
您最值得信赖的光电行业旗舰网络服务平台!