写点什么

LabVIEW 仪表盘识别(实战篇—6)

  • 2022 年 1 月 27 日
  • 本文字数:2207 字

    阅读完需:约 7 分钟

LabVIEW仪表盘识别(实战篇—6)

机器视觉系统中常需要从各类仪表的显示屏图像中提取其读数。这些仪表的显示屏可以分为模拟指针显示屏、LCD 显示屏和 LED 显示屏等。

观察模拟仪表可以发现,它们的刻度被标记在一个由初始值和满量程值限定的圆弧范围内,仪表的指针基于圆弧的圆心旋转以指示当前值。由此不难想到先使用两条标记初始值和满量程值的线段,加上一个标记圆心位置的点来校准仪表,然后就可以检测指针的位置,并通过该位置占满量程的比例来确定当前读数。三点法是另一种校准此类仪表的方法。它在仪表初始值、满量程值位置上分别选择一点,再选择指针旋转的圆心,这样圆心点即可与其他两点分别构成线段来实现仪表校准。

指针型显示屏常用于速度表、流量表、电压和电流表等,如下所示:

仪表读取功能还能从具有 LCD/LED 显示屏的仪表中检测包含单个或多个七段数码管类型数字的区域,并读取包括小数点等分隔符的数值。

LCD/LED 显示屏则常采用 7 段数码管来显示数据,如下所示:

Nl Vision 提供了读取上述几种仪表显示的函数,它们对复杂的算法进行了封装,位于 LabVIEW 的视觉与运动→Machine Vision→Instrument Readers 函数选板中,如下图所示:

其中 IMAQ Get Meter、IMAQ Get Meter 2 和 IMAQ ReadMeter 用于读取模拟仪表的读数,IMAQ Get LCD ROI、IMAQ Read LCD 和 IMAQRead Single Digit 用于读取使用 7 段数码管类型的 LCD/LED 仪表的读数。

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

1、模拟仪表识别

基于 NI Vision 的仪表读取函数可快速构建需要读取仪表值的机器视觉系统。通过一个仪表读取函数读取油表显示值的实例,了解模拟仪表识别的应用。

整个过程可分为学习和读数两个阶段。在学习阶段,程序先使用两个 IMAQ Convert Line to ROI 函数指定了仪表的初始值和满量程值位置。随后 IMAQ Group ROI 对两个线段 ROI 进行组合,作为仪表学习函数 IMAQ Get Meter 的输入。学习过程完成后,会输出仪表指针的旋转中心位置和一个数组。其中数组元素代表仪表初始值和满量程值之间一条沿着刻度的弧线上各点的位置,这些点将用于在读数阶段计算仪表的读数。

读数阶段基于学习阶段的输出来完成,IMAQ Read Meter 可以通过检测仪表指针的位置来确定当前读数所在位置占满量程的百分比。而基于该百分比和满量程值,就可以计算仪表的真实读数。

程序设计如下所示:

程序运行结果中,除了显示读数值,还在图像中显示了 ROI、学习过程所返回数组中的各点以及指针指向的位置,效果如下所示:

​2、LCD/LED 显示屏识别

IMAQ Get LCDROI、IMAQ Read LCD 可检测包含多个七段数码管类型数字的区域,并读取包括小数点等分隔符在内的数值。IMAQ Read Single Digit 则用于读取单个七段数码管类型的数值。与读取模拟仪表数值的过程类似,读取 LCD 仪表数值的过程也包括学习和读数两个阶段。

学习阶段需要基于所有数字的七段数码管全部打开时的图像(全部为数字 8)来定位各个数字所在的矩形范围。读数阶段则通过分析 7 段数码管数字各段的线灰度分布以确定读数结果。

下图显示了仪表读取函数基于线灰度分布识别 LCD/LED 数码管显示的原理,其中数字为各段数码管的索引。

上图(a)显示了背景为白色且七段数码管全部打开时的情况,其中数字为各段数码管的索引。假定已在学习阶段从图像中确定了各个数字所在的矩形位置,就可以在水平和竖直方向上设置与各段数码管交叉的线段型 ROI,用于后续分析。

由于数码管关闭时,其图像灰度与背景灰度接近,因此线 ROI 灰度曲线上的像素值分布较为集中。而数码管打开时,因数码段图像灰度与背景反差较大,线 ROI 灰度曲线上的像素值分布较为分散,如上图(b)所示。

标准差可用来衡量一组数据的分散程度,因此通过计算线 ROI 上像素灰度的标准差,并为其设置阈值即可判断数码管的开闭。综合考虑 7 个数码管的各种开闭组合,就能得到其显示的数值。而重复该过程就能读取 LCD 显示屏中的多个数字。

由于 LCD/LED 仪表读取函数基于线灰度分布来判断数码管的开闭,因此图像的亮度漂移(Light Drift)、对比度、噪声和分辨率将直接影响其读数的准确性。

通过一个读取 LCD 仪表显示值的实例,了解 LCD/LED 显示屏识别的应用方法,程序设计思路如下所示:

  • 程序总体上可分为使用 IMAQ Get LCDROI 的学习和使用 IMAQ Read LCD 的读数两大部分。

  • 程序开始先读入仪表所有数字均为 8 时的图像 LCD0.jpg,并调用 IMAQ Get LCD ROI,从指定的矩形 ROI 中搜索各个 7 段数码管数字所在的矩形位置;

  • 一旦获得各个数字位置所在的范围,程序就读取待测图像 LCD1.jpg,调用 IMAQ Read LCD 分析各个数字所在的范围内 7 个数码管的显示情况,以判断最终读数;

  • 仪表学习和读取过程均使用线灰度分布的标准差阈值 Threshold 来判断数码管的开闭,而且 IMAQ Read LCD 还支持数字的+/-符号和小数点的读取;

  • IMAQ Read LCD 以浮点数、字符串以及元素为图形的数组返回所读取到的值,其中字符串中的每个字符用小数点进行分割。

程序实现如下所示:

程序运行效果如下所示:

项目下载请参见:LabViEWLCD/LED显示屏识别-硬件开发文档类资源-CSDN下载

仪表和条码读取是机器视觉系统的常用功能。常见的各类仪表可按显示方式分为模拟指针显示屏、LCD 显示屏和 LED 显示屏等几大类。

机器视觉系统可以使用双线法或三点法,对模拟显示屏类型的仪表进行校准和读取。对七段数码管类型显示数字的 LCD/LED 仪表的读取,可以通过分析数字所在区域的线灰度分布来实现。数码管关闭时,灰度曲线上的像素值分布较为集中,反之则分布较为分散。在读取仪表过程中,应考虑图像的亮度漂移、对比度、噪声和分辨率对读数准确性的影响。

发布于: 刚刚阅读数: 2
用户头像

【研究方向】物联网、嵌入式、AI、Python 2018.02.09 加入

【公众号】美男子玩编程,关注获取海量资源~

评论

发布
暂无评论
LabVIEW仪表盘识别(实战篇—6)