Blob分析---board.hdev(漏焊检测)
目录
一、程序源码分析
1、更新、关闭、打开新窗口
2、读取图像并将图像转化为多通道图像
3、从元组中选择对象输出显示
4、对多通道图像的像素值进行平均,会发现焊接区域边缘是银色,内部是黑色,有利于区分焊接区域与未焊接区域
5、找出暗的区域,也就是焊接区域
6、找出亮的区域,包括电路板背景与焊接区域边缘
7、取交集得到银色焊接区域边缘轮廓
8、通过取焊接区域的补集得到不需要焊接的区域
9、根据不需要焊接的区域与焊接区域边缘轮廓得到已焊接区域
10、需要焊接的区域减去已焊接区域得到未焊接区域
11、填充漏焊区域
12、对漏焊区域进行筛选,去除细节干扰,并对漏焊区域内的不连通区域计数
二、相关算子
1、get_system ('clip_region', Information)
2、set_system ('clip_region', 'true')
3、channels_to_image (Images, Ic)
4、select_obj (Images, Input1, 1)
5、mean_n (Ic, ImageMean)
6、union1 (Darks, Dark)
7、intersection (DarkFilled, Light, Intersection)
8、complement (DarkFilled, Back)
9、expand_region (Intersection, Back, RegionExpanded, 10, 'image')
10、difference (DarkFilled, Good, Rest)
11、expand_gray (Rest, Ic, Good, Bad, 6, 'image', 5)
12、count_obj (BigBad, NumMissingSolder)
一、程序源码分析
1、更新、关闭、打开新窗口
// board.hdev: Detection of missing solder漏焊检测get_system ('clip_region', Information)
set_system ('clip_region', 'true')
// Get_system返回set_system设置的所有参数的信息dev_update_window ('off')
dev_close_window ()
dev_open_window (0, 0, 512, 512, 'black', WindowID)
2、读取图像并将图像转化为多通道图像
读取的是不同照明方向拍摄的图像
read_image (Images, ['ic0', 'ic1', 'ic2', 'ic3'])
// 将单通道图像转换为多通道图像
channels_to_image (Images, Ic)
3、从元组中选择对象输出显示
select_obj (Images, Input1, 1)
dev_display (Input1)
set_display_font (WindowID, 14, 'mono', 'false', 'false')
disp_continue_message (WindowID, 'black', 'true')
stop ()
select_obj (Images, Input2, 2)
dev_display (Input2)
disp_continue_message (WindowID, 'black', 'true')
stop ()
select_obj (Images, Input3, 3)
dev_display (Input3)
disp_continue_message (WindowID, 'black', 'true')
stop ()
select_obj (Images, Input4, 4)
dev_display (Input4)
disp_continue_message (WindowID, 'black', 'true')
stop ()
4、对多通道图像的像素值进行平均,会发现焊接区域边缘是银色,内部是黑色,有利于区分焊接区域与未焊接区域
mean_n (Ic, ImageMean)
dev_display (ImageMean)
5、找出暗的区域,也就是焊接区域
threshold (Images, Darks, 0, 40)
union1 (Darks, Dark)
fill_up (Dark, DarkFilled)
dev_set_color ('green')
dev_display (DarkFilled)
disp_continue_message (WindowID, 'black', 'true')
stop ()
6、找出亮的区域,包括电路板背景与焊接区域边缘
threshold (Images, Lights, 100, 255)
union1 (Lights, Light)
7、取交集得到银色焊接区域边缘轮廓
intersection (DarkFilled, Light, Intersection)
dev_display (ImageMean)
dev_display (Intersection)
disp_continue_message (WindowID, 'black', 'true')
stop ()
8、通过取焊接区域的补集得到不需要焊接的区域
complement (DarkFilled, Back)
dev_set_color ('red')
dev_display (Back)
disp_continue_message (WindowID, 'black', 'true')
stop ()
9、根据不需要焊接的区域与焊接区域边缘轮廓得到已焊接区域
expand_region (Intersection, Back, RegionExpanded, 10, 'image')
fill_up (RegionExpanded, Good)
dev_display (ImageMean)
dev_set_color ('green')
dev_display (Good)
disp_continue_message (WindowID, 'black', 'true')
stop ()
10、需要焊接的区域减去已焊接区域得到未焊接区域
difference (DarkFilled, Good, Rest)
dev_set_color ('red')
dev_display (Rest)
disp_continue_message (WindowID, 'black', 'true')
stop ()
11、填充漏焊区域
expand_gray (Rest, Ic, Good, Bad, 6, 'image', 5)
dev_display (Bad)
disp_continue_message (WindowID, 'black', 'true')
stop ()
12、对漏焊区域进行筛选,去除细节干扰,并对漏焊区域内的不连通区域计数
connection (Bad, ConnectedBad)
select_shape (ConnectedBad, BigBad, 'area', 'and', 150, 99999)
area_center (BigBad, AreaBad, Row, Column)
count_obj (BigBad, NumMissingSolder)
AreaMissingSolder := sum(AreaBad)
dev_display (Images)
dev_set_color ('green')
dev_set_draw ('margin')
dev_set_line_width (3)
dev_display (Good)
dev_set_color ('red')
dev_display (BigBad)
dev_set_draw ('fill')
dev_set_line_width (1)
dev_update_window ('on')
set_system ('clip_region', Information)
二、相关算子
1、get_system ('clip_region', Information)
2、set_system ('clip_region', 'true')
- 将'clip_region'设置为'true',是因为complement (DarkFilled, Back)求补码时,限制补码区域为输入图像的大小,为'false'时补码区域为无限大
3、channels_to_image (Images, Ic)
将单通道图像转换为多通道图像
操作符channels_to_image将多个单通道图像转换为多通道图像。新的定义域是输入图像的定义域的交集。没有为多通道映像分配新的存储。相反,创建的多通道图像包含对现有输入图像的引用
4、select_obj (Images, Input1, 1)
- 从对象元组中选择对象,元组索引从1开始
- select_obj将具有Index(从1开始)指定索引的标志性对象从标志性输入对象元组objects复制到输出对象ObjectSelected
5、mean_n (Ic, ImageMean)
- 多个通道的平均灰度值
- 对于每个坐标点,计算该坐标上所有灰度值的和,结果是灰度值的平均值(总和除以通道数)。输出图像有一个通道
6、union1 (Darks, Dark)
- 返回所有输入区域的并集
7、intersection (DarkFilled, Light, Intersection)
- 计算两个区域的交点
8、complement (DarkFilled, Back)
- 返回一个区域的补码
9、expand_region (Intersection, Back, RegionExpanded, 10, 'image')
- 扩张区域,填充小间隙
- 参数:间隙要被关闭的区域或要被分开的区域,不发生扩张的区域,输出扩展或分离的区域,迭代次数,扩张模式
10、difference (DarkFilled, Good, Rest)
- 计算两个区域的差值
11、expand_gray (Rest, Ic, Good, Bad, 6, 'image', 5)
- 扩张灰度来填充区域之间的间隙
- Expand_gray关闭输入区域之间的差距,这是由于分割操作中抑制小区域,(模式'image'),例如,或分离重叠区域'区域')。这两种使用都是区域扩张的结果。该算子的工作原理是在区域中添加一个一个像素宽的“条带”,其中灰度值或颜色与区域边界上相邻像素的灰度值或颜色相差最多的阈值(在每个通道中)。
- 第二个参数:用于灰度值或颜色比较的图像(可能为多通道)
- 第七个参数:区域边界的灰度值或颜色与扩展候选区域之间的最大差值
12、count_obj (BigBad, NumMissingSolder)
- 计算区域内不连通区域的数量
Blob分析---board.hdev(漏焊检测)相关推荐
- Blob分析---check_hazelnut_wafers.hdev(检测榛子饼干的质量)
目录 一.程序源码分析 1.读取一张图片,根据该图片创建窗口 2.循环,在循环中通过自动阈值分割.开运算对图像进行预处理.然后使用area_holes计算孔的面积并使用rectangularity计算 ...
- Blob分析---ball.hdev
目录 程序源码 1.dev_update_window ('off') 2.dev_close_window () 3.read_image (Bond, 'die/die_03') 4.get_im ...
- Blob分析---autobahn.hdev
目录 程序源码 1.get_system ('init_new_image', Information) 2.set_system ('init_new_image', 'false') 3.gen_ ...
- halcon 缺陷检测 基板漏焊检查
图片资源 链接:https://pan.baidu.com/s/161CAd1DOvc043y9-xW1fSw 提取码:hs5q 处理流程 1.应当焊接区计算 (4图 二值化暗区 ) 2.计算已经焊接 ...
- HALCON示例程序board.hdev检测电路板焊锡有无程序剖析
HALCON示例程序board.hdev检测电路板焊锡有无程序剖析 示例程序源码(加注释) *这是关于系统设置的函数,剪辑区域,设置剪辑区域设置为使能.为clip_region做的设置,后文会介绍 g ...
- Halcon缺陷检测——Blob分析特征
blob分析+定位+特征 案例1:检测破碎的小饼干 案例2:检测胶囊药粒 案例3:检查塑料网是否破损 资源下载地址 案例1:检测破碎的小饼干 check_hazeInut_wafers.hdev 这个 ...
- Halcon实例分析——autobahn.hdev快速检测道路标志
这是运行代码的结果,下面我们每条代码过一遍,下面的代码路径为打开halcon,浏览实例程序,方法中的Blob分析, 有些重点代码会详细讲解, * autobahn.hdev: Fast detecti ...
- Halcon Blob分析之分割并读取啤酒瓶上的数字——bottle.hdev
分割并读取啤酒瓶上的数字 引言 一.结果 1.1 读取图像 1.2 Blob分析处理后 二.Halcon代码 三.案例主要算子分析 1.create_text_model_reader (Operat ...
- 【Halcon】Blob分析的形态学算子应用(count_pellets.hdev)
Halcon中 Blob分析 之count_pellets.hdev 示例 * This programs demonstrates the use of basic morphology * ope ...
最新文章
- 【ORACLE】碎片整理
- Hybris IMPEX.
- mac apache服务器
- sh脚本和bash脚本_在脚本中使用Bash陷阱
- JVM——深入分析对象的内存布局
- 浅谈计算机教学论文,浅谈计算机在教学中的作用_优秀论文
- img 标签的 src 属性
- 看剧流畅还省电?视频类应用预缓存策略功耗评测详解
- 一个真实的实例: Java程序员的成长经历
- js Object.is 相等判断
- Linux基本命令(一)
- 中小企业财务管理的重要性
- ✖ subject may not be empty [subject-empty]
- 域控服务器怎么开策略,组策略(域和域服务的搭建)
- 氛围感新年头像如何制作?教你简单的制作好看头像的办法
- Unity 绘制弹球和台球的运动轨迹
- System Design笔记:在线售票系统设计
- 成型泡沫组件的全球与中国市场2022-2028年:技术、参与者、趋势、市场规模及占有率研究报告
- KVM虚拟化技术(在Centos虚拟机里部署Centos虚拟机)
- mysql 修改column操作
热门文章
- 「分治法」棋盘覆盖问题
- WSingle站群系统,全网唯一支持【站群】的WordPress小说主题!
- 图斑中国之三秦之地——陕西
- Aspose CAD标准dwg文件转svg或png
- Kotlin Bootcamp 自学(2):Kotlin基础
- xlswriter中textbox半透明填充
- eis电子防抖好还是光学防抖好_“快板声”带来的科普 手机镜头防抖模组有哪些...
- 删除字段mysql workbench_MySQL Workbench使用教程
- 深度学习(7): 卷积神经网络2——网络结构
- 元宇宙时代的职业规划与执行PPT