郝真 張曉峰 王善民 王隨
關(guān)鍵詞:裂縫;雙目視覺;C#;軟件設(shè)計
0 引言
水下結(jié)構(gòu)物因長期受到水體腐蝕和水力沖刷會產(chǎn)生結(jié)構(gòu)性損傷,當損傷積累到一定程度會嚴重影響到水下結(jié)構(gòu)物的使用,最后導(dǎo)致災(zāi)害的發(fā)生。
隨著計算機視覺和圖像處理等相關(guān)技術(shù)的發(fā)展,雙目視覺技術(shù)被廣泛應(yīng)用于各種領(lǐng)域。白創(chuàng)等[1]利用雙目視覺技術(shù)測量車身尺寸,取得了良好的實驗效果;萬至達等[2]以水壩表面缺陷為研究對象,對雙目視覺測量進行了相關(guān)算法研究。
本文在雙目視覺算法研究的基礎(chǔ)上,設(shè)計并實現(xiàn)了基于C#的水下結(jié)構(gòu)物表面裂縫測量系統(tǒng)。經(jīng)過實驗測試,該軟件可以實現(xiàn)相機標定、圖像采集、圖像預(yù)處理、立體匹配、測量和記錄等功能,符合軟件設(shè)計的要求。
1 雙目視覺技術(shù)簡介
采用雙目視覺技術(shù)完成測量是計算機視覺領(lǐng)域研究的重點課題,該技術(shù)通過兩臺不同位置的相機拍攝同一場景下的物體,并計算雙目相機中同一點的視差圖,通過點的三維還原,即可得到該點在某一相機為原點的三維空間中的世界坐標。雙目視覺技術(shù)主要由相機標定和立體匹配組成,原理如圖1所示。
1.1 相機標定
通常相機在生產(chǎn)或者安裝中,不可避免地引入非線性畸變,該畸變會導(dǎo)致立體匹配誤差被放大,嚴重影響后續(xù)測量的準確性,因此相機標定通常是雙目視覺技術(shù)的第一步。
雙目相機標定是根據(jù)像素坐標系與世界坐標系的關(guān)系,利用一定的約束條件,求解雙目相機內(nèi)外參數(shù)的過程。傳統(tǒng)的相機標定技術(shù)中,張正友[3]提出了一種基于二維棋盤格的相機標定方法,該方法靈活且使用方便,是目前最常用的相機標定方法,但是在水中易受到光的折射影響,導(dǎo)致相機標定精度較低。喬金鶴[4]通過引入高階徑向畸變和不能忽略切向畸變的方法,成功計算出雙目相機的內(nèi)外參數(shù),且重投影誤差符合預(yù)期。
1.2 立體匹配技術(shù)
1) 立體校正
雙目相機拍攝的圖像并不能完全達到共面且平行,因此在立體匹配前需要對非共面且行對準的兩幅圖像進行立體校正:首先通過相機標定得到的內(nèi)參數(shù)消除畸變,然后使用外參數(shù)進行校正。該流程如圖2所示:
通過立體校正使用Bouguet算法,該算法依賴于相機的外參數(shù)旋轉(zhuǎn)矩陣R及平移矩陣T。雙目相機采集的圖像經(jīng)過立體校正可以大大提高立體匹配的精度,并減少測量誤差。
1.3 半全局立體匹配
立體匹配算法是雙目視覺的核心內(nèi)容,根據(jù)約束的作用范圍不同,通常分為局部立體匹配和全局立體匹配。本文測量對象為水下結(jié)構(gòu)物,容易受到光線折射的影響,因此本文選擇對光線不敏感且魯棒性更好的半全局立體匹配。
半全局立體匹配算法是基于一種逐像素匹配的方法,該方法使用互信息來評價匹配代價,并通過組合很多一維的約束來近似一個全局的二維平滑約束,主要有預(yù)處理、代價計算、動態(tài)規(guī)劃、后處理四個步驟[5-6]。通常半全局立體匹配可以得到的稠密的視差圖,如圖3(c)所示,為了更直觀反映該像素點距離相機的深度信息,本文將視差圖中不同的深度信息轉(zhuǎn)化為彩色視差圖,如圖3(d)所示。
通過選擇視差圖中任意一點,即可得到該點在空間坐標系中的三維坐標,最終實現(xiàn)兩點之間的尺度測量。
2 裂縫測量系統(tǒng)設(shè)計與實現(xiàn)
本文在雙目視覺技術(shù)研究的基礎(chǔ)上,設(shè)計和實現(xiàn)了裂縫測量系統(tǒng)軟件。該軟件交互界面由C#搭建完成,算法由VS軟件安裝OpenCV機器視覺庫開發(fā)完成,算法實現(xiàn)后轉(zhuǎn)為dll動態(tài)庫供人機交互界面調(diào)用,最終實現(xiàn)人機交互界面與算法的統(tǒng)一。
2.1 軟件模塊設(shè)計
本文設(shè)計的裂縫測量系統(tǒng)軟件模塊共分為登錄模塊、相機標定模塊、圖像預(yù)處理模塊及裂縫測量模塊四個模塊,如圖4所示。
1) 登錄模塊需要主要由用戶名數(shù)據(jù)庫驗證及結(jié)果保存,用戶通過安全登錄用戶名和密碼才可以進入該系統(tǒng)。
2) 相機標定模塊,主要完成水下相機標定。通常相機的標定結(jié)果只受環(huán)境的影響,因此只需一次標定即可長期使用,并且可以實時查看相機標定效果。
3) 水下圖像預(yù)處理模塊,主要針對水下圖像進行處理,其中測量之前需選圖像去噪,勻光處理和圖像增強根據(jù)采集圖像的質(zhì)量人工選擇。
4) 裂縫測量模塊,該部分是系統(tǒng)的核心內(nèi)容,預(yù)處理后的圖像進行立體校正,其次使用改進后的半全局立體匹配得到視差圖,在視差圖可以使用自動測量或者手動選擇實現(xiàn)尺度測量。
2.2 人機交互界面設(shè)計
本軟件設(shè)計的界面共有登錄界面、相機標定界面、水下結(jié)構(gòu)物表面裂縫測量界面組成。
登錄界面包括登錄名、密碼和賬戶類型組成,并可以登錄或者注銷登錄賬號,如圖5所示。
相機標定可以實時采集棋盤格圖像或者從本地讀取,并輸入角點個數(shù)和方格大?。粯硕ǚ椒梢赃x擇張正友標定法或改進張氏標定法;最后可以根據(jù)標定結(jié)果立即顯示立體校正效果。
測量界面如圖6所示,該界面共有包括立體校正功能、測量功能、圖像預(yù)處理功能、日志查詢功能和裂縫測量顯示區(qū)五個功能。立體校正主要有讀取標定結(jié)果和立體校正功能;測量功能包括手動測量和自動測量;圖像預(yù)處理包括圖像去噪、勻光處理及圖像增強;日志查詢功能可以按時間查詢時間范圍內(nèi)數(shù)據(jù)庫中保存的內(nèi)容;裂縫測量顯示區(qū)顯示當前原始左、右圖像,二值化圖像及立體匹配后的視差圖。
3 軟件測試與仿真
3.1 相機標定測試
相機標定可以選擇從相機實時讀取棋盤格圖像或者從本地路徑中直接讀取,計算得到的相機內(nèi)外參數(shù)可保存供直接使用。相機標定現(xiàn)場實驗如圖7所示。
相機標定實驗中,通過雙目相機實時拍攝棋盤格圖像統(tǒng)計、計算,并根據(jù)雙目相機內(nèi)外參數(shù)實現(xiàn)立體校正,如圖8所示。
3.2 水下結(jié)構(gòu)物表面裂縫測量系統(tǒng)測試
本文系統(tǒng)測試環(huán)境選擇在實驗室條件下進行,其中水流為靜止狀態(tài),水溫20°,水下結(jié)構(gòu)物由水泥制成,裂縫為不規(guī)則的曲線,并加入一定的雜質(zhì),如圖9所示。
本軟件提供兩種測量方法,手動測量或者自動測量。自動測量通過二值化圖像中自動尋找裂縫最大寬度處的二維坐標實現(xiàn)自動測量,但是一些極端情況,圖像處理不能得到二維坐標,因此需要通過手動選擇視差圖中的任意兩個二維點實現(xiàn)手動測量,測量實驗如圖10所示。
本軟件可以自動設(shè)置匹配窗口大小、閾值、搜索范圍等實現(xiàn)立體匹配。得到的測量結(jié)果如圖11所示。
根據(jù)實驗結(jié)果,本軟件可以實現(xiàn)水下結(jié)構(gòu)物表面裂縫測量,且測量誤差小于5%,測量結(jié)果滿足要求。根據(jù)國內(nèi)水利水電標準,及時有效分類防治,可以減少事故的發(fā)生。
4 結(jié)束語
本文通過C#開發(fā)工具設(shè)計并實現(xiàn)了水下結(jié)構(gòu)物表面裂縫測量系統(tǒng)。該軟件由登錄功能、相機標定功能、水下圖像預(yù)處理功能和測量功能組成,能實現(xiàn)水下結(jié)構(gòu)物表面的裂縫測量,滿足實際工程需要。