由于七段数码管显示数字和字符比较直观、清晰、响应速度快,所以它被广泛应用在现场仪器仪表中。通过摄像头获取数码管数字图片,也可以根据数码管编码方式比较容易识别出其中的数字。
根据不同的显示原理,七段数码管可以使用 LED、LCD、OLED、场致发光管等制作,颜色也有很多种类。其中红色 LED 的数码管比较常见。
红色七段数码管 0~9 显示的图片
数码管的七个笔画根据不同的点亮组合,可以形成不同的数字、字母以及字符。理论上可以总共有 127(2^7-1)个不同的编码组合。下面的表示是常见的字符、数字编码方式。在不同的场合,下面的编码会有略微调整。
七段数码管显示不同数字和字符
识别数码管的数字、字母,只要根据图片的灰度信息即可。根据每个笔画段的亮度,判断对应的 LED 段是否点亮,进而可以确定所对应的数字或者字母。
有的时候数码管的右下角还有一个小数点位,用于显示数字的小数点的位置。它也可以配合字符、数字来表达其他的含义。
七段数码管灰度图像
相比于汉字、英文字符的印刷体,七段数码管的字体并没有太多的变化。它会在尺寸、比例、笔画的粗细、字体的倾角方面有差异。
如果已知数码管的字体,可以比较方便在归一化之后的图像中确定下每个笔画段所占具的图像位置。
下图显示了常见到的七段数码段各个笔画对应的序列位置,以及 0~9 数字对应的七段点亮编码。
七段数码管 0~9 数字编码
根据数码管灰度图像的亮度统计直方图,可以确定下背景和点亮字段所对应的亮度值。根据这两个是数字可以确定下一个阈值,用于确定笔画是否被点亮。
下图显示了 0~9 个数字对应的图像灰度图的直方图统计,他们大体呈现相似的分布。
0~9 数字图片亮度值的直方图
通过灰度图上每个笔画段的平均亮度,求出数码管的笔画编码,在通过查表可以确定图片中数码管所对应的数字。
通过每个笔画段亮度来确定数码管的编码
对于静态图像,利用先验知识来讲数字进行定位、分割,形成归一化之后的灰度数字图像。通过上面的方法可以简便快速确定下每个数码管所对应的数字,进而可以获得仪表所显示的数值。
这种方法所需要的计算量比较小。当图像比较清晰的时候,识别的准确性非常高。
计数器对脉冲计数,动态显示技术结果
在有些场景下,数码管显示内容是动态变化的,由于设备更新数字与摄像头没有同步,所以拍摄到的图像中可能包含有数码管在前后两个数字变化的过度图像,即前后两个数字的叠加状态。此时,就会对上面识别方法造成干扰。
使用一台计数器,对于不同频率的脉冲进行计数。数码管动态变化,使用摄像头获得序列图像之后,利用上面的方法所识别的数字序列如下图所示:
六组不同频率脉冲信号计数结果曲线
由于是对不同频率的脉冲信号进行计数,所得的序列原则上应该是一个直线。直线的斜率与脉冲的频率成正比。
但是上面所显示的六组不同频率的脉冲技术结果中,可以看到存在着一些数据的跳动值。这说明前面算法对于出现叠加状态的数字识别存在错误。
下面是另外一组时间,计数器对盖革管输出的放射性检测脉冲计数。结果应该是一个单调递增的曲线。其中仍然存在着数据的抖动。
计数器对盖革管脉冲计数,图像识别后的数据曲线
对于前面实验结果中,识别错误的图像进行分析,可以看到这些错误都是由于摄像头所拍摄到的数码管在前后过渡过程所形成的错误图像引起的。
下图显示了一些识别错误时,所采集到数码管图像序列连续三帧所对应的数字最后一位数字图像。图片下面数字对应的图像识别的结果。
识别错误时,连续三帧图片对应的数码管的图像
由于数码管本身发光的亮度与驱动电流之间不是线性关系,所以过渡过程的图片并不是两个数字简单的线性叠加,因此获得过渡过程的数码管的识别具有一定的难度。
解决图片中数码管图像识别错误的问题,可以通过以下三个方面来解决:
(1)尽可能缩小摄像头的曝光时间,这样可以大大减少所获得图片中存在前后两个数字叠加的情形。但这样会造成图像亮度减低,从而增加所获得图像的噪声;
计数器在记录盖革管输出的脉冲信号
(2)对所获得数据进行滤波,比如使用中值滤波这种非线性滤波方法,可以有效将数据序列中的抖动噪声消除。也可以利用所测量数据的本身特性,来对错误数据进行提出,比如脉冲计数应该是对应递增的序列;
(3)利用所获得图像前后相邻的序列信息,直接训练一个动态神经网络,来识别过渡图像中的数字信息。这对于在一个曝光时间内,数码管仅仅跳动一次的情况是有效果的。如果在摄像头一个曝光时间内,数码管的是谁出跳动两次以上,则大大增加了过渡图片空间的复杂性,对于机器学习所需要的网络模型和训练数据都提出了更高的要求。
由于摄像头对于数码管是离散时间图片采样,并存在一个采样时间,因此上存在着一个最高变化速率。当数码管的跳动高于这个速率的时候,是无法从图片中准确获得数码管数字信息的。