机器视觉系统中常需要从各类仪表的显示屏图像中提取其读数。这些仪表的显示屏可以分为模拟指针显示屏、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以浮点数、字符串以及元素为图形的数组返回所读取到的值,其中字符串中的每个字符用小数点进行分割。
程序实现如下所示:
程序运行效果如下所示:
仪表和条码读取是机器视觉系统的常用功能。常见的各类仪表可按显示方式分为模拟指针显示屏、LCD显示屏和LED显示屏等几大类。
机器视觉系统可以使用双线法或三点法,对模拟显示屏类型的仪表进行校准和读取。对七段数码管类型显示数字的LCD/LED仪表的读取,可以通过分析数字所在区域的线灰度分布来实现。数码管关闭时,灰度曲线上的像素值分布较为集中,反之则分布较为分散。在读取仪表过程中,应考虑图像的亮度漂移、对比度、噪声和分辨率对读数准确性的影响。