石鑫华视觉 发表于 2022-10-11 10:03:17

VBAI中实现垂直刻度表的水平刻度值读取



有人咨询了这样一个问题:
如上图所示,怎么读取其实际的刻度值,如上图表示的6.6x度(假设这里就是表示度。因为刻度表的精度是百分比,上图的中最大10,实际表示的是20度,如果真要换算成度,那应该再乘以2)。
先来分析一下问题内容:
读取刻度值,在图像处理的领域里,上面图像中实际表示的其实就是读取蓝白分界处的直边的位置(Y值)。这里得到的Y值,实际上表示的是像素坐标,而在NI VISION中,图像的像素坐标系原点是左上角,左到右,X增大,上到下Y增大,而实际的刻度值是下到上增大的。
刻度到像素的转换关系,其实很好解决,从现有的图像中,可以鼠标移动获取对应的像素坐标,在刻度0处对应的像素坐标Y值是866(因为刻度线比较粗,取刻度线的中间位置),而刻度10处对应的像素坐标Y值是172。这时就可以知道866-172=694像素,表示了实际刻度的10。那么转换关系系数就是10/(866-172)=0.0144,也就是图像中的1像素代表了0.0144度。
当然,这里还需要注意一下一些相对数据。首先读取的Y像素值,要反转,以便和刻度从下到上增加相对应。然后返回后的Y值是从图像的最底开始的0,而刻度是从图像靠底位置的0刻度开始的,所以得到的反转Y值还要减去0刻度位置的坐标到底位置坐标这一段距离(1050-866),这样才是在刻度表坐标系中的相对像素值,再乘以对应的转换系数,就是表示刻度的实际值。
下面来看一下实际效果,为了演示不同温度值的读取,这里在上图基础上,增加了几条刻度线,以便读取不同的值:

不同刻度线的图像

测试温度为6.67

测试温度为5.97

测量温度为4.07
测试脚本相对比较简单,获取图像(打开图像或采集程图像),然后找边函数,接着计算函数,最后覆盖函数。这个测试效果使用了VBAI来演示。视觉助手因为没有计算过程,所以无法实现这个要求,得转换到LabVIEW中才可以实现(或调用VI相对麻烦)。
2020版VBAI测量脚本:

演示图像:

页: [1]
查看完整版本: VBAI中实现垂直刻度表的水平刻度值读取

LabVIEW HALCON图像处理入门教程(第二版)
石鑫华机器视觉与LabVIEW Vision图像处理PDF+视频教程11种全套
《LabVIEW Vision函数实例详解》教程-NI Vision所有函数使用方法介绍,基于NI VISION2020,兼容VDM21/22/23/24