趙世峰
摘 要:針對(duì)Android系統(tǒng)下機(jī)械式電表數(shù)字識(shí)別應(yīng)用,提出一種電表讀數(shù)圖像ROI提取方法。為消除光照不均及反光的影響,結(jié)合Canny邊緣檢測(cè)、局部自適應(yīng)閾值二值化與全局閾值二值化實(shí)現(xiàn)電表讀數(shù)圖像二值化。使用Opencv的人工神經(jīng)網(wǎng)絡(luò)多層感知器模型完成電表數(shù)字識(shí)別,測(cè)試結(jié)果顯示,該技術(shù)對(duì)機(jī)械式電表讀數(shù)具有較高的識(shí)別率。
關(guān)鍵詞:Android系統(tǒng);Opencv;ROI提?。粓D像二值化;神經(jīng)網(wǎng)絡(luò)
DOIDOI:10.11907/rjdk.162503
中圖分類號(hào):TP317.4
文獻(xiàn)標(biāo)識(shí)碼:A 文章編號(hào)文章編號(hào):16727800(2016)011019603
0 引言
隨著社會(huì)的進(jìn)步和電子技術(shù)的發(fā)展,傳統(tǒng)的機(jī)械式電表正逐步被電子式電表和智能電表取代。盡管如此,在一些舊城區(qū),尤其是廣大邊遠(yuǎn)農(nóng)村地區(qū),機(jī)械式電表用戶仍然大量存在。機(jī)械式電表用戶用電數(shù)據(jù)主要依靠電力抄表員人工讀取記錄,受人為因素影響較大。近年來,隨著Android智能手機(jī)的普及和機(jī)器視覺技術(shù)的發(fā)展,利用具有攝像頭的Android智能手機(jī)APP采集和識(shí)別機(jī)械式電表讀數(shù)成為代替人工讀數(shù)的有效途徑。
OpenCV(Open Source Computer Vision Library) 是一個(gè)由一系列C函數(shù)和少量C++類構(gòu)成的開源跨平臺(tái)計(jì)算機(jī)視覺庫,Qt是芬蘭Digia公司所有的一個(gè)跨平臺(tái)的C++圖形用戶界面應(yīng)用程序框架。Android平臺(tái)最初僅支持使用Java開發(fā)應(yīng)用,Qt on Android和Qt Quick框架的推出為開發(fā)者使用C/C++開發(fā)Android應(yīng)用提供了有力工具,也為Android中使用OpenCV快速開發(fā)圖像處理應(yīng)用提供了強(qiáng)大支持[1]。本文在PC機(jī)上建立了Qt for Android+Opencv的開發(fā)環(huán)境,可完成PC機(jī)應(yīng)用程序及Android 手機(jī)應(yīng)用的開發(fā)。Qt的版本為qt-opensource-windows-x86-android-5.3.0,Qt Creator的版本為3.1.1,NDK的版本為android-ndk-r9d,Opencv選擇2.4.9版本,用于Android應(yīng)用的是OpenCV-2.4.9-android。
1 圖像獲取與ROI提取
電表圖像通過手機(jī)攝像頭拍攝獲取,為rgb模式的彩色圖像??紤]到手持拍攝的可操作性,圖像獲取視窗應(yīng)盡量寬大,表盤讀數(shù)位于其中即可。這里設(shè)定圖像獲取視窗為長寬比2:1的區(qū)域,獲取的較具有代表性的電表圖像如圖1所示。
圖1(a)所示的電表圖像背景較為單一,圖1(b)所示的電表圖像背景較為雜亂。電表讀數(shù)區(qū)域?yàn)榱缓诘装鬃值恼麛?shù)(紅底白字的小數(shù)位一般無需讀?。?,需進(jìn)行提取。首先對(duì)圖像進(jìn)行均值低通濾波以降低噪聲,接著消除彩色像素對(duì)ROI提取可能產(chǎn)生的影響(本文規(guī)定r、g、b值中最大與最小值之比大于1.5即為彩色像素),即以灰度直方圖中峰值對(duì)應(yīng)的灰度值替代彩色像素的r、g、b值;消除彩色像素后,將圖像灰度化并使用OTSU算子對(duì)圖像進(jìn)行二值化,反轉(zhuǎn)黑白后利用OpenCV中的morphologyEx函數(shù)進(jìn)行閉運(yùn)算以填充和連通表盤背景,最后定位表盤讀數(shù)區(qū)域外輪廓,旋轉(zhuǎn)校正并進(jìn)行提取。提取過程如圖2所示。
2 圖像二值化與字符提取
圖像二值化是字符識(shí)別過程的關(guān)鍵步驟,其效果直接關(guān)系到字符提取和字符識(shí)別的成敗。電表讀數(shù)極易受反光及光照不均影響,其二值化與字符提取難度遠(yuǎn)高于車牌識(shí)別系統(tǒng)。圖3(a)所示的電表讀數(shù)圖像較為明顯地受到了反光和暗角的影響,經(jīng)典的全局OTSU算子[2]對(duì)其二值化的效果如圖3(b)所示,效果較差。對(duì)于復(fù)雜條件下的圖像二值化,目前的方法主要有根據(jù)背景光照分布對(duì)圖像進(jìn)行分割處理、背景光照均勻化、經(jīng)典的局部閾值算法、結(jié)合Canny算子和局部閾值的方法等[35],其對(duì)同時(shí)受反光和光照不均影響的電表讀數(shù)圖像二值化效果均不理想。
基于Opencv的圖像處理接口,本文提出了結(jié)合Canny邊緣檢測(cè)、局部自適應(yīng)閾值二值化與全局閾值二值化的電表讀數(shù)圖像二值化方法,具體方法為:
Step1:對(duì)如圖3(a)所示的電表讀數(shù)圖像,將其高度統(tǒng)一為100像素,灰度化并高斯平滑濾波。
Step2:對(duì)電表讀數(shù)圖像進(jìn)行雙閾值Canny檢測(cè),得到圖4(a)所示的邊緣圖像。
Step3:采用Opencv的局部自適應(yīng)閾值二值化函數(shù)對(duì)電表圖像進(jìn)行二值化,像素閾值T(x,y)的選取采用以像素點(diǎn)為中心的局部鄰域塊的高斯加權(quán)和(與高斯窗口的互相關(guān)),鄰域塊的大小為blocksize×blocksize,blocksize為奇數(shù),將其設(shè)置為電表讀數(shù)圖像高度的三分之一,二值化結(jié)果如圖4(b)所示。
Step4:以電表讀數(shù)灰度圖像的平均灰度值作為全局閾值對(duì)電表讀數(shù)圖像進(jìn)行二值化,結(jié)果如圖4(c)所示。
Step5:對(duì)如圖4(b)所示的每個(gè)前景點(diǎn),分別做如下處理:①若其在圖4(c)的圖像中對(duì)應(yīng)位置不是前景點(diǎn),則將其從前景點(diǎn)中剔除;②在如圖4(a)的邊緣圖像中,以前景點(diǎn)的對(duì)應(yīng)位置為中心的15×15鄰域(高度統(tǒng)一為100像素的電表讀數(shù)圖像中數(shù)字的筆畫寬度約為10像素)中統(tǒng)計(jì)邊緣點(diǎn)(非零像素)個(gè)數(shù),剔除其中鄰域邊緣點(diǎn)個(gè)數(shù)小于8的前景點(diǎn),得到如圖4(d)所示的二值化圖像。
由圖4可見,本文方法對(duì)受到光照不均及反光影像的電表讀數(shù)圖像具有較好的二值化效果,提取二值化后圖像中的所有外輪廓,并對(duì)其按尺寸、長寬比、位置(輪廓中心橫坐標(biāo)相同或接近的,選取其中尺寸最大的)進(jìn)行篩選,旋轉(zhuǎn)截取后即可得到電表讀數(shù)字符。篩選后的電表字符外輪廓定位和采用Zhang快速迭代算法[6]細(xì)化后的字符如圖5所示。
3 字符特征提取與識(shí)別
在研究過程中,使用手機(jī)攝像頭采集了3 000余幅電表圖像,利用本文方法對(duì)其進(jìn)行ROI提取、二值化及字符提取與細(xì)化,將提取的字符圖像大小統(tǒng)一為20×20像素,字符特征提取與神經(jīng)網(wǎng)絡(luò)訓(xùn)練由Qt編寫的PC機(jī)應(yīng)用程序完成,具體方法為:①對(duì)于數(shù)字0~9各選取1 000個(gè)圖像樣本,每個(gè)圖像樣本以其水平、垂直直方圖數(shù)據(jù)及15×15分辨率圖像像素信息構(gòu)成265維特征向量,構(gòu)成訓(xùn)練樣本數(shù)據(jù);②使用Opencv的CvANN_MLP類建立人工神經(jīng)網(wǎng)絡(luò)多層感知器模型,層數(shù)設(shè)定為3層,輸入層節(jié)點(diǎn)數(shù)與字符圖像特征向量維數(shù)相同,輸出層節(jié)點(diǎn)數(shù)為10,隱含層節(jié)點(diǎn)數(shù)設(shè)定為50,激活函數(shù)選取Sigmoid函數(shù)。通過訓(xùn)練樣本數(shù)據(jù)對(duì)神經(jīng)網(wǎng)絡(luò)進(jìn)行訓(xùn)練,將訓(xùn)練后的神經(jīng)網(wǎng)絡(luò)參數(shù)以XML文檔方式保存。
在進(jìn)行電表讀數(shù)識(shí)別時(shí),首先按本文方法進(jìn)行ROI提取、二值化及字符提取,對(duì)提取的字符由神經(jīng)網(wǎng)絡(luò)模型進(jìn)行分類識(shí)別,并按照字符中心位置在電表讀數(shù)圖像中的橫坐標(biāo)進(jìn)行排序,即可得到電表讀數(shù)。為驗(yàn)證技術(shù)的有效性,使用Qt for Android+Opencv開發(fā)環(huán)境開發(fā)了電表識(shí)別測(cè)試APP,APP中使用經(jīng)PC機(jī)應(yīng)用程序訓(xùn)練的神經(jīng)網(wǎng)絡(luò)模型,將其部署在華為榮耀3手機(jī)上。測(cè)試結(jié)果顯示,在圖像受光照不均及反光影像較小的情況下,電表讀數(shù)識(shí)別的正確率達(dá)到90%,取得了較好效果。在圖像受光照不均及反光影像較大時(shí),由于ROI提取及二值化效果不佳,因而識(shí)別效果較差。
4 結(jié)語
由測(cè)試結(jié)果可以看出,本文提出的Android下的機(jī)械式電表數(shù)字識(shí)別技術(shù)可有效實(shí)現(xiàn)電表讀數(shù)ROI提取,對(duì)易受光照不均及反光影響的電表讀數(shù)圖像二值化有較好效果,在Android平臺(tái)下通過Opencv人工神經(jīng)網(wǎng)絡(luò)多層感知器模型對(duì)電表讀數(shù)達(dá)到了較高的識(shí)別率,具有較高的應(yīng)用價(jià)值。
參考文獻(xiàn):
[1] 安曉輝.Qt on Android核心編程[M].北京:電子工業(yè)出版社,2014.
[2] OTSU N.A threshold selection method from gray-level histograms[J].IEEE Transactions on Systems Man and Cybernetic,1979,9(1):6266.
[3] 陳強(qiáng),朱立新,夏德深.結(jié)合Canny算子的圖像二值化[J].計(jì)算機(jī)輔助設(shè)計(jì)與圖形學(xué)學(xué)報(bào),2005,17(6):13021305.
[4] 郭佳,劉曉玉,吳冰,等.一種光照不均勻圖像的二值化方法[J].計(jì)算機(jī)應(yīng)用與軟件,2014,31(3):184186.
[5] 許海洋,馬龍龍,吳健.基于背景估計(jì)和邊緣檢測(cè)的文檔圖像二值化[J].計(jì)算機(jī)應(yīng)用與軟件,2014,31(8):196200.
[6] ZHANG T Y,SUEN C Y.A fast parallel algorithm for thinning digital patterns[J].Comm ACM,1984(27):236239.
(責(zé)任編輯:孫 娟)