陳金水
(河海大學(xué) 計算機(jī)與信息學(xué)院,江蘇 南京 210098)
傳統(tǒng)的水位量測有 2 種方式,一種是安裝水尺,人工目測讀數(shù),這種方法耗時耗力,特別是在環(huán)境惡劣情況下,會對量測人員的安全構(gòu)成威脅;另一種方式是利用傳感器自動采集表征水位的模擬量,然后轉(zhuǎn)換成水位數(shù)據(jù)。水位傳感器主要有浮子機(jī)械(光電)編碼式、壓力式、雷達(dá)式、超聲波式等傳感器,這些傳感器各有優(yōu)點,但缺點也非常明顯,例如浮子機(jī)械(光電)編碼式可靠、便宜,適合各種情況使用,但是,需要建造測井房,造價高;壓力式傳感器受水質(zhì)變化的影響,要經(jīng)常檢查并調(diào)整率定系數(shù);超聲波水位傳感器置于明渠之上,外界干撓多,常帶來所測水位漂移的現(xiàn)象。
本文在試驗研究的基礎(chǔ)上,利用 CCD 攝像機(jī)獲取水尺視頻,然后從視頻流中實時提取水尺圖像,通過邊緣檢測、灰度拉伸、二值化等一系列處理后,獲得目標(biāo)特征圖像:刻度線,再運用 Hough變換,識別出刻度線條數(shù),從而計算出水位值。這個過程除了利用攝像機(jī)獲取視頻外,主要通過軟件實現(xiàn),因此精度高、環(huán)境要求低,具有應(yīng)用前景。
從水尺圖像中獲取水位數(shù)據(jù),首先需要經(jīng)過視頻流截取、彩色圖像到灰度圖像的轉(zhuǎn)換、刻度區(qū)提取、刻度圖像二值化、去噪及刻度線細(xì)化等一系列預(yù)處理。
一般攝像機(jī)拍攝到的視頻流都是 AVI(Audio Video Interleaved)格式。利用微軟 MSDN(Microsoft Developer Network)提供的 AVI 處理函數(shù),可以從視頻流中截取圖像。為了避免非常態(tài)干擾,保證測量精度,1 次可以提取多幀圖像,處理后,取其平均值作為某一時刻的水位測量值。
如果用彩色攝像機(jī)獲取視頻,應(yīng)先將彩色圖像轉(zhuǎn)換成灰度圖像以方便后續(xù)的處理。以 256 色的彩色圖像為例,灰度轉(zhuǎn)換可利用以下公式[1]:
式中:R,G,B 對應(yīng)的是紅,綠,藍(lán) 3 種顏色的亮度值。
灰度化的結(jié)果如圖1 所示。
對圖像的邏輯操作主要以像素為對象,對 2 幅或多幅圖像進(jìn)行“與”和“或”操作。例如,1 個任意的二進(jìn)制數(shù)與全 1 的二進(jìn)制數(shù)進(jìn)行“與”操作,結(jié)果保留原來的二進(jìn)制數(shù);如果與全 0 的二進(jìn)制數(shù)進(jìn)行“與”操作,結(jié)果為全 0。同樣,1 個任意的二進(jìn)制數(shù)與全 1 的二進(jìn)制數(shù)進(jìn)行“或”操作,結(jié)果為全 1;如果與全 0 的二進(jìn)制數(shù)進(jìn)行“或”操作,則結(jié)果保留原來的二進(jìn)制數(shù)?!芭c”和“或”操作通常作為模版,通過操作可以從 1 幅圖像中提取出子圖像。在“與”和“或”圖像模版中,二進(jìn)制碼 1 表示白色,0 表示黑色[2]。
圖1 含有水尺的灰度圖像
因拍攝水尺的攝像機(jī)固定不動,故水尺在每幀圖像中的位置不變。依據(jù)這個特定情況,就可以建立 1 個要提取區(qū)域的圖像模版,大小正好包含刻度區(qū)域,如圖2 a 所示。
灰度轉(zhuǎn)換后得到的圖像只有白或黑 2 種灰度,因此,水面與刻度的灰度是一樣的。為了提取刻度區(qū)域,去除水面區(qū)域,必須擴(kuò)大兩者的灰度級差。可利用公式來擴(kuò)大[3]:
式中:(x, x1) 為包含水面與刻度線灰度值的 1 個灰度區(qū)間,通過 x1和 x2值的設(shè)定,擴(kuò)大水面與刻度線的灰度級差,如圖2 b 所示。
二值化的目的是去除非目標(biāo)圖像,包括水面、背景等。對于 1 幀特定的圖像,可以通過多次閾值試驗分析后得出 1 個合適閾值。由于攝像機(jī)捕獲的水尺圖像受光照的影響,無法給定 1 個常量閾值對圖像進(jìn)行二值化,不過,可以利用全局門限處理得到 1 個較為合適的閾值。設(shè)門限 T 是最大與最小灰度的中間值,利用這個門限去除背景部分,留下對象本身,就可以通過對圖像的分割,實現(xiàn)去留。具體做法是:灰度級 ≤ T 的像素均標(biāo)記為黑色(0),灰度級> T 的像素均標(biāo)記為白色(255)。
門限 T 的計算步驟如下:
1)選擇 1 個 T 的初始值;
2)用 T 分割圖像,生成 2 組像素,由所有灰度值> T 的像素組成區(qū)域 G1,所有灰度值 ≤ T 的像素組成區(qū)域 G2;
3)對區(qū)域 G1和 G2中的所有像素計算平均灰度值 μ1和 μ2;
4)計算新的門限值
5)重復(fù)步驟 2 到 4,直到逐次迭代所得的 T 值之差小于事先定義的參數(shù)。
經(jīng)過二值化處理后就可以得到只有刻度線的圖像,如圖2 c 所示。
圖2 水尺區(qū)域圖像的灰度拉伸和二值化
水面及背景去除后,還可能留有一些與刻度線灰度值相當(dāng)?shù)母蓴_點,因此,還要進(jìn)一步通過腐蝕去除這些干擾點,謂之去噪。因為水尺刻度線均為水平線,所以沿水平方向腐蝕即可。
腐蝕的過程如下:對二值圖像中所有的黑點進(jìn)行遍歷,如果當(dāng)前黑點的左右 2 個點都為黑色,那么保持不變;否則把當(dāng)前黑點變?yōu)榘c。
2 次腐蝕的結(jié)果如圖3 a 和 3 b 所示。
圖像所表征的核心意義是去除了“雜質(zhì)”和次要因素后的圖像“骨架”?!肮羌堋钡墨@得過程通常稱為圖像“細(xì)化”。通過對“骨架”幾何及拓?fù)湫再|(zhì)的識別,可以獲取其表征對象的信息。
在“細(xì)化”圖像的過程中應(yīng)滿足以下 2 個條件:1)圖像要按比例縮放;2)圖像的連通性質(zhì)應(yīng)保持不變。
“細(xì)化”算法:設(shè) 1 幅圖像中的 1 個 3×3 區(qū)域,共 9 個像素點,用 P1,…,P9標(biāo)記,其中 P1位于中心,P2在 P1的正上方,P3,…,P9依次沿 P2的逆時針方向排列。
如果 P1= 1(即黑點),同時滿足以下 4 個條件,則刪除 P1(P1= 0):
1)2≤ NZ(P1)≤ 6;
2)Z0(P1)= 1;
3) P2· P4· P8= 0 或者 Z0(P1)≠ 1
4) P2· P4· P6= 0 或者 Z0(P4)≠ 1;
式中:NZ(P1)表示以 P1為中心的 8 個點的和;Z0(P1)表示以 P1為中心的 8 個點,從正上方的點開始,按逆時針方向順序進(jìn)行排列,相鄰 2 個點出現(xiàn) 0,1(白,黑)的總次數(shù)。
圖3 水尺刻度腐蝕和細(xì)化的結(jié)果
對圖像中的每個點重復(fù)上述步驟,直到所有的點都不可刪除為止。水尺刻度細(xì)化的結(jié)果如圖3 c 所示。
Hough變換[4]的基本思想是利用點、線的對偶性,將笛卡兒坐標(biāo)空間的直線變換為極坐標(biāo)空間中的點。圖4 a 中的直線是笛卡兒坐標(biāo)系中的 1 條直線,如果用 ρ 代表直線距原點的法線距離,用 θ 表示法線與 x 軸的夾角,則經(jīng)過 Hough變換后可用如下參數(shù)方程表示該直線:ρ = xcos θ + ysin θ。
該直線在極坐標(biāo)系中就是圖4 b 所示的點(ρ,θ)。笛卡兒坐標(biāo)系中通過公共點的 1 簇直線(圖4 c),映射到極坐標(biāo)系中則是 1 個點集,這些點集構(gòu)成 1 條曲線,正好是正弦曲線(圖4 d)。
在笛卡兒坐標(biāo)系中共直線的點(如圖4 e 中的(x1, y1),(x2, y2),(x3, y3),3 點共線)映射到極坐標(biāo)系中就是共點的 1 簇曲線(圖4 f )。在圖4 f 中還可以看到這 3 條曲線有 2 個交點,這 2 個交點所對應(yīng)的橫坐標(biāo)值即法向角的度數(shù)相差 180°,對應(yīng)到笛卡兒坐標(biāo)系中就是同一條直線。如果令直線的法向角的取值范圍為:0≤ θ < π ,其交點就只有 1 個。顯然,Hough變換在不同的線和點之間建立了對應(yīng)關(guān)系。
圖4 Hough變換
由分析可知,Hough變換就是將(x, y)平面中的所有直線變換成(ρ, θ)平面的 1 簇曲線。統(tǒng)計變換域(ρ, θ)中這 1 簇曲線經(jīng)過最多次的點,該點對應(yīng)的就是 1 條直線。圖5 為 2 條直線 y = 3,y = 5,θ細(xì)分為 1°時的變換域(ρ,θ)的曲線圖。
圖5 變換域(ρ, θ)的曲線圖
圖5 中,θ = π /2 附近有 2 個點對應(yīng)的直線累加值最高(該值就是其在(x, y)平面中所對應(yīng)直線上的像素點的個數(shù))。因此,可以認(rèn)定,這 2 個點對應(yīng)(x, y)平面中的的 2 條直線。在實際應(yīng)用中,根據(jù)水尺中刻度線的長度,定義其像素點個數(shù)作為判定條件,以簡化算法。例如,定義(ρ, θ)域中的點對應(yīng)的直線累加值大于 50 時,認(rèn)為該點對應(yīng) 2 條刻度線。但是,試驗發(fā)現(xiàn)由于曲線間的互相干擾及參數(shù)ρ,θ 值對直線檢測性能的影響,變換域(ρ, θ)中的一些點,尤其是累加值最高處的其他點對應(yīng)的累加值也很高,也會被誤認(rèn)為對應(yīng) 1 條直線,這樣很容易造成同一條直線被重復(fù)計算。
因此,必須對 Hough變換做實用性改進(jìn)。具體做法是先找到變換域(ρ, θ)中 1 個滿足條件的點(例如,其對應(yīng)的直線累加值大于50),然后將該點及其附近點對應(yīng)的累加值清零,以避免重復(fù)計算。
算法思想:首先找出變換域(ρ, θ)中對應(yīng)直線累加值最大的點,該點就對應(yīng)于(x, y)域中最長的1 條直線,在原圖像中將該直線刪除。對剩下的直線再進(jìn)行 Hough 變化,繼續(xù)尋找變換域(ρ, θ)中對應(yīng)直線累加值最大的點,再將該點對應(yīng)于(x, y)域中的直線刪除。依此過程,直至變換域(ρ, θ)中的點對應(yīng)的直線累加值都小于設(shè)定值(如 50)時,就認(rèn)為已經(jīng)沒有要識別的刻度線了,這時統(tǒng)計出被刪除的直線條數(shù),即可獲取水位值。
算法描述如下:
1) 從原圖像的(x, y)平面中找出 1 個黑點;
2)對通過(1)找到的黑點的直線利用 Hough變換在(ρ, θ)平面繪制正弦曲線,每繪制 1 條正弦曲線,累加器加 1;
3)在(ρ, θ)平面中尋找累加器最大值(如50)對應(yīng)的點,如果找到,則該點就對應(yīng)(x, y)平面的 1 條直線(刻度線),假設(shè)用 n 表示刻度線的條數(shù),這時 n + 1,否則執(zhí)行(5);
4) 將找出的直線從原圖像中刪除,然后回到(1);
5)計算 n 的值,將該值乘以刻度單位即得出水面以上水尺的長度,水尺總長度(已知)與水面以上水尺長度的差即要量測的水位數(shù)據(jù)。
本文研究的從水尺圖像中獲取水位數(shù)據(jù)的方法,也可以用來獲取閘位數(shù)據(jù),并且精度高(只受攝像機(jī)分辨率的影響),費用低,不需要太多的輔助設(shè)施。當(dāng)然,這種水位獲取方式在實用化過程中還有一些問題需要妥善處理。例如,現(xiàn)場可能會因雨、霧、陰天、夜晚等情況,導(dǎo)致光照不足,獲取的水尺圖像清晰度低,難以識別,這時,必須在現(xiàn)場安裝照明設(shè)施以提高圖像的清晰度。本文對刻度線的識別算法只適合水尺表面有輕度污染的情況,對嚴(yán)重污染還需要研究專門的識別方法或輔以人工清理。另外,針對實際應(yīng)用中對水位數(shù)據(jù)采集實時性的不同要求,還存在個現(xiàn)場數(shù)字轉(zhuǎn)換還是遠(yuǎn)程數(shù)字轉(zhuǎn)換的問題?,F(xiàn)場數(shù)字轉(zhuǎn)換因現(xiàn)場不可能配置高性能的計算機(jī),所以需要研究更高效的算法;遠(yuǎn)程數(shù)字轉(zhuǎn)換對算法效率要求較低,但要遠(yuǎn)程傳輸視頻或圖像,因此需要配置高速、寬帶的通信鏈路。
[1]何斌,馬文予,王運堅,等. Visual C++ 數(shù)字圖像處理[M]. 北京:人民郵電出版社,2004: 4-7.
[2]岡薩雷斯. 數(shù)字圖像處理[M]. 2 版. 北京:電子工業(yè)出版社,2005: 18-20.
[3]馬濤,余春暄. 數(shù)字圖像處理在指針式指示表讀數(shù)識別中的應(yīng)用[J]. 微計算機(jī)信息,2004, 20 (7): 50-51.
[4]胡方明,彭國華. Hough變換空間中基于直線的模板匹配[J]. 計算機(jī)工程,2011, 37 (10): 140-142.