视觉检测之焊点检测(四):动态定位焊点区域ROI


如果机构连压块的位置都不给你保障,那就惨了,就如下图这个样子了。

左边的图如果算是正常的话,右边的图是不是你想叫妈?
压块的位置在跳舞,逼得你不能用固定的ROI来框焊点。

image.png image.png



来一张素材图,然后我来整个算法的思路。

image.png


基本的思路是,threshold算子取得白色部分的region,然后求出一个内接的Rectangle,然后做下定位把这个矩形画出来。
这个就是我们要的动态的ROI了,无论压块怎么跳舞都不怕了!

list_files ('C:/Users/Administrator/Desktop/焊点图片', ['files','follow_links'], ImageFiles)
tuple_regexp_select (ImageFiles, ['\\.(tif|tiff|gif|bmp|jpg|jpeg|jp2|png|pcx|pgm|ppm|pbm|xwd|ima)$','ignore_case'], ImageFiles)
for Index := 0 to |ImageFiles| - 1 by 1
    read_image (Image, ImageFiles[Index])
    
    gen_rectangle1 (ROI_0, 114.5, 183.5, 397.5, 599.5)
    reduce_domain(Image, ROI_0, ImageReduced)
    
    threshold (ImageReduced, Regions, 193, 255)
    closing_rectangle1(Regions, RegionClosing, 320, 320)
    fill_up(RegionClosing, RegionFillUp)
    smallest_rectangle2(RegionFillUp, Row, Column, Phi, Length1, Length2)
    Row:=Row+30
    gen_rectangle2(Rectangle1, Row, Column, Phi, Length1, Length2)
    reduce_domain(Image, Rectangle1, ImageReduced2)
    
    mean_image(ImageReduced2, ImageMean, 15, 15)
    var_threshold(ImageMean, Region, 15, 15, 0.2, 2, 'dark')
    connection(Region, ConnectedRegions)
    
    select_shape(ConnectedRegions, SelectedRegions, 'area', 'and', 150, 99999)
    closing_circle(SelectedRegions, RegionClosing1, 6.5)
    smallest_circle(RegionClosing1, Row2, Column2, Radius)
    gen_circle(Circle, Row2, Column2, Radius)
    
     dev_set_draw('margin')
    dev_set_line_width(2)
    dev_set_color('red')
    dev_display(Image)
    dilation_circle(Circle, RegionDilation, 3.5)
    dev_display(RegionDilation)

    stop()
endfor


注意var_threshold算子的用法,在使用它前需要事先做图像滤波。这里用的是mean_image(中值滤波)

var_threshold也是动态阈值,上一篇还介绍了bin_threshold。
对于动态阈值完全懵比的童鞋请再读下面的贴子:

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

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


本例的效果如下:

image.png


因为本篇讨论的话题是动态的决定焊点ROI, 如果论焊点检测的效果还是不行滴,还需要后续文章继续讨论。

下面放几张由本算法处理的结果图片以满足下各位的好奇心。


左边这张有多选和误选的问题,多选表现在同一个位置出现两个圆。
右边那张误选严重,但是背景混合的焊点也正确选择对了。
image.png  image.png


左边这张箭头所指的焊点没选中,原因你懂的!   如果你认为是它和左边压块粘边了,那你就错了,其实它只是面积太小,被过滤掉了。
右边这张右上那个点也选中了,让人惊讶。

image.png  image.png



左边这张图其右下那个点出现了可怕的粘连。粘连问题是个重要的课题。
右边这张图其左边两个点为什么没有出现粘连问题呢? 这是因为动态决定ROI区域的机制避免了这个问题!

image.png  image.png

于是问题来了,为什么左图那个大红圈的点与下边框粘连到一起了呢?为什么动态ROI没能在这里发挥作用呢?

image.png

这是因为我在代码里,只是把内接矩形不加判断的直接下移30个像素,其实这样做对于这张图片上来说是不对的,会造成选中了底部黑色部分。

image.png
如下图,正常图片内接矩形下移30个像素是碰不到底边黑色部分的。
image.png

因此,我们的动态ROI还是需要再改进,可以自动决定是否可以下移30个像素,如果不能则能计算出最多能下移多少像素。


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

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


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

发表评论:

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

会员中心
搜索
«    2024年4月    »
1234567
891011121314
15161718192021
22232425262728
2930
网站分类
标签列表
最新留言
    热门文章 | 热评文章 | 随机文章
文章归档
友情链接
  • 订阅本站的 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