APP下载

基于OpenCV的水表读数研究及其改进算法

2017-09-09陈国平

科技创新导报 2017年18期
关键词:图像分割模式识别

陈国平

摘 要:该文针对日常生活中较为常见的水表系统,采用拍摄照片的方式,获取其读数的图像,采用相关的方法对其进行分割处理,并对分割后的单字图片,采用传统的SVM方式进行数字识别,并对此进行改进,对于两者的识别准确率进行对比分析。在此基础之上,针对于读数中可能出现的半字图像,尝试性地提出一种基于二值化和HOG+SVM的识别方式,并在实验中取得了较为不错的实验结果。

关键词:模式识别 读数识别 图像分割 HOG+SVM 半字识别

中图分类号:TP391 文献标识码:A 文章编号:1674-098X(2017)06(c)-0078-06

Abstract:This paperis aimed at the system of water meter.We use the photos of meter and use methods to split the photos. Then we use HOG and LBP to extract the feature of pictures.Then use SVM to train and predict the pictures and compare the accuracy among different method. Based on this, we find a method based on HOG and image binaryzation to recognize the pictures of half word and experiment it.

Key Words:Pattern recognition; Automatic indication recognition; Image segmentation; HOG+SVM; Recognition of half word

1 研究背景

水是生命之源,是人类赖以生存的自然资源,在经济高速增长的今天,水资源短缺制约着城市的发展。为了方便管理城市居民用水,城市供水部门为每户居民安装入户的机械水表,监控居民用水,并依据用水量收缴水费。目前,供水部门或企业都是雇用专门的抄表员来抄取水表读数,每月抄取一次。人工抄表有其天然的弊端,首先对于大型城市,需要雇用大量抄表人员,需要付出不小的人力成本和时间成本。其次人工抄表难免会发生错误,抄错现象难以杜绝,并且还需对纸质资料进行整理,也是一项费时费力并且容易出错的任务。最后人工抄表不够实时,不能及时掌握居民或者企业用水情况,所以对于一些紧急情况,如严重漏水、偷水现象等不能及时处理,给供水部门带来严重损失。

随着监控技术和计算机技术的发展,使得远程自动抄表成为可能。摄像直读水表是其中一种技术方案,其利用在传统水表上加装微型摄像头,定时拍摄水表表盘并传递给服务器,然后在服务器端对表盘图像进行图像分析,自动识别出水表读数,从而完成远程自动抄表。这种方案不需要更换原有水表,并且图像资料可以作为留底凭证,所以受到市场广泛欢迎。

该文将研究该远程抄表方案中核心的水表读数识别技术,完成整套识别算法的设计,验证算法可行性,并且优化算法,提高算法的识别准确率,同时考虑到多种图片情况,使得该识别算法可以真正应用到实际方案中。

2 主要研究内容

远程自动抄表系统主要由现场采集子系统和服务器识别子系统构成。现场采集子系统的主要功能是采集水表到表盘图像,并发送给服务器,需要考虑的问题有现场组网、设备供电、设备防水以及设备可靠性等方面,同时需要保证采集到的图像清晰规范。服务器识别子系统的主要功能是识别表盘图像的读数,并存入数据库,需要考虑的问题是识别算法的准确率、识别算法效率和对不同输入的冗余等。

该次研究主要是根据合适的水表读数识别流程,寻找最优的模式分类方法,包括以下四个方面的研究内容。

2.1 图像去噪

研究改善图片的视觉效果,提高图片清晰度,消除图像中的噪声点,从而避免对后续分割和识别步骤造成的不必要影响。

2.2 图像矫正

研究在一些情况下(如采集仪器位置偏移)会有图片倾斜扭曲的情况,需要对图片进行矫正,才能提高识别的准确率。

2.3 字符分割

主要研究如何将水表读数字符精确地从图片中分离出来,作为识别过程的输入。

2.4 字符识别

对分割出来的字符进行精确的识别,并研究不同分类方法在识别率、性能方面的差异。

3 主要流程图

水表读数识别流程见图1。

4 数据获取

因为该项目为一个实际项目的初级版本,所以该项目的的图像数据来源于真实水表的读数图像。该项目在上海设有2个试验点,即两个小区,共包括40几块水表,在每块水表上安装了一个微型摄像装置,定时对水表表盘进行拍摄,之后将图片通过网络来远程传输至服务端进行分析识别。由于目前尚属于项目初期,因此试验点较少,所拍摄的水表读数图像数目较小,对于实验的结果会产生一定的影响。

5 图像预处理

5.1 图像灰度化

灰度化的实质是将红、绿、蓝3种通道的颜色值进行加权求和,得到像素间只有在亮度上差异的黑白图片。但注意到水表图像在读数部分是黑白的,所以首先提出图像的黑白部分。另外,當图像的RGB值较为接近时可以认为是黑白部分。所以该文使用了如下的灰度化算法。

由于黑色和白色在各通道间的方差小,所以能很好地提取黑白区域,灰度化效果如下。由图2可看出灰度化处理能较好地将数字凸显出来。

5.2 图像去噪

由于在水表拍摄和图片传输过程中,不可避免地会造成噪点,造成噪点的主要原因有曝光过长或JPG格式图片在压缩过程中产生的噪声点等,由此,噪声中以“椒盐”噪声居多,去除噪声的方法是对图片进行滤波操作,如均值滤波、中值滤波、高斯滤波等。endprint

该文采用的是中值滤波的方式,中值滤波能有效克服因偶然因素造成的干扰,同时可以保护图像尖锐的边缘,是广泛采用的滤波方法。

图3是使用中值滤波前后的效果对比图。可以看到,滤波后的图像噪声点明显减少,图片变得更加清晰,并且边缘信息得到了保留和突出。

6 字符分割

6.1 二值化

得到灰度图像后,字符区域已经比较明显,下面使用Otsu阈值来实现二值化。Otsu Threshing方法是一种基于自适应阈值实现二值化的方法,其最重要的部分是寻找图像二值化阈值,使用类间方差达到最大,然后根据阈值将图像分为前景或者背景。利用Otsu可以得到图4的二值化效果。

6.2 形态学操作

二值化图像后,会产生很多突出的边缘以及粘连的轮廓,这时我们利用一些形态学操作进行处理。形态学的基本操作包括腐蚀和膨胀,腐蚀缩小图中的连通区域,膨胀放大图中的连通区域。这里使用了腐蚀操作,用来分割出读数区域,避免因光线或者其他因素造成其他区域与读数区域的粘连。腐蚀以图5为例。

6.3 检索轮廓

轮廓信息是图像中的重要特征,利用轮廓信息,我们可以将读数区域从表盘图像中分割出来。利用OpenCV提供的轮廓检测方法可以很方便地计算图片的轮廓信息(即图像边缘),函数findContours是用于计算轮廓信息的函数,输入二值化图像,输出轮廓集合,每个轮廓是轮廓点集合。

有了轮廓信息,我们需要对轮廓进行筛选,筛选出读数区域的轮廓,这里可以制定多种规则,如轮廓的形状、位置和面积等信息,可以根据实际情况提供多种选择。

该文首先从二值图像中检索轮廓,然后计算各个轮廓的最小外接矩形,接着过滤出符合条件的矩形。可以看出,一般的水表图片读数都在靠中间的位置,且矩形的面积较大,长宽比在一定的范围以内。通过这些筛选,大部分情况下可以确定读数所在的区域。见图6。

得到读数区域后就能够提取出读数区域,从原图中提取该区域见图7。

6.4 字符切分

从图7可以看出,得到的局域并不精确,左右还留有一些无用的区域,接下来需要对区域图像进行纵向切分。

我们假设读数所在区域都完整地出现在图片中,那么每个数字的宽度应该是相同的,但是不能简单的固定分割。因为数字之间留有较多的空白,数字区域不一定位于图像中心,所以我们的算法是枚举读数的起始位置和每个数字的宽度,分别检测数字之间间隔区域的RGB值之和,最大的即为分割结果。图8是分割的结果示例。

7 数字识别算法介绍

7.1 支持向量机

该文采用了支持向量机(Support Vector Machine,SVM)作为主要的图像识别算法,其原理在于寻找特征空间上使间隔最大化的超平面,使得样本不同分类间的样本间隔最大化,这样训练出来的分类模型更具通用性。见图9。

当样本线性不可分时,可以将样本映射到更高维的空间上,在高维空间上可以做到线性分类即可,然后寻找高维空间中的分类超平面。向高维映射的过程可通过核函数隐藏。

对于多类问题,该文采用OpenCV中的C_SVM作为分类器。这是一种n类的分类器,它可以处理多类问题,并且不要求样本完全線性可分。其核函数采用高斯核函数(RBF),核函数的相关系数通过多次试验寻找最佳的方式来确定。

7.2 HOG特征

7.2.1 算法简介

HOG(Histogram of Oriented Gradient)是计算机视觉领域中常用的图像特征,它在物体检测、人脸检测等方面得到广泛应用。2005年,法国研究人员最早提出了利用HOG+SVM的方式进行行人检测,取得了不错的效果,在此基础上,越来越多的研究人员对HOG特征进行研究,并结合SVM提出多种优化的行人检测算法,但基本都是以HOG+SVM的思路为主。该文也利用了HOG特征作为识别分类器的特征输入。

和其他图像特征相比,HOG特征有诸多优点。其将图像分为众多的小方格,计算每个方格内部的梯度信息,它对图像几何的和光学的形变都能保持很好的不变性。在水表应用中,这两种形变恰恰是经常出现的。

7.2.2 算法流程

HOG特征提取方法如下所示。

(1)灰度化:由于图片颜色信息的作用较小,因此通常首先将图片转化为灰度图。

(2)归一化:对生成的灰度图进行归一化,调整图像的对比度,降低光照不均匀和阴影带来的图像差异,常用的归一化方法是Gamma校正法,对灰度图像进行调整。

(3)计算梯度:扫描图像中的每个像素点,计算水平梯度和垂直方向的梯度,然后可以求得该点梯度的大小和方向。

(4)计算方格的特征:将图像分割成细小的方格(cell),例如3×3大小,按照梯度的方向统计cell像素的大小和个数,便得到方格的特征(descriptor)。

(5)计算区块的特征:进一步多个方格组合为一个区块(block),例如,3×3个cell组成一个区块,区块中所有方格特征组合起来便成为block的特征。

(6)计算图像的特征:经过分割,一个图像由多个区块构成,将图像中所有区块的特征组合起来便成为图像的HOG特征,作为分类器的输入。

7.2.3 算法流程图

HOG特征算法流程图见图10。

7.3 LBP特征

7.3.1 算法简介

除了HOG特征,LBP特征(Local Binary Pattern)也是一种常用的物体检测和人脸分析特征。该算法最早由T.Ojala等在1994年提出。其算法逻辑并不复杂,原始算法是将像素点和像素周围的8个像素点相比较,高的点标记为1,低的点标记为0,便可以得到8位二进制数作为该点的LBP特征,如图11所示。得到每个像素点的LBP特征后,同样计算图像每个区块内的LBP统计分布信息,将区块的LBP分布信息组合起来便得到图像的LBP特征。endprint

经过验证,LBP特征能够很好地反映图像局部信息,在物体检测应用中常被采用,并且演变出了多种优化算法。

7.3.2 LBP改进算法

经过研究人员改进,LBP特征演进出了多种优化版本。

由于基本的LBP特征只限定了和周围8个像素点比较,其实可以对该区域进行扩展,和更多的像素点进行比较。例如Ojala等采用了圆形来限定像素点的邻域,圆的半径可以调整,如图12所示,半径可以指定为2,并且可以只比较圆周上部分的点。这样使得LBP特征可以适应更多的图像纹理,应用更加广泛。

另外,可以发现,这样的LBP仍存在缺陷,当图像发生轻微旋转时,图像的LBP特征是不一样的,所以LBP不能保持旋转不变。为了解决该问题,Maenpaa等人提出了LBP的旋转不变模式,即在求解像素的LBP特征时,求解不同旋转情况下的LBP编码,取最小的LBP编码作为该像素的LBP特征。如图13所示,经过旋转有8种旋转模式,即存在8种LBP编码,其中15是最小的LBP编码,所以取该编码作为像素点LBP特征。

8 实验对比

8.1 实验环境

该项目采用OpenCV开源计算机视觉库作为框架,采用C++作为开发语言,样本库采用从实际使用场景收集到的读数图像,经过图像分割及图像筛选后,共计204张单字图片进行图像的训练与识别。之后,按照每个数字选择5张图片作为训练样本的原则,共选取了50张图片作为训练样本,将其余的图片分为两组进行识别,其中一组为完整的单字图片,共计132张;另一组为半字图片,共计22张。

8.2 单字识别

8.2.1 传统HOG特征提取

在采用SVM进行识别的过程中,分别采用了HOG与LBP+HOG的方式进行特征的选取。在传统的HOG特征提取中,通过选取不同的block与cell的大小,分别获得了不同的识别准确率(图片分辨率为90×100),结果如表1所示。

由实验结果可以看出,在不同大小的block和cell下,SVM识别的准确率也有所不同。随着block和cell的增大,数字的识别率也在逐渐提高。针对这一现象,认为其原因可能是:由于样本的数量较小,因此训练程度过低,导致随着HOG特征数目的增大,其识别率反而会产生一定程度的下降。

8.2.2 LBP+HOG特征提取

在完成传统的HOG+SVM算法的基础上,考虑到实际的单字图片中可能会存在一些图像的旋转,从而导致识别率有所下降。因此,该文中尝试性地进行了LBP+HOG的特征提取方法,然后再利用SVM进行训练与分類。首先,该文采用LBP算法来生成原始图像所对应的LBP特征图像,然后再根据HOG算法,对于LBP特征图像进行特征提取,最后应用于SVM中进行训练及预测工作。在此实验中,分别采用表2中各项参数进行预测,预测的准确率如表2所示。

从实验结果中可以发现,采用两种方式来综合求取图片特征的方式,其准确率反而低于传统的HOG特征的准确率,该种方法并不能较好地用于数字图像的识别工作之中。

8.3 半字识别

除了正常的单字图像识别之外,由于水表的结构特点,在读数过程中往往会出现不同程度的半字情况,如图14所示。

半字识别作为水表读数识别的难点之一,一直以来都没有较好的识别算法。该文在已有研究的基础上,提出了一种识别方案,并对其准确性进行实验测试。

为了能够识别半字,首先需要对半字的数字区域进行分割,并选取其中所占面积较大的一块继续进行识别工作。在分割的阶段,首先对原始图像进行二值化处理,排除由于光照等因素造成的噪声点影响,以便于寻找分割区域。在进行图像二值化处理之后,原始图像即变为具有明显白色间隔的两块区域,如图15中的图像即为经过二值化处理之后的图像。

经过二值化处理之后,可以看出图像中包含明显的空白区域。之后,通过编辑图像像素点的方式,来获取最佳的分割位置。在分割之后,我们选取面积较大的部分来进行后续的识别工作,分割之后的半字图像如图16所示。

完成分割工作之后,需要对半字图像进行识别工作。在识别过程中,采用前文中识别率较高的HOG+SVM方式进行识别。由于半字图片的特征点会有一定的缺失,造成识别的准确率下降。为了尽量避免这种情况,我们采取将训练样本也按照相同比例进行分割的方式,将分割后的样本作为训练集进行训练,之后再对图像进行识别。经过实验验证,该方法的识别准确率在50%左右,说明其具有一定的可行性。

在半字识别的过程中,可以进行调节的参数为HOG特征提取的相关参数以及图像二值化中的阈值。该文在进行实验的过程中,由于HOG特征的block与size受到分割图像分辨率的影响,因此未对其进行更改,而是通过改变二值化阈值的方式,获取不同的识别准确率,结果如表3所示。

9 结语

在对水表读数识别的过程中,其难点主要在于如何定位并分割数字区域。该文提出在对图像进行灰度化以及去噪的预处理之后,运用二值化和形态学操作来忽略非目标区域的影响,之后对于目标区域进行轮廓检索和单字的切割操作,从而获得单字图像。在此基础上,该文采用基于HOG+SVM的方式进行样本训练与预测,并提出加入LBP特征来减小旋转所带来的影响。同时,针对半字识别问题,该文提出一种半字的分割和识别算法,并通过实验的方式来获取较为不错的结果。在未来的工作中,我们将继续深入研究这一方面的算法,争取不断提高其识别的准确率。

参考文献

[1] A Kaup,T Aach.Coding of segmented images using shape-independent basis functions[J].IEEE Transactions on Image Processing,2008,7(7):937-947.

[2] Maragos,Petros.Tutorial on advances in morphological image processing and analysis[J].Optical Engineering,1987,26(7):623-632.

[3] Hu M,Chen Y,Kwok J T Y.Building sparse multiple-kernel SVM classifiers[J].Neural Networks,IEEE Transactions on,2009,20(5):827-839.

[4] Dalal N,Triggs B.Histograms of oriented gradients for human detection[C].Computer Vision and Pattern Recognition,CVPR 2005.IEEE Computer Society Conference on.IEEE,2005(1):886-893.

[5] 文学志,方巍.一种基于类Haar特征和改进AdaBoost分类器的车辆识别算法[J].电子学报,2011,39(5):1121-1126.

[6] Navneet Dalal,Bill Triggs.Histograms of Oriented Gradients for Human Detection[J].Proc of International Conference on Computer Vision & Pattern Recognition,2005,1(12):886-893.endprint

猜你喜欢

图像分割模式识别
浅谈模式识别在图像识别中的应用
第四届亚洲模式识别会议
第3届亚洲模式识别会议
电气设备的故障诊断与模式识别