丁登峰 周國鵬* 張建權(quán) 陳瀾征
1(湖北科技學(xué)院自動化學(xué)院 湖北 咸寧 437100) 2(湖北香城智能機(jī)電研究院 湖北 咸寧 437100) 3(武漢紡織大學(xué)電子與電氣工程學(xué)院 湖北 武漢 430200)
在光學(xué)字符識別[1-4]、車牌識別和零件識別檢測等工程應(yīng)用中,圖像的二值化是一項(xiàng)至為關(guān)鍵的預(yù)處理技術(shù)。在很多視覺工程應(yīng)用中,圖像特征對于最終的識別結(jié)果起到關(guān)鍵作用。在圖像二值化過程中,能否保留原圖的主要圖像特征是最關(guān)鍵的,而圖像二值化的關(guān)鍵是確定二值化的閾值以及閾值的確定時間。
二值化的算法有很多,大體分為兩類:全局閾值算法[5-6]和局部閾值算法[7-8]。用得比較多的就是全局閾值Otsu算法和局部閾值Niblack算法[7],其中Niblack是一種實(shí)現(xiàn)方法較為簡單,效果較為穩(wěn)定,是一種動態(tài)閾值分割方法,其二值化效果比大津法(Otsu算法)好,因?yàn)榇蠼蚍ㄊ歉鶕?jù)整個圖像來確定一個閾值,而Niblack則是在不同的鄰域會有不同的閾值。
圖像二值化的基本要求就是快速地在保留原圖主要圖像特征的基礎(chǔ)上進(jìn)行二值化轉(zhuǎn)換。針對這兩點(diǎn)要求,國內(nèi)外很多學(xué)者對圖像二值化算法做了大量研究。Natarajan等[9]提出了一種基于對數(shù)二值化技術(shù)的文本圖像增強(qiáng)方法;Lokhande等[10]提出一種針對文本圖像的改進(jìn)局部二值化技術(shù),該算法根據(jù)直方圖最小值進(jìn)行圖像分割并結(jié)合優(yōu)化后的Otsu圖像去除為輪廓;楊碩等[11]提出了將全局閾值Kittler算法和局部閾值Bernsen算法相結(jié)合的二值化算法;石為人等[12]提出將改進(jìn)Otsu和Niblack算法相結(jié)合,提高了處理速度,獲取了較好的效果,但二值化圖像還是有明顯噪聲;鄭均輝等[13]提出一種局部靜態(tài)閾值與Niblack相結(jié)合的改進(jìn)算法,該算法能有效消除傳統(tǒng)算法中噪聲過多現(xiàn)象,但是對處理速度沒有改善;李鑫等[14]提出了一種基于粒子群優(yōu)化方法的Niblack設(shè)備紅外圖像分割算法,算法對含較大噪聲密度的紅外圖像分割性能優(yōu)于其他傳統(tǒng)算法,但算法復(fù)雜度較高,處理時間長;李建等[15]提出一種自適應(yīng)鄰域窗口和修正系數(shù)的Niblack算法,該算法依據(jù)QR碼圖像的分辨率和灰度值,動態(tài)調(diào)整修正系數(shù)和鄰域窗口,進(jìn)行自適應(yīng)二值化處理,但是處理速度依舊沒有較大的改善;從飛等[16]提出利用數(shù)學(xué)形態(tài)學(xué)理論,采用改進(jìn)的Sauvola算法對非均勻光照圖像進(jìn)行二值化,可以對噪聲進(jìn)行有效的抑制,得到較好的識別效果;孫國棟等[17]提出一種基于卷積神經(jīng)網(wǎng)絡(luò)的二值化方法,對復(fù)雜光照下含數(shù)字重影的儀表圖像二值化,但訓(xùn)練所需要的時間較長。
然而,以上方法要么只針對文本圖像優(yōu)化,要么優(yōu)化了處理效果但處理速度依舊緩慢,有的算法優(yōu)化了處理速度但是二值化效果還有待改進(jìn)。本文運(yùn)用迭代思想快速改進(jìn)Niblack算法中對灰度均值與標(biāo)準(zhǔn)差的計(jì)算,使得同樣分辨率的圖像處理速度從幾十秒降低到毫秒級,同時利用Otsu全局閾值優(yōu)化原算法閾值函數(shù)中的修正系數(shù),使其能自適應(yīng)地調(diào)整閾值,在文本圖像和小物體分割處理中獲得更好的處理效果。
Otsu算法[3]主要用于自動計(jì)算圖像分割中的閾值t,計(jì)算簡單,不受圖像亮度和對比度的影響,能更好地區(qū)別圖像的前景(目標(biāo))和背景區(qū)域。該算法使用聚類思想,用閾值t把圖像按灰度級分成目標(biāo)和背景兩部分,使得兩部分之間的灰度值的方差g(t)最大化。
g(t)=w0×(u-u0)2+w1×(u-u1)2
(1)
令t在圖像灰度[0,L-1]上進(jìn)行遍歷,計(jì)算不同t值下的類間方差g(t)值,使得g(t)值最大時的t值就是Otsu法所要求的最佳閾值。然后利用式(1)計(jì)算得到的閾值t,在圖像中逐點(diǎn)遍歷比較,完成圖像二值化。
L為圖像灰度級,f(x,y)為圖像中一點(diǎn)(x,y)的灰度值。w0、w1分別為目標(biāo)和背景像素出現(xiàn)的概率,u0、u1分別為目標(biāo)和背景的平均灰度值,u為總平均灰度值。
Niblack算法是一種簡單可靠的局部閾值二值化算法,對光照不均勻的圖像處理效果明顯。其基本思想是通過計(jì)算圖像中每個像素點(diǎn)(x,y)及其鄰域(r×r)內(nèi)所有像素點(diǎn)的灰度均值m(x,y)和標(biāo)準(zhǔn)差s(x,y),得到二值化閾值T(x,y)。算法具體步驟為:
Step1以每個像素點(diǎn)(x,y)為中心,分別計(jì)算其r×r鄰域窗口內(nèi)所有像素點(diǎn)的灰度均值m(x,y)。其中,f(x,y)是圖像中一點(diǎn)(x,y)的灰度值。
Step2利用式(3),計(jì)算每個像素點(diǎn)(x,y)及其鄰域(r×r)內(nèi)所有像素點(diǎn)的標(biāo)準(zhǔn)差s(x,y)。
Step3利用式(3)和式(4),計(jì)算每個像素點(diǎn)(x,y)的二值化閾值T(x,y)。
T(x,y)=m(x,y)+k×s(x,y)
(5)
式中:k為修正系數(shù),取值范圍為[-1,1],一般取-0.1~0.5。
Step4利用式(5),在圖像中逐點(diǎn)遍歷每個像素點(diǎn)(x,y)的灰度值f(x,y)及其對應(yīng)的T(x,y)值,按式(6)進(jìn)行圖像二值化。
在經(jīng)典Niblack算法中,閾值T(x,y)計(jì)算式為式(5)。當(dāng)圖像中像素點(diǎn)灰度值f(x,y)大于或等于T(x,y)時,則設(shè)置為白色,否則為黑色,這樣就完成了圖像的二值化。但是如果某一鄰域內(nèi)都是背景,按Niblack計(jì)算,必定有一部分被判定為目標(biāo)點(diǎn),從而導(dǎo)致偽影現(xiàn)象。針對此問題,2000年Sauvola提出了一種改進(jìn)的Niblack算法,差異部分就是采用了不同的閾值選取方法,具體公式如式(7)所示,其中:k是修正系數(shù),取值范圍為[0,1],R為標(biāo)準(zhǔn)方差的動態(tài)范圍,若當(dāng)前輸入圖像為8位灰度圖,則R=128。
改進(jìn)后的算法對偽影現(xiàn)象有了一定的改善,同時用Niblack算法進(jìn)行圖像處理時,選擇的鄰域窗口r×r大小很關(guān)鍵,選擇的鄰域太小,則噪聲抑制的效果不理想,目標(biāo)不夠突出,選擇的鄰域太大,則目標(biāo)的細(xì)節(jié)就會部分丟失,同時計(jì)算復(fù)雜度高,導(dǎo)致處理速度過慢。
本文主要從圖像處理速度和處理效果這兩方面對Niblack算法進(jìn)行優(yōu)化改進(jìn)。在處理速度優(yōu)化方面,主要是運(yùn)用迭代思想降低算法復(fù)雜度,使原復(fù)雜度O(size×area)降低為O(size),從而做到與鄰域窗口大小area基本無關(guān)。在處理效果優(yōu)化方面,主要是利用Otsu全局閾值優(yōu)化原算法閾值函數(shù)中的修正系數(shù),使其能自適應(yīng)地調(diào)整閾值,在文本圖像和小物體分割處理中獲得更好的處理效果。
傳統(tǒng)Niblack算法運(yùn)算速度比較慢,通常處理時間由幾秒到幾十秒。如果圖像尺度過大,處理時間甚至超過100秒,其主要原因是由于該算法需遍歷圖像中每一個點(diǎn)的鄰域窗口r×r的所有像素點(diǎn)的灰度均值及標(biāo)準(zhǔn)差,并且需要重復(fù)求和,計(jì)算量巨大,而且隨著鄰域窗口r×r的增大而急劇增加。
假定圖像imag像素尺寸大小為size(H×W),鄰域窗口大小為area(r×r),傳統(tǒng)Niblack算法復(fù)雜度為O(size×area),考慮到計(jì)算圖像任意一像素點(diǎn)灰度均值及標(biāo)準(zhǔn)差時重復(fù)求和,同時需要遍歷圖像的每一像素點(diǎn),依次從圖像矩陣的行或列逐點(diǎn)移動,本文運(yùn)用迭代思想對計(jì)算灰度均值和標(biāo)準(zhǔn)差的方法進(jìn)行了改進(jìn),使得每次計(jì)算第n個像素點(diǎn)的鄰域窗口灰度值和Sn的時候使用前一個像素點(diǎn)的鄰域窗口灰度值和Sn-1,避免大量重復(fù)計(jì)算,使總體算法復(fù)雜度降低為O(size),從而做到與鄰域窗口大小基本無關(guān)。具體算法流程如圖1所示。
圖1 Niblack算法復(fù)雜度優(yōu)化流程
改進(jìn)算法的具體步驟為:
Step1把原圖像矩陣imag四周鏡像反射擴(kuò)展r行/列,生成(H+2r)×(W+2r)的新圖像矩陣imag1。
擴(kuò)展后,原imag圖起點(diǎn)坐標(biāo)(1,1)變成新圖像imag1的坐標(biāo)(1+r,1+r)。對于圖像imag1中的任意一像素點(diǎn)(i,j),其鄰域窗口大小為r×r,每一行(i,j+Pre)→(i,j+Post)共r個像素點(diǎn),每一列(i+Pre,j)→(i+Post,j)共r個像素點(diǎn),具體像素點(diǎn)位置見圖2所示。
圖2 圖像矩陣像素點(diǎn)位置示意圖
以像素點(diǎn)(i,j)為中心,定義長度為r的前后位置參數(shù),floor()指向下取整:
Step2計(jì)算起始行1+r+Pre的所有垂直方向r個像素點(diǎn)灰度值之和的初temp(1+r+Pre,j)。
每一列像素點(diǎn)(1+r+Pre+Pre,j)到(1+r+Pre+Post,j)共r個像素點(diǎn)灰度值之和,即是第1+r+Pre行的初值temp(1+r+Pre,j)。
Step3從下一行2+r+Pre開始到末尾行H+r+Post,基于前一行的求和結(jié)果計(jì)算所有行的垂直方向r個像素點(diǎn)灰度值之和temp(i,j)。
temp(i,j)=temp(i-1,j)+imag1(i+Post,j)-
imag1(i+Pre-1,j)
(9)
Step4基于上述保存的垂直方向求和結(jié)果,進(jìn)行水平方向temp(i,j)值的求和。計(jì)算起始列1+r+Pre,所有行的水平方向r個temp值之和得到像素點(diǎn)(i,1+r+Pre)鄰域窗口r×r的所有像素點(diǎn)的灰度值之和,即起始列的初值Sum(i,1+r+Pre)。
Step5從下一列2+r+Pre到末尾列Wid+r+Post,依次基于前一列的求和結(jié)果進(jìn)行計(jì)算,求出所有列水平方向r個temp值之和得到每一個像素點(diǎn)鄰域窗口的所有像素點(diǎn)的灰度值之和Sum(i,j)。
Sum(i,j)=Sum(i,j-1)+temp(i,j+Post)-
temp(i,j+Pre-1)
(10)
Step6通過式(11)得到灰度均值m(x,y),把f(i,j)-m(i,j)代入imag(i,j)重新計(jì)算得到像素點(diǎn)灰度標(biāo)準(zhǔn)差s(x,y)。
m(x,y)=Sum(i,j)/r2
(11)
式中:f(i,j)、imag(i,j)表示原圖像矩陣第i行、第j列的灰度值,imag1(i,j)表示新圖像矩陣第i行、第j列的灰度值,temp(i,j)表示新圖像矩陣第i行、第j列元素垂直方向r個像素點(diǎn)灰度值之和,Sum(i,j)表示新圖像矩陣第i行、第j列元素鄰域窗口r×r的所有像素點(diǎn)的灰度值之和。
根據(jù)Niblack算法原理,每個像素點(diǎn)需要利用鄰域窗口r×r模板遍歷圖像,導(dǎo)致邊緣區(qū)域(r-1)/2的范圍內(nèi)無法求取閾值;同時如果某一鄰域內(nèi)都是背景,按Niblack計(jì)算,必定有一部分被判定為目標(biāo)點(diǎn),從而導(dǎo)致偽影現(xiàn)象。針對此問題,本文在快速計(jì)算灰度值之和的時候運(yùn)用padarray()函數(shù)擴(kuò)展原圖像,保證了邊緣區(qū)域的計(jì)算問題。另外,針對偽影問題,根據(jù)Sauvola算法思路結(jié)合全局閾值Otsu算法提出新的閾值函數(shù),實(shí)驗(yàn)結(jié)果證明改進(jìn)算法效果明顯。
Sauvola算法的閾值函數(shù)如式(7)所示,其閾值由鄰域窗口的灰度均值m(x,y)、標(biāo)準(zhǔn)差s(x,y)和修正系數(shù)k決定。當(dāng)k的值不斷增大,小物體邊緣越模糊,文字圖像的字符筆跡越來越細(xì),也越來越模糊不清,但是噪聲也在慢慢地消除。實(shí)驗(yàn)表明,Sauvola算法對文本圖像處理有比較好的效果,但是在小物體識別、分割中效果比較差。同時,對經(jīng)典的文本圖像、小物體分割圖像做分析,發(fā)現(xiàn)文本、車牌圖像的Otsu分割閾值較低(Thotsu<0.49),而像rice、coin小物體圖像的Otsu分割閾值較高(Thotsu>0.49),本文實(shí)驗(yàn)所用的典型圖像如圖3所示,計(jì)算的對應(yīng)圖像的Otsu分割閾值如表1所示。其中:圖3(a)來自于國際文檔圖像二值化競賽(DIBCO)圖集,圖3(b)和圖3(d)來自于車牌OCR識別練習(xí)數(shù)據(jù)集,圖3(c)、圖3(e)和圖3(f)是數(shù)字圖像處理(岡薩雷斯第三版)圖集中的原始圖。
(a) 文本1 (b) 車牌1
(c) 文本2 (d) 車牌2
根據(jù)Niblack算法閾值式(5)以及式(4),可以把閾值函數(shù)T(x,y)表示為:
T(x,y)=m(x,y)×[1+g(t)×s(x,y)]
(12)
式中:g(t)是與m(x,y)相關(guān)的函數(shù),g(t)×m(x,y)的值范圍為[-1,1]。
經(jīng)過多組文本、車牌和小物體分割圖像實(shí)驗(yàn),發(fā)現(xiàn)Otsu分割閾值Thotsu與Sauvola算法分割閾值成比例關(guān)系。當(dāng)Thotsu≥0.49時,參考式(12),通過多次實(shí)驗(yàn)對比效果,建立閾值函數(shù)模型為:
當(dāng)Thotsu<0.49時,參考Sauvola算法閾值式(7),建立閾值函數(shù)模型為:
由于式(14)中修正系數(shù)t的取值范圍為[0,1],通過調(diào)整t值,多次實(shí)驗(yàn)對比效果,發(fā)現(xiàn)當(dāng)t=0.9時,文本、車牌類圖像二值化效果最佳。最終,針對文本、車牌及小物體分割圖像設(shè)計(jì)了一種使用范圍更廣、處理效果優(yōu)良的閾值函數(shù),表示為:
(15)
本文實(shí)驗(yàn)所使用的環(huán)境為Win7 64 bit中文旗艦系統(tǒng),CPU:AMD Ryzen 5 1600 3.2 GHz,內(nèi)存:DDR3 16 GB,在MATLAB R2017a應(yīng)用上對圖1的6幅圖像進(jìn)行實(shí)驗(yàn),分別用Otsu、Kittler、Niblack、Sauvola、Otsu+Niblack[12]以及本文算法做對比分析,結(jié)果如圖2-圖7所示。其中,Niblack算法的修正系數(shù)為k=-0.2,鄰域窗口大小為80×80;Otsu+Niblack算法參數(shù)主要參考文獻(xiàn)[12];本文算法鄰域窗口大小也為80×80。
表2是用原Niblack與本文算法在不同分辨率圖像上進(jìn)行多次實(shí)驗(yàn)之后計(jì)算的平均時間列表??梢钥闯?在同樣的鄰域窗口大小時,本文算法運(yùn)行速度比原來Niblack算法快幾十倍到幾百倍,并且這兩者之間的倍數(shù)隨著圖像分辨率的增大而急劇增大,說明新算法運(yùn)算速度受圖像分辨率大小的影響相對較小。隨著鄰域窗口大小r的增大,Niblack算法增加的耗時與r增大的大小成等比例關(guān)系,而本文算法則受鄰域窗口大小的影響比較小。因此,本文算法運(yùn)行速度比原Niblack算法提高了上百倍,并且算法穩(wěn)定,受圖像分辨率及鄰域窗口大小影響小。對比賈坤昊等[18]采用積分思想對Niblack算法速度的改進(jìn),本文算法更優(yōu)。
表2 算法運(yùn)算平均時間對比 單位:s
使用不同的算法分別對圖3中的圖像進(jìn)行二值化處理,得到6組不同效果的二值化圖像。從圖4可以看出Niblack算法及其改進(jìn)的Sauvola算法效果明顯比全局閾值Otsu、Kittler和Niblack+Otsu算法好,但是Niblack算法處理后其四周有大量偽影,而Sauvola算法和本文算法能獲得更準(zhǔn)確、完整的目標(biāo)信息,無明顯偽影及噪點(diǎn)。
(a) Otsu (b) Kittler (c) Niblack
(d) Sauvola (e) Niblack+Otsu (f) 本文算法圖4 文本1圖像二值化結(jié)果
從圖5可以看出,Otsu和Niblack+Otsu算法只能顯示一部分文字,Niblack算法處理圖片的四周還是存在部分偽影,Kittler、Sauvola和本文算法處理效果好,文字顯示清晰和完整,沒有斑點(diǎn)和偽影等噪點(diǎn)。
(a) Otsu (b) Kittler (c) Niblack
從圖6的車牌圖片二值化效果來看,Otsu、Niblack和Niblack+Otsu算法處理的圖片周圍存在大量斑點(diǎn)、線條,Kittler算法處理的右下角目標(biāo)部分模糊,Sauvola和本文算法車牌字符完整、清晰,但是本文算法處理的目標(biāo)更突出、清晰,并且周圍的斑點(diǎn)、偽影更少,對車牌識別的預(yù)處理效果最好。
(a) Otsu (b) Kittler (c) Niblack
從圖7的車牌圖片二值化效果來看,Otsu、Kittler和Niblack+Otsu算法處理的目標(biāo)顯示不完整。Niblack和Sauvola算法顯示目標(biāo)完整,但是存在目標(biāo)周圍存在斑點(diǎn)、偽影。本文算法處理的目標(biāo)突出、清晰,能獲得更準(zhǔn)確的目標(biāo)信息,干擾的噪聲、偽影少,對車牌識別的預(yù)處理效果最好。
(a) Otsu (b) Kittler (c) Niblack
(d) Sauvola (e) Niblack+Otsu (f) 本文算法圖7 車牌2圖像二值化結(jié)果
從圖8看出,全局閾值Otsu、Kittler算法會丟失部分目標(biāo),右下角部分目標(biāo)消失;Niblack算法噪點(diǎn)多、并且邊緣有偽影;Sauvola算法在背景區(qū)域有大量陰影,物體分割不大明顯;改進(jìn)的Niblack+Otsu算法物體分割明顯,但左上角存在部分噪點(diǎn);相比之下本文算法物體分割明顯,無噪點(diǎn)及陰影,其處理效果最好。
(a) Otsu (b) Kittler (c) Niblack
(d) Sauvola (e) Niblack+Otsu (f) 本文算法圖8 rice圖像二值化結(jié)果
對于目標(biāo)亮度不一的coin圖像,Kittler算法效果最好,但是本文算法明顯比原Niblack和Sauvola算法效果好,物體分割明顯,不過在圖像目標(biāo)中存在部分黑斑。
(a) Otsu (b) Kittler (c) Niblack
(d) Sauvola (e) Niblack+Otsu (f) 本文算法圖9 coin圖像二值化結(jié)果
本文算法對含噪聲圖像具有較強(qiáng)的魯棒性。以圖3(e)的rice圖為例,分別加入不同濃度的椒鹽、高斯噪聲,對比分析Niblack、Sauvola和本文算法下的峰值信噪比值(PSNR),實(shí)驗(yàn)結(jié)果如表3所示。
表3 不同噪聲濃度下各算法的PSNR值
圖10和圖11分別是加入5%椒鹽噪聲和5%高斯噪聲的圖像二值化處理對比圖。從表3、圖10和圖11中可以看出,本文算法對噪聲和干擾的魯棒性最好。
(a) Niblack (b) Sauvola (c) 本文算法圖10 加入5%椒鹽噪聲圖像二值化結(jié)果
(a) Niblack (b) Sauvola (c) 本文算法圖11 加入5%高斯噪聲圖像二值化結(jié)果
本文主要工作是基于Niblack算法模型進(jìn)行改進(jìn),提出了一種處理速度快、效果好的圖像二值化處理方法,其主要優(yōu)勢有:(1) 運(yùn)用迭代思想對原Niblack算法計(jì)算灰度均值和標(biāo)準(zhǔn)差的方法進(jìn)行了改進(jìn),本文算法運(yùn)行速度提高了上百倍,并且算法穩(wěn)定,受圖像分辨率及鄰域窗口大小影響小。(2) 根據(jù)Sauvola算法思路結(jié)合全局閾值Otsu算法及方差特性改進(jìn)算法閾值函數(shù),用Otsu全局閾值優(yōu)化原算法閾值函數(shù)中的修正系數(shù),使其能自適應(yīng)地調(diào)整閾值,減少人為干涉。與Otsu、Kittler、Niblack 、Sauvola和Otsu+Niblack算法相比,本文算法在文本圖像、車牌圖像和小物體分割處理中獲得更好的處理效果,應(yīng)用范圍更廣。
本文算法在處理光照不均的文本圖像、車牌圖像、目標(biāo)亮度差不大的小物體分割圖像方面已經(jīng)取得令人滿意的效果。但是,對于目標(biāo)亮度差異過大的多目標(biāo)圖像處理效果有待加強(qiáng),這一點(diǎn)也是本算法后續(xù)需要改進(jìn)的地方。