halcon例程解析:球焊检验——ball_seq. hdev

可与 球焊检验——ball. hdev 这篇互相参考比对

1. 效果展示

在下图中检测圆形焊接

原图
在这里插入图片描述

结果
在这里插入图片描述

2. 思路分析

本方案的目的是在电路板上检测圆形的球焊,观察整个电路板,球焊位置的特点,思路有:

  1. 灰度值
  2. 面积
  3. 圆度

与上一篇检测方案不同的是,此例程将检测圆度变为检测矩形,并将此矩形减除;加入了动态的阈值(由单独的图像获得):

  1. 分割出电路板的区域:利用电路板区域与背景区域的灰度值区别,电路板区域为矩形
  2. 检测电路板中疑似焊接区域的部分:依靠灰度值,灰度值较低
  3. 优化感兴趣区域:按面积填充、开运算消除干扰区域、平滑边界(尺度较小)
  4. 检测矩形(为干扰部分),并减除此区域
  5. 剩余部分为目标焊点,对齐进行优化,开运算尺度较大
  6. 排序、显示等

2.1 分割电路板区域

min_max_gray (Bond, Bond, 0, Min, Max, Range)
threshold (Bond, Bright, Max - 80, 255)
shape_trans (Bright, Die, 'rectangle2')

区别于上一例程,此处分割阈值变为依靠图像本身信息动态设定

2.2 检测电路板中疑似焊接区域的部分

reduce_domain (Bond, Die, DieGrey)
min_max_gray (Die, Bond, 0, Min, Max, Range)
threshold (DieGrey, Wires, 0, Min + 30)

焊点部分一般较暗

2.3 优化感兴趣区域

fill_up_shape (Wires, WiresFilled, 'area', 1, 100)
opening_circle (WiresFilled, Balls, 9.5)

2.4 检测出矩形部分,并减除

connection (Balls, SingleBalls)
select_shape_std (SingleBalls, Rect, 'rectangle1', 90)
difference (SingleBalls, Rect, IntermediateBalls)

干扰区域主要为小矩形区域,检测出并减除
在这里插入图片描述
在这里插入图片描述

2.5 优化焊点区域

gen_empty_region (Forbidden)
expand_gray (IntermediateBalls, Bond, Forbidden, RegionExpand, 4, 'image', 6)
opening_circle (RegionExpand, RoundBalls, 15.5)

全部代码

* ball_seq.hdev: Inspection of Ball Bonding
* 
dev_update_off ()
ImageNames := 'die/' + ['die_02','die_03','die_04','die_07']
dev_set_colored (12)
read_image (Bond, ImageNames[0])
get_image_size (Bond, Width, Height)
dev_close_window ()
dev_open_window (0, 0, Width, Height, 'black', WindowHandle)
set_display_font (WindowHandle, 16, 'mono', 'true', 'false')
dev_set_draw ('margin')
dev_set_line_width (3)
NumImages := |ImageNames|
for I := 0 to NumImages - 1 by 1
    read_image (Bond, ImageNames[I])
    dev_display (Bond)
    min_max_gray (Bond, Bond, 0, Min, Max, Range)
    threshold (Bond, Bright, Max - 80, 255)
    shape_trans (Bright, Die, 'rectangle2')
    dev_display (Die)
    reduce_domain (Bond, Die, DieGrey)
    min_max_gray (Die, Bond, 0, Min, Max, Range)
    threshold (DieGrey, Wires, 0, Min + 30)
    fill_up_shape (Wires, WiresFilled, 'area', 1, 100)
    opening_circle (WiresFilled, Balls, 9.5)
    connection (Balls, SingleBalls)
    select_shape_std (SingleBalls, Rect, 'rectangle1', 90)
    difference (SingleBalls, Rect, IntermediateBalls)
    gen_empty_region (Forbidden)
    expand_gray (IntermediateBalls, Bond, Forbidden, RegionExpand, 4, 'image', 6)
    opening_circle (RegionExpand, RoundBalls, 15.5)
    sort_region (RoundBalls, FinalBalls, 'first_point', 'true', 'column')
    smallest_circle (FinalBalls, Row, Column, Radius)
    NumBalls := |Radius|
    Diameter := 2 * Radius
    meanDiameter := sum(Diameter) / NumBalls
    mimDiameter := min(Diameter)
    dev_display (RoundBalls)
    if (I != NumImages)
        disp_continue_message (WindowHandle, 'black', 'true')
    endif
    stop ()
endfor
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值