当前位置: 首页 > news >正文

HALCON-从入门到入门-阈值分割定位算子综合运用

1.废话

之前我的一个师兄告诉我,针对图像上想要定位的内容,机器视觉中定位的方式有很多种,但是如果用阈值分割定位可以做的,就不要用模板匹配了。因为基于形状的模板匹配始终会存在匹配不到的风险,那如果打光效果可以,阈值分割定位的效果就会稳定很多。

其实可以分为两种情况:

第一种,使用背光打出来的图像,图像边缘非常锋利,且形状一致性比较强,周围背景色块干扰比较多,这种情况我们考虑形状给模板匹配。

第二种,产品正面打光,边缘存在过渡像素,周围背景色块干扰小,形状差异较大,这种我们考虑阈值分割进行产品定位。

后面慢慢学习过来之后就发现,在实际上很多的项目中,打光出来的成像效果在边缘都不是非常清晰,过渡非常明显的,由于产品一致性的原因,很多时候拍照出来产品的形状也会发生变换,那么我们使用阈值分割会比较稳定一些。

2.实现效果

下面是阈值分割的效果图。

这是一张芯片引脚的图片,案例的目的是将引脚的焊点定位出来。

其中用到的算子就都是二值化,形状选择,形态学操作的组合。

3.代码解析

1.首先第一步读取图片

read_image (Bond, ImageNames[I])

2.获取整个图像上的灰度最大最小值

    min_max_gray (Die, Bond, 0, Min, Max, Range)

3.基于灰度最小值,二值化出黑色部分像素

    threshold (DieGrey, Wires, 0, Min + 30)

4.对得到的区域进行开运算

    opening_circle (WiresFilled, Balls, 9.5)

5.区域的连通域分析

筛选出更类似矩形的区域

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

6.将类似于矩形的区域排除

    difference (SingleBalls, Rect, IntermediateBalls)

7.根据图像上的像素,对区域进行展开

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

8.继续进行开运算

    opening_circle (RegionExpand, RoundBalls, 15.5)

完成目标。

4.文件

* 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 1read_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 * RadiusmeanDiameter := sum(Diameter) / NumBallsmimDiameter := min(Diameter)dev_display (RoundBalls)if (I != NumImages)disp_continue_message (WindowHandle, 'black', 'true')endifstop ()
endfor

相关文章:

  • SD文生图超详参数使用技巧和方法-看这一篇就懂了!!!
  • 水质在线监测站:提高水质应急处理能力
  • AI办公自动化:用Kimi批量在Excel文件名中加入日期
  • 33 _ 跨站脚本攻击(XSS):为什么Cookie中有HttpOnly属性?
  • 【保姆级教程】教你手把手搭建一个OPCDA/UA服务器
  • 超全AI大模型微调产品经理面试题
  • 转型AI产品经理(8):“习惯形成模型”如何应用在Chatbot产品中
  • 力扣每日一题 6/12 + 随机一题
  • Django 连接mysql数据库配置
  • 在Linux环境中通过Docker运行swift
  • 浔川python社官方警告——浔川总社部、浔川社团举报中心
  • 高效数据处理的前沿:【C++】、【Redis】、【人工智能】与【大数据】的深度整合
  • 设计模式之MVC模式
  • Vue CLI 4与项目构建实战指南
  • 微服务之网关
  • 【译】React性能工程(下) -- 深入研究React性能调试
  • Git的一些常用操作
  • HTML中设置input等文本框为不可操作
  • Java深入 - 深入理解Java集合
  • maven工程打包jar以及java jar命令的classpath使用
  • Spring Cloud Feign的两种使用姿势
  • TiDB 源码阅读系列文章(十)Chunk 和执行框架简介
  • Transformer-XL: Unleashing the Potential of Attention Models
  • UMLCHINA 首席专家潘加宇鼎力推荐
  • 阿里中间件开源组件:Sentinel 0.2.0正式发布
  • 入门级的git使用指北
  • 深入浏览器事件循环的本质
  • 一些关于Rust在2019年的思考
  • ​总结MySQL 的一些知识点:MySQL 选择数据库​
  • ‌‌雅诗兰黛、‌‌兰蔻等美妆大品牌的营销策略是什么?
  • # Pytorch 中可以直接调用的Loss Functions总结:
  • # 计算机视觉入门
  • (4)STL算法之比较
  • (附源码)计算机毕业设计ssm电影分享网站
  • (含笔试题)深度解析数据在内存中的存储
  • (四)JPA - JQPL 实现增删改查
  • (循环依赖问题)学习spring的第九天
  • (幽默漫画)有个程序员老公,是怎样的体验?
  • (原創) 如何動態建立二維陣列(多維陣列)? (.NET) (C#)
  • .mp4格式的视频为何不能通过video标签在chrome浏览器中播放?
  • .NET Core SkiaSharp 替代 System.Drawing.Common 的一些用法
  • .net core使用RPC方式进行高效的HTTP服务访问
  • .NET 事件模型教程(二)
  • .NET连接MongoDB数据库实例教程
  • .Net中的设计模式——Factory Method模式
  • 。Net下Windows服务程序开发疑惑
  • @Autowired标签与 @Resource标签 的区别
  • @PreAuthorize注解
  • [ JavaScript ] JSON方法
  • [Asp.net mvc]国际化
  • [BFS广搜]迷阵
  • [C#数据加密]——MD5、SHA、AES、RSA
  • [CareerCup] 13.1 Print Last K Lines 打印最后K行
  • [codeforces]Checkpoints
  • [GICv3] 3. 物理中断处理(Physical Interrupt Handling)