浓淡补正的实现探究和复杂背景下细小缺陷的检测

 

“浓淡补正”是基恩士视觉的一个很强大的算法工具。使用“浓淡补正”的预处理,可以消除工件表面的光泽和阴影,仅抽取污点及瑕疵。(如下图)

 

至于它的实现原理,网上搜不到相关资料。不过根据它的实现效果,能大致窥见它的原理:排除背景渐变的浓淡变化,只抽取对比度急剧变化的部分。

 

看到这句话,想必有些人已经想到了一个词“动态阈值”,没错,动态阈值是跟它有几分相似,这个我们后面再分析。

 

一、浓淡补正近似实现

 

下图中,要把“黑点”和“弯曲的细黑线”提取出来,其中黑点正方形的边长是5个像素。

 

处理算法如下:

1 read_image (Image, '白格矩阵.jpg')
2 rgb1_to_gray (Image, GrayImage)
3 
4 gen_disc_se (SE, 'byte', 11, 11, 0)  //设计结构元素
5 gray_dilation (GrayImage, SE, ImageDilation)
6 gray_erosion (ImageDilation, SE, ImageErosion)
7 sub_image (ImageErosion, GrayImage, ImageSub, 1, 120)  //这个120也可以设置其他值

 

构造的结构原图是一个11 × 11的矩形结构元素。

 

分析:

gray_dilation (GrayImage, SE, ImageDilation),对图像进行灰度值像素膨胀即灰度值较大的区域膨胀,面积变大。(如下图左ImageDilation)

② gray_erosion (ImageDilation, SE, ImageErosion),对图像进行灰度值像素收缩即灰度值较大的区域收缩,面积变小。(如下图右ImageErosion)

③ 在灰度值像素膨胀的过程中,原图中的“小黑点”和“细长的黑线”被它们周围的高亮灰度值像素膨胀覆盖掉了。(如下图左)

④ 在灰度值像素收缩的过程中,图中的白格子面积缩小,几乎恢复原状,不过在上一步中被膨胀覆盖掉的小黑点、细黑线不可能再复原了。

⑤ sub_image (ImageErosion, GrayImage, ImageSub, 1, 120),用无黑点、黑线的图ImageErosion减去原始图,就有效提取出了黑点和黑线。(如上图所示)

 

 

使用这种方式提取复杂背景的黑点和黑线,有什么注意点呢?

① 结构元素要构造得合理,一般来说,构造正方形结构元素最通用。

② 图中“小黑点”的边长是5 pix,结构元素至少要设置为6 × 6 才行,不然不能有效提取出小黑点。

③ 点只能提取较小的,线也只能提取较细长的。(因为结构元素设计过大,可能会有难以预料的结果)

 

下图中展示了结构元素分别为3 × 3、50 × 50时,最终的效果图ImageSub:

 

二、复杂背景下的算法表现

 

 

 

三、动态阈值

 

 

四、diff_of_gauss

 

(待续)

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章