陸振邦,任傳勝
(中國科學技術大學 工程科學學院,合肥 230027)
在泵站的安全調度和優化運行過程中,上下游水位是一個重要的水力要素,而隨著泵站智能化建設的推進,對水位的自動化檢測也提出了更高的要求[1]。傳統的水位監測方式主要有:①人工目測水尺記錄水位,這種方式的實時性差,而且費時費力;②采用水位傳感器采集水位信息[2]。但是傳統水位計普遍存在精度低、穩定性差等問題,而且安裝成本高、維護困難。例如國內應用較廣的浮子式水位計需要建設測井房,超聲波水位計受外部干擾,容易出現水位漂移現象[3]。而且當水位測量值與實際水位值存在較大誤差時,仍然需要人工根據水尺刻度手動校正。
綜上所述,本文在實驗研究的基礎上,提出了一種水位測量的新思路。將數字圖像處理技術的高精度和嵌入式設備的小巧、輕便結合起來,設計了基于嵌入式圖像處理的水位監測系統。目前,在泵站的系統設計中大多存在視頻及安防監測單元,因此水尺視頻數據的獲取也較為容易,這也成為了通過機器視覺技術獲取水位值的基礎。因為這種非接觸測量方式從原理上與傳統水位計有較大區別,所以可以有效規避傳統水位傳感器的一些固有問題,使得水位測量更加直觀,同時提高了測量的穩定性、可靠性和高實時性,具有較高的應用前景。
系統采用以ARM920T為核心的S3C2440A為主控芯片,CPU主頻最高可達400MHz,搭載了256 MB的NAND FLASH,64 MB的 SDRAM(由兩片16 bit寬度的32 MB SDRAM組成),為便于查看中間處理結果,選用了一塊分辨率為480×272的彩色液晶觸摸屏。此外,基于開發的需求,還配置了串口、USB HOST接口以及實現網絡訪問所必須的以太網接口。實驗中所使用的攝像頭為USB接口,支持標準UVC協議。整體硬件結構如圖1所示。

圖1 系統硬件結構Fig.1 Structure of system hardware
本系統的結構如圖2所示。根據泵站總體系統結構框架的設計,整個系統縱向向上可分為現地設備層、現地控制層和站控層。
現地設備層主要包括輔助照明設備、USB攝像頭和標準化水尺,照明設備用于在弱光環境下進行補光,USB攝像頭采集水尺圖像,并傳輸給嵌入式終端進行圖像處理提取數據。
現地控制層主要實現兩個功能,一是對攝像頭采集的水尺圖像進行處理解析以獲取水位;二是監聽站控層的數據請求,響應請求并發送水位值。
站控層主要提供數據服務與應用服務。包括實時數據交互、歷史數據存儲、組態顯示、趨勢分析和閾值告警等功能。

圖2 系統整體方案Fig.2 Overall scheme of system
此系統的軟件采用Linux操作系統作為開發和運行環境,通過Linux內核的移植、根文件系統的構建、OpenCV圖像處理庫的移植,搭建了嵌入式軟件的開發和運行環境。使用Linux多線程編程技術,將每個子程序設計成一個線程。軟件流程如圖3所示。

圖3 軟件設計流程Fig.3 Flow chart of software design
Video4Linux2(V4L2)是針對 Linux系統的視頻設備處理架構,它為視頻設備的應用程序編程提供了豐富的接口函數[4]。實驗中使用的USB攝像頭是符合UVC(USB Video Class)規范的設備,在V4L2的編程框架中,主要的采集流程分為打開設備、設置幀格式、分配緩沖區及物理內存、讀取數據、處理數據和關閉設備等步驟[5]。
2.3.1 改進的Sobel邊緣檢測算法
圖像的邊緣檢測是圖像處理過程中一項重要的內容和步驟。在本系統圖像處理的水尺輪廓的提取、水尺水面分界面的界定都依靠邊緣檢測技術,所以邊緣檢測算法的設計是水位提取準確性和精度的關鍵。傳統邊緣檢測是利用一階或二階邊緣檢測算子與圖像直接卷積,根據一定的標準檢測邊緣,但是這種方法容易產生較多的偽邊緣。為了剔除虛假邊緣點,本文在邊緣檢測中引入了非極大值抑制的方法。
首先利用Sobel算子對圖像進行水平和垂直方向的梯度計算,而對應的水平和垂直方向的邊緣檢測算子可表示為

待處理的圖像8鄰域區域可以表示為

利用模板的圖像處理相當于模板與圖像的卷積。用Gx和Gy分別代表水平和垂直方向的梯度值,則Gx和Gy可由卷積運算得出:

將橫向和縱向梯度值通過式(2)計算出該點的梯度幅值:

原始的灰度圖像的邊緣屬于漸變區域,并不是理想的階躍信號,利用Sobel算子直接與圖像進行卷積運算得到的梯度幅值圖像容易丟失邊緣信息,必須進行細化。采用非極大值抑制的方法,保留圖像目標點水平或垂直梯度上的局部最大點,可將邊界細化至一個像素寬度[6]。 設定布爾值 b1,b2,b3,b4為目標點梯度與水平和垂直梯度值大小進行邏輯比較的結果,如式(3)所示:

最后判斷鄰域梯度是否滿足大于水平或垂直梯度的條件,并根據自適應閾值參數進行二值化,則目標點的二值化結果如式(4)所示:

式中:B(i,j)為生成的二值圖像;thresh 是根據梯度幅值設定的自適應閾值。
2.3.2 圖像處理流程
由于攝像頭采集的水尺圖像是包含水尺的全域圖像,而提取刻度只關心水尺輪廓的目標區域,因此需要將拍攝的圖像經過灰度化之后,利用非極大值抑制Sobel邊緣檢測提取出水尺輪廓,從而將水尺部分截取出來單獨進行進一步處理。這樣可以避免背景的干擾而造成識別精度低,同時也可以減小圖像大小,提高嵌入式設備的圖像處理速度和精度。
對于截取下的水尺圖像,首先確定水尺在水面上的分界面。由于水尺水面以上和水面以下部分對比明顯,利用邊緣檢測技術可以明確區分兩者。然后使用OSTU方法(大津法)對圖像進行全局二值化,并把水面分界線以下部分用0(黑色)擦除。由于水尺刻度具有水平方向的延伸性,而刻度數字通常不是規則的,利用OpenCV的連通域分析方法[7]去除數字,提取出刻度線。最后將水尺歸一化,分成左右兩部分,以便于統計圖像處理結果。
Modbus/TCP的數據幀是由MBAP報頭和協議數據單元PDU組成,具體格式如表1所示。Modbus/TCP傳輸過程中使用TCP/IP以太網參考模型的5層,Modbus協議工作在應用層,Modbus/TCP報文被封裝在以太網TCP/IP數據包中[8]。Modbus/TCP由于具有網絡實施價格低廉、網絡部件通用、易于集成、傳輸量大等特點,在工業領域的應用越來越廣泛。

表1 Modbus/TCP數據幀格式Tab.1 Data frame format of Modbus/TCP
本系統將嵌入式設備設計成服務器端,用于處理上位機數據請求并進行相應操作,返回響應。利用BSD套接字接口函數編寫通訊程序,主要分為以下7個步驟:
(1)調用 socket()函數創建一個基于 TCP連接的套接字;
(2)調用bind()函數將本地IP地址和端口號綁定到套接字上;
(3)調用 listen()函數使 socket對象處于監聽狀態;
(4)當客戶機發出連接請求時,服務器監聽到該請求,調用accept()函數接受請求,從而確定連接;
(5)調用 recv()函數接收客戶機發送的請求報文;
(6)分析報文各字段,調用send()函數發送響應報文;
(7)調用 close()函數關閉 TCP 連接,使服務端socket重新進入監聽狀態,等待下一次連接請求。
本系統以某公司水環境綜合監測試驗場為測試對象,圖4(a)是攝像頭采集的一幀圖像,圖4(b)是經過預處理獲取的水尺圖像。圖5所示為圖像處理的結果。水尺最頂部刻度線代表的水位可以在軟件中預先設定,根據水面以上水尺的刻度,就能夠推算出當前的水位值。

圖4 預處理分離水尺圖像部分Fig.4 Preprocessing to separate the portion of water gauge image

圖5 圖像處理結果Fig.5 Result of image processing
為了進行通信驗證,將嵌入式設備用雙絞線通過以太網口與PC機相連,上位機軟件采用北京三維力控科技公司的力控組態軟件,版本為Force Control V6.0。進入力控的開發模式,首先定義設備名稱、設備地址、設備的IP地址以及端口號,完成IO設備的創建。接下來創建數據庫,用于實時數據的處理以及歷史數據的存儲,在配置完數據庫并完成數據鏈接之后,便創建了一個水位值數據點(SY)[9]。組態軟件運行后,可以從實時數據庫中看到水位值PV的變化,如圖6所示。

圖6 實時數據庫中的水位值Fig.6 Water level value in real-time database
通過動畫連接,將數據庫中的數據刷新在主界面上,這樣就能將現場真實的數據放映到計算機的監控畫面中,從而達到對水位實時監測的目的,如圖7所示。

圖7 水位值在監控界面上實時顯示Fig.7 Water level value is displayed in real-time on the monitoring interface
本文通過結合嵌入式系統技術、圖像處理技術和以太網通信技術,設計了水位監測系統,可以實現對泵站前后池水位的實時監測。根據現有的泵站系統結構框架,將本系統進行了分層設計,并詳細地介紹了每部分的具體實現。通過實驗表明,本系統能夠實現水位監測的基本功能,有很高的穩定性和可靠性,具有廣闊的應用前景。