视觉检测之焊点检测(三):从干扰背景中提取焊点


上一篇讲述的例子用的素材是“善良”图片,只能用来说明一下焊点检测的基本原理。
由于机器机构设计的局限,例如焊点检测工位的前工位缺少辗平焊极的工位,或者焊片本身上下弯曲而没有在压平状态下检测,或者每片焊片上的焊点位置不固定,等等。会造成灯光不能很好的白化背景暗化焊点,时不时来几片焊点与背景混在一起的图片,让你痛不欲生。


例如下面这些奇葩,它们的特征是:粘连,和背景混合
image.png  image.png image.png image.png


我们来一张背景干扰的素材,它是奇葩中的战斗机,如下:
一般这样的图片,是因为焊片上翘或者下翘造成的。

image.png


(一)动态阈值分割


threshold 是采用全局阈值分割图像。这张图,会因为阀值范围内包含干扰背景,而没办法提取我们想要的焊点。

可以换成自动产生的阀值分割图像的算子bin_threshold

程序如下:

read_image (Image23, 'C:/Users/Administrator/Desktop/焊点图片/12.bmp')
gen_rectangle1 (ROI_0, 280.5, 350.5, 426.5, 474.5)
reduce_domain(Image23, ROI_0, ImageReduced)
bin_threshold (ImageReduced, Regions)

connection(Regions, ConnectedRegions)
closing_circle(ConnectedRegions, RegionClosing, 5.5)
fill_up(RegionClosing, RegionFillUp)
select_shape(RegionFillUp, SelectedRegions, 'area', 'and', 10, 99999)
count_obj(SelectedRegions, Number)


结果如下图,可以看到效果还是可以的。

image.png


我们来用这段程序试下没有什么背景干扰图像会怎么样?
结果如下图,效果也是不错的。

image.png


下面这一张,结果不好,是因为上面两个焊点和其干扰背景相似,并且和下面两个焊点阈值差别太大。

image.png  image.png


看来bin_threold也有缺点,因为它没有参数可以调节。


(二)用灰度直方图数据分割图像


换个思路。我们取取画面中灰度值像素数量最多的部分,算子gray_histo可取得图像的灰度值分布数量。我们经过排序后即可取得像素数量最多的灰度值。

然后使用threshold算子按此灰度值进行图像分割。

read_image (Image23, 'C:/Users/Administrator/Desktop/焊点图片/82.bmp')
gen_rectangle1 (ROI_0, 307.5, 358.5, 424.5, 475.5)
reduce_domain(Image23, ROI_0, ImageReduced)

mean_image(ImageReduced, ImageMean2, 9, 9)
gray_histo(ROI_0, ImageMean2,AbsoluteHisto, RelativeHisto) 
gen_region_histo(Region1, RelativeHisto, 255, 66, 1)
PeakGray := sort_index(AbsoluteHisto)[255] 
threshold(ImageReduced,Region,0,PeakGray-55)

connection(Regions, ConnectedRegions)
closing_circle(ConnectedRegions, RegionClosing, 5.5)
fill_up(RegionClosing, RegionFillUp)
select_shape(RegionFillUp, SelectedRegions, 'area', 'and', 10, 99999)
count_obj(SelectedRegions, Number)


中值滤波是必需的,去掉图像噪声

image.png


对中值滤波后的图像进行计算灰度分布,取得像素量最多的灰度值。
在halcon的变量监视器中,我们看到灰度值203是分布数量最多的。红色表示的灰度分布图中绿圈处的最高点就是灰度203

image.png   image.png  


下面这句话把这个灰度值用上去。

threshold(ImageReduced,Region,0,PeakGray-55)

结果如下图,效果还是可以的。

image.png


试几个“正常焊点”和图片,效果也是不错的!


image.png   image.png


不过这种方法仍然有其问题,就是下面的常量55,是当前产品的经验值,而且极有可能有奇魄的图片不符合这个经验值。

threshold(ImageReduced,Region,0,PeakGray-55)


参考资料:

Halcon学习(4-6)Region处理:动态阈值,分水岭


--------------------- 

作者:hackpig
来源:www.skcircle.com
版权声明:本文为博主原创文章,转载请附上博文链接!


本文出自勇哥的网站《少有人走的路》wwww.skcircle.com,转载请注明出处!讨论可扫码加群:

发表评论:

◎欢迎参与讨论,请在这里发表您的看法、交流您的观点。

会员中心
搜索
«    2025年4月    »
123456
78910111213
14151617181920
21222324252627
282930
网站分类
标签列表
最新留言
    热门文章 | 热评文章 | 随机文章
文章归档
友情链接
  • 订阅本站的 RSS 2.0 新闻聚合
  • 扫描加本站机器视觉QQ群,验证答案为:halcon勇哥的机器视觉
  • 点击查阅微信群二维码
  • 扫描加勇哥的非标自动化群,验证答案:C#/C++/VB勇哥的非标自动化群
  • 扫描加站长微信:站长微信:abc496103864
  • 扫描加站长QQ:
  • 扫描赞赏本站:
  • 留言板:

Powered By Z-BlogPHP 1.7.2

Copyright Your skcircle.com Rights Reserved.

鄂ICP备18008319号


站长QQ:496103864 微信:abc496103864