劉朋遠 田 瑞 周媛奉 竇圣霞 樊 博 胡循勇
1(國網(wǎng)寧夏營銷服務中心(計量中心) 寧夏 銀川 750000) 2(四川大學電氣工程學院 四川 成都 610065)
智能電表是智能電網(wǎng)中重要的基礎設備,在其儲存、運輸和安裝過程中可能出現(xiàn)芯片混用、錯用等問題[1],故有必要對智能電表的芯片型號進行檢測。光學字符識別(OCR)是比較常用的圖像字符識別技術(shù),圖像二值化則是該技術(shù)最重要的步驟之一。由于背景復雜、拍攝角度和光線強弱等眾多環(huán)境因素的影響,拍攝的芯片圖像會出現(xiàn)亮度不均勻以及部分字符大小不一等問題,使得二值化效果不理想,進而影響后續(xù)的字符識別結(jié)果[2]。
二值化是指根據(jù)圖像中的目標信息與其背景在灰度特性上的差異來確定閾值,從而由劃分的兩個灰度值來表示圖中的目標和背景。目前的二值化算法中按照閾值計算的空間區(qū)域可分為兩大類:全局閾值算法和局部閾值算法[3]。全局閾值算法是根據(jù)整幅圖像的灰度值來計算全局的閾值,常用的全局閾值算法主要包括大律法(Otsu)[4]、迭代法[5]等,該類算法適用于具有明顯雙峰灰度直方圖和亮度均勻的圖像[6]。局部閾值法則是根據(jù)每一像素點和該點鄰域的灰度值來確定其對應的局部閾值。常用的算法有Bernsen算法[7]、Niblack算法[8]、Sauvola算法[9]等,該類算法處理光照不均勻圖像的二值化效果比全局閾值法更好,但并沒有考慮圖像的整體情況,有時還會存在過分割效應和偽影,效果仍不理想[10]。而且大多數(shù)現(xiàn)有的局部閾值法都需要手動調(diào)整參數(shù)以得到最佳結(jié)果,那么對于不同的圖像和字符大小,固定的窗口大小和參數(shù)值就無法有效處理[11]。
由于不均勻光照和字符寬度差異的影響,芯片圖像在使用單一的全局或局部閾值算法時,無法被有效地二值化。本文提出一種基于自適應混合閾值的二值化算法,針對芯片圖像亮度不均勻的問題,對傳統(tǒng)的局部閾值法進行改進,將Otsu算法全局閾值和局部閾值進行加權(quán)相加,解決了局部閾值算法沒有考慮圖像整體效果的問題;針對芯片圖像字符大小不一的問題,對每個像素由筆畫寬度變換自動計算窗口大小,并且根據(jù)不同的窗口大小和設定的自適應參數(shù)計算局部閾值,從而自適應地計算混合閾值,避免了手動調(diào)整參數(shù),提高了算法的效率。
Otsu算法又稱大津算法,是目前應用最廣泛的全局閾值二值化算法,具有原理簡單、處理速度快、適應性強等優(yōu)點[4],但該算法對光照不均勻圖像的二值化效果較差。
設灰度圖像f(x,y)有N個像素點、L個灰度級。選取全局閾值Tg,將f(x,y)分為C0和C1兩類,C0類由f(x,y)在灰度級[0,Tg]內(nèi)的像素點組成,C1類由f(x,y)在灰度級[Tg+1,L]內(nèi)的像素點組成,由此這兩類的類間方差可以表示為:
σ2=μ0(m0-m)2+μ1(m1-m)2
(1)
式中:μ0和μ1分別是C0和C1兩類的概率;m0和m1分別是C0和C1兩類的灰度均值;m是整幅圖像的灰度均值。在L級的灰度范圍內(nèi),采用遍歷的方法,選取出當類間方差最大時所對應的閾值Tg,即為相應的全局閾值。
局部閾值法中最重要的參數(shù)之一就是窗口大小,通過從窗口中提取所需的特征,便可計算出局部閾值[12]。大多數(shù)局部閾值法中的窗口大小都是固定的,而不同的圖像各區(qū)域所包含的信息密度不同,即使是在同一圖像中,字符的筆畫寬度和大小也可能有所不同。所以固定的窗口大小對于某一圖像可能效果很好,對其他則不適用[2]。
因此可以根據(jù)字符的筆畫寬度來估算每個像素點對應的窗口大小,目前常用的字符筆畫寬度的估算方法主要有游程法、法向量法、輪廓比例法及寬譜法等,其中基于法向量的筆畫寬度估算結(jié)果的誤差較小[13]。
筆畫寬度變換(SWT)是對局部圖像運算的算法,可根據(jù)某像素點的法向量計算其最可能的筆畫寬度。該算法的輸出是與輸入圖像維度相同的矩陣A,其中的每個元素均為與該位置像素對應的筆畫寬度[14],該算法的具體步驟如下:
1) 首先將矩陣A中的所有元素初始化為無窮大(∞),對輸入圖像使用Canny算法檢測字符邊緣。
2) 其次計算每個邊緣像素點的梯度方向。對于任一邊緣像素u,其梯度方向gu垂直于筆畫邊界,根據(jù)該梯度方向,沿路徑r可找到另一邊緣像素v,如式(2)所示。
r=u+n×gun>0
(2)
若v處的梯度方向gv與gu大致相反,則將路徑中的像素u和v之間的距離作為其筆畫寬度;若未找到邊緣像素v或gv與gu不相對,則丟棄該路徑。
3) 然后沿著負梯度方向-gu,再次執(zhí)行步驟1)和步驟2),以此處理不同背景和文字的情況。圖1顯示了典型的字符筆畫和求取筆畫寬度的過程。
(a) 字符筆畫 (b) 由梯度尋找筆畫寬度 (c) 筆畫寬度圖1 求取筆畫寬度的過程
4) 最后由各像素點所對應的筆畫寬度構(gòu)成矩陣A,即為筆畫寬度矩陣。
針對芯片圖像中存在的亮度不均勻和字符大小不一等問題,Otsu算法二值化效果較差,而經(jīng)典的Sauvola算法并未考慮全局情況,容易產(chǎn)生過分割效應和偽影[15],且需要手動調(diào)參,因此可將全局與局部閾值算法進行結(jié)合,兼顧考慮全局和局部特性,利用全局信息來優(yōu)化局部閾值[16],并根據(jù)SWT算法和自適應參數(shù)得到最終的自適應混合閾值。
在經(jīng)典的Sauvola算法中,窗口大小和修正參數(shù)k這兩個參數(shù)都是固定的,因此對特定的芯片圖像,需要手動設置它們的最佳值,而實際工程中不可能對所有的圖像都手動計算和設置這些參數(shù)值,存在一定局限性。
針對Sauvola算法中存在的問題,本文對其局部閾值公式進行了改進,提出一種新的局部自適應閾值算法,可根據(jù)SWT算法得到的筆畫寬度矩陣A來自適應地計算每個像素點對應的窗口大小W,如式(3)所示。
W(i,j)=2×A(i,j)+29
(3)
再根據(jù)計算出的每一像素點的窗口大小,由式(4)計算其相應的局部閾值Tw。
(4)
式中:Sw是局部窗口內(nèi)像素的標準差;mw是局部窗口內(nèi)像素的平均值;K是自適應參數(shù)。為了避免手動設置參數(shù),根據(jù)局部閾值算法的特性引入了窗口內(nèi)像素的標準差來計算其K值,如式(5)所示。
(5)
式中:α為相應的修正因子,根據(jù)實驗表明,當α=0.75時,二值化效果最好。
本文結(jié)合了Otsu全局閾值Tg和局部自適應閾值Tw,對其加權(quán)后得到了最終的自適應混合閾值,其具體計算過程如下:首先計算整幅圖像的灰度均值m,讓每個像素點的灰度值與之比較,小于m的歸為m1類,大于等于m的歸為m2類,分別計算這兩類的灰度均值T1、T2。然后利用權(quán)值參數(shù)對全局閾值Tg和每一像素點的局部閾值Tw進行加權(quán),并根據(jù)灰度均值T1、T2對其范圍進行約束,最后得到每一像素點的自適應混合閾值T,其計算公式如下:
(6)
式中:權(quán)值參數(shù)在區(qū)間(0,1)內(nèi),經(jīng)實驗證明,當β=0.2時,算法二值化效果最佳。
本文算法的流程如圖2所示。
圖2 算法流程
對應的算法具體步驟如下:
1) 對原始灰度圖像進行中值濾波,減少噪聲干擾。
2) 利用對比度增強算法,增強圖像對比度,以便取得更好的二值化效果。
3) 利用經(jīng)典的Otsu算法求出圖像的全局閾值Tg。
4) 利用SWT算法,計算出每個像素點對應的筆畫寬度,然后自適應地計算每個像素對應的窗口寬度。
5) 根據(jù)式(4)和式(5)求取每一點自適應參數(shù)K值及局部閾值Tw。
6) 根據(jù)式(6)求取每一點的混合閾值T。
7) 根據(jù)混合閾值T對圖像進行二值化,圖像中像素的灰度值小于T的,則判定為目標,將像素灰度值設為0;反之則判定為背景,像素灰度值設為255。
為了更好地評估二值化的質(zhì)量,檢驗二值化后的圖像和真實圖像之間的相似度,本文計劃采用以下度量指標:精確度PR(Precision)、召回率RC(Recall)、F度量指標(FM)、峰值信噪比(PSNR)和距離倒數(shù)失真度量指標(DRD)。
精確度PR(Precision)和召回率RC(Recall)是常用的圖像二值化質(zhì)量評估指標,PR是指二值化圖像中正確目標點與所有目標點的比值,RC是指二值化圖像中正確目標點與原圖中所有目標點的比值[17]。PR和RC的值越大,二值化的效果越好,其計算公式如下:
(7)
式中:NTT是二值化圖像中正確目標點的數(shù)量;NFT是二值化圖像中錯誤目標點的數(shù)量;NFNT是原圖中錯誤目標點的數(shù)量。
F度量指標(FM)結(jié)合了精確度PR和召回率RC,能夠綜合考量所得二值化圖像與理想二進值化圖像之間的差距,其值越大,二值化效果越好[17],其計算公式如下:
(8)
PSNR主要用于表征二值化圖像的含噪情況,這里噪聲是指被錯誤二值化的像素,PSNR的值越高,二值化圖像噪聲越少[18],其計算公式如下:
(9)
式中:D是圖像的對比度,二值化圖像對應的D值為1;M、N分別是圖像的高度和寬度;IB(i,j)和IGT(i,j)分別對應為二值化圖像和理想二值化圖像的像素點。
DRD用于評估二進制圖像的視覺失真,其值越小,失真越少,二值化效果越好[19],其計算公式如下:
(10)
式中:NUBN是圖像中非均勻8×8塊的數(shù)量;DRDk為每一像素的距離倒數(shù)失真。
為了衡量本文算法的性能,將本文方法分別與Otsu算法[4]、Niblack算法[8]和Sauvola算法[9]等三種經(jīng)典二值化算法進行了比較。使用了標準二值化數(shù)據(jù)集DIBCO2013[20],并對數(shù)據(jù)集添加隨機的不均勻的光照影響,且對每種算法進行了參數(shù)調(diào)優(yōu),數(shù)據(jù)集中的一個例圖的對比結(jié)果如圖3所示;對數(shù)據(jù)集16幅圖像進行二值化,取結(jié)果的均值,其結(jié)果如表1所示??梢钥吹剑瑢τ诠庹詹痪鶆蚝痛嬖诎涤拔蹪n的圖像,由于改進了閾值公式以及引進了基于筆畫寬度變換的窗口自適應算法,本文算法的二值化效果最好,其五個評估指標的性能也是最好的。而Sauvola算法因為不能根據(jù)圖像特性自適應地調(diào)節(jié)窗口大小,邊緣區(qū)域的二值化效果沒有本文算法好,各項指標的效果評估也都低于本文算法。Niblack算法對邊緣強光區(qū)域二值化效果較差,且存在較多偽影,Otsu算法因為對不均勻光照比較敏感,導致了文本區(qū)域和強光區(qū)域的閾值不準確,出現(xiàn)了較大面積的誤判,二值化效果較差,這兩種算法的召回率RC、精確率PR、DRD的表現(xiàn)也較差。
(a) 原圖像 (b) 灰度圖像
(c) Otsu二值化結(jié)果 (d) Niblack二值化結(jié)果
(e) Sauvola二值化結(jié)果 (f) 本文方法二值化結(jié)果圖3 光照不均勻文檔圖像二值化對比
表1 四種算法性能指標對比
為了對比本文算法在實際場景中對芯片圖像二值化效果,選取了幾個常見的光照不均勻場景和字符大小不一的芯片圖像進行了實驗。實驗結(jié)果圖像如圖4、圖5和圖6所示,可以看到,因為不均勻光照的影響,芯片圖像的某些背景區(qū)域的灰度和文本的灰度相近,使用全局閾值的Otsu出現(xiàn)了較為嚴重的背景錯誤二值化的現(xiàn)象。而Niblack算法對于芯片字符的目標信息保留得不錯,但是出現(xiàn)了過分割效應,產(chǎn)生了大量的偽影,圖5(d)的最為嚴重。Sauvola算法優(yōu)于Otsu算法和Niblack算法,但是產(chǎn)生的噪點還是比本文方法多。本文算法的二值化效果是最好的,對于目標信息的保留最為完整,只存在少量偽影,對于后續(xù)的字符識別影響不大。在圖5和圖6這兩幅字符大小不一的圖像中,本文算法對于字符的二值化效果最好,字符輪廓更加清晰,周圍粘連的噪點更少,最貼近真實圖像,其他三種算法都出現(xiàn)一定的問題,存在字符不完整、不清晰的情況。
(a) 原圖像 (b) 灰度圖像
(c) Otsu二值化結(jié)果(d) Niblack二值化結(jié)果
(e) Sauvola二值化結(jié)果(f) 本文方法二值化結(jié)果圖4 邊角光照不均勻圖像二值化對比
(a) 原圖像 (b) 灰度圖像
(c) Otsu二值化結(jié)果(d) Niblack二值化結(jié)果
(e) Sauvola二值化結(jié)果(f) 本文方法二值化結(jié)果圖5 中心低亮度及字符大小不一圖像二值化對比
(a) 原圖像 b) 灰度圖像
(c) Otsu二值化結(jié)果(d) Niblack二值化結(jié)果
(e) Sauvola二值化結(jié)果(f) 本文方法二值化結(jié)果圖6 中心高亮度及字符大小不一圖像二值化對比
針對獲取的芯片圖像中存在亮度不均勻和字符大小不一等問題,本文提出一種自適應混合閾值二值化算法,將全局閾值算法和局部閾值算法相結(jié)合,使用全局信息來優(yōu)化局部閾值;利用筆畫寬度變換獲取字符寬度并由此得到自適應的窗口大小,結(jié)合自適應參數(shù)得到混合閾值,避免了手調(diào)參數(shù),提高了效率。實驗結(jié)果表明,相比其他三種常用算法,本文算法的各項評估指標均優(yōu)于它們,且二值化效果最佳,存在的偽影較少,字符輪廓更加清晰,對于目標信息的保留最為完整。目前本文算法的改進可以基于以下兩個方面進行考慮:1) 繼續(xù)改進算法,減少偽影的產(chǎn)生;2) 加入了筆畫寬度變換,導致運算時間增長,因此需要提高運算速率。