LabVIEW轮廓分析与比较(基础篇—8)

简介: LabVIEW轮廓分析与比较(基础篇—8)

轮廓(Contour)是指可以在图像中勾勒出目标外形的一组相互连接的曲线(Curve)这些曲线由一系列目标物的边缘点组成。由曲线构成的轮廓通常会勾勒出被测目标的外形(Shape)。因此,基于提取的目标轮廓,不仅可实现图像分割,还能实现尺寸测量、缺陷检测以及目标的轮廓分析、匹配和轮廓分类等机器视觉应用。


例如,可以将观测目标的轮廓与轮廓模板或拟合的曲线进行对比,以判断目标是否存在或对其质量进行检测。也可以通过检测目标轮廓的周长、半径、曲率和角度等关键尺寸信息来判定其是否合格。此类应用的实现过程常涉及目标的轮廓提取、轮廓匹配以及分类等技术。

image.png

Nl Vision为轮廓提取、轮廓比较和轮廓分析分类提供了专门的函数集,这些VI位于LabVIEW的视觉与运动→Machine Vision→Contour Analysis函数选板中,如下图所示:

image.png

函数说明及使用可参见帮助手册:

image.png

IMAQ Extract Contour封装了轮廓提取过程,包括种子点搜索、曲线追踪、曲线连接和轮廓选择几个步骤。经IMAQ Extract Contour可选出离搜索起点最近、长度最长或平均梯度最强的3类目标轮廓,被提取出的轮廓信息会被附加在内存中的图像之后供后续处理过程使用。


轮廓可以参与两种比较运算,一种是与基于轮廓像素点拟合得到的理想曲线进行比较,另一种是与轮廓模板进行比较。无论何种情况下进行轮廓比较,都逐点比较轮廓与曲线或模板上对应点之间的距离,并根据设定的距离范围来判断被测目标轮廓的偏离。


通过比较易拉罐的轮廓与基于轮廓像素拟合得到的圆形曲线,并根据它们之间的最大距离来判断易拉罐的质量的案例,了解NI Vision自带的轮廓与拟合曲线比较的使用方法,程序设计思路如下所示:


程序一开始先从指定的文件夹中读取待测图像文件,然后使用IMAQ ExtractContour提取出环形ROI中最长的易拉罐轮廓;

IMAQ Fit Contour则从文件中读取出轮廓信息,并基于这些点拟合出圆形曲线。该圆形曲线作为判断合格易拉罐的参照标准被保存在内存中的图像之后,供后续过程使用;

IMAQ Compute Contour Distances可以从内存图像数据中提取出轮廓和曲线信息,并计算它们之间的距离;

For循环检查各个对应点之间的距离是否超出设定的最大限度,并显示距离曲线。若有任何两点之间的距离超限,就将测试结果设置为Fail;

IMAQ Overlay Contour和Overlay Point withUser Specified Size.vi在图像中通过无损图层的形式显示出轮廓,并标出距离超限的轮廓点。

程序设计如下所示:

image.png

通过运行程序,调整While循环的延时,可以观察程序的运行结果,效果如下所示:

image.png

项目资源下载:https://download.csdn.net/download/m0_38106923/19854388


目标的轮廓也可以与轮廓模板进行比较。与拟合曲线比较的过程不同,在与轮廓模板进行比较之前,需要先收集标准参考图像中的轮廓模式特征信息,生成轮廓模板,并将其添加在标准参考图像之后以备后用。该过程称为轮廓的学习(Learning)过程。实际检测的目标并不都与标准参考图像中的目标相同,而是可能进行了缩放(Scale)、旋转(Rotate)或交叠(Occlusion),如下图所示:

image.png

因此在轮廓学习过程中,除了要收集标准位置的轮廓信息,还要基于标准的参考目标,计算缩放或旋转情况目标的轮廓信息,以支持视场中目标轮廓的各种姿态。默认情况下,Nl Vision可支持缩放量为原目标的±25%,且在视场中360°旋转的目标。程序支持的旋转角度和缩放比例越大,其执行时间就会越长。设计过程中,要根据实际情况尽可能限制旋转角度和缩放比例,必要的时候还要与算法的速度进行权衡取舍。


相关文章
C#系列之ref和out的区别
C#系列之ref和out的区别
585 0
|
计算机视觉
数字图像处理实验(七)| 形态学图像处理{生成结构元素strel、腐蚀运算imerode、膨胀运算imdilate、开运算imopen、闭运算imclose}(附代码和实验截图、汉字视力表项目、总结)
数字图像处理实验(七)| 形态学图像处理{生成结构元素strel、腐蚀运算imerode、膨胀运算imdilate、开运算imopen、闭运算imclose}(附代码和实验截图、汉字视力表项目、总结)
1454 0
数字图像处理实验(七)| 形态学图像处理{生成结构元素strel、腐蚀运算imerode、膨胀运算imdilate、开运算imopen、闭运算imclose}(附代码和实验截图、汉字视力表项目、总结)
|
存储 Java 数据库
Java “ClassCastException”解决
Java中的“ClassCastException”是在运行时尝试将对象强制转换为与其实际类型不兼容的类型时引发的异常。解决方法包括:1. 检查类型转换前使用`instanceof`关键字进行类型判断;2. 确保对象的实际类型与目标类型一致;3. 审查代码逻辑,避免不必要的类型转换。
1011 4
|
数据可视化 数据挖掘 Python
绘制带误差分析的柱状图
【9月更文挑战第1天】在数据分析与科研中,带误差分析的柱状图能直观展示数据分布与不确定性。本文介绍使用Python的Matplotlib库和Excel绘制此类图表的方法,包括安装库、准备数据、绘制图表及添加误差线等步骤,帮助用户根据需求进行调整与定制。
276 5
|
存储 前端开发 JavaScript
React useState 和 useRef 的区别
本文介绍了 React 中 `useState` 和 `useRef` 这两个重要 Hook 的区别和使用场景。`useState` 用于管理状态并在状态变化时重新渲染组件,适用于表单输入、显示/隐藏组件、动态样式等场景。`useRef` 则用于在渲染之间保持可变值而不触发重新渲染,适用于访问 DOM 元素、存储定时器 ID 等场景。文章还提供了具体的代码示例,帮助读者更好地理解和应用这两个 Hook。
464 0
|
数据采集
LabVIEW虚拟数字示波器
本篇博文将设计一款虚拟示波器(简易版+复杂版),不依托外部设备,通过LabVIEW内置的信号发生VI,生成各类型波形,通过上位机软件可以对波形进行分析。当然,感兴趣的朋友也可以参照之前博文项目进行修改,将生成波形信号的功能,替换为采集实际设备,实现对实际设备数据的采集和分析。
|
网络协议
LabVIEW实现Modbus-TCP通信
Modbus协议是一种已广泛应用于当今工业控制领域的通用通讯协议,按其格式可分为Modbus-RTU、Modbus-ASCII和Modbus-TCP。其中,前两者适用于串行通信控制网络中,例如RS485、RS232等,而Modbus-TCP主要应用于基于以太网TCP/IP通信的控制网络中。通过此协议,控制器相互之间、或控制器经由网络(如以太网)可以和其它设备之间进行通信。
LabVIEW实现Modbus-TCP通信
|
测试技术 容器 API
JUnit + Mockito 单元测试(二)
JUnit 是单元测试框架。Mockito 与 JUnit 不同,并不是单元测试框架(这方面 JUnit 已经足够好了),它是用于生成模拟对象或者直接点说,就是”假对象“的工具。两者定位不同,所以一般通常的做法就是联合 JUnit + Mockito 来进行测试。
2322 0
|
JavaScript 前端开发
element-plus 报错 TypeError: Cannot read properties of undefined (reading ‘setCheckedKeys‘)
element-plus 报错 TypeError: Cannot read properties of undefined (reading ‘setCheckedKeys‘)
910 0