APP下载

数码管数字仪表自动识别方法的研究

2012-08-10

通信技术 2012年8期
关键词:穿线数码管字符

郭 爽

(电子科技大学 物理电子学院,四川 成都 610054)

0 引言

数字仪表具有高精度、方便读取、容易操作等优点,从而广泛应用于工业、设备显示和检测等领域,已经成为国内各种仪表的发展趋势。利用数字图像处理技术和识别技术可以实现数显仪表的自动识别,不仅可以提高工作效率,同时也能确保采集到的数据的准确率[1-6]。

利用计算机视觉函数库 OpenCV,编写 C++语言程序实现对七段数码管式出租车计价器的自动识别。OpenCV是 Intel开源计算机视觉库,全名为Open Source Computer Vision Library,它由一系列C函数和少量C++类构成,包括300多种用于数字图像处理的C或C++程序,该函数库的最大特点是实现了图像处理和计算机视觉方面的很多通用算法,具有很好的矩阵运算和图像处理能力,并且在 VC开发环境上可以直接调用其库函数,极大地简化了编程[7-8]。算法流程主要包括图像预处理、字符分割和字符识别3个过程。

1 图像预处理

待识别的目标图像在由摄像头采集的过程中,会受到实际采集环境以及摄像头与目标图像的距离和角度等因素的影响,最终传输到计算机的图像可能存在模糊和噪声缺陷[6,9],这些缺陷会影响到字符的正确分割和识别,所以在对图像进行字符分割和识别之前,需要对图像进行预处理操作。预处理的主要目的是突出给定图像中的某些信息,消弱或除去不需要的信息。从而使得图像画面清晰,边缘明显,以便提取特征进行识别[10]。预处理结果的好坏直接影响到后续图像的分割和识别的准确率。预处理流程图如图1所示。

图1 预处理流程

1.1 灰度转换

摄像头采集到的图像是含有大量颜色信息的彩色图像,不利于后续图像的分割和识别,而且彩色图像的存储空间较大,因此有必要进行灰度转换。图像的灰度转换就是去除图像中的彩色信息,只包含亮度信息[8]。程序中利用 OpenCV中的颜色空间转换函数 cvCvtColor,可以将原始载入的彩色图像转换为灰度图像。

1.2 一次中值滤波平滑

由于图像在采集过程中会受到噪声的干扰,所以必须对图像进行一次中值滤波平滑处理来减少噪声,程序中采用了 cvSmooth函数实现中值滤波平滑,从而平滑掉了图像采集和传输过程中形成的噪声和区域模糊,保持图像轮廓清晰。

1.3 二值化

图像主要由物体的图案和背景组成,采用二值化处理可以从背景中分割出物体的图像[1]。经过二值化处理后,即把原来的由256个值表示的灰度图转变为只有0(全黑)和255(全白)两个亮度值。在图像二值化过程中,关键的一步是确定一个阈值,根据这个阈值可以将图像总目标从背景中分割出来。文中使用了利用整幅图像的信息求出图像最优阈值的全局阈值法中的大律法(OTSU)来得到灰度图像的变换阈值[7],调用的函数是 cvThreshold。cvThreshold是OpenCV库中的一个函数,它的典型应用是对灰度图像进行阈值操作得到二值图像[8]。

1.4 二次中值滤波平滑

为了便于字符分隔和提高字符识别的准确率,对经过二值化后的图像进行二次中值滤波平滑处理。

1.5 数学形态学去除噪声

二值化后的图像会存在一些大噪声,采用数学形态学开运算 cvMorphologyEx函数可以去除图像中存在的噪声点。数学形态学是图像处理技术中的一种新方法[5]。其基本思想是利用具有一定形态的结构元素提取图像中的对应性状,从而达到识别图像的目的[6,8]。

以上这些图像预处理为后续的数字字符的分割和识别打下了良好的基础。另外,程序中多次调用了OpenCV中其他5个库函数:图像载入函数、窗口定义函数、图像显示函数、图像保存函数以及图像销毁函数。

2 字符分割

采集到图像是由多个字符组成的,因此要将这些字符分割开才能进行识别。在分割时需要进行归一化,其目的是消除数码管在摄像头上所成像的尺寸不一而导致的模板和待识别数字在尺寸上的偏差。程序中将源图像归一化为 60×80。采用投影法对目标图像中的数字字符进行分割,以精确定位出每个字符[4]。在进行切割之前,需要将图像进行水平和垂直投影,程序中的垂直投影实现方法是先计算出每一列上黑点的数目,然后在投影图上画出相同数目的白点数目,水平投影与此类似。根据字符投影可以判断出每个数字的上下和左右边缘,然后再进行切割。

3 字符图像的识别算法

字符图像识别的目就是利用图像处理和识别技术对数码管显示的数字字符进行识别。程序中分别实现了穿线识别和模板匹配识别两种方法。

3.1 穿线识别法

穿线识别法主要是利用7段数码管的特征进行识别的,如图 2所示的穿线法示意图,通过提取7个显示段的特征来判断实际显示的字符。7段数码管由ABCDEFG7个显示段组成,每个段的粗细和长短基本一致且都是垂直或水平的显示段。

图2 穿线法示意

首先,对字符做平行于水平方向的分割线line1和line2,将字符水平均匀分割成3部分,每一部分从左到右进行扫描,如果其中的某一部分存在笔段,就将其记为“1”,否则记为“0”。这一过程用于检测DEFG是否存在笔段;其次,对字符做垂直于水平方向的平分线line3,将字符垂直平均分割成两部分,从上到下扫描,如果其中的某一部分存在笔段,就将其记为“1”,否则记为“0”,该过程用于检测 ABC是否存在笔段;最后,综合以上两步得到的标记笔段,对照表1所示的数码管数字译码表,得出符合该特征的数字[2-3]。

表1 数码管数字译码

3.2 模板匹配法

模板匹配法是比较常用的数字识别方法,待识别的字符是0到9十个数字。提供了一种简单有效的模板匹配识别法,对分割后的每一个图像依次进行识别,将结果输出到控制台并保存到指定文件中。自定义的模板匹配函数的程序算法为:一张图片由很多点组成,每个点就是一个像素,预处理过程中将彩色图像转成灰度图像,即是把图片每个像素变成 0-255之间的某个数,经过二值化以后,每个像素点变成 0或者 255。归一化后,每个数字的大小被归一化到 80×60,从而共有 4 800个点。然后这4 800个点对应相减取绝对值累加起来后,差值最小的模板数字就是所要识别的结果。程序中定义两个IplImage类型的指针数组,分别用于存储分割后的图像和载入模板,以及一个简单的整形数组用于存储模板匹配结果,其中,IplImage是OpenCV中定义的最基本的结构体,它将图像描述为一系列属性和指向图像相关数据的指针集合,包含了图像的全部信息。

4 识别结果分析

根据以上所述原理和开发步骤,在 Windows 7平台下利用VC++6.0编程实现算法,分别采用了穿线和模板匹配两种识别方法,程序中载入如图3所示的七段数码管式出租车计价器作为原始图像,图4和图 5分别为二值化和字符分割后的图像。程序输出结果显示在控制台上为单个数字,以数组元素的形式存储,如a[0] = 6,a[1]=6,a[2]=“*”,a[3]=0,其中“*”号代表小数点。在编程实现过程中,发现如果在前期预处理过程中对字符进行倾斜校正,那么穿线法的识别结果准确率较高,而对于模板匹配法,由于是对分割后的单个字符进行识别,即使没有进行倾斜校正,仍能得到准确的识别结果。

图3 原始彩色图像

图4 二值化后图像

图5 分割后的图像

5 结语

通过利用C++编程语言和OpenCV中的库函数实现了对七段数码管式出租车计价器的数字字符的识别,大大简化了程序代码。在对出粗车计价器识别过程中发现,穿线法无法识别出正确的结果,但是模板匹配法却能得到准确的结果,主要原因是由于预处理过程中没有进行倾斜校正,导致前一个数字会影响到下一个数字的识别,由于模板匹配法是对逐个字符进行识别,从而识别结果没有受到数字倾斜的影响。在后续的工作中,要进一步优化和完善字符分割和识别算法,以降低算法的时间和空间复杂度,提高识别效率。

[1] 吴留生,陈家新,黎蔚.基于 Niblack的手掌经脉图像二值化技术研究[J].通信技术,2010,43(01):112-114.

[2] 王蓉芳,汪仁煌.基于数码管机器视觉的小数点识别[J].电子测试,2008(11):17-20.

[3] 何洪波.数码管的计算机识别[D].广州:华南理工大学,2004.

[4] 刘丹,穆林丽,余晓锷.一种七段数码管式医用仪表的自动识别方法[J].科学技术与工程,2010,16(16):4037-4039.

[5] 姬宝金,吕建平.基于梯度重建与形态学分水岭算法的图像分割[J].通信技术,2009,42(05):98-102.

[6] 田自君.数显仪表数字字符快速识别系统的研究[D].成都:电子科技大学,2007.

[7] 赵洋.基于 OpenCV的网上阅卷技术的研究[D].山东:山东大学,2009.

[8] 詹群峰.基于OpenCV的视频道路车辆检测与跟踪[D].厦门:厦门大学,2009.

[9] 王晓雪,苏杏丽.数字图像处理在车牌识别中的应用[J].自动化仪表,2010, 31(07):22-28.

[10] 张好,王士林,李生红.基于内容图像分类技术中的特征分析[J].信息安全与通信保密,2006(11):74-76.

猜你喜欢

穿线数码管字符
微课教学设计之“数码管动态显示”
字符代表几
一种USB接口字符液晶控制器设计
图片轻松变身ASCⅡ艺术画
羽毛球大赛的穿线是什么样的?
2019苏杯尤尼克斯穿线团队成员工作随笔
Arduino编程
MC9S08FL16单片机数码管静态显示分析
单片机控制的四位数码管动态显示编程
HBM电子称与西门子S7-200系列PLC自由口通讯