Halcon实例学习2

blob分析2.球粘接检查--- Inspection of Ball Bonding

一、代码注释

* ball.hdev: Inspection of Ball Bonding

dev_update_window ('off')
*指定操作符调用返回的所有图标对象不显示在活动图像窗口中
dev_close_window ()
dev_open_window (0, 0, 728, 512, 'black', WindowID)
*打开一个黑色背景的窗口
read_image (Bond, 'die/die_03')
dev_display (Bond)
set_display_font (WindowID, 14, 'mono', 'true', 'false')
*在windowID窗口上显示大小为14的mono(一种字体),第一个true为是否加粗,第二个为是否斜体
disp_continue_message (WindowID, 'black', 'true')
*显示“Press Run(F5)to continue”颜色为黑色,第二个参数为是不是加框
stop ()
threshold (Bond, Bright, 100, 255)
shape_trans (Bright, Die, 'rectangle2')
*作用:变换区域的形状,这里是将区域变成矩形
dev_set_color ('green')
dev_set_line_width (3)
dev_set_draw ('margin')
dev_display (Die)
*设置了颜色、线条宽度、画的是区域的边缘还是填充的形状
disp_continue_message (WindowID, 'black', 'true')
stop ()
reduce_domain (Bond, Die, DieGrey)
*裁剪区域,将原图变小一点,去掉四周多余的部分
threshold (DieGrey, Wires, 0, 50)
*阈值分割得到暗的区域
fill_up_shape (Wires, WiresFilled, 'area', 1, 100)
*像素点个数大于1小于100的区域进行填充
dev_display (Bond)
dev_set_draw ('fill')
dev_set_color ('red')
dev_display (WiresFilled)
*显示出这个填充的区域
disp_continue_message (WindowID, 'black', 'true')
stop ()
opening_circle (WiresFilled, Balls, 15.5)
*用圆结构进行开运算,圆形结构元素半径15.5,筛选出球的区域
dev_set_color ('green')
dev_display (Balls)
disp_continue_message (WindowID, 'black', 'true')
stop ()
connection (Balls, SingleBalls)
*这个算子是halcon经常要用到的,作用就是将不连接的区域独立起来变成多个区域方便后续进行特征选取
select_shape (SingleBalls, IntermediateBalls, 'circularity', 'and', 0.85, 1.0)
*区域筛选,根据圆度对区域进行筛选,再圆度范围0.85到1之间的保留
sort_region (IntermediateBalls, FinalBalls, 'first_point', 'true', 'column')
*根据区域的相对位置进行排序, 'first_point' 是排序模式(SortMode); 'true' 是递增,'false' 是递减;'column' 是按照“列”来排序。
dev_display (Bond)
dev_set_colored (12)
dev_display (FinalBalls)
disp_continue_message (WindowID, 'black', 'true')
stop ()
smallest_circle (FinalBalls, Row, Column, Radius)*对这些筛选出的区域生成最小外接圆
NumBalls := |Radius| *得到最小外接圆的数量
Diameter := 2 * Radius *对所有半径×2得到直径
meanDiameter := sum(Diameter) / NumBalls *平均直径
mimDiameter := min(Diameter) *最小直径
dev_display (Bond)
disp_circle (WindowID, Row, Column, Radius)
dev_set_color ('white')
for i := 1 to NumBalls by 1
    if (fmod(i,2) == 1)*i/2的余数是否为1(第奇数个区域),然后在区域的固定位置显示直径
        disp_message (WindowID, 'D: ' + Diameter[i - 1], 'image', Row[i - 1] - 2.7 * Radius[i - 1], max([Column[i - 1] - 60,0]), 'white', 'false')
    else  *(偶数个区域)
        disp_message (WindowID, 'D: ' + Diameter[i - 1], 'image', Row[i - 1] + 1.2 * Radius[i - 1], max([Column[i - 1] - 60,0]), 'white', 'false')
    endif
endfor
* dump_window (WindowID, 'tiff_rgb', './ball')
dev_set_color ('green')
dev_update_window ('on')
disp_continue_message (WindowID, 'black', 'true')
stop ()
dev_close_window ()

 

二、知识点总结

2.1  图像处理分析

      例程名称为球粘连检查,任务就是找到板子中的球形区域,第一步先分析球形区域灰度值与背景是否存在明显的差异,所以先进行了阈值处理得到图中较暗的区域,第二步进行特定圆结构开运算,属于根据筛选出我们想要的圆形目标,然后进行圆形的生成,排序等。

      图像开运算:先对图像进行腐蚀操作,再进行膨胀。作用:消除图像小噪声如斑点和细小的突出。消除不重要的细节,平滑图像。扩展:图像闭运算:先对图像进行膨胀再腐蚀。作用:顾名思义,闭合图像,填充图像的空洞

2.2  重点算子学习

      connection (Balls, SingleBalls)算子是分割初步提取到的所有特征,halcon会把提取到的特征看作一个整体,需要用这个算子来独立出单独的区域,halcon中经常用,下一步就是对每个单独区域进行筛选。

      select_shape (SingleBalls, IntermediateBalls, 'circularity', 'and', 0.85, 1.0)算子可以对上一步单独出来的区域通过‘circularity’或者其他特征(这里是圆度,还有面积矩形度,椭圆度等特征)筛选出我们想要的区域。

      sort_region (IntermediateBalls, FinalBalls, 'first_point', 'true', 'column')可以按照自己想要的方式对区域进行排序,排序的结果会存储在一个类似数组的参数里,可以根据索引值找到我们想要的区域。

  • 15
    点赞
  • 16
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值