本發(fā)明屬于數(shù)字圖像處理、模式識(shí)別技術(shù)領(lǐng)域,特別是一種魯棒的工業(yè)電表數(shù)字識(shí)別方法。
背景技術(shù):
從19世紀(jì)電的產(chǎn)生,以及20世紀(jì)電的普遍使用開始。在工業(yè)界中,電表就作為一種重要的工具,用來顯示企業(yè)中生成部門的各種數(shù)據(jù)。尤其是在電力行業(yè)中,電力部門為了統(tǒng)計(jì)各儀器的用電數(shù)據(jù),經(jīng)常安排專人進(jìn)行抄表工作?,F(xiàn)存的大量電表中,有很多位于偏遠(yuǎn)的、不便的、高危險(xiǎn)的位置。這就需要耗費(fèi)大量的人力物力安排工人抄表,并且由于工人的長期工作容易出現(xiàn)讀表錯(cuò)誤。當(dāng)然,隨著電力行業(yè)、信息產(chǎn)業(yè)的的不斷發(fā)展,一大批智能電表被研發(fā)出來,這種電表能夠自動(dòng)識(shí)別自身的數(shù)字和并且能夠傳輸?shù)娇刂葡到y(tǒng)。但是,需要將原先老式的電表都換成新的電表常常受到經(jīng)濟(jì)的限制,因此,此類電表未得到廣泛普及。
現(xiàn)有的一些工業(yè)電表中的數(shù)字識(shí)別算法存在的低識(shí)別率,不魯棒性等缺點(diǎn)。
技術(shù)實(shí)現(xiàn)要素:
本發(fā)明所要解決的技術(shù)問題是:提供一種魯棒的工業(yè)電表數(shù)字識(shí)別方法,通過Canny檢測(cè)邊緣算法能夠有效區(qū)分噪聲區(qū)域和數(shù)字區(qū)域,使得工業(yè)電表面板中的數(shù)字切割的更加準(zhǔn)確;通過使用KNN算法不僅可以有效提高數(shù)字識(shí)別算法的效率,也能保證數(shù)字識(shí)別的精度。
本發(fā)明為解決上述技術(shù)問題采用以下技術(shù)方案:一種魯棒的工業(yè)電表數(shù)字識(shí)別方法,包括如下步驟:
步驟1、首先將采集過來的工業(yè)電表圖像I_rgb轉(zhuǎn)換為灰度圖像I_gray,在灰度圖像上使用均值濾波,進(jìn)行初步去噪聲。
步驟2、對(duì)去完噪聲的灰度圖像I_noise采用Canny算子提取工業(yè)電表圖像的邊緣。Canny算子進(jìn)行邊緣檢測(cè)能有效抑制噪聲,同時(shí)能精確確定邊緣的位置。
步驟3、基于膨脹后的邊緣圖像I_dilate,先對(duì)圖像中含有數(shù)字的區(qū)域竟可能的通過經(jīng)驗(yàn)進(jìn)行粗定位。然后分別通過橫向、縱向投影法對(duì)數(shù)字區(qū)域進(jìn)行精準(zhǔn)定位切割。
步驟4、將精準(zhǔn)定位切割后含有數(shù)字的灰度圖像I_gray通過閾值法進(jìn)行二值化得到二值圖像I_binary;
步驟5、進(jìn)一步通過投影法,只進(jìn)行縱向投影,具體過程如步驟三,將數(shù)字區(qū)域切割為單個(gè)數(shù)字的小區(qū)域,
步驟6、基于KNN(K近鄰)算法,對(duì)單個(gè)數(shù)字識(shí)別,最后按步驟5考慮小數(shù)點(diǎn)位置,得到最終的電表讀數(shù)。
優(yōu)選的,步驟2所述Canny邊緣檢測(cè)算法流程為:
Step1:用高斯濾波器對(duì)初始圖像進(jìn)行平滑,類似于步驟一中的均值濾波;
Step2:用一階偏導(dǎo)的有限差分來計(jì)算梯度的幅值和方向;
Step3:對(duì)梯度幅值進(jìn)行非極大值抑制;
Step4:用雙閾值算法檢測(cè)和連接邊緣;
優(yōu)選的,步驟6所述利用KNN算法對(duì)測(cè)試圖像進(jìn)行分類識(shí)別的方法為:對(duì)于每一個(gè)測(cè)試圖片I_test,我們?cè)?0N張訓(xùn)練集I_train中找到與測(cè)試圖片IOU最大的K張,然后在K張訓(xùn)練集中,某個(gè)數(shù)字類別出現(xiàn)最多的即為測(cè)試圖片的數(shù)字。
優(yōu)選的,步驟2中的Canny邊緣檢測(cè)算法的閾值為0.6;步驟3中的投影向量切割的閾值thresh=15;步驟6中的訓(xùn)練集數(shù):N=10,KNN算法的K值為K=10。
本發(fā)明與現(xiàn)有技術(shù)相比,具有以下有益效果:1)本發(fā)明提出了一種魯棒高效的工業(yè)電表數(shù)字識(shí)別方法,通過canny算子檢測(cè)工業(yè)電表面板中的數(shù)字邊緣,可以有效定位并切割出數(shù)字區(qū)域;2)基于訓(xùn)練集中的數(shù)字,通過KNN算法構(gòu)造分類器,對(duì)待識(shí)別數(shù)字進(jìn)行分類;3)本發(fā)明的工業(yè)電表數(shù)字識(shí)別方法通過canny邊緣檢測(cè)能夠有效地區(qū)分噪聲區(qū)域和數(shù)字區(qū)域,使得算法更加魯棒;4)在識(shí)別數(shù)字時(shí)采用KNN算法不僅可以有效提高算法效率,也能使得數(shù)字識(shí)別更加準(zhǔn)確。
附圖說明
圖1是本發(fā)明工業(yè)電表的原圖。
圖2是本發(fā)明步驟一計(jì)算出的去噪后的灰度圖。
圖3是本發(fā)明步驟二Canny邊緣檢測(cè)算法檢測(cè)出來的圖像邊緣。
圖4是本發(fā)明步驟二對(duì)Canny檢測(cè)檢測(cè)出來的圖像邊緣進(jìn)行膨脹后的圖像。
圖5是本發(fā)明步驟三切割出來的含有數(shù)字的區(qū)域圖像。
圖6是本發(fā)明步驟四對(duì)切割出來的灰度圖像進(jìn)行二值化得到的二值圖。
圖7是本發(fā)明對(duì)二值圖進(jìn)行單個(gè)數(shù)字切割并識(shí)別的結(jié)果圖。
具體實(shí)施方式
結(jié)合附圖,本發(fā)明的一種魯棒的工業(yè)電表數(shù)字識(shí)別方法,工業(yè)電表中的數(shù)字識(shí)別算法主要應(yīng)用了圖像預(yù)處理、圖像分割、字符識(shí)別等圖像處理及模式識(shí)別相關(guān)算法。包括以下步驟:
步驟1、將采集到的工業(yè)電表圖像I_rgb轉(zhuǎn)換為灰度圖像I_gray,之后進(jìn)行濾波處理,去除噪聲;濾波處理時(shí)的均值濾波核為:均值濾波的過程即為卷積計(jì)算過程:式中,i,j為去完噪聲圖像的I_noise橫縱下標(biāo),m,n為均值濾波核K的橫縱下標(biāo)。
步驟2、對(duì)去完噪聲的灰度圖像I_noise采用Canny算子提取工業(yè)電表圖像的邊緣;并對(duì)邊緣圖像進(jìn)行形態(tài)學(xué)膨脹操作處理;
采用Canny算子提取工業(yè)電表圖像的邊緣的流程為:
Step1:用高斯濾波器對(duì)初始圖像進(jìn)行平滑處理;
Step2:用一階偏導(dǎo)的有限差分計(jì)算梯度的幅值和方向;
Step3:對(duì)梯度幅值進(jìn)行非極大值抑制;
Step4:用雙閾值算法檢測(cè)和連接邊緣;
對(duì)邊緣圖像I_canny進(jìn)行形態(tài)學(xué)膨脹操作得到膨脹后的圖像I_dilate計(jì)算公式為:其中strel(5)為膨脹的結(jié)構(gòu)元素。
所述Canny邊緣檢測(cè)算法的閾值為0.6,膨脹的結(jié)構(gòu)元素strel(5)的值為
步驟3、基于邊緣圖像,先對(duì)圖像中含有數(shù)字的區(qū)域進(jìn)行粗定位,然后通過投影法對(duì)數(shù)字區(qū)域進(jìn)行精準(zhǔn)定位切割;具體為:基于膨脹后的邊緣圖像I_dilate,先對(duì)圖像中含有數(shù)字的區(qū)域進(jìn)行粗定位,然后分別通過橫向、縱向投影法對(duì)數(shù)字區(qū)域進(jìn)行精準(zhǔn)定位切割,橫向投影向量為縱向投影向量為根據(jù)兩個(gè)投影向量v,設(shè)定閾值thresh,計(jì)算上下左右的四個(gè)切割點(diǎn)(up,down,left,right):=index(v<thresh),然后對(duì)數(shù)字區(qū)域進(jìn)行進(jìn)一步精細(xì)切割得到I_fine。投影向量切割的閾值thresh=15。
步驟4、將精準(zhǔn)定位切割后含有數(shù)字的灰度圖像通過閾值法進(jìn)行二值化處理;
步驟5、通過投影法,將數(shù)字區(qū)域切割為單個(gè)數(shù)字的小區(qū)域,切割完后識(shí)別單個(gè)數(shù)字右下角小數(shù)點(diǎn);具體如下:
步驟5-1、通過投影法,只進(jìn)行縱向投影,將數(shù)字區(qū)域切割為單個(gè)數(shù)字的小區(qū)域,切割點(diǎn)計(jì)算公式point:=index(v=0),切割完后得到單個(gè)數(shù)字的圖像I_single;
步驟5-2、針對(duì)每一張切割出來的單個(gè)數(shù)字圖片,繼續(xù)采用縱向投影,得到單個(gè)數(shù)字圖像的投影向量v_single;
步驟5-3、設(shè)定閾值th=row(I_single)/5,小數(shù)點(diǎn)的切割位置為point:=index(v_single<th),其中index()為向量的下標(biāo)計(jì)算公式;計(jì)算每個(gè)數(shù)字右下角小數(shù)點(diǎn)的切割距離,最大距離的數(shù)字即為含有小數(shù)點(diǎn)的數(shù)字,計(jì)算公式為:
步驟6、基于KNN算法,對(duì)單個(gè)數(shù)字識(shí)別,并識(shí)別小數(shù)點(diǎn),得到最終的電表數(shù)字。具體為:
步驟6-1、通過上述步驟切割單個(gè)數(shù)字圖像的方式制作訓(xùn)練集,每個(gè)數(shù)字制作N張圖片,因而10個(gè)數(shù)字共有10N張訓(xùn)練集I_train;
步驟6-2、對(duì)于每張測(cè)試圖片I_test,KNN算法中的距離函數(shù)為:
步驟6-3、對(duì)于每一個(gè)測(cè)試圖片I_test,我們?cè)?0N張訓(xùn)練集I_train中找到與測(cè)試圖片IOU最大的K張,然后在K張訓(xùn)練集中,某個(gè)數(shù)字類別出現(xiàn)最多的即為測(cè)試圖片的數(shù)字;
步驟6-4、按步驟5的方法確定小數(shù)點(diǎn)位置,得到最終的電表讀數(shù)。
所述訓(xùn)練集數(shù):N=10,KNN算法的K值為K=10。
本發(fā)明提出了一種魯棒高效的工業(yè)電表數(shù)字識(shí)別方法,通過canny算子檢測(cè)工業(yè)電表面板中的數(shù)字邊緣,可以有效定位并切割出數(shù)字區(qū)域。
下面詳細(xì)描述本發(fā)明的實(shí)施方式,所述實(shí)施方式的示例在附圖中示出,其中自始至終相同或類似的標(biāo)號(hào)表示相同或類似的元件或具有相同或類似功能的元件。下面通過參考附圖描述的實(shí)施方式是示例性的,僅用于解釋本發(fā)明,而不能解釋為對(duì)本發(fā)明的限制。
實(shí)施例
本發(fā)明首先通過canny算子檢測(cè)工業(yè)電表面板中的數(shù)字邊緣,可以有效定位并切割出數(shù)字區(qū)域;然后,基于訓(xùn)練集中的數(shù)字,通過KNN算法構(gòu)造分類器,對(duì)待識(shí)別數(shù)字進(jìn)行分類。具體步驟如下:
步驟1、首先將采集過來的工業(yè)電表圖像I_rgb,如圖1所示,轉(zhuǎn)換為灰度圖像I_gray,在灰度圖像上使用均值濾波,進(jìn)行初步去噪聲,如圖2所示。均值濾波核為:均值濾波的過程即為卷積計(jì)算過程:
步驟2、對(duì)去完噪聲的灰度圖像I_noise采用Canny算子提取工業(yè)電表圖像的邊緣,如圖3所示。Canny算子進(jìn)行邊緣檢測(cè)能有效抑制噪聲,同時(shí)能精確確定邊緣的位置。對(duì)邊緣圖像I_canny進(jìn)行形態(tài)學(xué)膨脹操作得到膨脹后的圖像I_dilate,如圖4所示,計(jì)算公式為:其中strel(5)為膨脹的結(jié)構(gòu)元素,其值為Canny邊緣檢測(cè)算法的閾值為0.6。
步驟3、基于膨脹后的邊緣圖像I_dilate,先對(duì)圖像中含有數(shù)字的區(qū)域竟可能的通過經(jīng)驗(yàn)進(jìn)行粗定位。然后分別通過橫向、縱向投影法對(duì)數(shù)字區(qū)域進(jìn)行精準(zhǔn)定位切割,橫向投影向量為縱向投影向量為根據(jù)兩個(gè)投影向量v,設(shè)定閾值thresh,計(jì)算上下左右的四個(gè)切割點(diǎn)(up,down,left,right):=index(v<thresh),然后對(duì)數(shù)字區(qū)域進(jìn)行進(jìn)一步精細(xì)切割得到I_fine,投影向量切割的閾值thresh=15,如圖5所示。
步驟4、將精準(zhǔn)定位切割后含有數(shù)字的灰度圖像I_gray通過閾值法進(jìn)行二值化得到二值圖像I_binary,如圖6所示;
步驟5、進(jìn)一步通過投影法,只進(jìn)行縱向投影,具體過程如步驟三,將數(shù)字區(qū)域切割為單個(gè)數(shù)字的小區(qū)域,切割點(diǎn)計(jì)算公式point:=index(v=0),切割完后得到單個(gè)數(shù)字的圖像I_single??紤]每一張切割出來的單個(gè)數(shù)字圖片,繼續(xù)采用縱向投影,得到單個(gè)數(shù)字圖像的投影向量v_single。設(shè)定閾值th=row(I_single)/5,小數(shù)點(diǎn)的切割位置為point:=index(v_single<th),計(jì)算每個(gè)數(shù)字右下角小數(shù)點(diǎn)的切割距離,最大距離的數(shù)字即為含有小數(shù)點(diǎn)的數(shù)字,計(jì)算公式為:
步驟6、基于KNN(K近鄰)算法,對(duì)單個(gè)數(shù)字識(shí)別,首先我們先通過步驟一到五切割單個(gè)數(shù)字圖像的方式制作訓(xùn)練集,每個(gè)數(shù)字我們制作N張圖片,因而10個(gè)數(shù)字共有10N張訓(xùn)練集I_train。對(duì)于每張測(cè)試圖片I_test,KNN中的距離函數(shù)定義為:最后按步驟五考慮小數(shù)點(diǎn)位置,得到最終的電表讀數(shù),其中訓(xùn)練集數(shù):N=10,KNN算法的K值為K=10,如圖7所示。
由上可知,本發(fā)明提出了一種魯棒高效的工業(yè)電表數(shù)字識(shí)別方法,通過canny算子檢測(cè)工業(yè)電表面板中的數(shù)字邊緣,可以有效定位并切割出數(shù)字區(qū)域。