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

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 ()

处理思路

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

后记

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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/255321.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

舵机的原理和控制

控制信号由接收机的通道进入信号调制芯片,获得直流偏置电压。它内部有一个基准电路,产生周期为20ms,宽度为1.5ms的基准信号,将获得的直流偏置电压与电位器的电压比较,获得电压差输出。最后,电压差的正负输出…

HDFS清理坏块

报错 Failed with exception java.io.IOException:org.apache.hadoop.hdfs.BlockMissingException: Could not obtain block: BP-1921057509-192.168.57.129-1517160177567:blk_1073741930_1106 file/user/hive/warehouse/db_hive.db/student/student.txt Time taken: 0.104 se…

如何在PowerDesigner将PDM导出生成WORD文档或者html文件

a) 使用PowerDesigner打开pdm文件 b) 点击Report Temlates 制作模板 点击PowerDesigner菜单栏“Report” -> “Report Templates” c) 选择模板数据项 完成步骤a),得到如下界面,左右2个区,Aavailable区…

【软件测试】——基础篇(软件测试技术体系、过程管理)

目录 软件测试技术体系 软件测试过程管理​编辑 接口测试用例设计 手机端测试流程​编辑 软件测试技术体系 软件测试过程管理 接口测试用例设计 手机端测试流程

vue 的常用模块安指令(持续记录)

# 全局安装 vue-cli $ cnpm install --global vue-cli# 创建一个基于 webpack 模板的新项目 $ vue init webpack my-project # 路由管理模块 $ npm install vue-router --save # 状态管理模块 $ npm install vuex --save # 网络请求模块 $ npm install vue-resource --save # 停…

HALCON基于形状匹配详解

HALCON基于形状的模板匹配详细说明 很早就想总结一下前段时间学习HALCON的心得,但由于其他的事情总是抽不出时间。去年有过一段时间的集中学习,做了许多的练习和实验,并对基于HDevelop的形状匹配算法的参数优化进行了研究,写了一…

俄罗斯:自由软件在这里生根

2008年6月15日,我在“俄罗斯:自由软件在这里起飞“一文中介绍了自由软件在俄罗斯的发展情况。现在,许多年过去了,实际情况如何呢? 回顾以往,俄罗斯境内自由软件的精英们,在2001年组建了ALTLinux…

小米出招黑科技,5S或成全球首款”Under glass“指纹识别手机

这一次,小米PK苹果,小米胜。 不得不说,最近的手机圈真是热闹,继三星Note 7爆炸、苹果iPhone 7发布一度成为新闻热点之后,小米又来暗戳戳地抢风头了。 最近小米即将发布的两款新旗舰消息扎堆,其中基本已经确…

sql中实现取得某字段中数字值

ALTER function [dbo].[GetNum](a nvarchar(4000)) returns nvarchar(4000) as begin while patindex(%[^0-9]%,a)>0 begin set astuff(a,patindex(%[^0-9]%,a),1,) end--select a --299 return a end 例如: 转载于:https://www.cnblogs.com/fish-ycq/p/6433562.ht…

Java 中 String 的常用方法(二)

本文介绍剩下的一些常用的 String 中的方法。 1、replace 方法 、replaceFirst 方法和 replaceAll 方法 replace(char oldChar, char newChar)Returns a string resulting from replacing all occurrences of oldChar in this string with newChar. replace(CharSequence targe…

【adb错误修复】adb version(39) doesn‘t match the client(40),killing...

问题原因: 由于服务端的adb版本和客户端的adb版本不一样【哪个是客户端哪个是服务端我也不清楚】 解决方法: adb kill-serveradb start-server

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

HALCON示例程序ball电路板焊点识别、检测、测量程序2 示例程序源码(加注释) *这是关于显示的函数,已经介绍过了 dev_update_off () *定义一个字符串变量ImageNames,ImageNames[0]的含义为’die/die_02’以此类推 ImageNames : ‘…

arduino 程序的机制

从一个简单的 arduino 程序说起: /*BlinkTurns on an LED on for one second, then off for one second, repeatedly.This example code is in the public domain.*/// Pin 13 has an LED connected on most Arduino boards. // give it a name: int led 13;// the…

电池技术多年没有较大发展,成为移动设备最大制约

各大厂商致力于发展闪充技术以此解决电池续航问题。 对于电子产品来说,不管是什么,我们最头疼的无疑就是电池问题了。而电池的重要性更是不用多说,但是,以目前的科技水平来看,就拿智能手机的CPU等功能来说&#xff0c…

什么样的数据应该放入缓存

把数据放入缓存,有三个标准: 1.数据量不大 2.访问频率高 3.数据更改频率低转载于:https://www.cnblogs.com/hwgok/p/5494915.html

VMWare 安装 Eclipse

由于之前已经安装了 OpenJDK 所以 这次我们可以直接下载 eclipse来安装。 Eclipse 下载:http://www.eclipse.org/downloads/?osTypelinux&releaseundefined 如果下载后 在 下载目录,运行解压 (我下载的:eclipse-inst-lin…

C语言条件编译及编译预处理阶段

一、C语言由源代码生成的各阶段如下: C源程序->编译预处理->编译->优化程序->汇编程序->链接程序->可执行文件其中 编译预处理阶段,读取c源程序,对其中…

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

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

【机器学习】SVM理论与python实践系列

理论部分: 《机器学习——支持向量机SVM之线性模型》 《机器学习——支持向量机SVM之非线性模型低维到高维映射》 《机器学习——支持向量机SVM之非线性模型原问题与对偶问题》 《机器学习——常用核函数》 《机器学习——支持向量机SVM之非线性模型原问题转化为对偶问题…

eoLinker-API_Shop_验证码识别与生成类API调用的代码示例合集:六位图片验证码生成、四位图片验证码生成、简单验证码识别等...

以下示例代码适用于 www.apishop.net 网站下的API,使用本文提及的接口调用代码示例前,您需要先申请相应的API服务。 六位图片验证码生成:包括纯数字、小写字母、大写字母、大小写混合、数字小写、数字大写、数字大小写等情况。四位图片验证码…