HALCON示例程序ball电路板焊点识别、检测、测量程序剖析

示例程序源码(加注释)

介绍: ball.hdev: Inspection of Ball Bonding
*halcon窗口实时更新关闭
dev_update_window (‘off’)
*halcon关闭所有窗口
dev_close_window ()
*halcon打开新窗口
dev_open_window (0, 0, 728, 512, ‘black’, WindowID)
*读入图像
read_image (Bond, ‘die/die_03’)
*halcon显示读入图像
dev_display (Bond)
*halcon设置在“WindowID”界面中字体显示格式
*函数原型:set_display_font( : : WindowHandle, Size, Font, Bold, Slant : )
*函数原型:WindowHandle:设置的窗口ID;Size:字体大小;Font:字体(宋体、楷体。。。。。);Bold:是否加粗;Slant :是否使用斜体
set_display_font (WindowID, 14, ‘mono’, ‘true’, ‘false’)
*disp_continue_message 此函数会在屏幕右下角显示“单击”“运行”使程序继续运行。(其实就是加一个继续按钮)
*disp_continue_message(:: WindowHandle,Color,Box ?
*WindowID:显示的窗口;Color:显示颜色;Box :是否显示底色
disp_continue_message (WindowID, ‘black’, ‘true’)
*程序暂停运行,以便于查看
stop ()
*选中Bond图片中像素值于100-255的像素,生成一个区域Bright
threshold (Bond, Bright, 100, 255)
*求取刚刚提取出的区域的最小外接矩形,名称为Die
shape_trans (Bright, Die, ‘rectangle2’)
*设置显示的颜色(包括字体、区域、ROI等)
dev_set_color (‘green’)
*设置显示线宽
dev_set_line_width (3)
*设置显示区域的方式margin:边缘模式(显示区域只划出他的外边缘);Fill:填充模式(以填充方式显示区域)
dev_set_draw (‘margin’)
*显示刚刚求得的最小外接矩形
dev_display (Die)
disp_continue_message (WindowID, ‘black’, ‘true’)
stop ()
*剪裁图片,用区域Die去裁剪图片Bond,生成新的图片DieGrey
reduce_domain (Bond, Die, DieGrey)
*阈值选取
threshold (DieGrey, Wires, 0, 50)
*填充区域内的孔洞(不同于fillup)具有特征选择的功能,这里用到的使面积,不在最小最大设定范围的孔洞将不会被填充
*函数原型:fill_up_shape(Region:RegionFillUp:Feature,Min,Max:)
*Region:区域;RegionFillUp:填充后的区域;Min:最小填充孔洞;Max:最大填充孔洞
fill_up_shape (Wires, WiresFilled, ‘area’, 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(Region : RegionOpening : Radius : )
*Region :要进行开运算的区域;RegionOpening :开运算过后的区域;Radius :用于开运算元素的半径
*这里就是要去掉圆形焊点后边的小尾巴
opening_circle (WiresFilled, Balls, 15.5)
*又是相关的显示设置了
dev_set_color (‘green’)
dev_display (Balls)
disp_continue_message (WindowID, ‘black’, ‘true’)
stop ()
*分割连通域,我们做了上述的这么多事情,怎么才能把焊盘一个一个的找出来呢,虽然现在接近成功,但还不行,因为现在的区域还是一个,(就如CAD的图层与PS的图层差不多)就是虽然不相连但是还是认为是一坨,connection就是把这些不相连的给分成不同的区域。两个参数,第一个是传入区域(要分割的);第二个是分割后的。在halcon上最直观的显示就是由一个颜色变得五彩缤纷了
connection (Balls, SingleBalls)
*特征选择函数,选择特定的特征是我们做简单的图像分析常用的算子。可以通过区域的特征(面积、圆度、矩形度。。。。。)不同筛选出我们要的区域。
*这里用到的使圆度;圆度介于0.85-1.0的区域将会被选中
select_shape (SingleBalls, IntermediateBalls, ‘circularity’, ‘and’, 0.85, 1.0)
*sort_region - 根据区域的相对位置对区域进行排序
*函数原型:sort_region(Regions:SortedRegions:SortMode,Order,RowOrCol ?
*Regions:区域们;SortedRegions:对区域排序完成的区域;SortMode:排序模式;Order:顺序还是倒序;RowOrCol :行优先还是列优先
sort_region (IntermediateBalls, FinalBalls, ‘first_point’, ‘true’, ‘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
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)disp_message (WindowID, 'D: ' + Diameter[i - 1], 'image', Row[i - 1] - 2.7 * Radius[i - 1], max([Column[i - 1] - 60,0]), 'white','false')elsedisp_message (WindowID, 'D: ' + Diameter[i - 1], 'image', Row[i - 1] + 1.2 * Radius[i - 1], max([Column[i - 1] - 60,0]),'white','false')endifendfor

dump_window (WindowID, ‘tiff_rgb’, ‘./ball’)
dev_set_color (‘green’)
dev_update_window (‘on’)
disp_continue_message (WindowID, ‘black’, ‘true’)
stop ()
dev_close_window ()

处理思路

这个焊点检测拿到图片后我们想到的他的一个特点是圆的对吧,在一个我们看一下像素值很低,这个例程就是使用了这个特性完成了这个。先对电路板进行了一个选取,减少非电路板部分对检测的干扰。然后通过阈值选择出焊点,因为照片噪点或者产品本身就有噪点,对封闭区域做了一个填充。但是影响因素很多,这时使用圆形元素进行了一个开运算,搞掉那些影响。之后进行了特征筛选,用到了圆度这一特性进行筛选。轻易的就选出了圆形焊点区域,之后做了一个简单地排序与计算最后显示出结果,大功告成。

后记

大家有什么问题可以向我提问哈,我看到了第一时间回复,希望在学习的路上多多结交良师益友。

HALCON示例程序ball电路板焊点识别、检测、测量程序剖析相关推荐

  1. HALCON示例程序ball电路板焊点识别、检测、测量程序2剖析(与上篇文章使用了不同方法)

    HALCON示例程序ball电路板焊点识别.检测.测量程序2 示例程序源码(加注释) *这是关于显示的函数,已经介绍过了 dev_update_off () *定义一个字符串变量ImageNames, ...

  2. android怎么判断程序进入了后台,Android检测应用程序是否进入后台

    当"应用程序"在后台运行时,您真的不想注销用户,当用户切换到另一个选项卡或暂时最小化其浏览器窗口时,您不仅要注销Web应用程序的用户.如果您要在Web应用程序中执行上述任一操作,您 ...

  3. AC-DMIS测量程序应用举例

    AC-DMIS提供了一整套完整的,方便的,快捷的指令编辑系统,有利于用户根据工件的具体要求写出简洁,高效的测量程序.以下列举了一些测量程序的实例,供您借鉴. 例1 !测圆程序 INIT !初始化为机器 ...

  4. HALCON示例程序measure_ball_bond.hdev电路板焊点位置测量

    HALCON示例程序measure_ball_bond.hdev电路板焊点位置测量 示例程序源码(加注释) 关于显示类函数解释 dev_update_off () dev_close_window ( ...

  5. HALCON示例程序measure_circuit_width_lines_gauss.hdev电路板线宽检测

    HALCON示例程序measure_circuit_width_lines_gauss.hdev电路板线宽检测 示例程序源码(加注释) 关于显示类函数解释 dev_update_off () dev_ ...

  6. HALCON示例程序board.hdev检测电路板焊锡有无程序剖析

    HALCON示例程序board.hdev检测电路板焊锡有无程序剖析 示例程序源码(加注释) *这是关于系统设置的函数,剪辑区域,设置剪辑区域设置为使能.为clip_region做的设置,后文会介绍 g ...

  7. HALCON示例程序inspect_bga.hdev测量bga焊点缺陷

    HALCON示例程序inspect_bga.hdev测量bga焊点缺陷 示例程序源码(加注释) 关于显示类函数解释 read_image (Image, 'bga_14x14_model') get_ ...

  8. HALCON示例程序check_bottle_crate.hdev啤酒箱内酒瓶数检测

    HALCON示例程序check_bottle_crate.hdev啤酒箱内酒瓶数检测 示例程序源码(加注释) 获取系统关于"空白区域储存的设置" get_system ('stor ...

  9. HALCON示例程序check_blister_mixed.hedv药品胶囊缺陷检测

    HALCON示例程序check_blister_mixed.hedv药品胶囊缺陷检测 示例程序源码(加注释) 读入图片与显示相关设置 dev_close_window () read_image (I ...

最新文章

  1. excel重复上一步快捷键_最全的Excel快捷键合集!
  2. master slave mysql_Mysql---Master-slave复制方案 - dba成长之路 - 博客频道 - CSDN.NET
  3. centos部署时间服务器
  4. parameterType 属性、typeAliases 别名
  5. eclipse - 自动换行
  6. 11gR2 集群(CRS/GRID)新功能—— SCAN(Single Client Access Name)
  7. 微信小程序云开发教程-云函数操作数据库-排序查询、指令查询
  8. Apache-一个IP多个主机域名
  9. Spire PDF转WORD (高效不失真)
  10. 基于matlab的电池管理系统开发,使用 Simulink 和基于模型的设计开发电池管理系统...
  11. 给自己的IntelliJ IDEA 设置签名
  12. python模拟登陆GDUFE教学一体化平台
  13. 手把手教学弟用js写的打砖块游戏,学弟乐哉~ 附(思路注释+源码)
  14. 海南计算机管理科员工资,海南公务员级别工资一览表
  15. ubuntu下运行.exe程序
  16. 超体故事:写作,我想少一些功利多一点真诚
  17. 955 互联网公司白名单来了!这些公司月薪20k,没有996!福利榜国内大厂只有这家!...
  18. 电脑软件打开出现闪退的问题
  19. ArcGIS API For JavaScript 拉框放大地图
  20. Chrome浏览器已开启自动保存密码,但仍无法自动保存密码的解决办法

热门文章

  1. 游戏性的根本——浅谈游戏关卡设计
  2. python 简单程序设计
  3. Fecshop 环境部署以及安装步骤
  4. python图片风格迁移毕设_Python简单实现图像风格迁移
  5. 美国标准信息交换标准码
  6. 【财报解读】营业利润、净利润、毛利润三者之间的关系
  7. 前端ES5/JavaScript高频面试题 及答案
  8. 驱动程序(9) 利用Windriver修改代码实现DMA传输定制功能的驱动程序
  9. 常见面试题的基础总结(JVM篇)
  10. 2008年北京奥运英语365句