王劉奎 史偉民 楊亮亮,2*
1(浙江理工大學機械與自動控制學院 浙江 杭州 310018)2(杭州匯萃智能科技有限公司 浙江 杭州 311121)
近年來隨著科學技術的不斷發展,工業自動化水平的逐步提高,機器視覺圖像處理領域受到了人們的廣泛關注,成為了大量學者研究的焦點。文字字符識別在信件郵寄識別、歷史文獻修復、汽車車牌識別等有關文字的應用領域占據著至關重要的地位,而較好地把文本信息從實際情況較復雜的背景中分割出來則是視覺檢測預處理中最重要的部分,其中文本二值化是必不可少且極其關鍵的。而在實際拍攝過程中,由于光源方向、拍攝角度、物體表面反射等因素,往往使得采集的圖像出現局部過亮、局部過暗、明暗交錯等光照不均勻現象,嚴重影響后續處理,完整有效地提取出高質量的文本信息無疑對整個項目的成敗起著關鍵作用。
為了把文字從光照不均勻的背景中提取出來,閾值分割是最常用的方法,按照參與運算的像素點的空間范圍可分為全局閾值分割法和局部閾值分割法[1]。
全局閾值分割法根據整幅圖的直方圖或灰度值的空間分布來計算出一個閾值[2],依此來區分目標和背景,經典的全局閾值算法有Ostu法、迭代法、最小誤差法、簡單統計、基于熵的閾值法等[3]。由于全局閾值分割法未考慮圖像的局部灰度信息,對背景和目標灰度值多樣性單一,存在明顯差異、直方圖呈現雙峰分布的圖像處理效果良好,而對灰度分布不均勻、峰值多樣無規律的圖像處理效果非常差[4]。
局部閾值分割法按處理思想不同又可細分為局部分塊閾值法和局部鄰域自適應閾值法[5]。局部分塊閾值法根據圖像光照情況進行分塊,再對每塊進行全局閾值分割法進行分割。該方法需要圖像存在較明顯的灰度邊界區域,對于灰度差別不明顯的圖像處理效果欠佳[6],而且處理后存在明顯分塊邊界,整體效果差,在文檔二值化處理中應用不廣泛。
局部鄰域自適應閾值法通過定義合適的模板,并通過模板鄰域點與考察點的數學關系進行運算,來確定當前考察點的灰度值,該方法很好地利用了考察點的鄰近區域的灰度特性,實現了自適應閾值檢測。經典的局部閾值分割法有Niblack法[7]、Bernsen法[8]、Sauvola法[9]等,以上方法雖然考慮了局部鄰域灰度信息,但參與運算的不具有代表性的像素點過多,當目標和背景區分界線不明顯時,分割效果不佳,而且容易出現筆畫斷裂和偽影現象。Wellner[10]提出了一種根據每點距離像素中心位置不同加權不同,最后求均值乘以比例系數確定閾值的思想。針對該算法邊緣和處理速度慢的問題,Bradley等[11]提出了一種面積像素表求和的思想,極大簡化了運算,提高了速度,處理效果極佳。Valizadeh等[12]通過把圖像灰度值類比三維地形提出了Water Flow模型理論,山峰對應灰度值較高區域,山谷對應灰度值較低區域,地形的差異使得光照在不同地形情況呈現了光照不均勻現象。
本文仔細研究了以上方法,并在觀察不均勻文本圖像灰度值曲線的變化規律后,發現光線非常均勻的部分鄰近灰度值不變,基本上都是背景或者文字比劃部分,在運算時已經大量重復。而灰度跳躍明顯的區域多是文字和背景的交界區域,包含了大量的文字邊緣輪廓信息。對于所需的灰度值跳躍的點,本文在一個鄰域里比較篩選出所有波峰點和波谷點求均值后,再通過一定差值比例加權運算選出最佳的閾值分割點,結果表明處理效果優于傳統局部閾值分割算法。
Niblack算法是通過當前目標考察點及其模板算子鄰域內像素點灰度值的平均值及標準差數學運算后得到二值化閾值。在確定圖像的二值化時,先計算以(x,y)為中心的n×n大小的鄰域內像素點的灰度平均值m和標準差s:
(1)
(2)
二值化閾值T(x,y)的計算公式如下:
T(x,y)=k·s(x,y)+m(x,y)
(3)
式中:k是根據經驗預定的修正系數,一般k取0.1~0.5。
當前觀察點的最終閾值由以下公式決定:
(4)
該算法考慮了觀察點的模板鄰域均值和標準差信息,但存在以下缺點:
1)偽影現象。該算法雖然考慮了均值和標準差,但個別的椒鹽噪聲點將引起閾值的突變,本是背景的點被二值化成目標點,導致偽噪聲的引入。
2)筆畫斷裂現象。當模板窗口內都為目標點時,局部閾值拉伸,本是目標的點卻被二值化成背景,使得信息丟失,從而出現筆畫斷裂現象。
Sauvola算法在Niblack算法基礎上,引入了標準方差的動態范圍R,雖然有效地抑制了偽影現象和筆畫斷裂現象,但仍有不少噪聲點無法去除。
設模板鄰域為s×s的方陣,圖像中點Ps×s(x,y)周圍鄰域的像素值的總和為:
(5)
設t為修正系數,T(x,y)為點考察點Ps×s(x,y)最終的像素值,則:
(6)
在實際測試中s=image.width/8,而t=15時效果最好,在確定T(x,y)的值時,用的是平均值,但由于當前點的灰度值跟其附近鄰域點有關,改成距離考察點Ps×s(x,y)越近的像素點對其的影響越大,越遠則越小,則更加具有說服力,為了便于理解將式(6)簡化為:
(7)
(8)
這里需給定初始迭代值,取T(n)=127×s,Wellner算法無法處理邊緣圖像,Bradley等[11]改進了Wellner算法:以圖像當前考察點為基準,把該點左上方所有的像素值累加重新賦值給該點,邊界點按水平或者豎直方向處理,處理過程如圖1所示,其中33即為所有像素總和。

(a) (b)
像素總值面積表如圖2所示。要判定區域D時,就可以利用圖1(b),設P(x,y)為點(x,y)的像素值(已轉換為圖1(b)的值),對于區域D的總閾值為:

圖2 像素總值面積表
P(D)=P(x2,y2)-P(x2,y1)-
P(x1,y2)+P(x1,y1)
(9)
得到區域D的總閾值,再除以區域D的像素點個數得到平均閾值Pjun=P(D)/N,對于區域中心點(i,j)若P(i,j)>P,則重寫點(i,j)的像素為255,反之為0。
改進后的Wellner算法很好地解決了邊緣處理問題,而且創新地提出了面積制表的思想,極大地提高了處理速度。
實際的圖像采集過程中,現場環境復雜多變,受拍攝角度、物體表面反射率、光源照射方向、光源與物體距離、相機成像系統等影響,最終的圖像往往呈現出離散、無規律、明暗相間等不均勻光照現象,嚴重影響了圖片的質量,為后續的處理帶來了極大的困難。
圖3是大小為773×443的文本圖像,為左側光源打光,左側有物體遮擋,光線較暗,背景灰度值較低,中間局部區域光源斜角度直射,灰度值較大,右側區域隨著距光源的距離逐步拉遠,灰度值逐漸降低,整幅圖的背景灰度值大小不一。圖4為其灰度直方圖。可以看出,波峰和波谷交叉出現,且沒有規律,若采用單一的全局閾值來分割,左部區域灰度值會被置0,中部的部分區域灰度值將會置255,最終無法均衡整個區域,導致分割失敗。但在不同的局部小范圍區域,存在明顯的灰度值差異,肉眼仍可分辨出背景和目標,采用“局部范圍相對閾值分割”,仍可得到很好的閾值分割效果。把圖3局部區域放大如圖5所示,該區域每個點的灰度值大小不一,高低起伏,每個點的灰度值,不僅與自身的二維平面位置、該點物的表面光線反射率等有關,還與其自身相鄰域的點的灰度特性有關,灰度值較低的點,附近點的灰度值也會受其影響相應較低。該目標考察點顯示出的灰度值是多種因素共同造成的結果,實際分割時,應把鄰域的像素點考慮進去。為了更直觀地分析圖像灰度曲線波動情況,繪制原始圖的局部區域三維灰度特性如圖6所示。

圖3 文本原始圖

圖4 原始圖的灰度直方圖

圖5 原始圖的局部放大圖

圖6 原始圖的三維灰度波動圖
把圖像的三維圖和連綿不斷的波峰波谷地形進行類比[13],圖3中跳躍突變的亮點對應著三維圖中的波峰點,對應著地形上的覆蓋白雪的山頂;跳躍突變的暗點對應著三維圖中的波谷點,對應著地形上的黑暗深淵的山谷。圖像的三維灰度特性圖之所以呈現空間三維地形,是受物體表面不同區域的光線反射率影響,不同的光線反射率相當于不同的地形,表現在圖像上就是灰度值不同。
實際圖3中的突變亮點一般是夾雜在黑色字體之間的白色背景,突變黑點一般是夾雜在白色紙張背景之間的黑色文字邊緣,且突變較大。白色背景和黑色字體是有寬度的,中間的部分較亮或較暗,因而內部也會產生小尺度的灰度波動,但突變較小。選取圖3文本圖像的中間行即第222行,統計前433個像素,以像素點在當前行數的位置為橫軸,以灰度值為縱軸繪制曲線如圖7所示。

圖7 第222行的前433像素點灰度變化曲線圖
可以看出,灰度值曲線上下起伏,變化頻繁劇烈,整體灰度值越來越高,與實際的光照情況相吻合。另外灰度值均勻降低的點對應曲線的斜率為負的直線部分;灰度值均勻上升的點對應曲線的斜率為正的直線部分;灰度值不變的點,反映在曲線上是一條直線。產生均勻斜線的原因是背景變化較均勻(白色紙張或黑色文字鄰近邊緣,如果斜線部分斜率為正整體灰度值逐漸增大即是白色背景紙;斜線部分斜率為負整體灰度值減小且變化劇烈即是黑色文字鄰近邊緣),這些較均勻斜線直線部分絕大多是背景,基本不包含文字的輪廓和位置信息,對附近像素點的灰度值影響較小,不考慮加入算法。而圖中曲線峰值點為圖像文字與文字之間或文字內部的白色背景,灰度值較大,曲線峰谷點為文字筆劃中心,灰度值較小。
波峰波谷包含了詳細的文字邊緣信息,不同的波峰點和波谷點,反映了不同文字的不同邊緣變化趨勢,灰度值與其在曲線上的波動坐標相互對應,而且上述分析得出波峰和波谷點對當前點的最終表現的灰度值影響更大。那么若已知當前目標考察點的某一方向的灰度變化曲線,提取了所有的波峰點和波谷點,所選的判定閾值應該在波峰波谷之間動態浮動,滿足一定的關系。
本文在水平方向上某一行選擇長度為L的一段條形區域,考慮到圖像邊界問題,可先將圖像左右寬度擴展L/2,該區域在當前行水平移動,L的中心點則從選取的當前行的第一個點移動到最后一個點,每次平移選取L區域覆蓋的圖像部分,以被覆蓋的圖像像素點在條形區域的位置為橫坐標,以灰度值為縱坐標,繪制灰度波動曲線f(x),x=1,2,…,L,L為條形區域長度。圖8所示為圖3第38行的以(38,38)為中心、L為75的條形區域灰度波動曲線,所有的波峰點和波谷點已全部標記出來,判定閾值T1的選取與這些點有關。本文選擇水平方向遍歷,實際不均勻光照影響中,豎直方向同樣需要考慮進去,同樣如上述步驟處理。根據目標點豎直方向灰度波動曲線求出判定閾值T2,最終判定閾值為T=ξ×(T1+T2),將T與當前目標考察點進行比較,依次確定該點灰度值,最后依次完成全圖遍歷,閾值分割完成。

圖8 第38行的前75像素點灰度變化圖
確定閾值T1和T2的關鍵在于找到灰度波動曲線上的波峰點及波谷點,在實際中,曲線不僅僅像圖8那樣上下起伏變化明顯,還會出現短暫或者連續的水平直線,即灰度值階段性重復,此時這些點的灰度值已經重復,不需要把該直線上波峰點或者波谷點都提取出來,所以需要根據實際情況,重新定義波峰點和波谷點。
在數學表達式定義中,連續曲線的波峰和波谷就是曲線的極值點,滿足一階倒數為0,并且二階倒數為負的點為峰值點;滿足一階倒數為0,并且二階倒數正數的點為峰谷點。但圖像的曲線是離散的,應使用求差分函數來求解,確定峰值點和峰谷點,繪制灰度離散圖如圖9所示。

圖9 離散點波峰和波谷
依次得到灰度離散圖像上每個點所對應的灰度值,對其進行前后差分操作,當前的遍歷點前后差分出現相異符號時,便可初步判定其為峰值點或峰谷點,判定依據如下:
(10)
式(10)可以處理平滑的灰度波動曲線,但實際圖形曲線會出現如圖10所示的情況,式(10)顯然是不全面的。

圖10 重復的波峰點和波谷點
仔細分析可知,若出現平行的直線且灰度值較大,則為白色背景,灰度值很小,則為黑色文字區域,這種情況,只取第一個點加入即可,避免不必要的重復,這樣即可找到所有滿足條件的點。
因此當投影曲線是圖10所示的曲線類型時,判定依據改為:
(11)
通過上述方法最大限度地提取了目標考察點水平和豎直范圍內的所有有價值的波峰點和波谷點,它們包含了圖像重要的邊緣信息,這些突變的點是光照不均勻的直接反映,在考察點長為L的水平鄰域內,我們把滿足式(11)的水平方向上的點分別存放在一維矩陣A和B中。
A=[a1,a2,…,ai,…,am-1,am]m B=[b1,b2,…,bj,…,bn-1,bn]n 式中:ai為第i個波峰點的灰度值;bj為第j個波谷點的灰度值。再求波峰點、波谷點的平均值如下: Aaverage=Asum/m (12) Baverage=Bsum/n (13) 式中:Asum為波峰點的灰度值總和;m為波峰的總數;Bsum為波谷點的灰度值總和;n為波谷的總數。則水平方向的閾值判定T1的計算方法為: T1=K(Aaverage-Baverage)+Baverage (14) 同理計算出豎直方向上的局部閾值判定T2,最終閾值如下: T=ξ×(T1+T2)ξ∈[0,1] (15) 若該考察點的灰度值大于T,則灰度值置為255,若灰度值小于等于T,則灰度值置為0,依此可判定改點是屬于目標區域還是背景區域,依次對全圖循環遍歷,得到自適應的二值化圖像。 灰度波動曲線閾值分割實現過程如下: 1)首先通過相機拍攝在光源不均勻照射下的圖像,再設置十字形模板的長寬L,L過大則運算速度過大,L過小則分割效果不佳。通過大量實驗,當L=75左右時,分割效果最好。 2)繪制當前目標考察點為中心的模板內,水平和豎直方向的灰度波動曲線,通過對灰度曲線上的坐標位置對應的圖像像素點進行前后差分工作,獲取水平和豎直方向上的所有波峰點和波谷點,并把坐標和灰度值存在信息相應的一維矩陣中。 3)計算水平方向的所有波峰平均值和波谷平均值。根據公式得到平均波峰值和平均波谷值之間動態分割閾值T1,同理得到豎直方向動態分割閾值T2,通過加權平均得到最終閾值T。 4)把當前考察點的灰度值和最終閾值T比較,分割為目標或背景,十字模板從圖像的左上角依次從左到右、從上到下,循環到右下角,完成全圖分割。經過大量不同光照情況的文本實驗分析得,K取0.2、ξ取0.4時效果最佳。 實驗環境:CPU為Inte酷睿i5 337U,2.7 GHz,內存4 GB,程序編平臺為MATLAB 2014b,對光照不均勻的文檔圖像的二值化閾值分割的編程核心M語言代碼如下: for i=H:(height-H+1) %(i,j)程序遍歷起點 for j=H:(width-H+1) … for q=(j-(H-2)):(j+H-2) Cpoint(cpoint)=in(i,q) %提取豎直方向H個點的灰度值 if(in(i,q)>in(i,q-1)&& in(i,q)>=in(i,q+1)) A(ii)=in(i,q); end %波峰點數組 if(in(i,q) B(jj)=in(i,q); end %波谷點數組 ii=ii+1; jj=jj+1; cpoint=cpoint+1; end T1=0.2*((sum(A))/averageA-(sum(B))/ averageB)+(sum(B))/averageB; %豎直方向閾值T1 … %同理求出T2 T=(T1+T2)*0.4 %最終閾值T 為了驗證本文算法的有效性,選取了具有經典代表性的方法作為對比參照,全局閾值分割法以Ostu法為代表,局部閾值分割法有Niblack算法、Bernsen算法,各算法處理結果對比如圖11所示。圖11(a)所示為左側平行光斜角度照射所得的文本圖像,尺寸為1 040×780。在對比參照實驗中,各算法的相關參數設置如下:Niblack算法中K值取0.2,Sauvola算法中K值取0.36,Niblack和Sauvola算法的模板窗口大小為20×20,本文算法中K的取值為0.2,ξ的取值為0.4。 (a)原圖 (b)Ostu算法 (c)Niblack算法 1)算法二值化分割效果及性能對比。由圖11(a)可見,左側區域灰度值較高,右側區域出現陰影,灰度值較低,全圖光照不均勻。從處理效果及算法性能來看,Ostu算法在光照較好的區域效果較好,對于較暗的區域和較亮的區域產生了兩極化的處理結果;Niblack算法雖然能分割出文字的輪廓但整個背景區域出現了大量的黑色紋理噪聲;Bernsen算法在較亮的區域處理效果還好,在較暗的區域依然會出現大量偽影和噪聲;Sauvola算法在Niblack算法上做了改進,考慮了像素點鄰域內標準差,處理效果得到了改善,但仍有不少椒鹽噪聲,尤其是灰度值較低的區域中噪聲更加明顯;本文算法準確分割出了文字和背景,而且紋理清晰,零噪聲,細節保留良好。經過大量不同文本不同光照情況實驗,本文算法與最有效的Wellner算法在處理結果上幾乎沒有差別。結果表明:在不同的光照不均勻情況下,選取同樣的閾值,本文算法處理效果和適應性依然較好。 2)參數L、K和ξ的對分割結果的影響。模板鄰域區域的長度L的大小直接影響整個算法的處理速度,L選取得越大,運算速度越慢,L選取得過小,文字墨跡發白變淺,像蒙了一層霧。隨著L的增大,墨跡逐步加深,所以L的選取既要考慮速度又要考慮效果,經過不同文本光照情況的測試得出L取75效果最佳,字跡最清晰。 ξ的改變不影響運算速度,ξ過小,字跡會淡化,筆畫斷裂,類似于被腐蝕;ξ越大,字跡輪廓越清晰,但文字會逐漸出現黑色斑點,與Niblack法處理結果很像。當ξ取0.4時,效果最佳。 K的取值與處理后文字輪廓的粗細度有關,K值越大,文字輪廓越明顯,過大會出現重影,經過實驗K取0.2最佳。 3)處理時間對比。表1是對圖11處理結果繪制的表格,給出了Ostu法、Niblack法、Bernsen法、Sauvola法以及本文算法的處理時間。可以看出,Ostu法運算時間是最短的;Niblack法、Bernsen法、Sauvola法三種基于局部鄰域像素的算法需要計算均值和標準差,耗時較久,實時性較差;本文算法主要在搜索波峰點和波谷點部分耗時,由于不需要計算標準差,速度有了明顯的提升,但由于是MATLAB編程,所以速度和程序優化上有待提高。 表1 五種算法運行性能對比 本文提出了一種針對光照不均勻的文本圖像的局部灰度波動的自適應閾值分割算法。根據圖像每個像素及其鄰域點的灰度值跳動,把圖像和三維地形聯系起來,圖像每一行每一列的灰度波動變化曲線,可看作與之對應的三維地形剖面輪廓圖。考慮到陽光造成三維地形朝陽和背陰的現象、光線反射、物體表面反射率等因素,當前點的灰度值受其鄰域范圍內波峰點和波谷點影響更大。所以本文算法把當前目標考察點的一定范圍內水平和豎直方向的所有的波峰點和波谷點提取出來,通過一定的均值加權處理,確定當前點的閾值,完成當前點的閾值分割。實驗證明本文方法可以處理不同光照情況的文本圖像,自適應強,分割效果較好,充分考慮了光照不均勻的敏感變化點。該算法的不足之處在于:模板尺寸L對處理結果有影響,L過大速度變慢,L過小處理效果不佳;考慮到是全圖遍歷,提取波峰點和波谷點求平均過程執行速度相對較慢。2.5 灰度波動曲線閾值分割實現
2.6 核心編程的實現
3 實驗結果與分析


4 結 語