弱划痕检测-《Weak scratch detection and defect classification methods for a largeaperture optical element》 转载
完整转载:https://blog.csdn.net/spz1063769322/article/details/91285408
实现代码: https://github.com/spz1063769322/Weak-scratch-detection
1.引言
,最近看了一篇论文《Weak scratch detection and defect classification methods for a large aperture optical element》,光学元件的弱划痕检测一直是一个热门的问题,对于精细的光学元件任何一个细微的划痕都会对检测结构有很大影响,相比之下人眼对于这种弱划痕的识别很轻松,但是计算机对此的识别相对来说较为困难,此论文通过一些列的方法实现了如划痕检测的效果。
2.粗检测
如下图所示,左侧(a)为光学元件的两条划痕,右侧(b)是将划痕图像转化为dark-field图像的结果,发现弱划痕与背景图像没有明显的差别。
如果使用阈值对原始图像进行二值化会出现一下两种情况,(a)阈值过小,会引入背景噪声并且出现大面积非平衡光照隐藏弱划痕的位置;相反的如果阈值过高又会出现(b)的情况,漏检测出轻微的划痕,例如图像中左侧的轻微划痕。
2.1粗检测规则
在讲解粗检测之前需要说明一下基础定义,l(u, v)表示图像中(u, v)点的像素灰度值,Lc,Ll,Lr分表表示中心点像素和,左侧点灰度像素和右侧点灰度像素和。此外我们对像素的检测分为4个方向,分别为0,45,90,135,以上四个方向只要有任何一个方向满足下述的四条规则我们就将中心点设为候选划痕点。
首先定义四条规则:
I (u, v) > T1
Lc > Ll + T2 and Lc > Lr + T2
|L1 − Lr| < T3
Ll > T4 or Lr > T4
rule1:规则1限定一个点如果属于划痕,那么该点的灰度值不能够太暗。
rule2:规则2限定一个点如果属于划痕,那么该点应该比不是划痕的点有更高的灰度值。
rule3:规则3限定一条划痕两侧的点应该具有相似的灰度值。
rule4:规则4限定了划痕要有足够的宽度,用来消除噪声点。
以上四条规则必须全部满足才能认为此次检测的中心点属于一条划痕中,将该点的灰度值设置为255,其余点的像素值为0,经过测检测后得到的是一幅二值化后的图像,能够有效的抑制点噪声展示出初步的划痕,在这个阶段的检测结果已经能够判断出一幅图片或者说一个光学元件中是否含有弱划痕,但是若要进一步精确标记出划痕的位置还需要进行下一步精检测。
T1阈值的设定需要通过上述公式生成,其中m和n分别代表对图像采样的的比例是认为设置的(刚开始看论文的时候这里迷惑了好久,不知道m和n是怎么来的。。。。),W和H分别代表图像的高和宽。论文作者推荐的参数分别为T1=40,T2=10,T3=40,T4=32,XI=5。还有一点,进行粗检测的时候对原始图像进行80%的缩放,能够达到更好地检测效果,这一操作是在另一篇划痕检测论文中提出的观点,试验后发现效果的确有一些提升。
3.精检测
精检测阶段输入的是粗检测提取的二值化图像,在精检测中共分为四步实现能够有效的滤除噪声点更好的拟合划痕曲线,在介绍精检测四步之前需要先了解一下基础定义。如下图所示,(a)类型是标准的划痕类型,一条连续的划痕,但是在实际检测中不常见此类型;(b-e)是常见的几种划痕类型,分别代表有小间断的划痕,以及划痕和点;(f-g)是两种容易忽略的划痕,f表示间距过大但是方向一致,g表示划痕附近存在一系列散落的噪声点。在实际检测中我们将上述几种类型都定义为一条划痕。
3.1LSD
首先对粗检测生成的图像(a)进行一次LSD直线检测,从图中提取出基本的直线片段,并将其使用红色标记,结果如图(b)所示,这一步预测潜在的划痕线段位置,为了精确的计算,LSD检测生成的是一系列的划痕片段,我们将其分组标记,通过一下三条规则判断两条线段是否为同一组,只有满足上述三个条件才能将两条线段划分为同一组内。
rule1:左侧图,两条线段之间夹角必须小于θ
rule2:中间图,两条线段距离(通过计算点到直线距离)小于d
rule3:右侧图,两条线段间距(通过计算两点间距离)小于g
3.2ROI
经过LSD并划分组之后,对每组线段和点计算ROI区域,对于符合上述条件但是不在ROI区域内的点或线段丢弃,文中只提到ROI的区域大小为100 * 1000,在具体实现中我们设置一组点集中(将线段分为起始点和结束点)的质心为中心点以此点为依据设置ROI区域。如图(c)中白色方框所示
3.3RANSAC
经过ROI的筛选后,一组点集内的点都是与划痕最相关的,让后对此点集使用random sample consensus(RANSAC)算法拟合曲线,值得注意的是RANSAC存在一定的偶然性,在实际操作时尽可能的将该算法迭代次数设置的大一些使其尽可能趋于稳定,在我的代码中基础模型选择的是最小二乘法,论文中提出的可以使用LSD并使用蓝色标记。如图(c)所示。
3.4probabilistic Hough transform
最后,在使用一次概率霍夫变换得到精确的划痕线段,用绿色标记,如图(d)所示。
4.总结
到此我们的弱划痕检测就已经基本完成,论文中之后还有一个划痕分类部分,通过使用SVM进行划痕的种类划分,由于我们的需求仅仅是检测出划痕位置即可,因此仅实现了论文的第一部分。写这篇文章是在查找相关资料时发现只有论文没有讲解,为此特地写下我自己对论文的一些理解,帮助之后有需要的童鞋阅读论文。时间紧促肯定会有疏忽之处,希望各位读者发现问题及时与我留言交流,我实现的代码已经放在github上,欢迎指正。
————————————————
版权声明:本文为CSDN博主「蜡笔小新丶不小心」的原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/spz1063769322/article/details/91285408