徐志康,馮 徑,張之正,舒曉村
(國防科技大學(xué) 氣象海洋學(xué)院,南京 211101)
水文監(jiān)測作為一門影響民生、經(jīng)濟(jì)建設(shè)的學(xué)科,通過在水域附近建設(shè)水文站實現(xiàn)水位、流量以及流速等水文要素測量,一方面提供水文常規(guī)業(yè)務(wù)數(shù)據(jù),另一方面為水資源利用、預(yù)防洪澇災(zāi)害、保障交通等提供決策支持?jǐn)?shù)據(jù)[1].在水深的自動測量中,除了安裝水位傳感器外,仍需搭建傳統(tǒng)水尺以對傳感器數(shù)據(jù)進(jìn)行校準(zhǔn)、備份等.基于水尺圖像的水深自動測量算法能夠自動識別圖像中的數(shù)字和刻度,有效解決了大量圖像傳輸和人工識別問題,為數(shù)據(jù)質(zhì)量控制帶來新的解決方案,也為城市道路積水監(jiān)測和機動巡檢提供了潛在便捷方法,因此越來越受到重視并取得了較大的發(fā)展[2].
針對于基于圖像或視頻的水位自動監(jiān)測,國內(nèi)外學(xué)者進(jìn)行了一定的研究[3,4].Gilmore等人將水尺原始圖像發(fā)送到管理中心進(jìn)行處理,并在發(fā)送前自動進(jìn)行圖像質(zhì)量評估和校正[5];Bruinink等人基于手機拍攝的圖片進(jìn)行了灌溉渠的水位測量[6].姜曉玉和花再軍等將水尺灰度圖進(jìn)行水平投影,根據(jù)突變位置劃分出水尺位置[7];蘭華勇等采用Hough變換實現(xiàn)水尺傾斜校正,并采用Sobel算子來提取水位線[8];冷建偉等根據(jù)水尺的顏色特征采用形態(tài)學(xué)、Hough變化的方法分割水位尺[9].關(guān)于基于水尺圖像的水位識別問題,目前處理方案基本分為3類[10]:
1)由于水尺圖像的灰度值在水位上、下存在較大差異,基于此可將水尺圖像進(jìn)行灰度投影尋找灰度突變位置以提取水位線;
2)水位線在水尺圖像中存在較為明顯的邊緣信息,可通過邊緣檢測來實現(xiàn)水位識別;
3)水尺與水體的顏色差異較大,可采用轉(zhuǎn)換顏色空間的方法來實現(xiàn)水位識別.
由于受圖像背景的影響,灰度投影、邊緣檢測的方法識別效果不佳,而采用顏色空間的方法容易受水面倒影影響,直接影響到測量結(jié)果[11].為此,本文提出了一種自動測量水深方法,首先改進(jìn)顏色空間轉(zhuǎn)換的方法來實現(xiàn)水尺精確定位,其次結(jié)合卷積神經(jīng)網(wǎng)絡(luò)和動態(tài)映射算法來識別水位,最后根據(jù)測量規(guī)則整合識別結(jié)果獲取水位數(shù)據(jù).
水位識別算法第一步就是在圖像中實現(xiàn)水尺定位,定位的精度直接影響到水位識別的精度.本文針對復(fù)雜背景下的水尺定位,提出了兩步定位算法,首先根據(jù)水尺的顏色先驗信息在HSV顏色空間下實現(xiàn)水尺的初步定位,并采用分量圖的方法實現(xiàn)精確定位,然后分割水尺字符并進(jìn)行識別,最后將像素高度動態(tài)映射至實際高度進(jìn)而實現(xiàn)水位測量,算法流程如圖1所示.
圖1 算法流程圖Fig.1 Algorithm flowchart
在圖像處理技術(shù)中,HSV及RGB是兩種常用的圖像顏色空間.HSV從物體的顏色(Hue)、飽和度(Saturation)、亮度(Value)三個分量對圖像進(jìn)行描述,相較于RGB能夠較好地模擬人類的視覺和神經(jīng)系統(tǒng)對顏色的感知過程[12].由于水尺與環(huán)境的顏色相差較為明顯,考慮將數(shù)據(jù)圖像由RGB顏色空間轉(zhuǎn)換至HSV顏色空間,并進(jìn)一步處理圖像的H分量以突顯水尺部分.
在H分量下采用OTSU算法分別確定灰度圖及H分量的閾值、可分離度.OTSU算法是通過遍歷方式確定使類間方差最大的全局閾值,結(jié)果如表1所示,從中可以發(fā)現(xiàn)基于H分量的可分離度高于灰度圖,因此利用H分量用于定位水尺相較于灰度圖效果較為明顯.
表1 OTSU下灰度圖與H分量對比
Table 1 Contrast of gray information and H component based on OTSU method
圖像全局閾值可分離度灰度圖0.48240.5742H分量0.47060.8878
采用OTSU方法實現(xiàn)閾值分割后,二值圖像中除有效的水尺輪廓之外還有較多的孤立噪點,采用中值濾波的方法對水尺圖像進(jìn)行濾波消除噪點.
為了進(jìn)一步對水尺定位,采用形態(tài)學(xué)方法處理經(jīng)中值濾波后所得到的圖像.由于在二值圖像中,水尺部位容易發(fā)生斷裂,故先采用閉運算實現(xiàn)連通,之后進(jìn)行開運算濾除細(xì)小區(qū)域[13].經(jīng)過兩次形態(tài)學(xué)運算之后的二值圖像,可較為準(zhǔn)確的覆蓋水位尺的位置,并基于四連通區(qū)域檢測圖像中最大的連通區(qū)域,如圖2(a)所示即為初步定位的水尺灰度圖.
圖2 分量對比Fig.2 Comparison of different components
對于在野外布置的圖像采集設(shè)備,一般在圖像采集時,會采用連續(xù)拍照或者攝像等手段,而在雨雪天氣時,單幅圖像受雨雪影響較大,可以通過對多幅連續(xù)圖像進(jìn)行均值濾波以減弱天氣影響[6].
初步定位的水尺圖像會受到水面倒影、背景的影響,由于水面倒影與水尺顏色相似,H分量與灰度圖解決該問題效果不佳,如圖2(a)及圖2(b)所示.為此,對顏色空間轉(zhuǎn)換進(jìn)行改進(jìn),以紅色水尺為例,根據(jù)顏色通道重新構(gòu)建分量圖C:
(1)
C=1-e-p
(2)
其中R、G、B為圖像的通道值,ω為調(diào)整顏色權(quán)重參數(shù),p為分量因子,C為定義的分量圖.以O(shè)TSU中的可分離度作為評價標(biāo)準(zhǔn),自適應(yīng)選擇使分離度最大化的ω,本實驗中當(dāng)ω為1.3時,可分離度最大,能夠較好的消除水面倒影和背景的影響,如圖2(c)所示分量圖效果.將分量圖二值化后,進(jìn)行中值濾波,可以有效地消除水面倒影等影響,圖3(b)為水尺精確定位結(jié)果.
圖3 精確定位Fig.3 Accurate positioning
經(jīng)過兩步定位的水尺圖像由于拍攝角度、環(huán)境造成水尺角度傾斜,水尺平面與圖像采集設(shè)備平面可能存在一定角度偏差,需要對其進(jìn)行垂直配準(zhǔn),以提高計算小數(shù)部分的精確度.水尺具有明顯的線條輪廓特征,而Hough變換可以從圖像中識別直線、圓等幾何形狀[14].故采用Hough變換來提取水尺的邊緣,計算旋轉(zhuǎn)角度并對水尺圖像進(jìn)行仿射變化,使得水尺邊緣垂直于水平線:
(3)
(x,y)為原始圖像上的一點,(X,Y)為該點順時針旋轉(zhuǎn)θ后的對應(yīng)點.
經(jīng)過兩步定位及傾斜校正,能夠準(zhǔn)確的獲得水尺圖像,并消除水面倒影的影響,而后可對水尺圖像進(jìn)行識別獲取水位信息.
用于測量水深的水尺,由于部分被水遮擋,在水尺的水上部分大致存在四類字符:完整的數(shù)字、完整的“E”,殘缺的數(shù)字和殘缺的字符“E”.完整的數(shù)字及完整的“E”可確定水深的大致范圍,誤差為±5cm,視作整數(shù)部分;殘缺的字符“E”用來計算小數(shù)部分,最后結(jié)合兩部分計算結(jié)果實現(xiàn)測量水深.目前常用的字符識別方法有模板匹配、神經(jīng)網(wǎng)絡(luò)、SVM等,模板匹配具有識別速度快、運算簡單等優(yōu)點,但是對于情況復(fù)雜的字符則識別效果較低,而神經(jīng)網(wǎng)絡(luò)和SVM具有較高的識別能力,但是卻依賴于字符的特征選取.而CNN是一種以分層結(jié)構(gòu)構(gòu)建的學(xué)習(xí)網(wǎng)絡(luò),類似于人類的視覺感知系統(tǒng),主要包括兩個過程:前向和后向.前向過程是將輸入圖像參數(shù)化后(以權(quán)重及偏置參數(shù)進(jìn)行表示)依次輸入至各層中,并將期望輸出與樣本標(biāo)簽進(jìn)行對比計算損失函數(shù),而后向過程是根據(jù)損失函數(shù)計算各參數(shù)的下降梯度,更新參數(shù)后繼續(xù)下一階段的前向過程,直至迭代結(jié)束或誤差達(dá)到期望值[15].因此本文基于卷積神經(jīng)網(wǎng)絡(luò)實現(xiàn)水尺字符的識別.
采用CNN進(jìn)行字符識別,首先需要建立訓(xùn)練樣本及測試樣本.CNN作為深度學(xué)習(xí)的一種方式,大量的數(shù)據(jù)樣本是其能夠較好地實現(xiàn)字符識別的前提,少量樣本容易造成過擬合現(xiàn)象,即模型在訓(xùn)練集中識別精度較高,在測試集中精度較低.數(shù)據(jù)增強是一種通過擴(kuò)充樣本數(shù)據(jù)的多樣性及數(shù)量來提升模型的泛化能力、魯棒性的技術(shù),主要包括尺度變換、隨機裁剪、水平垂直翻轉(zhuǎn)、平移變換、噪聲擾動、仿射變換等,為所獲得的數(shù)據(jù)增強擴(kuò)充樣本[16].為了豐富圖像訓(xùn)練集,以人工方式截取的數(shù)字和字符為基礎(chǔ)進(jìn)行人工標(biāo)注,并采用數(shù)據(jù)增強來擴(kuò)充樣本數(shù)據(jù),在模型訓(xùn)練的過程中,同時采用dropout技術(shù),防止模型發(fā)生過擬合.
采用CNN進(jìn)行字符識別,首先需要將水尺字符進(jìn)行分割,分割出的字符主要分成數(shù)字、“E”和由于障礙物遮擋出現(xiàn)的殘缺的“E”三部分.將數(shù)字、完整的“E”定義為整數(shù)部,基于CNN實現(xiàn)字符識別;將殘缺的“E”定義為小數(shù)部,采用動態(tài)映射算法計算高度,最終實現(xiàn)水深的測量.
字符分割目前主要采用圖像處理以及聚類來實現(xiàn)的.其中聚類方法是根據(jù)一定的標(biāo)準(zhǔn)將樣本中具有相似性質(zhì)的數(shù)據(jù)進(jìn)行分類,這種分類標(biāo)準(zhǔn)稱為相似度和準(zhǔn)則函數(shù).模糊聚類方法可對一些有模糊界限的事物進(jìn)行分類,定量的確定樣本之間的親疏關(guān)系,可采用模糊C均值聚類(Fuzzy c-means algorithm,FCM)對水尺圖像進(jìn)行字符分割,根據(jù)FCM建立目標(biāo)函數(shù)[17]:
(4)
其中,c代表分類數(shù)目,n為樣本數(shù),m為模糊指數(shù),zi為第i個類別的中心點,uij為第j個樣本屬于第i個類別的隸屬度,取值為[0,1].模糊指數(shù)m影響著不同類別之間的模糊程度,隨著m增大,不同類別之間的模糊程度也逐漸增大,分類結(jié)果也就失去了一定意義,在本文水尺圖像聚類過程中m取2.
聚類的實現(xiàn)過程實際上是對目標(biāo)函數(shù)的最小化過程,同時也不斷更新隸屬度矩陣U和樣本中心zi,實現(xiàn)對數(shù)據(jù)集X的聚類劃分[17]:
(5)
采用FCM的方法已定位的水尺圖像進(jìn)行像素聚類,對水尺圖像的每個像素點進(jìn)行了類型標(biāo)注,分為了字符和背景兩部分,并據(jù)此標(biāo)簽分割出字符塊,二值化后進(jìn)行識別.
圖4 CNN的網(wǎng)絡(luò)結(jié)構(gòu)Fig.4 Architecture of the CNN
LeCun等設(shè)計的LeNet-5是經(jīng)典的CNN結(jié)構(gòu),通過局部感知野、權(quán)值共享、多卷積核以及池化等方法降低參數(shù)數(shù)目,并成功應(yīng)用于手寫字符識別,后續(xù)有眾多研究基于此進(jìn)行,輸入數(shù)據(jù)不需要進(jìn)行特征提取,可直接進(jìn)行輸入.本文所需要解決的問題是典型的分類問題,即解決數(shù)字和字符“E”的分類,由于LeNet-5對手寫字符的分類效果較好,故以LeNet-5架構(gòu)為基本框架設(shè)計CNN,其網(wǎng)絡(luò)結(jié)構(gòu)如圖4所示[15].
用于識別字符的CNN主要包括輸入層、卷積層、下采樣層、全連接層以及輸出層.本文將圖像尺寸歸一化為40×40作為網(wǎng)絡(luò)的輸入圖像,卷積層采用了5×5的卷積核,下采樣層采用了2×2窗口的均值池化,采用的激活函數(shù)為Sigmoid函數(shù),具體各層參數(shù)見表2.
卷積層C1至下采樣層S4根據(jù)表2中參數(shù)對輸入數(shù)據(jù)進(jìn)行卷積、池化處理.LeNet-5將第五層視為卷積層C5,但由下采樣層S4至卷積層C5之間采用全連接的方式,故卷積層C5
表2 模型部分參數(shù)
Table 2 Some model parameters
模型卷積核/過濾器步長輸出卷積層C15×5×6136×36×6下采樣層S22×2218×18×6卷積層C35×5×12114×14×12下采樣層S42×227×7×12卷積層C5--120×1全連接層--11×1
也可視為全連接層.下采樣層S4輸出為7×7×12的矩陣,將其重定義為一個長度為588的向量,即將一個三維矩陣轉(zhuǎn)換到一維空間的向量形式,才可以輸入下一層卷積層C5進(jìn)行訓(xùn)練.卷積層C5實際上是將長度為588的向量采用全連接的方式映射為長度為120的向量并輸入至下一層即全連接層.而全連接層同樣采用全連接的方式,將長度為120的向量采用全連接的方式映射為長度為11的向量,并經(jīng)過softmax之后確定分類于數(shù)字與字符“E”的概率,根據(jù)分類概率大小確定最后的分類結(jié)果.
在模型訓(xùn)練階段,需要構(gòu)建損失函數(shù)用于評估網(wǎng)絡(luò)輸出結(jié)果與實際值的差異[15]:
(6)
其中,zi為網(wǎng)絡(luò)輸出,yi為期望值,損失函數(shù)采用的是方差損失函數(shù),同時在訓(xùn)練過程中采用梯度下降法最小化損失函數(shù),然后用損失函數(shù)的值更新每個神經(jīng)元的權(quán)重值.損失函數(shù)隨迭代次數(shù)變化趨勢如圖5所示,網(wǎng)絡(luò)訓(xùn)練的準(zhǔn)確率能夠達(dá)到98.25%.
圖5 損失函數(shù)Fig.5 Loss function
經(jīng)過訓(xùn)練的神經(jīng)網(wǎng)絡(luò)用于識別從水尺圖像中分割出來的字符,即完整的數(shù)字和完整的字符“E”,并將最后一個殘缺的字符采用后續(xù)的動態(tài)映射算法計算小數(shù)部分.
由于水尺具有不同的測量范圍和分辨率,每次分析圖像時都會動態(tài)映射像素距離與實際距離.根據(jù)水尺的字符特點,選擇完整的字符“E”的平均像素高度與公制單位進(jìn)行動態(tài)映射,并以此映射關(guān)系計算殘缺字符的高度.
首先對分割的字符“E”進(jìn)行高度統(tǒng)計并進(jìn)行分析,該例中分割出7個完整的字符“E”和1個被水位遮擋的字符“E”.像素高度統(tǒng)計,將識別出來的完整字符“E”按照從上至下,從左至右的順序存儲,共計M個字符“E”,并統(tǒng)計其像素高度,記為h1,h2,h3,…,hM,并將最后一個殘缺字符作為第M+1個,其像素高度為hM+1.數(shù)據(jù)圖像中的水尺與實際水尺相比發(fā)生了投影變換,因此采用二次方程來擬合在投影變化前提下字符“E”像素高度的變化規(guī)律,即擬合像素與實際高度之間的映射關(guān)系[6]:
y=ax2+bx+c
(7)
以完整字符“E”的累計像素高度作為自變量x,即將h1,(h1+h2),(h1+h2+h3),…,(h1+h2+h3+…+hM)作為自變量x,以實際累計高度作為因變量y,對應(yīng)將50,100,150,…,50*M作為因變量y,代表實際高度,單位為毫米,對方程(7)進(jìn)行擬合求解系數(shù)a,b,c.
以7組完整字符“E”的像素高度為數(shù)據(jù)進(jìn)行擬合,7個完整的字符“E”按照從上至下,從左至右的順序像素高度對應(yīng)為99,99,98,102,103,105,106,其實際高度均為50mm,1個被水位線遮擋的字符“E”像素高度為98,系數(shù)擬合結(jié)果為a=0.1667,b=0.0238,c=98.2857.最后的字符“E”像素高度為98,作為第M+1個字符并將其累計高度為自變量x求解y,最后計算其映射高度為45mm,通過圖像自動測量水位高度為60.5cm,人工讀數(shù)為60.2cm,相對誤差為0.5%.
根據(jù)水位線的位置,水尺圖像大致分為兩種類型,一種是水位線遮擋字符“E”,另一種遮擋數(shù)字部分,兩種不同情況對應(yīng)不同的識別規(guī)則.以水尺的左半部分為參考對象,根據(jù)最后一個字符即殘缺字符為標(biāo)準(zhǔn)劃分為兩種情況,除殘缺字符外其余字符輸入至CNN進(jìn)行識別:
圖6 測量規(guī)則分類Fig.6 Classification of measurement rules
情況1.最后一個字符為殘缺的“E”,如圖6(a)所示.其余字符經(jīng)過CNN識別后,倒數(shù)第2個字符識別結(jié)果為數(shù)字n,可初步確定水深范圍為(10n-5,10n)cm,并以此作為整數(shù)部分.而后計算水尺右半部分最后一個字符的像素高度,并采用動態(tài)映射計算其實際高度hcm,則最后測量結(jié)果為(10n-h)cm.
情況2.最后一個字符為殘缺的數(shù)字n,如圖6(b)所示.其余字符經(jīng)過CNN識別后,可初步確定水深范圍為(10n,10n+5)cm,并以此作為整數(shù)部分.而后計算水尺右半部分最后一個字符的像素高度,并采用動態(tài)映射計算其實際高度hcm,則最后測量結(jié)果為(10n+5-h)cm.
采用上文中的兩步定位算法進(jìn)行水尺定位,在實現(xiàn)水尺定位的功能基礎(chǔ)上可以解決水面倒影的問題,在采集的數(shù)據(jù)圖像中,如表3所示部分原始圖像與定位圖像進(jìn)行比較(為方便比較,人工截取原始圖像與定位圖像水位線附近的水尺圖像,以對比定位效果),比對結(jié)果如下:從比對結(jié)果中可以發(fā)現(xiàn),本文提出的兩步定位的方法能夠消除水面倒影,識別結(jié)果達(dá)到毫米級別并且能夠保證識別精度.
表3 識別結(jié)果對比
Table 3 Comparison of results
原始圖像定位圖像識別結(jié)果(cm)原始圖像定位圖像識別結(jié)果(cm)15.551.825.160.232.160.5
本文設(shè)計了一種基于CNN的水位自動測量算法,主要包括水尺定位、字符識別以及動態(tài)映射三部分.針對水尺定位建立了兩步定位算法,首先基于水尺的顏色信息在HSV空間下實現(xiàn)初步定位,而后建立自適應(yīng)分量圖進(jìn)一步實現(xiàn)精確定位.字符識別方面則是通過FCM進(jìn)行聚類,并分割出水尺上的字符,同時構(gòu)建了CNN用于識別分割的字符,識別結(jié)果用作后續(xù)的測量結(jié)果.根據(jù)字符的像素高度,采用二次方程擬合像素與實際高度的動態(tài)映射,結(jié)合字符識別結(jié)果建立了測量規(guī)則,實驗結(jié)果滿足工程應(yīng)用需求.所用方法不需要依賴固定的圖像采集設(shè)備,利用普通水尺實現(xiàn)水位的自動測量,并上傳數(shù)據(jù),可補充測量站點的數(shù)據(jù)記錄,也可用于比對和校準(zhǔn)水位傳感器.