肖卓,陶青川,沈建軍
(四川大學電子信息學院,成都 610065)
水利相關部門在河流、湖泊等地建立視頻監(jiān)控系統(tǒng),加速了水利信息化建設的步伐[5]。其中水標尺讀數(shù)的讀取能提供預測山洪的有效方法。傳統(tǒng)水位測量方式主要有安裝水尺目測讀數(shù)和使用傳感器自動采集水位相關的模擬量再轉換為水位量兩種。其中目測測量方式效率低、及時性差以及惡劣情況下無法讀取,而使用傳感器測量方式成本高、難以維護、受環(huán)境影響大[1]。通過數(shù)字視頻處理技術可以實時觀測河道水庫的情況,提供直觀的圖像信息,同時可以改善測量工作人員的工作環(huán)境,做到無人值守[2]。水利視頻監(jiān)控采集的視頻圖像信息,利用圖像處理算法對水利視頻監(jiān)控圖像進行水位提取比人工檢測更直觀,也更節(jié)省人力成本[3]。
在依靠傳統(tǒng)機器視覺的水尺識別算法中,普遍通過形態(tài)學變換提取水尺邊緣、多幀水尺圖像處理得到水尺位置、RGB空間轉HSV空間根據(jù)顏色提取水尺位置、人工預設感興趣區(qū)域等方法用來定位水尺目標等方法[4-7]。然而在實際應用場景中,安防監(jiān)控具有場景復雜,圖像噪聲多,目標不明顯等特點。形態(tài)學變換提取水尺邊緣和RGB色彩空間轉換至HSV色彩空間的方法都會受到周圍復雜場景的影響。無論是場景的邊緣和場景的顏色,都會對水尺定位造成很大的影響。而多幀水尺圖像處理得到水尺位置的方法是在攝像頭靜止不動的前提下。由于當前安防攝像頭大部分均由云臺控制等功能,在攝像頭受到環(huán)境影響產(chǎn)生抖動、視角被調離水尺區(qū)域或云臺自動巡航時,多幀水尺圖像處理得到水尺位置的方法會直接失效。
本文提出一種基于SSD目標檢測的水尺檢測算法,通過深度學習訓練提取水尺特征,能較好地檢測到水尺位置。多幀判斷綜合確定當前水尺的位置,能非常準確的定位到水尺的具體位置。檢測到水尺位置后,邊緣檢測來獲取水尺邊緣信息,形態(tài)學處理,填充水尺中心;計算非零像素占比來矯正傾斜的水尺,使水尺垂直于水平面;再重新進行x軸的邊緣檢測獲取水尺中“E”的刻度,并通過形態(tài)學處理獲得完整的刻度信息。算法流程如圖1所示。
圖1 算法流程圖
SSD(Single Shot Mulitbox Detector)是一種基于卷積神經(jīng)網(wǎng)絡的目標檢測算法,由Wei Liu在2016年提出,擁有比Fast R-CNN更好的速度及更高的準確率,是目前主流的深度學習目標檢測網(wǎng)絡之一[8]。SSD目標檢測網(wǎng)絡結合YOLO回歸思想以及Faster R-CNN的anchor機制做到速度與準確率并存[9]。SSD目標檢查網(wǎng)絡使用VGG-16作為基礎網(wǎng)絡,并增加了新的卷積層來獲取更多的特征圖。由于使用的是全卷積結構,相對于Faster R-CNN包含的全連接層網(wǎng)絡結構,使網(wǎng)絡計算量急劇減少,提高了運算速度。并使用多尺度特征圖方式,對各個尺寸大小的目標特征進行檢測。網(wǎng)絡模型如圖2所示。
在本文中,由于水尺大小在圖片中各不相同,所以需要提取不同尺度的特征圖進行預測,大尺度特征圖用來檢測小目標,小尺度特征圖用來檢測大目標。并在特征圖上的每一個點生成一系列的候選框,每個框都會生成自己的回歸和分類。由于水尺目標形狀的特殊性,在視頻監(jiān)控場景下,水尺目標普遍是長條狀,垂直于水平面。本文去掉橫向的矩形框,使用多個不同比例的豎條狀矩形框作為候選框。保持原始網(wǎng)絡中的各尺度特征圖中候選框數(shù)量,并去除橫向矩形框,增加豎向矩形框,能更好地與原始框進行匹配,如圖3所示。
本文采用SSD 300通過監(jiān)督學習,訓練樣本,提取網(wǎng)絡特征的方式,訓練模型。在具體算法中,將視頻監(jiān)控輸出圖像下采樣到300×300的分辨率,并根據(jù)網(wǎng)絡輸出分類及概率,使用多幀判斷輸出結果,可以有效解決因日照變化和攝像頭抖動造成的檢測失敗等問題。
圖3 SSD候選框示意圖
首先使用將視頻流解碼成單幀RGB格式,然后對單幀圖像進行下采樣,下采樣至分辨率為300×300,將下采樣后的圖像數(shù)據(jù)輸入至SSD300目標檢測網(wǎng)絡中。輸出檢測目標的分類、概率及目標框信息。
由于光照的影響及攝像頭的抖動轉動,可能會影響SSD目標檢測網(wǎng)絡的結果。本算法使用多幀結合判斷,在當前幀未檢測到目標框時有兩種可能,一個是攝像頭云臺旋轉,視角切換到了看不到水標尺的位置,一種就是網(wǎng)絡誤判不存在水尺。在上一幀目標框基礎上,對比當前幀與上一幀,求差分,并使用形態(tài)學腐蝕濾掉由于攝像頭抖動造成的邊緣。計算非零點占比,當百分比較大時確定當前幀的視角與之前的視角不一致,則當前SSD網(wǎng)絡輸出的結果是正確的,否則使用之前的網(wǎng)絡輸出結果對當前幀進行下一步計算。檢測效果如圖4所示。
圖2 SSD網(wǎng)絡模型圖
由于水尺所持環(huán)境光照的變化,安防監(jiān)控攝像頭獲取到的圖像可能出現(xiàn)曝光過度或者曝光不足的情況,變現(xiàn)在圖像上就是水尺邊緣不清晰,對于分離出水尺刻度造成非常大的影響。
圖4 SSD網(wǎng)絡輸出水尺分類矩形框
本文使用三通道直方圖均衡的方式,將圖像進行非線性拉伸,使圖像峰值部分對比度得到增強[10]。單通道直方圖均衡如公式(1)所示,其中Sk表示灰度為k的像素均衡后的像素值。L表示位深度,灰度范圍為[0,L-1],MN分別表示圖像的寬高。nj表示灰度值為j的像素值總數(shù)。
增強后的圖片,圖像邊緣更加清晰,并且圖像的灰度在灰度范圍內均衡分布,能較好地提取出水尺的邊緣信息。原圖與增強后的圖如圖5(a)、(b)所示。
圖5 水尺識別效果圖
對于增強后的圖像而言,需要進一步縮小水尺范圍。去除水尺周邊復雜的場景邊緣信息對水尺讀數(shù)造成的影響,并矯正水尺的角度,使水尺垂直于水平面。
如圖5(b)所示,在實際應用場景中,水尺的角度各異,周邊情況不盡相同,SSD模板檢測網(wǎng)絡能有效地檢測到水尺的大致范圍,但對于復雜場景中,水尺周邊的邊緣信息復雜,對水尺的檢測會造成很大的影響,所以必須進一步精確提取水尺的位置,并對偏移的水尺目標做矯正,使水尺能夠垂直于圖像水平面。為后續(xù)的水尺刻度讀數(shù)提高精度。
(1)Sobel邊緣提取
Sobel算子主要用來做邊緣檢測上,是離散型差分算子,用來運算圖像亮度函數(shù)的灰度近似值,在圖像任一地方使用此算子,均會產(chǎn)生灰度矢量或其法矢量,并能很好地抑制圖像中的噪聲,減少噪聲對實際邊緣信息造成的干擾[10]。Sobel卷積核如公式(2)所示。
Gx、Gy為兩組3×3的矩陣,分別為橫向和縱向,將之與圖像作平面卷積,即可分別得到橫向與縱向的高度差分近似值。
水尺目標中“E”的目標相對于背景有著很明顯的邊緣特征,通過邊緣提取能夠分離出水尺的邊緣,使ROI圖中的E更醒目,由于輸入圖是彩色的,包含更多的信息,使用Sobel算子,對上一步的結果圖進行邊緣檢測提取。邊緣提取后效果如圖5(c)所示。
(2)提取水尺
Sobel邊緣提取后,水尺周圍包含很多場景的噪聲及其他物體邊緣的影響,通過中值濾波去除周圍減小的噪聲,平滑獨立的像素點,并通過形態(tài)學閉操作和膨脹填充水尺中“E”的空隙。如圖5(d)所示,水尺依然是傾斜的,并且水尺周圍存在很多的干擾點,直接通過聯(lián)通區(qū)域找到最大外界矩形是不恰當?shù)?,會包含很多水尺外的噪聲點,所以我們通過旋轉圖片,矯正圖片使水尺垂直于水平面。
由于水尺目標的特點,水尺在圖片中包含了大量的白點,其他白點是水尺周圍物體的邊緣。圖6為二值圖中每列像素包含的非0點個數(shù),可以看出,在40~100中間包含了大量的非0點,而40則為水尺左邊界,100為右邊界。通過計算非0像素在邊界范圍內的面積比,找出面積比最大的一個角度,此時的水尺接近于垂直水平面。并且可以通過計算列像素的梯度提取出水尺的左右邊界。獲得傾斜矯正后的水尺圖片后,對圖片的行像素進行同樣的處理,去除噪聲及其他邊界,就此得到水尺原圖。旋轉后的二值圖如圖5(e)所示。
圖6 二值圖y軸非0點個數(shù)
對增強后的圖片進行相同的傾斜矯正和圖片截取。圖片中水尺位置垂直水平面,并通過使用Sobel算子x方向邊緣檢測,由于水尺矯正后,x軸方向梯度變化較大。通過Sobel算子x方向邊緣檢測,能很好地過濾掉y軸的邊緣信息,而保留x軸的邊緣,從而能很好地提取出水尺x方向的邊緣信息。如圖5(f)能看出,雖然能很好地提取出水尺刻度,但仍然有水尺邊緣及水尺上數(shù)字的干擾。通過降噪消燥和形態(tài)學處理如圖5(g)(h),能很好地保留水尺的刻度信息,再通過尋找連通區(qū)域來確定水尺刻度如圖5(i)。
本文數(shù)據(jù)集分為SSD目標檢測網(wǎng)絡訓練集和算法測試集。例圖如圖7所示。
SSD目標檢測網(wǎng)絡訓練集包括互聯(lián)網(wǎng)上抓取的水尺圖片和四川大學校內拍攝的水尺圖片,通過對圖片進行截取、旋轉、翻轉和對比度調整等操作,擴充水尺圖片數(shù)據(jù)。并根據(jù)數(shù)據(jù)集制作樣本。
算法測試集采用手機拍攝視頻,通過晃動和移動手機模擬實際水利場景下的監(jiān)控攝像頭抖動及云臺控制。視頻采集于成都市九眼橋,使用最小刻度為1cm的紅藍兩種顏色的水尺在不同場景下錄制視頻。
實驗環(huán)境如表1所示。
表1 實驗環(huán)境
實驗使用FFMpeg對分辨率為1280×720、幀率為30的輸入視頻進行解碼、使用SSD300-Caffe版本進行水尺目標檢測,使用OpenCV3.2對水尺目標區(qū)域圖像進行處理識別水位值。對紅藍兩種水尺,兩個不同場景下共四個視頻片段進行水位檢測。本文算法能做到單幀目標檢測加識別在80ms內,水尺定位實驗結果如表2所示、水位檢測部分實驗結果如圖7所示。
表2 SSD多幀水尺定位實驗結果表
圖8 水位檢測效果圖
從表2、圖8可以看出,對兩個不同場景下的紅藍兩種不同顏色的水尺進行視頻水位檢測,本文算法能做到水尺目標檢測準確率在95%以上,水位檢測誤差在2cm以內。并且視頻抖動和移動都不會對算法結果造成太大的影響。符合當前水利視頻監(jiān)控的特征,對水位檢測系統(tǒng)有一定的幫助。
本文采用深度學習目標檢測網(wǎng)絡SSD,能準確定位到安防監(jiān)控中的水尺位置,并結合傳統(tǒng)機器視覺算法,計算最大像素占比來對水尺圖像進行傾斜矯正,再經(jīng)過邊緣檢測,使用連通區(qū)域計算圖像中的水尺刻度數(shù)。經(jīng)實驗結果表明,該算法能準確地定位水尺并識別水尺刻度,水位誤差低,并能良好地適應多種場景下的水尺目標,在監(jiān)控云臺旋轉時,也能有效定位及識別。滿足行業(yè)需求?;赟SD目標檢測網(wǎng)絡的算法可以在增加目標分類基礎上進行擴展,增加諸如漂浮物、人等目標分類。并在此基礎上添加越線檢測,漂浮物檢測等算法。