基于干涉条纹骨架的毛刺去除算法 下载: 640次
1 引言
毛刺去除是将骨架的主干保留,去除骨架中的毛刺部分,在图像处理领域应用广泛,常用于干涉条纹检测、指纹识别、字符检测等多个领域。干涉条纹骨架记录了干涉场的所有干涉条纹的分布特征与状态特征。传统的骨架去除算法[1-2]需要设定阈值来判断毛刺去除条件,但是对于部分毛刺可能会出现不满足阈值设定的条件,无法消除干涉条纹骨架的毛刺部分,且毛刺可能出现较为复杂的情况,传统算法也可能无法解决这些情况的干涉条纹骨架图像处理问题[3]。
干涉条纹图像是两束相干性较强的光波(多用于激光)进行干涉行为产生的现象,而干涉条纹骨架最大程度细化了干涉条纹,保留了干涉条纹最基础的信息:分布与状态。骨架分布表示干涉条纹的分布情况,骨架状态表示干涉条纹的长度、拓扑性[4]等特征。在图像分割算法正确的前提下,大部分的毛刺是由于背景噪声的干扰而产生的,而且毛刺的长度是无法确定的。另外,主干、毛刺的顶端也有可能存在其他毛刺,这种情况使得传统的去除毛刺方案非常不理想,甚至出现方案错误处理的情况。因此,本文针对单像素骨架图像提出一种基于骨架结构的毛刺去除算法,以适应各种不同状态、特征的毛刺,并在去除毛刺的同时保留骨架主干部分。本文提出的算法包含2个方面:1) 通过干涉条纹骨架图,利用骨架特征点对图像区域进行分类;2) 利用骨架特征点追踪出所有毛刺点并予以删除处理,当出现较为复杂的骨架特征时,利用多种类型综合定义该特征并予以区分。毛刺去除的难点在于需要保留主干部分、去除毛刺部分,这里需要考虑到多种复杂类型毛刺的层次关系,避免出现毛刺处理错误的情况。本文利用迭代算法逐次去除某一层次毛刺,确保复杂情况下的干涉条纹骨架毛刺能够通过正确的顺序进行去除。最后基于OpenCV库对多个毛刺样本进行同时仿真处理,并依据最终处理的结果提出合理的改进意见。
1 干涉条纹骨架毛刺去除算法原理
本文算法主要框架:分析拓扑特征、毛刺分组、去除毛刺、迭代判断。第1步,对图像进行预处理并根据预处理后的骨架毛刺特征选取出端点、节点。第2步,通过端点与方向链码遍历出所有毛刺点,并根据节点对毛刺分组。第3步,对同一节点的所有毛刺组进行差分运算并去除毛刺,保留主干部分。第4步,对处理后的图像重新进行拓扑分析,判断是否完全除去了毛刺点。
1.1 骨架毛刺特征分析
在单像素骨架图像中,根据八邻域范围内的特征对骨架图像进行拓扑分析。定义本身是骨架点而且在八邻域中有且只有1个相连点的像素为端点,定义本身是骨架点而且在八邻域有且只有2个不相邻点的像素为骨架点。对于其他简单骨架毛刺情况,定义本身是骨架点且八邻域中有大于等于3个相连点的像素为可疑节点,如果可疑节点的八邻域中没有其他可疑节点,那么该点定义为真节点,否则将一个八邻域中有4个或4个以上的可疑点的像素作为真节点,其他作为假节点。一般骨架毛刺的情况如
图 1. Characteristic points of interference fringe skeleton burrs
Fig. 1. Characteristic points of interference fringe skeleton burrs
图 2. Characteristic structure of complex burrs
Fig. 2. Characteristic structure of complex burrs
1.2 去除毛刺算法
本文提出一种基于节点的迭代去除毛刺算法,需要考虑以下几个方案。
1) 判断迭代终止条件。迭代终止意味着一条干涉条纹骨架处理完毕。如果一个干涉条纹骨架只有一条主干、多个毛刺组成,不存在骨架主干分支部分,那么迭代终止条件为
式中:
2) 选取毛刺并去除的方法。毛刺是由节点引出的一条细线,该细线是由干涉条纹图像的背景噪声造成的。通过端点可以利用方向链码[6]将毛刺追踪至节点,然后将同一节点下的所有毛刺、主干进行差分比较。当端点数个数大于3个时,保留像素点个数最多的骨架部分作为第一次处理结果;当端点个数等于3个时,删除像素点个数最少的毛刺;当对不同节点下的毛刺时,不进行差分比较处理。
式中:
3) 骨架主干与毛刺分类问题。如果存在复杂骨架的情况,在存在3个以上端点的情况下出现两个主干部分进行比较,采用阈值判断条件。阈值判断条件设置如下:
式中:
4) 修复单条骨架断点部分的方案。如果干涉条纹骨架主干部分产生了断点,本文用基于八邻域的简单修复,修补方案如下:如果本身像素点不是骨架点,而且八邻域内存在2个对称的骨架点,则将本身像素点设置为骨架点(见
图中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]。
首先对干涉条纹进行级次标定,单次级次标定采用种子点膨胀算法如下:
式中:
选取出单条骨架之后,需要对骨架进行预处理防止出现非单像素宽度的问题,这里采用的是Zhang氏细化算法[9]、Rosen细化算法[10]。在此之后,进行图像骨架特征点[11]提取,根据本文第1节的骨架特征提取出端点、假节点、真节点。端点、节点的选取需要通过全图扫描逐点判断并标记,直到全图扫描完毕,如
特征点选取出来之后,对所有端点进行链表追踪,追踪时面对复杂图像可能出现追踪过度或者追踪不足的情况,本文根据节点的特性[12],在追踪的算法中加入了以下判定条件:如果追踪点的八邻域中存在真节点,那么循环终止。这里有效利用了节点的特征,同时也为毛刺分类端点打下基础。
根据节点对端点追踪到的毛刺、主干进行分类,如果多个毛刺、主干追踪到同一个节点那么多个毛刺、主干分步保存至OpenCV中的vector
单个条纹处理完毕之后,进行多个骨架迭代处理[14]直到所有干涉骨架都去除毛刺完毕才最终输出到最终结果上, 如
3 结果分析
干涉条纹获取的实验装置有632.8 nm半导体激光器、扩束镜、偏振元件、分光棱镜、1/4玻片、待测元件、标准样板等。采用的算法是基于干涉条纹骨架的特征进行的毛刺去除算法,为了保证提出的算法具有合理性与普适性,本文用了多个样本进行算法处理,处理结果如
对实例样本进行毛刺去除处理,对其处理结果进行验证:扫描处理结果图中的所有断点、分叉点(节点)、端点,如果处理结果图中每一条骨架主干只包含2个端点,没有断点、分叉点(节点),则处理结果正确,否则处理的结果错误。根据上述的验证方案,本文给出的实例测试结果都满足要求。为了验证算法的普遍性,对样本库中所有毛刺图像进行处理和验证,发现毛刺去除算法的正确率为94%。剩余6%的毛刺图像中包含了更加复杂的黏连情况,多条毛刺与其他骨架主干部分存在“黏连”,需要进行节点扫描,并运用八邻域追踪的处理,将毛刺黏连部分提取出来,再予以处理[15]。
图 8. Processing results of multiple samples
Fig. 8. Processing results of multiple samples
通过上面多种骨架的验证,不难发现该种算法具有合理性与普适性。为了在保证处理结果不变的前提下,提升算法的容错性,防止出现主干中的单个像素识别错误当做毛刺处理了,本文添加了骨架修复[16]部分。传统的毛刺去除算法简单地将分叉点(节点)以外的主干、毛刺部分同时进行删减阈值长度,这种方案简便但具有盲目性,而本文中介绍的算法保留了骨架主干部分,具有较高的针对性,只去除骨架中的毛刺部分。
4 结论
本文根据骨架结构特征对干涉条纹骨架的主干、毛刺部分进行提取并差分比较,通过差分比较的结果进行骨架毛刺去除处理,提出一种识别多种特征点的思路,基于该思路进行毛刺图像分析。由于干涉条纹骨架可能存在多级毛刺且毛刺长度有长有短,本文基于节点分类的多个毛刺、骨架差分算法处理,相较于传统的阈值法去除毛刺更具有合理性。本文为预防处理不完整的情况设定了迭代循环去除毛刺,为预防处理过度的情况设定了主干修补模块,相较于传统固定模板的处理方案更加具有灵活应变能力与容错能力。不足之处在于骨架特征点的提取是否能够应对更为复杂的干涉条纹骨架毛刺样本,这个有待验证与提升。其次在于如果存在毛刺部分、主干部分长度相同但是形态不同的部分需要如何处理,这也有待新的算法提出。但是总体来说,本文算法能够处理大多数干涉条纹骨架毛刺图片,是一种行之有效的处理算法。
[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.
[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.
[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.
梅启升, 王敏, 梁秀玲. 基于干涉条纹骨架的毛刺去除算法[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.