喬志凱, 陳世才, 蒙子昕, 史國友
(大連海事大學(xué) 航海學(xué)院, 遼寧 大連 116026)
船舶水尺位于艏、舯以及艉的左右兩舷,共六處水尺標(biāo)志。通過測量六面水尺可得到船舶吃水深度進(jìn)而保障船舶的安全航行。船舶水尺有英制和公制兩種,英制字符為羅馬數(shù)字,單位in,字高和相鄰兩字符間隔為1 in;公制字符為阿拉伯?dāng)?shù)字,單位cm,字高和相鄰兩字符間隔為10 cm。除此之外,有些國家和地區(qū)的字符大小和間隔會有略微的改動。
目前,國際間的大宗貨物的商品交易結(jié)算、進(jìn)出口通關(guān)和海事索賠都需準(zhǔn)確的水尺測量。傳統(tǒng)的水尺測量工作大多依賴人工,水尺人工讀數(shù)一般在靠港后才能進(jìn)行,一方面起伏不平的大風(fēng)浪會在船體留下彎曲的假水線;另一方面陽光透過水面會產(chǎn)生漫射和折射現(xiàn)象,在船體水尺區(qū)域形成大量的光照和陰影,這些都會影響人工讀數(shù)的準(zhǔn)確性。[1]隨著科學(xué)技術(shù)的飛速發(fā)展,尤其是在人工智能領(lǐng)域,為提高水尺讀數(shù)的準(zhǔn)確性和科學(xué)性,越來越多的海事部門和船舶企業(yè)開始使用船舶水尺自動識別系統(tǒng)來測量船舶水尺。船舶水尺自動識別系統(tǒng)通常由水尺定位、水尺字符分割和水尺字符識別等3部分組成。[2]由于水尺字符分割和水尺字符識別都是基于水尺二值化進(jìn)行的,所以船舶水尺二值化效果的好壞將直接影響整個(gè)系統(tǒng)的性能。目前,對于虛假水線造成的光照不均勻與光照折射和漫射形成的陰影問題,已有的船舶水尺自動識別系統(tǒng)大多采用比較傳統(tǒng)的二值化處理方法,對此沒有針對性的解決,處理效果也很不理想。[3]傳統(tǒng)的二值化處理方法主要有以下兩種:
圖1 船舶水尺標(biāo)志
1) 全局閾值法,這類方法是對圖像整體灰度進(jìn)行數(shù)理分析,然后根據(jù)平均灰度值、灰度最大類間方差和灰度方差或灰度均差確定全局閾值,最后對比每個(gè)像素點(diǎn)進(jìn)行二值化賦值。[4]例如OTSU算法、迭代法和平均灰度法。
2) 局部閾值法,這類方法利用選擇窗口遍歷每一個(gè)像素點(diǎn),通過分析窗口中心像素點(diǎn)周圍鄰域內(nèi)的灰度變化,得到該像素點(diǎn)的局部閾值,小于閾值的像素點(diǎn)賦值為0,大于閾值的像素點(diǎn)賦值為255。例如Bernsen算法、Niblack算法等。
郭秀艷[5]提出在水尺圖像上部3/4的部位,把水尺灰度圖像分行處理,然后尋找每一行的最大灰度值進(jìn)行求和平均,最后依據(jù)這個(gè)平均灰度值二值化處理,這種最大灰度平均處理后的全局閾值雖然降低噪聲,但依然解決不了光照不均勻的問題;吳禹辰[6]對彩色水尺圖像進(jìn)行RGB(Red Green Blue)三通道的灰度圖像處理分析,總結(jié)船體背景和水尺字符組合分割規(guī)律,然后進(jìn)行二值化處理,這種方法對圖像灰度直方圖呈現(xiàn)明顯雙峰狀態(tài)的圖像表現(xiàn)效果好,但對于實(shí)際水況中細(xì)節(jié)復(fù)雜和光照不均勻的圖像處理效果不佳;趙建蕾等[7]提出先采用高低帽增強(qiáng)字符對比度,再進(jìn)行迭代分塊處理圖像,該算法對字符處理質(zhì)量要求較高,并且不易選擇合適的高低帽窗口;歐陽慶[8]提出先把原圖進(jìn)行同態(tài)濾波增強(qiáng)處理,再用Bernsen算法求出局部閾值二值化,該方法涉及同態(tài)濾波處理,但同態(tài)濾波器的截止頻率不易確定,且經(jīng)過同態(tài)濾波后還是不能解決陰影對目標(biāo)造成的干擾。
傳統(tǒng)方法都不能很好地保留字符目標(biāo)和消除復(fù)雜光照下的船體背景噪聲。傳統(tǒng)OTSU算法經(jīng)常導(dǎo)致像素點(diǎn)強(qiáng)制二值化,造成細(xì)節(jié)目標(biāo)丟失;Niblack算法對局部窗口中每個(gè)像素計(jì)算局部均值和方差,然后去確定局部閾值,會產(chǎn)生偽影現(xiàn)象且對光照不均問題處理效果和速度不如Bernsen算法;Bernsen算法處理復(fù)雜細(xì)節(jié)和光照不均勻問題效果較好,但會有大量的背景細(xì)節(jié),導(dǎo)致圖像二值化后產(chǎn)生目標(biāo)斷裂或偽影。1個(gè)閾值分割圖像過于籠統(tǒng),考慮使用2個(gè)閾值,所以采用OTSU和Bernsen兩種算法相結(jié)合。
本文針對全局閾值法容易出現(xiàn)強(qiáng)制二值化的問題,提出分塊OTSU思想避免灰度變化劇烈區(qū)域強(qiáng)制二值化,大大減少了處理時(shí)間;針對局部閾值法細(xì)節(jié)保留過于豐富,存在大量光照噪聲點(diǎn),提出一種高斯平滑濾波后Bernsen法的方法。通過調(diào)節(jié)相關(guān)參數(shù)能有效地減少光照陰影和船體鐵銹等造成的噪聲,同時(shí)能克服光照不均勻造成的目標(biāo)偽影和字符斷裂。
常見的二值化算法只對特定情況下的圖像二值化效果較好。在處理不同類型或不同需求的圖像時(shí),需結(jié)合多種二值化算法處理,下面介紹幾種比較常見的二值化算法。
OTSU算法是一種自適應(yīng)閾值二值化方法,又稱大津法。[9]其核心思想是通過整體分析圖像的灰度特性,計(jì)算整體像素點(diǎn)灰度的最大類間方差,即目標(biāo)和背景分割概率的最大值,此時(shí)這個(gè)值就是OTSU閾值,最后把小于OTSU閾值的像素點(diǎn)賦值為0;大于OTSU閾值的像素點(diǎn)賦值為255。一般情況下,OTSU最優(yōu)閾值為圖像灰度直方圖的雙峰之間的最低點(diǎn)。
1) 對于一幅圖像,設(shè)前景像素點(diǎn)占圖像總像素點(diǎn)比例為w0,均值為u0;設(shè)背景像素點(diǎn)占圖像總像素點(diǎn)比例為w1,均值為u1;則該圖的灰度均值為
u=w0×u0+w1×u1
(1)
2) 建立灰度圖像的最大類間方差目標(biāo)函數(shù)為
g(t)=w0×(u0-u)2+w1×(u1-u)2
(2)
式(2)中:當(dāng)g(t)最大時(shí),圖像背景和目標(biāo)分離概率最大,分離效果最好,此時(shí)的t即為OTSU最佳閾值。
Bernsen算法是一種典型的局部閾值二值化算法,其在細(xì)節(jié)優(yōu)化處理方面性能較強(qiáng),能很好的保留有效目標(biāo)。[10]其核心思想是用一個(gè)選擇窗口遍歷全圖每個(gè)像素點(diǎn),使其根據(jù)鄰域的灰度變化決定當(dāng)前像素點(diǎn)的閾值。
1) 設(shè)窗口的大小為(2w+1)×(2w+1);窗口的中心像素點(diǎn)為f(x,y);窗口在x方向的增量為l;窗口在y方向的增量為k;圖像的Bernsen算法最優(yōu)解為
(3)
2) 對f(x,y)的像素點(diǎn)進(jìn)行比較,若當(dāng)前灰度值大于T,則賦值為1;若當(dāng)前灰度值小于T,則被賦值為0。最終得到的二值化圖像為
(4)
Niblack算法是一種結(jié)合局部標(biāo)準(zhǔn)差和局部均差提出來的局部閾值二值化算法。[11]對于某一像素點(diǎn)(i,j),設(shè)該點(diǎn)為局部窗口中心,局部窗口為b×b,則對此像素點(diǎn)的閾值T,Niblack算法的表達(dá)式為
T=m(i,j)+k×s(i,j)
(5)
式(5)中:T為該點(diǎn)的閾值;m(i,j)為以f(i,j)為中心點(diǎn)的窗口所有像素點(diǎn)的局部均差;s(i,j)為以f(i,j)為中心點(diǎn)的窗口所有像素點(diǎn)的局部標(biāo)準(zhǔn)差;k為關(guān)系調(diào)節(jié)系數(shù)(默認(rèn)值為-0.2),k的取值對于Niblack的二值化效果起決定性作用。
常見的二值化算法對比見表1。
表1 常見的二值化算法對比
在船舶水尺圖像上,不同位置的光照分布會隨著船舶表面的狀況和照明環(huán)境的不同而發(fā)生變化。在這種情況下,傳統(tǒng)的二值化方法并不總能產(chǎn)生很好的結(jié)果。
為解決光照不均勻的問題,特別是光照陰影,提出一種基于雙閾值的船舶水尺二值化新方法,其主要包括用圖像分塊優(yōu)化OTSU算法、選擇高斯濾波優(yōu)化Bernsen算法和運(yùn)用雙閾值二值化。
1) 將原始水尺圖像分成m×n個(gè)塊,然后計(jì)算每一個(gè)子塊的OTSU閾值,最后通過滑動窗口對每個(gè)中心子塊進(jìn)行OTSU閾值算數(shù)平均值計(jì)算。每個(gè)子塊都有各自的OTSU閾值,這樣可最大程度地聯(lián)系整體和部分,避免因強(qiáng)制二值化帶來的水尺圖像大面積目標(biāo)丟失。
圖像被分為若干子塊,粗線虛線框?yàn)榛瑒哟翱?見圖2。由圖2可知:當(dāng)滑動窗口大于3×3時(shí),二值化結(jié)果效果提升不明顯,運(yùn)算成本也會大幅增加,因此,新算法滑動窗口選擇為3×3。滑動窗口的中心為中心子塊,中心子塊的周圍有8個(gè)相鄰子塊,中心子塊的OTSU閾值是中心子塊和周邊8個(gè)相鄰子塊OTSU閾值的算術(shù)平均值。
圖2 圖像分塊示意
2) 改進(jìn)的Bernsen算法:對各個(gè)子塊分別進(jìn)行傳統(tǒng)Bernsen二值化處理和經(jīng)高斯平滑濾波后Bernsen二值化處理,最后通過線性比例結(jié)合這兩個(gè)局部閾值得到一個(gè)新的局部閾值。這樣的處理可很好地去除不均勻的光照陰影。
3) 結(jié)合全局閾值和局部閾值對各像素點(diǎn)逐個(gè)二值化。
將水尺圖像進(jìn)行灰度化處理,把其分成m×n個(gè)塊。假設(shè)每個(gè)塊的中心點(diǎn)是f(x,y),大小為(2w+1)×(2w+1),k和l為窗口的參數(shù)。二值化新方法的算法流程見圖3。
圖3 二值化新方法的算法流程
1) 計(jì)算當(dāng)前中心子塊的OTSU閾值T1(x,y)為中心子塊和周邊8個(gè)相鄰子塊OTSU閾值的算術(shù)平均值。由于OTSU算法經(jīng)常導(dǎo)致像素點(diǎn)強(qiáng)制二值化,造成細(xì)節(jié)目標(biāo)丟失。A可取10%~20%,由于水尺圖像存在大量噪聲,新方法取20%。故T1(x,y)應(yīng)滿足:
(6)
式(6)中:hist[i]為原圖灰度直方圖;A為圖像像素點(diǎn)的總數(shù)。
2) 根據(jù)Bernsen算法計(jì)算f(x,y)的閾值T2(x,y)為
(7)
式(7)中:k和l為窗口的參數(shù)。
3) 建立一個(gè)高斯濾波器。
s=(2w+1)×(2w+1)
(8)
(9)
式(9)中:σ為高斯分布的標(biāo)準(zhǔn)差[13],σ越小,圖像的平滑效果越不明顯;反之,σ越大,對圖像的平滑效果越明顯。
(10)
(11)
α∈(0,1);β∈(0,1)
式(11)中:α為調(diào)整帶高斯濾波器的Bernsen算法與傳統(tǒng)Bernsen算法之間平衡的參數(shù),α∈(0,1),當(dāng)α為0時(shí),該算法為Bernsen算法,當(dāng)α為1時(shí),該算法為帶高斯濾波器的Bernsen算法;β為靈敏度調(diào)節(jié)參數(shù),當(dāng)圖像灰度值和閾值的差異過大時(shí),經(jīng)常會出現(xiàn)錯(cuò)誤結(jié)果。為解決這個(gè)問題,可將閾值乘以常數(shù)β來降低Bernsen算法的靈敏度,根據(jù)試驗(yàn)經(jīng)驗(yàn),一般β值取為0.9,可獲得最佳結(jié)果。
6) 利用全局閾值和局部閾值逐點(diǎn)二值化,得到各點(diǎn)的像素b(x,y),有
(12)
式(12)中:γ∈(0.20,0.40),一般取γ=0.25。
如果(1-γ)×T1≤f(x,y)≤(1+γ)×T1
(13)
7) 應(yīng)用中值濾波[14]去除噪聲。
測試圖片是由大連港口監(jiān)視設(shè)備所拍攝的船舶視頻流中截取的水尺圖像。部分試驗(yàn)結(jié)果見圖4~圖8。約在早上十點(diǎn)正常光照下截取的船舶水尺圖像如圖4所示;處于正常光照但有樹葉陰影的水尺圖像如圖5所示;拍攝于中午暴曬環(huán)境下的高亮度水尺圖像如圖6所示;拍攝于傍晚的光照較暗的水尺圖像如圖7所示;不同光照下的新方法部分試驗(yàn)過程如圖8所示。
圖4 正常光照下的二值化算法對比
圖5 不均勻光照下的二值化算法對比
圖6 光照充足下的二值化算法對比
圖7 光照不足下的二值化算法對比
圖8 不同光照下的新方法部分試驗(yàn)過程圖
取Niblack算法的關(guān)系調(diào)節(jié)系數(shù)k=-0.2
設(shè)新方法算法的參數(shù)組為
para=[α,β,γ,w]
(14)
圖4的參數(shù)組為
para=[0.7,0.9,0.25,3]
(15)
圖5的參數(shù)組為
para=[0.6,0.9,0.30,3]
(16)
圖6的參數(shù)組為
para=[0.6,0.9,0.25,2]
(17)
圖7的參數(shù)組為
para=[0.5,0.9,0.25,2]
(18)
3.2.1對比樣例分析
為證明新方法算法的有效性,挑選4種不同光照環(huán)境下的船舶水尺圖像(即光照正常、光照不均勻、光照充足和光照不足),然后分別對這4種船舶水尺圖像進(jìn)行OTSU算法、Niblack算法、Bernsen算法和新方法算法二值化處理。其中:OTSU算法屬于全局閾值算法;Niblack算法和Bernsen算法屬于局部閾值算法;新方法算法屬于全局+局部的雙閾值算法。
由圖4b~圖7b可知:對于在不同光照下的船舶水尺圖像,OTSU算法整體處理效果較差。水尺字符和船板背景能很好的分離如圖7b所示;兩種大塊的船體背景或大量的陰影會對OTSU閾值的選取造成干擾,從而錯(cuò)誤分離目標(biāo)和背景。通常對于細(xì)節(jié)較多的圖像,全局閾值法二值化效果較差,因此考慮用局部閾值法進(jìn)行試驗(yàn)。局部閾值法會根據(jù)每個(gè)像素點(diǎn)鄰域灰度變化分別進(jìn)行處理,從而把這種局部細(xì)節(jié)變化精確地表現(xiàn)出來。[15]
由圖4c~圖7c可知:Niblack算法對區(qū)域性的目標(biāo)細(xì)節(jié)保留較好,但對光照陰影的消除效果較差,字符區(qū)域能夠比較準(zhǔn)確的分割出來,但無法克服光照陰影造成的影響如圖4c和圖5c所示;光照過足和不足時(shí)Niblack算法二值化效果也較差,具體表現(xiàn)為字符區(qū)域不夠清晰,周圍孤立噪聲點(diǎn)多如圖6c和圖7c所示;光照反射過亮和虛假水線區(qū)域存在大面積的虛假目標(biāo)??傮w來說,Niblack算法比OTSU算法能更好地識別水尺字符,保留更多的字符信息,但在消除光照陰影方面效果一般。
由圖4d~圖7d可知:Bernsen算法能完整地分割字符,但帶來了周圍背景細(xì)節(jié)的影響,造成大量的虛假目標(biāo)和字符尾影,Bernsen算法會把船體凹凸面強(qiáng)化為虛假目標(biāo)如圖4d和圖6d所示;光線較暗以及暗紅色的船體顏色造成對比度下降,從而形成大量的船體環(huán)狀虛假目標(biāo)和偽影如圖7d所示;正確分離出了水尺字符和刻度,顯著地消除了樹葉陰影,但存在大量小顆粒狀的噪聲點(diǎn),水尺字符邊緣和周圍的噪聲形成尾影如圖5d所示。
由圖4e~圖7e可知:新方法算法對于復(fù)雜光照條件下的水尺圖像二值化效果好,通過調(diào)節(jié)參數(shù)可解決光影、光照過量以及光照不足等問題。克服船體凹凸面引起的局部光照不均,水尺字符清晰且細(xì)節(jié)保留完好如圖4e所示;消除樹葉陰影如圖5e所示,被遮蓋字符44、46和50也能精確地分割出來如圖5d所示;分割字符周圍沒有成片偽影出現(xiàn),船體周圍大量的噪聲點(diǎn)也大量消除,水尺字符清晰明亮如圖6e和圖7e所示。
由圖4~圖8可知:分塊OTSU算法比OTSU算法保留更多字符,能消除樹影,適應(yīng)不同光照條件;然后對原圖灰度圖像進(jìn)行高斯濾波處理,能消除大量的噪聲,為后續(xù)的Bernsen局部細(xì)節(jié)處理做好準(zhǔn)備;最后結(jié)合兩者得到最終的二值化圖像。
為驗(yàn)證上述結(jié)論準(zhǔn)確性,選取50張不同的水尺圖像進(jìn)行二值化算法對比,得出其識別率(即90%以上目標(biāo)像素點(diǎn)成功識別)和算法運(yùn)行時(shí)間,見表2。由表2可知:對在復(fù)雜光照條件下,OTSU算法識別率低,耗時(shí)少;Niblack算法和Bernsen算法識別率較高,耗時(shí)高,時(shí)效性差;新方法算法識別率高,耗時(shí)較少,時(shí)效性好。
表2 4種二值化算法的識別率和耗時(shí)
3.2.2新方法參數(shù)分析
新方法的參數(shù)有α、β和γ以及局部閾值窗口w,在不同光照條件下,調(diào)節(jié)參數(shù)會得到合適的二值化圖像。在該算法中,α和w對處理結(jié)果有顯著影響。不同k和l下的試驗(yàn)結(jié)果見圖9。不同α參數(shù)下的處理結(jié)果見圖10。
1)w:局部窗口大小。傳統(tǒng)的Bernsen算法采用局部窗口的最小最大值作為檢測閾值,k和l是w中的參數(shù)。一般圖像分辨率越大,w值越大,但用w分塊的數(shù)量一般大于25塊。k:假設(shè)k為w的y軸方向變量,l為w的x軸方向變量。為顯示原始陰影圖像如圖9b所示,顯示5種不同k和l取值下的試驗(yàn)結(jié)果。當(dāng)k和l的值較大時(shí),Bernsen算法的計(jì)算非常耗時(shí),并且陰影去除的有效性并不明顯,如圖9所示。k=0或l=0時(shí),只是掃描方向不同,不會影響試驗(yàn)結(jié)果。新方法采用水平掃描,即k=0來實(shí)現(xiàn)二值化處理,字符陰影消除明顯如圖9d所示;l:當(dāng)k=0時(shí),窗口只由l決定。由圖9d和9f可知:發(fā)現(xiàn)l的大小影響水尺字符的處理結(jié)果。如果l很小,字符可能會被移除,但可能會產(chǎn)生噪聲。l的值通常是由字符寬度內(nèi)的一個(gè)值來定義的,這樣可獲得良好的結(jié)果。例如,在圖9中,字符“4”的最大寬度為14像素,最小寬度為4像素;因此,選擇水尺字符平均寬度(9像素)作為l的值。
2)β:Bernsen算法對圖像灰度值和閾值的差異比較敏感。當(dāng)Bernsen算法的靈敏度為大時(shí),經(jīng)常會出現(xiàn)錯(cuò)誤結(jié)果。為解決這個(gè)問題,可將閾值乘以常數(shù)β來降低Bernsen算法的靈敏度。根據(jù)試驗(yàn)經(jīng)驗(yàn),一般β值為0.9,可獲得最佳結(jié)果。
3)α:調(diào)整傳統(tǒng)Bernsen算法與帶高斯濾波器的Bernsen算法之間平衡的參數(shù)。調(diào)整不同的α可不同程度地去除陰影,并成功地識別出水尺字符。高斯濾波器不會模糊字符的邊緣,只是處理原始圖像以獲得新的邊緣像素點(diǎn)。因此,高斯濾波器改善了Bernsen算法的消除光照陰影性能。傳統(tǒng)Bernsen算法和高斯濾波Bernsen后的算法的結(jié)果,可看到經(jīng)過高斯濾波去除了大量的陰影噪聲點(diǎn),水尺字符和船體板框取得很好的二值化效果,但是α過大,會造成部分字符目標(biāo)的邊緣丟失分別如圖10b和圖10c所示。經(jīng)過大量試驗(yàn),為獲得最佳結(jié)果高斯濾波器的尺度σ設(shè)置為10,而α設(shè)置為0.5,如圖10d所示。
4) 參數(shù)γ:γ取值為(0.20,0.40)。參數(shù)γ為表征窗口灰度值波動大小的參數(shù)值。γ控制所挑選出的區(qū)域整體亮度偏小和偏大的程度,γ越大,可控制的區(qū)域的整體灰度變化范圍就越大,越有利于挑選出整體灰度波動大的區(qū)域,二值化后的圖像細(xì)節(jié)信息相對減少,噪聲點(diǎn)也減少,反之則增加。
復(fù)雜的光照變化經(jīng)常影響船舶水尺圖像二值化效果,降低船舶水尺識別系統(tǒng)的整體性能。為解決此情況下,船舶水尺圖像二值化存在全局閾值法強(qiáng)制二值化和局部閾值法光照陰影無法去除的問題,提出一種基于雙閾值的二值化新方法。新方法先對每個(gè)圖像子塊使用OTSU算法避免強(qiáng)制二值化造成的目標(biāo)丟失,然后利用高斯濾波預(yù)處理后的Bernsen算法消除因光照不均產(chǎn)生的光照陰影,最后動態(tài)調(diào)節(jié)雙閾值參數(shù)能適應(yīng)不同類型的船舶水尺圖像。試驗(yàn)結(jié)果表明:該方法能有效地消除光照陰影、屏蔽絕大部分背景噪聲且保留更多的水尺字符細(xì)節(jié)。