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 1
    read_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 * Radius
    meanDiameter := sum(Diameter) / NumBalls
    mimDiameter := min(Diameter)
    dev_display (RoundBalls)
    if (I != NumImages)
        disp_continue_message (WindowHandle, 'black', 'true')
    endif
    stop ()
endfor

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

【DevOps】Ubuntu基本使用教程

目录 引言 Ubuntu简介 安装Ubuntu 准备工作 创建启动盘 安装过程 桌面环境 基本操作 定制桌面 文件管理 文件操作 文件权限 软件管理 安装软件 更新软件 系统设置 用户账户 网络设置 电源管理 命令行操作 常用命令 管理权限 安全与维护 系统更新 备份…

C++ 12 之 指针引用

c12指针引用.cpp #include <iostream>using namespace std;struct students12 {int age; };int main() {students12 stu;students12* p &stu; // 结构体指针students12* &pp p; // 结构体指针起别名pp->age 20;// (*pp).age 22;cout << "…

编译原理期末复习

语义分析和中间代码生成 语义检查: 主要进行一致性检查和越界检查。 一致性检查: (1)表达式中操作数是否保持类型一致; (2)赋值语句的左右两边是否类型一致; (3)形、实参数类型是否一致; (4)数组元素与数组说明是否一致。…

基于PID的定速巡航控制系统设计【MATLAB/SIMULINK】

摘要&#xff1a; 本文详细介绍了定速巡航控制是一种车辆驾驶辅助系统&#xff0c;它能让驾驶者在高速或长途驾驶时&#xff0c;设定一个固定的车速&#xff0c;然后车辆会自动维持这个速度行驶&#xff0c;无需驾驶者持续踩油门。这大大减轻了驾驶者的疲劳&#xff0c;同时也…

【Ubuntu双系统】两块硬盘分别安装系统,一块硬盘安装Ubuntu 一块安装Windows

【Ubuntu双系统】两块硬盘分别安装双系统&#xff0c;一块硬盘安装Ubuntu 一块安装Windows 前言安装Ubuntu前置操作安装过程参考文献 前言 机器情况&#xff1a;两块1T的硬盘&#xff0c;其中一块已安装Windows 11现需在另一块硬盘上安装Ubuntu&#xff0c;该硬盘还未初始化Ub…

使用 PyInstaller 将 Python 代码打包成独立可执行文件

大家好&#xff0c;当你完成了一段精彩的 Python 代码&#xff0c;你可能会想要与其他人分享它。但是&#xff0c;你可能担心其他人是否拥有足够的环境来运行你的代码。或者&#xff0c;你可能希望保护你的源代码&#xff0c;以防止他人查看或修改它。在这种情况下&#xff0c;…

Perl 语言入门学习

一、介绍 Perl 是一种高级的、动态的、解释型的通用编程语言&#xff0c;由Larry Wall于1987年开发。它是一种非常灵活和强大的语言&#xff0c;广泛用于文本处理、系统管理、网络编程、图形编程等领域。 Perl 语言的设计理念是“用一种简单的语法&#xff0c;去解决复杂的编…

Linux时间子系统2: clock_gettime的VDSO机制分析

在之前分析clock_gettime的文章中接触到了VDSO&#xff0c;本篇文章是对VDSO的学习总结&#xff0c;借鉴了很多前人的经验。 1. 什么是VDSO vDSO:virtual DSO(Dynamic Shared Object)&#xff0c;虚拟动态共享库&#xff0c;内核向用户态提供了一个虚拟的动态共享库。在 Linux …

Django之文件上传(二)

一、自定义上传文件重命名 重名名好处: 重命名文件也可以避免文件名冲突的问题可以根据自己情况,针对性增加描述信息1.1、生成文件名方法 import os from uuid import uuid4 # 生成文件的名称 def generate_filename(filename):# filename: 上传文件的名称ext = os.path.spl…

【perl】基本语法 /备忘录/

分享 perl 语言学习资源 Perl 教程|极客教程 (geek-docs.com) Perl [zh] (runebook.dev) Perl 运算符 | 菜鸟教程 (runoob.com) Perl Documentation - Perldoc Browser Search the CPAN - metacpan.org 当然还有一些经典书籍&#xff0c;不再列举。 1、数字 1.1、数字表…

TCPListen客户端和TCPListen服务器

创建项目 TCPListen服务器 public Form1() {InitializeComponent();//TcpListener 搭建tcp服务器的类&#xff0c;基于socket套接字通信的//1创建服务器对象TcpListener server new TcpListener(IPAddress.Parse("192.168.107.83"), 3000);//2 开启服务器 设置最大…

Docker配置 之 本地仓库web访问

介绍 Docker是一种开源的应用容器引擎。 Docker可以让开发者打包应用以及依赖包到一个可移植的容器中&#xff0c;然后发布到任何安装了Docker引擎的服务器上&#xff08;包括Linux机器、Windows机器&#xff09;&#xff0c;也可以实现虚拟化。容器是完全使用沙箱机制&#…

[Alogithm][动态规划][背包问题][组合总和IV][不同的二叉搜索树]详细讲解

目录 1.组合总和 Ⅳ1.题目链接2.算法原理详解3.代码实现 2.不同的二叉搜索树1.题目链接2.算法原理详解3.代码实现 1.组合总和 Ⅳ 1.题目链接 组合总和 Ⅳ 2.算法原理详解 本题是个排列题&#xff0c;而并非组合题&#xff0c;所以并非背包问题 思路&#xff1a; 确定状态表示…

【小白向】MAC端VSCode C++环境配置(超干货、超详细)

提示&#xff1a;使用环境为 MAC&#xff08;M2&#xff09; 其实 VSCode 很早就下载好了&#xff0c;但是因为在配置过程中总是遇到很多坑&#xff0c;搁置了很久&#xff0c;回头捡起遇到报 Error 还是两眼抓瞎&#xff0c;到处翻 blog。为了减少以后的遇坑可能性&#xff0c…

高能氧化锌电阻片加速老化试验曲线和老化机理%生产测试过程

氧化锌压敏电阻片加速老化的试验方法和得到的试验结果不尽相同。在老化机理的研究中一般可以用加速老化试验时功率损耗随时间的变化来衡量老化性能。分析我们的以及大量国外研究者的试验结果,可以将阀片功率损耗随时间变化的特性大致分为三种不司的类型: 类型1:阀片本身的性能…

SQL 截取函数

目录 1、substring 2、left 3、right 4、substring_index 1、substring 用途&#xff1a;字段截取从指定开始的字符开始&#xff0c;截取要的数&#xff1b;指定开始的字符数字可以用负的&#xff0c;指定开始的字符从后往前(向左)数&#xff0c;截取要的数不能为负。 语…

【吊打面试官系列-Mysql面试题】锁的优化策略有哪些?

大家好&#xff0c;我是锋哥。今天分享关于 【锁的优化策略有哪些?】面试题&#xff0c;希望对大家有帮助&#xff1b; 锁的优化策略有哪些? 1、读写分离 2、分段加锁 1000道 互联网大厂Java工程师 精选面试题-Java资源分享网 3、减少锁持有的时间 4.多个线程尽量以相同的…

ultralytics框架讲解

ultralytics简介 Ultralytics是一个开源的计算机视觉和深度学习框架&#xff0c;旨在简化训练、评估和部署视觉模型的过程。该框架提供了一系列流行的视觉模型&#xff0c;包括YOLOv5、YOLOv4、YOLOv3、YOLOv3-tiny、YOLOv5-tiny、EfficientDet、PAN、PP-YOLO等&#xff0c;并提…

[数据集][目标检测]胸部解剖检测数据集VOC+YOLO格式100张10类别

数据集格式&#xff1a;Pascal VOC格式YOLO格式(不包含分割路径的txt文件&#xff0c;仅仅包含jpg图片以及对应的VOC格式xml文件和yolo格式txt文件) 图片数量(jpg文件个数)&#xff1a;100 标注数量(xml文件个数)&#xff1a;100 标注数量(txt文件个数)&#xff1a;100 标注类别…