一、引言
我國是一個水災頻發的國家,水安全問題已成為影響經濟和社會發展中的重要因素之一。洪水等突發事故所引發的損失和危害巨大,因此水情監控問題成為國家水利部門關注的重點。為了準確而實時地監測水位,目前國內多數水文監測站使用的是傳統水位測量方式。
傳統水位測量方式主要有安裝水尺目測讀數和使用傳感器自動采集水位相關的模擬量再轉換為水位量兩種。其中,目測讀數的方式需要耗費人力,且實時性不高,惡劣環境下讀取水位人員的安全也不能保證。使用傳感器自動采集則主要有超聲波式、壓力式、浮子機械編碼式、雷達式等測量手段。這些測量方式優點與缺點并存,缺點也非常顯著,如難于維護,受環境影響較大等。
本文通過設計一系列圖像識別算法,對從視頻流中截取的水尺圖像進行處理,經過灰度化、中值濾波、邊緣檢測、二值化、形態學處理以及圖像細化,最終由算法得出水位數據。整個測量過程主要由攝像機和識別軟件完成,精度較高且應用要求低,因此具有廣闊的應用前景。
二、目標圖像的提取和預處理
⒈目標圖像的截取和平均
從攝像機采集到的視頻圖像數據,首先要選取出數幀含有水尺圖像的圖片進行平均。利用微軟的MSDN提供的視頻處理函數與OpenCV提供的截取視頻幀函數可以從攝像機采集的視頻中提取出若干幀的圖像并保存。截取連續的數幀圖像取平均可避免非常態干擾,提升測量精度。
⒉彩色圖像的灰度化
由于很多攝像機支持彩色圖像拍攝,在處理圖像之前,應對采集到的彩色圖像按照式⑴進行灰度轉換以便后續處理。
T=0.299×R+0.587×G+0.114×B??⑴
其中T得到轉換后目標圖像的灰度值,R、D、B分別為紅、綠、藍的彩色圖像分量,圖1為灰度化后的圖像。
圖1?灰度化后含有水尺的圖像
三、興趣區域的提取和形態學處理
⒈中值濾波
灰度化后的圖像可能存在有由于環境或干擾產生的噪聲,如熱噪聲、量化噪聲等,首先需要對其進行濾波去噪。這里采用能夠較好保留圖像細節的中值濾波方法。
中值濾波作為一種非線性技術,可以有效的消除孤立噪聲點同時保持圖像中的關鍵細節,它將每一像素的灰度值按照該像素周圍一定區域內所有像素點灰度的中值重新設定,從而消除與區域內像素灰度中值差異過大的點。
中值濾波的主要算法流程如下:
⑴設置一個合適大小,含有奇數個點的采樣窗口。
⑵通過采樣窗口在被處理的圖像中取出奇數個像素,并對這些像素的灰度值進行排序。
⑶選取奇數個灰度值的中值,即從小到大排在中間的一個,作為替換值。
⑷將在采樣窗口中心位置的像素的灰度值,設為替換值。
⑸重復步驟⑵-⑷,對圖像中所有像素點進行處理。
一般情況下中值濾波后,小于采樣窗口面積的一般噪聲點可以濾除,而較大的物體如水尺刻度,水面輪廓等幾乎完全不受濾波的影響。
⒉邊緣檢測
對經過濾波后的圖像采用邊緣檢測,可以很好的提取到水尺刻度的特征,大幅度減少數據量并剔除不需要的圖像信息,同時還能保留重要的圖像結構屬性,便于后續處理識別。邊緣檢測中常用的算子有Canny算子,或各種改進的Canny算子以及Sobel算子。這里由于是對水尺刻度的識別,對細節紋理不太注重,所以選擇了雖然不如Canny算子準確但效率更高的Sobel算子。
Sobel算子算法的優點是計算簡單、速度快,通常檢測時帶有方向性。可以選擇進行水平方向檢測或者垂直方向檢測,或兩個方向都檢測。因為水尺刻度在圖像中處于水平方向,這里進行垂直方向的邊緣檢測。圖2所示為中值濾波和邊緣檢測后的圖像。
圖2 濾波和邊緣檢測后的圖像
⒊二值化
對圖像進行邊緣檢測后再通過二值化,去除水面、背景等非目標圖像。一般從多值的圖像中提取目標物體,最常用的方法就是設定出全局的閾值T,然后根據全局閾值,將圖像的數據分為兩部分:灰度值大于T的部分和灰度值小于T的部分。將灰度值大于T的部分的像素設為白色(或黑色),而灰度值小于T的部分設為黑色(或白色)。本文使用迭代閾值法合理選取全局閾值進行二值化,迭代閾值法的算法流程如下。
⑴設置一個初始閾值T0,可以自己設置或隨機生成。
⑵根據初始閾值將圖像分割成兩部分,目標圖像區域S1和背景圖像區域S2。
⑶分別求出S1和S2部分的像素灰度平均值G2和G2。
⑷設定新的閾值Tn為(G2+G2)/2。
⑸重復步驟⑵-⑷,不斷用新設定的閾值分割圖像,計算平均灰度值,直到得出的新閾值等于上一次的閾值。
經過二值化后的圖像如圖3所示。
圖3 二值化后的圖像
⒋形態學處理
二值化后的圖像,還可能存在一些干擾判斷的噪點,有必要通過形態學的腐蝕處理來進一步濾除。膨脹和腐蝕是形態學的基礎運算,許多形態學算法都以它們為基礎。其中腐蝕的作用是去除小于結構元素的物體,對圖像的腐蝕過程如下。
⑴用結構元素Y掃描待腐蝕二值圖像X的每個像素。
⑵結構元素Y的像素與其覆蓋的二值圖像區域做“與”操作,即如果全為1,則結果圖像的該像素為1,否則為0。
腐蝕后的刻度圖像如圖4所示。
圖4 腐蝕后的刻度圖像
⒌圖像細化
去除背景和水面經過腐蝕后得出的水平刻度線,不宜直接用于后面的處理分析,需要對上一步的結果圖像進行圖像細化處理。圖像細化可以從目標圖像中提取出圖像骨架,即將將原圖像中像素寬度大于1的線條細化成只有1像素寬的線條,之后可以比較容易的分析圖像或提取圖像的特征。此處使用Zhang快速并行細化算法對刻度進行細化,細化后的圖像如圖5所示。
圖5 細化刻度后的圖像
四、基于K-means聚類分析的
水位識別
⒈K-means聚類分析獲取刻度數
數據聚類是對于靜態數據分析的一門技術,在許多領域內都被廣泛地應用,包括機器學習、數據挖掘、模式識別、圖像分析、信息檢索以及生物信息等。K-means算法是最常用的聚類分析方法之一,是由Macoueen提出,它具有算法簡單且收斂速度快的特點。通常采用的準則函數是平方誤差準則函數,即:
?⑵
式中,E為所有數據的誤差平方和,P為單個的對象,mi為均值。K-means算法是基于距離的聚類算法,它將相聚越近的對象判定為相似度越大,認為簇是由緊湊的距離靠近的對象形成的,因此最終可以得到緊湊且獨立的簇。
K-means算法的流程如下:
⑴從N個對象中隨機選取K個對象作為聚類質心。
⑵對剩余的每個對象,算出它們到每個質心的距離并歸類到相聚最近的質心的類。
⑶重新計算已經得到的各個聚類的質心。
⑷重復步驟⑵-⑶,不斷劃分新的聚類并得出新的質心,直到新的質心與上一次計算得到的質心相等或者小于指定的閾值,此時得到的聚類即為最終結果。
對于上一步圖像細化后的刻度圖像,每一條刻度將被劃分為一個聚類,從而最終聚類數量等于可以識別出的刻度數量,進而在后續處理中算出水位。
⒉水位測量算法
⑴算法思想
對從視頻流中截取平均,經過灰度化、中值濾波、邊緣檢測、二值化、腐蝕、刻度細化后的圖像,通過聚類分析的方法,先隨機選取若干對象作為聚類質心,設定閾值位水尺相鄰刻度間的最小距離,聚類分析后算出滿足條件的聚類數量N,再根據水尺和公式計算水位。
⑵總體算法
從視頻流中截取數幀圖像取平均,并灰度化。
①對⑴獲得的圖像進行中值濾波,使用Sobel算子邊緣檢測。
②將上一步得到的圖像二值化后進行腐蝕處理。
③對腐蝕后的結果圖像進行圖像細化處理。
④隨機選取圖像中的像素作為初始聚類中心,設置合理的閾值后進行聚類分析,得出水尺刻度線間隔數N。
⑤根據公式代入間隔數N計算水位。
⑶實驗結果分析
實驗數據庫采用240張在現場用攝像機拍攝得到的圖片,包括一天中不同時間的不同水位信息,在此基礎上進行水位識別,算法處理每張圖像所需時間在65~80ms之間,設定誤差允許范圍在1cm以內的情況下,所有圖像都得出正確檢測結果。
下面給出實驗圖像由算法得出的數據結果和由人眼目視讀取的水位結果以及兩種水位間的誤差進行比較,圖6所示為人工測量得到的水位,圖7所示為識別算法得出的水位,圖8所示為算法程序得到水位與人工得到水位之差。
圖6 人工測量得到的水位
圖7 識別算法得出的水位
圖8 算法得到水位與人工得到水位之差
從圖8可以看出誤差不超過0.6m,造成誤差的主要原因有實際拍攝水位時,水位線不是完全靜止,會有小范圍的浮動;以及部分水尺的刻度線模糊缺損,導致邊緣檢測算法難以刻度線。總體來說,提出的算法的識別正確率和實時性能夠滿足應用需求。
五、結論
本文提出的水尺測量算法基于圖像識別,可廣泛應用于測量各種可使用水尺的水位測量場合,費用低廉、設施簡單、并且精度較高。水位識別方法通過灰度變換,邊緣檢測,圖像細化,K-means分析等得到刻度線然后計算水位,由于視頻攝像的實時性,可方便的對水位進行遠程在線監控,具有較強的實用性。對于原本已經架設攝像頭的系統,無需添加太多設施即可完成改造。
【作者簡介】文/仲志遠,南京理工大學機械工程學院。文章來自《國外電子測量技術》(2017年第6期),參考文獻略,用于學習與交流,版權歸作者及出版社共同擁有,轉載也請備注由“溪流之海洋人生”微信公眾平臺編輯與整理。
編輯:黃飛
?
評論
查看更多