沈美麗
(青島理工大學(xué) 理學(xué)院,山東 青島 266520)
傳統(tǒng)的機械式電表通過電子屏顯示數(shù)據(jù),無法將數(shù)據(jù)導(dǎo)出,主要依靠人為觀察數(shù)據(jù)、記錄、分析和判斷,不僅費時而且人工成本較高。隨著社會的進步和電子技術(shù)的發(fā)展,傳統(tǒng)的機械電表正逐步被電子式電表和智能電表取代。智能電表利用圖像處理方法設(shè)計的自動化檢測系統(tǒng),自動對數(shù)據(jù)進行記錄和判斷,減少了出錯率,節(jié)省了人力成本的投入,增強了數(shù)據(jù)記錄的可靠性并加快了檢測速度。
本文設(shè)計了一種基于數(shù)字圖像處理的根據(jù)實際電表中數(shù)字輪廓特征進行數(shù)字檢測與識別的方法,整體算法流程如圖1 所示。數(shù)字檢測部分利用邊緣檢測進行特征區(qū)域定位,確定數(shù)字位置然后進行框選,針對實際場景對框選數(shù)字進行修正,確定整體數(shù)字長度后計算數(shù)字個數(shù)并對軸和軸進行繪制,實現(xiàn)對電表圖像的數(shù)字分割。數(shù)字識別是將分割后單獨的數(shù)字圖像送入K 最近鄰算法(KNN)進行訓(xùn)練,通過調(diào)用訓(xùn)練后的模型尋找最近鄰結(jié)果,從而有效識別分割后的數(shù)字。這樣就完成了對數(shù)字電表的檢測和識別。
圖1 電表識別整體算法流程
數(shù)字檢測部分主要包括提取感興趣區(qū)域、框選數(shù)字、框選修正和數(shù)字切割,算法流程如圖2 所示。實際電表情況中,數(shù)字格式統(tǒng)一且大小相近,每位數(shù)字占據(jù)一個小矩形,略微的傾斜對數(shù)字切割影響較小。針對以上特點,利用輪廓特征對圖像中識別出的矩形框進行篩選和修正,解決首末位數(shù)字的檢測問題。再通過修正后的矩形框信息對數(shù)字進行切割,并送入數(shù)字識別部分。
圖2 數(shù)字檢測部分算法流程
通過攝像頭拍攝獲取彩色的電表圖像,由得到的樣本圖像可知,圖像獲取視窗基本涵蓋全部電子屏幕,讀數(shù)位于屏幕右側(cè),屏幕區(qū)域邊框明顯,亮度與背景有明顯區(qū)別。圖3 為所選取的幾幅有代表性的電表圖像。
圖3 老式電表樣本圖片
為實現(xiàn)對數(shù)字的準(zhǔn)確切割,將電表屏幕作為感興趣區(qū)域(Region of Interest,ROI)提取是首要步驟。因為采集到的圖像是彩色圖像,首先對圖像進行灰度化、二值化處理;隨后檢測圖像外部矩形框,選擇面積最大的外部矩形框作為屏幕區(qū)域,對該區(qū)域的寬、高進行統(tǒng)一化處理,適當(dāng)縮小至數(shù)字區(qū)域以方便后續(xù)步驟,相同的寬高可保證數(shù)字具有相似的尺寸。ROI 區(qū)域提取過程如圖4 所示。
圖4 ROI 區(qū)域提取過程
框選數(shù)字及框選修正是數(shù)字檢測部分的關(guān)鍵步驟,其效果直接關(guān)系到數(shù)字提取和數(shù)字識別的成敗。對提取出的ROI 區(qū)域進行灰度化后作邊緣檢測,可更加清晰地觀察到數(shù)字位置。邊緣檢測后線段較亂且不連續(xù),比如數(shù)字0 中間斷開,進行輪廓檢測時會檢測為2 個小矩形,因此在檢測外部輪廓前需對邊緣檢測結(jié)果進行膨脹處理,使數(shù)字融為一體,檢測外部輪廓完成初步框選。數(shù)字框選過程如圖5 所示。
圖5 數(shù)字框選過程
初步框選結(jié)果主要存在的普遍問題如下:
1)由于電表屏幕中除待檢測數(shù)字之外的其他字符存在,輪廓中包含其他字符干擾。
2)電子屏幕的傾斜使得ROI 提取裁剪后仍可觀察到屏幕邊緣,導(dǎo)致檢測出較大的輪廓。
3)數(shù)字之間距離由于點的存在將兩個數(shù)字連在一起,即多數(shù)字檢測為單一矩形框。
4)數(shù)字最后一位與屏幕右側(cè)字符相連,檢測出的數(shù)字輪廓較大,對普遍問題進行框選修正。
2.2.1 排除非數(shù)字框
觀察輪廓檢測結(jié)果,單獨字符檢測出的矩形框面積較小,而包含屏幕邊緣的矩形框則面積過大。數(shù)字面積介于兩者之間,所有圖片在提取ROI 區(qū)域后數(shù)字大小相近,可通過面積粗略排除部分非數(shù)字框。經(jīng)檢測,單個數(shù)字(1除外)所占面積大約為1 200,數(shù)字1由于比較窄,面積約為500。考慮到數(shù)字相連的情況,兩數(shù)字相連面積在2 500~2 900,且不排除3 個數(shù)字相連的情況。在本文中設(shè)置的篩選區(qū)間為(470,4 000),不在該區(qū)間內(nèi)的矩形框全部排除。經(jīng)此粗略排除后,發(fā)現(xiàn)依然存在面積符合但不包含數(shù)字的輪廓框,如圖6所示。
圖6 誤檢輪廓框舉例
圖6 誤檢的情況是在其他樣本檢測過程中實際發(fā)生的,即面積符合篩選要求,但過于細長或位置明顯錯誤。待檢測數(shù)字的寬、高及位置具有明顯特征,通過限制矩形框的寬、高及坐標(biāo)的位置做進一步篩選,保證剩余矩形框均為數(shù)字。在該樣本集中,數(shù)字高度大約為55,設(shè)置選擇區(qū)間為(0,55),數(shù)字寬度由于相連變化較大,兩位數(shù)字寬度在55 左右,設(shè)置篩選區(qū)間為(0,65)。為排除緊貼上邊緣及圖像下半部分的輪廓框,設(shè)置輪廓框的縱坐標(biāo)篩選區(qū)間為(5,37)。至此,基本可排除所有非數(shù)字框的情況。
2.2.2 數(shù)字相連情況
排除非數(shù)字框后,需對單個數(shù)字的寬、高進行統(tǒng)一。對于高度檢測低于50 的矩形框,均置50。在后續(xù)數(shù)字切割(具體見2.3 節(jié))步驟中,所需要的矩形框信息為整個數(shù)字輪廓的邊沿信息,如圖7a)紅色框所示,即明確左右邊沿即可。首位數(shù)字只要在框中,無論是否與后位數(shù)字相連都不會影響左邊沿,但末位數(shù)字的右邊沿由于字符影響導(dǎo)致相連則需要進行處理。
在類rect 中信息包含矩形框的左上角坐標(biāo)(,),矩形的寬和高。對于相連數(shù)字位,寬度一般在30 以上,單個數(shù)字(除數(shù)字1)寬度在25 左右。在不考慮數(shù)字1的情況下,對所有檢測框?qū)挾戎?5 即可保證相連數(shù)字位只保留靠近左邊沿的部分,同時最后一位也會舍棄字符部分只保留數(shù)字。修正前后的示意圖如圖7 所示。
圖7 普遍情況修正前后效果圖
在出現(xiàn)數(shù)字1 的情況下,數(shù)字1 長度小于25,相當(dāng)于一位正常數(shù)字的1 2,所占位置貼近該位數(shù)字的右邊沿則需要進行修正,將該輪廓沿右邊沿向左推25。若是數(shù)字1 位于首位且與后一位數(shù)字相連,此時矩形框?qū)挾确秶鸀椋?8,44),調(diào)整方式相同,向左推55 即可,修正效果如圖8 所示。
圖8 含數(shù)字1 的修正前后效果圖
完成對數(shù)字的準(zhǔn)確框選后,需要對數(shù)字進行切割制作訓(xùn)練樣本集,訓(xùn)練完成后將切割數(shù)字送入識別部分進行識別。
2.3.1 切割軸
將所有返回的修正后矩形框信息按照左上角坐標(biāo)進行排序。排序后,第一個矩形框的左邊沿作為整體的左邊沿,最后一個矩形框的右邊沿作為整體的右邊沿。數(shù)字區(qū)域的整體寬度為右邊沿坐標(biāo)減去左邊沿坐標(biāo)。數(shù)字寬度為25,通過整體寬度除數(shù)字寬度計算出數(shù)字個數(shù),根據(jù)數(shù)字個數(shù)等間隔分割整體寬度,繪制軸垂直線段將數(shù)字之間分隔開。
該步驟對框選的準(zhǔn)確度要求較高,在測試過程中發(fā)現(xiàn),檢測過程中存在數(shù)字漏檢的情況,問題主要存在于數(shù)字最后一位,由于字符等干擾無法準(zhǔn)確框選出數(shù)字導(dǎo)致遺漏,如圖9 所示。出現(xiàn)漏檢時,在框選修正部分是無法對未檢測出的矩形框進行修正的,因此需要在切割時進行調(diào)整,檢測最后一個右邊沿的坐標(biāo)是否在最后一位的范圍內(nèi),若小于該范圍則令最后一個右邊沿向右推進30,調(diào)整后可正常識別漏檢最后一位的情況。
圖9 切割調(diào)整數(shù)字漏檢
2.3.2 切割軸
切割軸包括繪制上邊沿及下邊沿。上邊沿的繪制中,對所有矩形框按照左上角坐標(biāo)進行排序,排序后選擇坐標(biāo)最小值作為上邊沿的坐標(biāo)繪制即可。下邊沿的繪制中,對所有矩形框按照左上角坐標(biāo)與矩形框高度的和進行排序,排序后選擇最大值作為下邊沿的坐標(biāo)繪制即可。
完成數(shù)字切割后,將每個切割后的獨立的數(shù)字圖片提取出來,進行下一步處理即可。
K 最近鄰(K?Nearest Neighbor,KNN)分類算法是數(shù)據(jù)挖掘分類技術(shù)中最簡單的方法之一。數(shù)字識別部分包括KNN 訓(xùn)練和KNN 識別,具體算法流程如圖10 所示。KNN 算法的核心思想是如果一個樣本在特征空間中的個最相鄰的樣本中的大多數(shù)屬于某一個類別,則該樣本也屬于這個類別,并具有這個類別上樣本的特性。該方法在確定分類決策上,只依據(jù)最鄰近的一個或者幾個樣本的類別來決定待分樣本所屬的類別。在KNN 中,通過計算對象間距離來作為各個對象之間的非相似性指標(biāo),避免了對象之間的匹配問題,距離一般使用歐氏距離或曼哈頓距離,同時,KNN 通過依據(jù)個對象中占優(yōu)的類別進行決策,而不是單一的對象類別決策。歐氏距離和曼哈頓距離分別表示為:
圖10 數(shù)字識別部分具體算法流程
通過數(shù)字檢測步驟得到切割后的數(shù)字,保存圖片制作訓(xùn)練集,部分樣本圖如圖11 所示。將數(shù)字分為0~9 共計10 類,將每一類圖片送入KNN 模型進行訓(xùn)練,生成對應(yīng)模型。完成訓(xùn)練后,在實際識別過程中,只需調(diào)用訓(xùn)練好的模型對輸入的數(shù)字圖片尋找最近鄰結(jié)果,輸出結(jié)果即可。
圖11 訓(xùn)練集部分樣本
電表圖片數(shù)量有限,訓(xùn)練集樣本數(shù)目較少,部分識別結(jié)果展示如圖12 所示。由于測試圖片數(shù)量不夠豐富,檢測精度估計在92%以上。
圖12 部分電表識別結(jié)果展示
檢測錯誤主要為兩類情況:第一,最后一位為數(shù)字1時,與后字母連接導(dǎo)致識別位置出錯,切割出現(xiàn)問題;第二,圖片傾斜,切割出現(xiàn)問題。檢測錯誤情況如圖13所示。
圖13 檢測錯誤情況
本文主要利用電表數(shù)字輪廓特征在提取出ROI 區(qū)域后實現(xiàn)對數(shù)字的檢測,通過邏輯判斷對數(shù)字檢測結(jié)果進行修正,完成對數(shù)字的準(zhǔn)確切割;再制作訓(xùn)練集并送入KNN 得到數(shù)字識別模型,可實現(xiàn)對電表數(shù)字的有效識別,達到了較高的識別率,具有較高的應(yīng)用價值。但由結(jié)果可知,對于幾類特殊情況檢測上仍存在識別錯誤,有待進一步改進。