孫國棟,江亞杰,徐 亮,胡 也,席志遠
(湖北工業(yè)大學(xué) 機械工程學(xué)院,湖北 武漢 430068)
電力計量儀器的精度對于測量至關(guān)重要,需定期檢測其精確度。而傳統(tǒng)的數(shù)顯式儀表不全都具備通信接口,無法直接獲取標(biāo)準(zhǔn)測量儀表和被測儀表的數(shù)值,只能通過雙相機分別采集其在快速升壓和降壓過程中的圖像,自動識別儀表讀數(shù),最后對比標(biāo)準(zhǔn)表和被測表的結(jié)果,以判定被測表的精確度[1]。然而,在儀表數(shù)字變化時,部分儀表會出現(xiàn)嚴(yán)重重影,光照不均的影響也較為突出,使得儀表字符無法正常二值化。
針對光照不均的影響,常用的圖像增強算法包括灰度變換方法和直方圖均衡化[3-4]。Kim等[5]使用快速迭代直方圖方法增強圖像的對比度,同時使用移動模板對圖像的各個部分進行部分重疊的字塊直方圖均衡化。近年來,Retinex理論[6]研究逐漸成為圖像增強、去霧的熱點,并衍生出多種改進算法,如單尺度Retinex(SSR)[7]、同態(tài)濾波的Retinex[8]、雙邊濾波的Retinex[9]。劉健等[10]提出了基于Retinex理論與LIP模型的低照度圖像增強方法,在HSV顏色空間,結(jié)合引導(dǎo)濾波與高斯平滑估計圖像V分量的照度分量,利用LIP模型替代傳統(tǒng)對數(shù)運算。這些方法機制簡單并且具有較低復(fù)雜度,然而都容易丟失圖像細節(jié)和增加過多的噪聲。
常用的二值化方法主要分為兩大類:全局閾值算法和局部閾值算法。全局閾值算法主要包括大律法(Otsu)、最大熵法、迭代法等,主要適用于光照均勻、灰度直方圖有明顯雙峰的圖像。局部閾值算法主要包括Sauvola算法、Niblack算法、Bernsen算法等,主要適用于光照不均的圖像。以上算法都只能分離儀表圖像的背景,無法分離數(shù)字重影。
為克服圖像光照不均而導(dǎo)致的二值化困難,筆者根據(jù)文獻[11]的方法,分別對具有強光照、弱光照、無底光的圖像進行增強。通過對RGB彩色圖進行灰度化,以灰度圖的灰度級分布統(tǒng)計量作為輸入,利用誤差反向傳播神經(jīng)網(wǎng)絡(luò)(back propagation neural network,BPNN)建立儀表字符圖像全局閾值預(yù)測模型,預(yù)測理想二值化全局閾值,以分離重影。
筆者結(jié)合提出的BP神經(jīng)網(wǎng)絡(luò)[12]閾值預(yù)測算法和改進LeNet-5的字符識別模型,提出了一種新的儀表字符識別方法,具體流程如圖1所示,其中BP神經(jīng)網(wǎng)絡(luò)模型和改進LeNet-5模型的訓(xùn)練過程提前完成,未在流程圖中畫出,主要包括以下步驟:
圖1 儀表字符識別流程圖Figure 1 Flow chart of instrument character recognition
(1)攝像頭采集圖像,圖像增強并灰度化。
(2)計算灰度圖像的灰度級分布統(tǒng)計量,作為已經(jīng)訓(xùn)練好的BP神經(jīng)網(wǎng)絡(luò)閾值預(yù)測模型的輸入,預(yù)測理想的全局閾值,對圖像進行二值化。
(3)去除二值圖的小連通域,降低噪聲對圖像的影響。
(4)進行傾斜矯正,并將二值圖分割成單個字符。
(5)對單個字符圖像進行尺寸歸一化,使其達到改進LeNet-5模型輸入圖像尺寸統(tǒng)一的要求。
(6)將尺寸歸一化的圖像輸入到訓(xùn)練好的改進LeNet-5模型進行識別,得到儀表字符的識別結(jié)果。
其中,圖像增強采用基于非線性函數(shù)變換的彩色圖像校正方法,先將原始RGB圖像轉(zhuǎn)換到HSV顏色空間,對V分量采用多尺度加權(quán)高斯濾波的方式估計照射分量,然后根據(jù)估計光照分量的分布調(diào)整自適應(yīng)增強函數(shù)的參數(shù),得到兩幅圖像。利用圖像融合從圖像中提取重要信息來增強V分量。最后,將圖像從HSV空間轉(zhuǎn)換回RGB空間[11]。增強后的效果如圖2所示。
圖2 光照不均實驗對比Figure 2 Uneven illumination experiment comparison
從圖2可以看出,增強后的圖像相比原圖亮度得以提高,整體對比度有明顯提升,極大地提高了圖像質(zhì)量。增強后彩色圖像的灰度化使用MATLAB的函數(shù)模型rgb2gray完成。
為了驗證本文算法的有效性,制作了一個含有復(fù)雜重影的儀表數(shù)字庫。通過大恒MER-131-210U3C相機與50 mm鏡頭采集5 000張多種旋轉(zhuǎn)角度、不同污漬同光照下電壓快速變化時FLUKE289C萬用表的圖像,不同的污漬狀態(tài)是通過在數(shù)字顯示處加灰塵和水漬得到,采集過程中固定圖像為1 141像素×317像素,并通過手動調(diào)整相機位置使得儀表數(shù)字全部出現(xiàn)在采集圖像中,部分樣本如圖3所示。
圖3 部分儀表數(shù)字樣本Figure 3 Digital sample of some instruments
采集的樣本需進行灰度化處理,再計算出樣本的灰度級分布統(tǒng)計量。經(jīng)分析發(fā)現(xiàn),儀表字符中重影的灰度明顯比真實數(shù)字低。圖4(a)中顯示的實際數(shù)字是31.936,而數(shù)字“1”、“9”和“3”有明顯拖影,實際數(shù)字灰度偏暗,拖影數(shù)字偏亮,兩者灰度存在明顯區(qū)別,圖4(a)對應(yīng)的灰度直方圖如圖4(c)所示,根據(jù)灰度直方圖手動調(diào)整二值化全局閾值,將灰度直方圖分為前景和背景,前景則是最理想二值化結(jié)果,如圖4(b)所示,二值化結(jié)果中無拖影,且數(shù)字完整,基本無噪聲。
圖4 重影字符的理想二值化過程Figure 4 The ideal binarization process of ghost characters
灰度級分布統(tǒng)計量是灰度直方圖數(shù)據(jù)的來源,直接反映了圖像的灰度信息,包含了圖片的拖影和真實數(shù)字以及背景的灰度信息,且與二值化全局閾值密切相關(guān)。筆者以灰度級分布統(tǒng)計量作為BP神經(jīng)網(wǎng)絡(luò)預(yù)測模型的輸入,理想全局閾值作為網(wǎng)絡(luò)的輸出,對模型進行訓(xùn)練,并將預(yù)測值與實際值進行比較,最終實現(xiàn)BP神經(jīng)網(wǎng)絡(luò)[12]自動預(yù)測儀表數(shù)字圖像的最佳二值化全局閾值。
在網(wǎng)絡(luò)訓(xùn)練前,由于各灰度級統(tǒng)計量相差過大,導(dǎo)致網(wǎng)絡(luò)的訓(xùn)練時間增加,甚至無法收斂。為保證網(wǎng)絡(luò)的收斂速度和可靠性,必須對樣本數(shù)據(jù)進行歸一化處理。筆者采用最大值歸一化處理:
(1)
通過BP神經(jīng)網(wǎng)絡(luò)訓(xùn)練輸出全局閾值的訓(xùn)練標(biāo)簽根據(jù)經(jīng)驗選取。從拍攝的圖像庫中選取4 000張樣本,選取每個樣本合理的全局閾值的最小值和最大值,并取平均值作為參考標(biāo)準(zhǔn),手動調(diào)整直到圖像清晰,此時對應(yīng)的閾值即是理想二值化閾值,訓(xùn)練樣本的數(shù)量為留下的4 000張樣本的60%,測試樣本為剩余的40%。
對訓(xùn)練樣本進行預(yù)處理并制作閾值標(biāo)簽后,設(shè)計BP閾值預(yù)測網(wǎng)絡(luò)的參數(shù),使其能夠通過樣本的灰度級分布統(tǒng)計量預(yù)測出理想的二值化全局閾值。需要設(shè)計的參數(shù)包括隱含層的層數(shù)和節(jié)點數(shù)、節(jié)點轉(zhuǎn)移函數(shù)和訓(xùn)練函數(shù)。
在實際應(yīng)用中,隱含層一般為1~2層,節(jié)點數(shù)大多根據(jù)以下經(jīng)驗公式[13]選擇:
(2)
式中:l為隱含層節(jié)點數(shù);n為輸入節(jié)點數(shù);m為輸出節(jié)點數(shù);a為1~10的整數(shù)。
BP閾值預(yù)測網(wǎng)絡(luò)輸入為256維的灰度級分布統(tǒng)計量,輸出為單輸出,則n和m分別設(shè)置為255和1,即隱含層節(jié)點數(shù)的范圍為17~26。筆者選取不同的節(jié)點數(shù)和網(wǎng)絡(luò)層數(shù)對網(wǎng)絡(luò)進行訓(xùn)練,比較不同情況下的均方根誤差ERM和相關(guān)系數(shù)R2[14]來評價訓(xùn)練網(wǎng)絡(luò)的好壞。均方根誤差衡量實際值和預(yù)測值之間的偏差,其值越小,模型越好。相關(guān)系數(shù)衡量預(yù)測值與實際結(jié)果的精確度,其值越接近于1,越精確。均方根誤差和相關(guān)系數(shù)計算公式如下:
(3)
(4)
式中:N表示測試樣本總數(shù);ax為第x個樣本的理想閾值;gx為第x個樣本的預(yù)測閾值。
圖5給出了不同隱含層數(shù)和節(jié)點數(shù)下的均方根誤差值和相關(guān)系數(shù),其中第2層隱含層的節(jié)點數(shù)為0時,代表只有1個隱含層。由實驗結(jié)果可以看出,當(dāng)有兩個隱含層且節(jié)點數(shù)都為25時,均方根誤差最小,相關(guān)系數(shù)最接近于1,此時隱含層的層數(shù)和節(jié)點數(shù)最優(yōu)。因此,選取最優(yōu)的隱含層結(jié)構(gòu)為兩隱含層,各層的節(jié)點數(shù)均為25。
圖5 不同隱含層數(shù)和節(jié)點數(shù)下的均方根誤差和相關(guān)系數(shù)Figure 5 Root-mean-square error and correlation coefficient under different hidden layers and nodes
節(jié)點傳遞函數(shù)對于預(yù)測的精度有著重要的影響[15],筆者在Logsig、Purelin和Tansig 3種節(jié)點傳遞函數(shù)中進行選擇。不同節(jié)點傳遞函數(shù)的訓(xùn)練結(jié)果如表1所示,由表1可以看出,當(dāng)隱含層和輸出層函數(shù)都為Tansig時,相關(guān)系數(shù)最接近于1,均方根誤差也最小。因此,筆者選擇Tansig作為隱含層和輸出層的節(jié)點傳遞函數(shù)。
表1 不同節(jié)點傳遞函數(shù)的訓(xùn)練結(jié)果Table 1 Training results of transfer functions of different nodes
BP訓(xùn)練函數(shù)根據(jù)網(wǎng)絡(luò)的輸入和目標(biāo)期望輸出,修正BP網(wǎng)絡(luò)的權(quán)值和閾值,最終達到設(shè)定的網(wǎng)絡(luò)性能指標(biāo),其直接影響B(tài)P模型的預(yù)測精度[16]。筆者分別對Traingdx、Traingdm、Traingd、Trainrp、Trainlm、Traincgb和Trainscg等7種訓(xùn)練函數(shù)進行了測試,對比實驗結(jié)果見表2。由表2可以看出,Traingdm訓(xùn)練函數(shù)對應(yīng)模型的相關(guān)系數(shù)最接近于1,均方根誤差也最小,優(yōu)于其他6種訓(xùn)練函數(shù)。因此,筆者選擇Traingdm作為BP訓(xùn)練函數(shù)。
表2 不同訓(xùn)練函數(shù)的訓(xùn)練結(jié)果Table 2 Training results of different training functions
實驗環(huán)境如下:Windows 10系統(tǒng),Intel Core i5處理器,8 GB內(nèi)存,編程軟件為MATLAB2017a。
筆者選取大律法、最大熵法、迭代法、Sauvola算法、Niblack算法和Bernsen算法等6種經(jīng)典的全局閾值和局部閾值算法作對比。實驗所用的樣本均是增強后的實驗樣本,結(jié)果如圖6所示,各二值化方法的時間比較如表3所示。不同二值化算法的單張樣本處理時間由相同條件下處理1 600張測試樣本的總時間取平均求得。
表3 不同二值化算法的時間比較Table 3 Time comparison of different binarization algorithms
圖6 不同算法的二值化結(jié)果Figure 6 Binary results of different algorithms
由實驗結(jié)果可以看出,筆者提出的BP預(yù)測閾值的二值化方法效果最好,基本能分離重影;而其他6種方法二值化效果較差,無法分離重影。而且增強后二值化能分割出完整的字符。說明了本文算法的有效性。單個樣本的處理時間僅0.036 8 s,僅比大律法和迭代法慢,說明本文算法的實時性較好,滿足儀表字符的快速識別要求。而本文算法的網(wǎng)絡(luò)結(jié)構(gòu)簡單,由于輸入層和最終輸出層結(jié)點數(shù)量是確定的,可以視為常量,中間的隱含層節(jié)點數(shù)均設(shè)定為25,反向傳播的時間復(fù)雜度和前饋計算相同,所以對一個樣本的前饋計算時間復(fù)雜度應(yīng)該是O(N)。
傾斜矯正算法[17]采用先創(chuàng)建最小外接矩形并計算出傾斜角度,后仿射變換,具體過程如圖7所示。
有一天,我正在跟兄弟們聊劇本,她打了個電話來,說她要離開臺灣一陣,今天想來見見我。我說好啊,來吧!她來的時候,門沒鎖,一推門進來,我就看她還穿著晚禮服和高跟鞋,應(yīng)該是剛剛表演完,非常美麗。我旁邊所有的兄弟都驚呆了。
圖7 校正算法流程圖Figure 7 Flow chart of calibration algorithm
字符分割算法采用投影法,包括垂直投影和水平投影兩步,可以很好地對經(jīng)過傾斜矯正的二值化儀表字符進行分割。分割過程如圖8所示,由圖8可以看出,數(shù)字、小數(shù)點和“VAC”字符水平投影的區(qū)間不同。
圖8 投影法分割流程圖Figure 8 Flow chart of projection method
筆者主要考慮電壓變化下儀表數(shù)字識別,而“VAC”字符不會隨電壓改變而改變,小數(shù)點可以直接通過水平投影區(qū)間判斷,只需要識別重影數(shù)字,因此,在分割時只保留數(shù)字。
LeNet-5是適用于手寫字符識別的經(jīng)典卷積神經(jīng)網(wǎng)絡(luò),主要包括1個輸入層、1個輸出層、2個卷積層、2個池化層和3個全連接層。筆者對LeNet-5進行了改進,并應(yīng)用于儀表字符識別,主要改進如下:
(1)LeNet-5使用的sigmoid激活函數(shù)會出現(xiàn)梯度消失問題且泛化能力差,而ReLU可以很好地解決此問題,并且收斂速度更快,故采用ReLU替換sigmoid函數(shù)。
(2)使用RMSprop優(yōu)化算法可以解決學(xué)習(xí)率選擇困難和避免陷入局部最小值的問題,且收斂速度更快,因此采用RMSprop優(yōu)化算法更新權(quán)重和偏置。
對于采集的重影字符庫,傳統(tǒng)大律法二值化后單個字符圖像如圖9所示,圖像包含大量重影,難以辨別顯示的數(shù)字。然而,本文算法分割得到單個字符如圖10所示,圖像基本不包含重影,可以達到識別要求。
圖9 大律法二值化單個字符部分樣本圖Figure 9 A part of sample image of the binarization of a single character in the Great Law
圖10 本文算法分割后單字符部分樣本圖Figure 10 Part of Sample image of single-character after segmentation algorithm in this paper
將訓(xùn)練樣本和測試樣本分割后的單個字符進行數(shù)字歸類,制作數(shù)字標(biāo)簽,使用訓(xùn)練樣本和測試樣本分別對改進LeNet-5模型進行訓(xùn)練和測試。
改進LeNet-5和原始的LeNet-5參數(shù)設(shè)置如下:輸入圖像為32像素×32像素,訓(xùn)練周期為3 000,batch size為64,學(xué)習(xí)率為0.000 1。SVM使用的LIBSVM工具包,采用線性核函數(shù)。HOG特征提取使用的是MATLAB自帶函數(shù),其cell size設(shè)置為3×3。各參數(shù)由多次實驗取平均值得到。
實驗結(jié)果如表4所示,由表4可以看出,改進LeNet-5和其他方法都能達到很高的識別率,表明本文二值化算法性能好,二值化后樣本區(qū)分度高,但是改進LeNet-5不需要手動提取特征,在單個樣本識別速度上比其他方法更快,雖然改進LeNet-5訓(xùn)練時間更長,但是訓(xùn)練過程可以預(yù)先完成,不影響實時識別。因此,改進LeNet-5更適合儀表數(shù)字的實時識別。
表4 字符識別結(jié)果Table 4 Character recognition results
根據(jù)本文提出的儀表重影字符識別方法,并通過MATLAB設(shè)計GUI交互界面,可以準(zhǔn)確識別出儀表重影字符上顯示的數(shù)字,如圖11所示。
圖11 儀表重影識別交互界面Figure 11 Instrument ghost recognition interactive interface
筆者提出了一種基于BP神經(jīng)網(wǎng)絡(luò)的二值化方法,根據(jù)重影數(shù)字圖像的灰度級分布統(tǒng)計量預(yù)測理想二值化全局閾值,在不同光照情況下該二值化方法能夠有效地消除儀表數(shù)字刷新時形成的重影。并采用改進LeNet-5對分割后的二值化單個字符進行識別。實驗結(jié)果表明,提出的二值化方法優(yōu)于現(xiàn)有的大律法、最大熵法、迭代法、Sauvola算法、Niblack算法和Bernsen算法,改進LeNet-5網(wǎng)絡(luò)優(yōu)于傳統(tǒng)HOG+SVM算法和原始的LeNet-5網(wǎng)絡(luò),具有很高的實用價值。