陳旭陽, 賀昱曜, 宗瑞良, 李寶奇, 趙耀華
(1.西北工業(yè)大學(xué) 航海學(xué)院, 陜西 西安 710072; 2.西北工業(yè)大學(xué) 電子信息學(xué)院,陜西 西安 710072)
水下機器人運行在復(fù)雜未知的海洋環(huán)境中,良好的環(huán)境感知是提高其安全性和智能化水平的重要基礎(chǔ)和關(guān)鍵因素[1]。光視覺傳感器有著視場大、分辨率高、信息獲取快捷、相互干擾小等優(yōu)點,適用于短距離內(nèi)的目標(biāo)定位、目標(biāo)測量等工作,在機器避障、海底地圖構(gòu)建等領(lǐng)域起著重要作用。雙目立體視覺是計算機視覺研究的一個重要分支,它通過模擬人的視覺系統(tǒng)來提取目標(biāo)三維信息,一般使用2臺同型號的攝像機,在一定的設(shè)置下拍攝同一場景的2幅圖像,計算這2幅圖像中匹配點的視差,從而得到該點在空間內(nèi)的三維信息[2]。
高靈敏度的標(biāo)準(zhǔn)相機加上平面玻璃水密罩可以實現(xiàn)簡單經(jīng)濟的水下攝影。但在成像過程中,由于目標(biāo)位于水中而相機位于空氣中,介質(zhì)的不同導(dǎo)致光線在傳播過程中會發(fā)生折射。光線的折射使相機成像模型由線性變?yōu)榉蔷€性,造成水下圖像中目標(biāo)的放大與畸變,導(dǎo)致現(xiàn)有的雙目立體視覺系統(tǒng)無法直接應(yīng)用于水下目標(biāo)的三維信息提取等工作[3]。
針對這一折射現(xiàn)象,國內(nèi)外學(xué)者提出了多種解決方法。Schechner等[4]提出一種通過物理輔助來解決折射問題的方法,該方法通過使用特殊形狀的光學(xué)部件防止折射現(xiàn)象的發(fā)生,但是由于其對光學(xué)部件的制作要求十分嚴(yán)格,難以實現(xiàn)。Chang等[5]利用多目相機獲取單一折射平面的圖像,并用一個與深度有關(guān)的模型表示折射失真,但該方法附加條件過多,實現(xiàn)困難。Treibitz等[6]分析了折射失真并利用模擬的方法近似展示了SVP的折射誤差。Gedge等[7]提出利用像素的對極曲線得到一個匹配代價量來補償折射影響,但該方法過程復(fù)雜,適用范圍小。Lu等[8]提出一種利用單目攝像機提取水下圓形目標(biāo)三維信息的方法,該方法通過補償?shù)窒凵溆绊?但只適合于圓形目標(biāo)。Zhang等[9]提出一種基于非平行系統(tǒng)的水下圖像轉(zhuǎn)化模型,可以將目標(biāo)水下圖像轉(zhuǎn)換為等效空氣圖像,該方法雖然實現(xiàn)簡單、適用范圍廣,但為簡化模型忽略了光線在水密罩玻璃處的二次折射,引入不必要的轉(zhuǎn)換誤差。
針對文獻[9]所提算法因忽略光線二次折射引入轉(zhuǎn)換誤差的問題,本文建立考慮光線二次折射的水下光線折射模型,推導(dǎo)出水下圖像與等效空氣圖像的像素點映射關(guān)系,得到水下圖像轉(zhuǎn)換算法。該算法通過像素點映射關(guān)系計算水下圖像像素點在等效空氣圖像中的坐標(biāo)信息,得到等效空氣圖像。本文所提算法可以有效解決因忽略光線二次折射引入轉(zhuǎn)換誤差的問題,改善水下圖像轉(zhuǎn)換效果,對后續(xù)圖像處理過程有著積極影響。
水下相機多采用平面殼窗水密罩密封高靈敏度標(biāo)準(zhǔn)相機的方式實現(xiàn)水下圖像獲取功能,該方法簡單且經(jīng)濟實用。水下相機簡化模型[10]如圖1所示。
圖1 水下相機簡化模型
其中f表示相機的焦距,d表示相機外焦點距水密罩的距離,T表示水密罩石英玻璃厚度,A表示相機外焦點。
由圖1可知,光線在進入相機前會由于介質(zhì)的改變發(fā)生2次折射。第一次折射發(fā)生在水與水密罩石英玻璃的交界處,光線由水進入玻璃。第二次折射發(fā)生在水密罩石英玻璃與空氣的交界處,光線由玻璃進入空氣。光線的折射導(dǎo)致空氣中的立體視覺系統(tǒng)無法應(yīng)用于水下環(huán)境。為了能夠僅通過一幅水下圖像就能得到其等效空氣圖像,需要將氣水交界面設(shè)置在相機的外焦點處[9]。
文獻[9]所提圖像轉(zhuǎn)換算法認(rèn)為,由于水密罩玻璃厚度遠(yuǎn)小于目標(biāo)相對相機的距離,光線在玻璃中的傳播過程可以忽略,光線在進入相機前只在水與空氣交界處發(fā)生一次折射。通過忽略光線二次折射來簡化成像模型,得到水下圖像像素點與其對應(yīng)的空氣圖像像素點的映射關(guān)系。
不失一般性,只討論一個方向上的坐標(biāo)映射關(guān)系。由于忽略光線二次折射且交界面位于焦距處,相機外焦點距水密罩距離d與水密罩玻璃厚度T為0,經(jīng)簡化得到的成像關(guān)系示意圖如圖2所示。其中,A表示相機外焦點,Z表示目標(biāo)點與相機的距離,pw(xw,0,zw)表示目標(biāo)點的世界坐標(biāo)系坐標(biāo),pa(xa,0)表示目標(biāo)點處于空氣中時其成像點的相機坐標(biāo)系坐標(biāo),pi(xi,0)表示目標(biāo)點處于水中時其成像點的相機坐標(biāo)系坐標(biāo),α表示入射光線與交界面法線的夾角,αa表示目標(biāo)位于空氣中時光線經(jīng)過交界面后與交界面法線的夾角,αw表示目標(biāo)位于水中時光線經(jīng)過交界面后與交界面法線的夾角。
圖2 忽略光線二次折射成像關(guān)系示意圖
由圖2可得
(1)
由于交界面位于相機焦距處,因此無論目標(biāo)點pw(xw,yw,zw)處于空氣中還是水中,入射光與交界面法線的夾角都為αa。
同時有
xa=f·tanαa
(2)
進而可得
xa=f·tan(arcsin(na·sin(arctan(xi/f))/nw))
(3)
由(3)式可知,當(dāng)交界面位于相機焦距處時,水下圖像中的像素點與無水時空氣中的圖像存在一一對應(yīng)關(guān)系。此時,在已知相機參數(shù)的條件下,僅憑一幅水下圖像所包含的信息即可得到與其對應(yīng)的等效空氣中的圖像。
上述算法通過忽略光線二次折射來簡化水下相機成像模型,降低了算法的復(fù)雜度。但在實際的應(yīng)用中,水下相機為了抵抗水壓的影響,其水密罩的厚度往往可以達(dá)到5~10 mm,與一般相機的焦距大小接近。因此,在實際中,光線進入水密罩后會在玻璃中傳播較長距離,同時在玻璃與空氣的交界處發(fā)生折射,直接忽略光線二次折射會為圖像轉(zhuǎn)換引入不必要的誤差,造成對應(yīng)像素點位置的偏移,對后續(xù)的圖像處理造成不利影響。
針對現(xiàn)有圖像轉(zhuǎn)換算法因忽略光線二次折射引入轉(zhuǎn)換誤差的問題,本文建立考慮光線二次折射的水下光線折射模型,并基于該模型推導(dǎo)得到水下圖像轉(zhuǎn)換算法。該算法具有更為準(zhǔn)確的圖像映射關(guān)系,可以有效解決現(xiàn)有圖像轉(zhuǎn)換算法因忽略光線二次折射引入轉(zhuǎn)換誤差的問題。
本文所研究的平行系統(tǒng)指的是相機與水密罩完全平行放置情況下的水下相機系統(tǒng),由此可以得到其所對應(yīng)的考慮光線二次折射的水下相機成像關(guān)系示意圖,如圖3所示。不失一般性,只討論一個方向上的坐標(biāo)映射關(guān)系。
圖3 基于平行系統(tǒng)的成像關(guān)系示意圖
其中f表示相機焦距,T表示防水罩玻璃厚度,Z表示目標(biāo)點與相機的距離,A表示相機外焦點,na,ng,nw分別為空氣、玻璃、水的折射率,pw(xw,0,zw)表示目標(biāo)點的世界坐標(biāo)系坐標(biāo),pa(xa,0)表示目標(biāo)處于空氣中時其成像點的相機坐標(biāo)系坐標(biāo),pi(xi,0)表示目標(biāo)處于水中時其成像點的相機坐標(biāo)系坐標(biāo),α為目標(biāo)點入射光線與交界面法線的夾角,αg.a,αg.w分別為目標(biāo)位于空氣中與水中時經(jīng)過第一次折射后光線與交界面法線的夾角,αa,αw分別為目標(biāo)位于空氣中與水中時經(jīng)過第二次折射后光線與玻璃——空氣交界面法線的夾角。
由圖3可得:
(4)
(5)
由(4)式與(5)式可得:
其中,水密罩玻璃厚度T、相機焦距f、空氣折射率na、水的折射率nw、玻璃折射率ng皆為已知量。因此,在圖像轉(zhuǎn)換過程中,可以由水下圖像像素點的位置信息求得其對應(yīng)等效空氣圖像中的像素點位置信息,進而實現(xiàn)水下圖像向等效空氣圖像的轉(zhuǎn)換。
在現(xiàn)實情況中,水下相機系統(tǒng)中相機與水密罩的放置難以達(dá)到完全平行的狀態(tài),由此可以得到非平行系統(tǒng)狀態(tài)下考慮光線二次折射的水下相機成像關(guān)系示意圖,如圖4所示。同樣只討論一個方向上的坐標(biāo)映射關(guān)系。
圖4 基于非平行系統(tǒng)的成像關(guān)系示意圖
其中,β表示相機放置平面與水密罩玻璃平面之間的夾角。
由圖4可得:
(8)
(9)
由(8)式與(9)式可得:
式中:相機與水密罩玻璃夾角β、水密罩玻璃厚度T、相機焦距f可以通過測量得到,空氣折射率na、水的折射率nw、玻璃折射率ng皆為已知量。因此,在非平行系統(tǒng)下也可實現(xiàn)由水下目標(biāo)圖像向等效空氣圖像的轉(zhuǎn)換。
現(xiàn)實中常用的水下相機是按照平行系統(tǒng)設(shè)計的,由于安裝誤差所造成的夾角β是一個小量,結(jié)合(10)式與(11)式,可以將夾角β忽略,將常用的水下相機視為平行系統(tǒng)進行處理。因此,本文后續(xù)將采用基于平行系統(tǒng)的圖像轉(zhuǎn)換算法進行算法分析與實驗對比。
將現(xiàn)有圖像轉(zhuǎn)換算法的圖像映射關(guān)系與本文所提算法的圖像映射關(guān)系進行對比,通過比較2種映射關(guān)系中坐標(biāo)點畸變大小比較2種算法的轉(zhuǎn)換效果。
現(xiàn)有圖像轉(zhuǎn)換算法中,xi與xa的比值關(guān)系由(2)式與(3)式可得
(12)
本文所提圖像轉(zhuǎn)換算法中,xi與xa的比值關(guān)系由(6)式與(7)式可得
(13)
取na=1,nw=1.33,ng=1.5,f=15 mm,
T=10 mm,由(12)式與(13)式可得,當(dāng)入射角α改變時,xi與xa之間的關(guān)系,如圖5所示。
圖5 xi與xa關(guān)系隨入射角變化示意圖
由圖5可知,當(dāng)交界面位于相機焦距處時,折射現(xiàn)象會造成圖像的枕形失真,且放大率隨著入射角的增大而增大。經(jīng)過對比2種算法的曲線可以發(fā)現(xiàn),進行圖像轉(zhuǎn)換時考慮光線二次折射可以有效緩解折射現(xiàn)象所造成的圖像枕形失真問題,進而改善圖像轉(zhuǎn)換算法的轉(zhuǎn)換效果,減小轉(zhuǎn)換所得圖像中遠(yuǎn)離圖像中心區(qū)域像素點的位置誤差。
為了驗證本文所提算法的圖像轉(zhuǎn)換效果,采集目標(biāo)水下圖像進行實驗驗證。實驗一采用棋盤角點坐標(biāo)對比的方法評價圖像轉(zhuǎn)換算法的轉(zhuǎn)換效果,實驗二采用測量誤差對比的方法評價圖像轉(zhuǎn)換算法的轉(zhuǎn)換效果。
實驗數(shù)據(jù)采集平臺如圖6所示。其中,水下攝像機由2臺200萬像素攝像機與1臺綠激光發(fā)射機組成,實驗采用左目相機獲取得到的目標(biāo)圖像作為目標(biāo)水下圖像。實驗硬件平臺為Core i3 CPU,16GB DDR4 RAM。實驗軟件平臺為OpenCV。實驗場地為一尺寸2 400 mm×1 500 mm×600 mm水池。
圖6 實驗數(shù)據(jù)采集平臺
采用棋盤角點坐標(biāo)對比的方法,通過比較水下圖像經(jīng)2種圖像轉(zhuǎn)換算法所得圖像角點位置坐標(biāo)與真實空氣中圖像對應(yīng)角點位置坐標(biāo)的誤差來評價2種轉(zhuǎn)換算法轉(zhuǎn)換效果的優(yōu)劣。
3.2.1 數(shù)據(jù)獲取
獲取同一位置、同一姿態(tài)的棋盤在空氣中與水中的圖像,如圖7所示。使用OpenCV角點提取函數(shù)提取棋盤在2幅圖像中的角點坐標(biāo),每幅圖像提取出54個角點,角點提取結(jié)果如圖8所示。
圖7 不同環(huán)境下棋盤圖像
圖8 角點提取示意圖
3.2.2 圖像轉(zhuǎn)換
為驗證圖像轉(zhuǎn)換算法在整幅圖中的效果,根據(jù)角點提取結(jié)果,選取第2,8,19,27,47,53六個位于圖像不同位置的角點作為評價角點,記作P1,P2,P3,P4,P5,P6。圖像尺寸為640×480,六個角點在圖像像素坐標(biāo)系下的坐標(biāo)如表1所示。
表1 目標(biāo)角點圖像像素坐標(biāo)系坐標(biāo)統(tǒng)計表
相機焦距f=15 mm,玻璃厚度T=10 mm,空氣折射率na=1,水的折射率nw=1.33,玻璃折射率ng=1.5。由(3)式與(6)式、(7)式計算得到2種算法轉(zhuǎn)換所得角點坐標(biāo),如表2所示。
表2 2種算法轉(zhuǎn)換所得角點坐標(biāo)統(tǒng)計表
將表2中2種算法計算所得角點坐標(biāo)與表1中空氣圖像角點坐標(biāo)對比得到角點轉(zhuǎn)換誤差,角點轉(zhuǎn)換誤差如表3所示。
表3 轉(zhuǎn)換誤差比較表
由表3可得,u方向上,文獻[9]算法所得誤差均值為2.289 5,本文算法所得誤差均值為1.213 3,誤差值較文獻[9]算法降低47.01%;v方向上,文獻[9]算法所得誤差均值為3.252 3,本文算法所得誤差均值為1.526 3,誤差值較文獻[9]算法降低53.07%。因此,本文所提圖像轉(zhuǎn)換算法可以明顯減小圖像轉(zhuǎn)換誤差,提高圖像轉(zhuǎn)換質(zhì)量。由前文算法分析可知,折射現(xiàn)象會造成圖像的枕形失真,且放大率隨著入射角的增加而增大,即距離圖像中心越遠(yuǎn)放大率越大。通過實驗發(fā)現(xiàn)圖像轉(zhuǎn)換誤差隨著像素點距離圖像中心距離的增加而增大,而本文算法能夠有效降低遠(yuǎn)離圖像中心像素點的轉(zhuǎn)換誤差。因此,對遠(yuǎn)離圖像中心的像素點進行圖像轉(zhuǎn)換時,考慮光線二次折射十分必要。
采用測量誤差對比的方法,通過比較2種算法所得目標(biāo)等效空氣圖像經(jīng)雙目視覺測距計算所得測量距離與目標(biāo)實際距離的誤差,評價2種算法在圖像轉(zhuǎn)換性能方面的優(yōu)劣。
本實驗采用平行雙目立體視覺系統(tǒng),如圖9所示。其中,2個攝像機光心之間的距離為基線距,記做B。
圖9 平行雙目視覺系統(tǒng)俯視圖
假設(shè)真實三維空間中存在一點P,該點在世界坐標(biāo)系下的坐標(biāo)為P(X,Y,Z),該點在左右目攝像機的成像平面上的坐標(biāo)分別為pl(xl,yl)與pr(xr,yr)。由于該雙目立體視覺系統(tǒng)為平行雙目立體視覺系統(tǒng),左右目攝像機的成像平面在同一水平面上[11],因此yl=yr=y。
由針孔相機成像模型可得
(14)
將視差定義為d=xl-xr,由(14)式可得點P在世界坐標(biāo)系下的坐標(biāo)為
(15)
式中,基線距B與相機焦距f為已知量。故根據(jù)左右目圖像匹配得到的視差信息,即可由(15)式求解出目標(biāo)點的距離信息Z。
3.3.1 數(shù)據(jù)獲取
獲取6組已知實際距離的目標(biāo)水下圖像對,如圖10所示。分別采用2種算法對目標(biāo)水下圖像對進行轉(zhuǎn)換,獲得對應(yīng)的目標(biāo)等效空氣圖像對,再對目標(biāo)進行雙目視覺測距計算,得到目標(biāo)距離的測量值。
圖10 距離為800 mm的目標(biāo)水下圖像對示意圖
3.3.2 圖像轉(zhuǎn)換與測距
采用OpenCV圖像映射函數(shù),由(3)式與(6)式、(7)式的像素點映射關(guān)系對目標(biāo)水下圖像進行圖像轉(zhuǎn)換,得到對應(yīng)的目標(biāo)等效空氣圖像,如圖11、圖12所示。
圖11 文獻[9]算法轉(zhuǎn)換所得等效空氣圖像
圖12 本文算法轉(zhuǎn)換所得等效空氣圖像
采用OpenCV雙目立體視覺算法對轉(zhuǎn)換所得圖像進行測距計算,各組圖像測量結(jié)果如表4所示。
表4 測量結(jié)果匯總表
測量誤差對比如表5所示。
表5 測量誤差對比表
由表5可得,文獻[9]算法所對應(yīng)測量誤差均值為58.83 mm,本文算法所對應(yīng)測量誤差均值為28.88 mm,誤差值較文獻[9]算法降低50.91%。因此,本文所提圖像轉(zhuǎn)換算法有著更好的圖像轉(zhuǎn)換效果,可以明顯提高圖像的測距準(zhǔn)確度。進而證明,考慮光線二次折射對改進圖像轉(zhuǎn)換效果有著積極作用。
針對水下成像時光線折射所造成圖像失真問題及文獻[9]圖像轉(zhuǎn)換算法因忽略光線二次折射所引入的轉(zhuǎn)換誤差。本文提出一種基于光線折射模型的水下圖像轉(zhuǎn)換轉(zhuǎn)算法。該算法將光線二次折射考慮進水下圖像成像過程,建立水下相機成像模型,推導(dǎo)出水下圖像與等效空氣圖像像素點映射關(guān)系,得到水下圖像轉(zhuǎn)換算法,通過更為準(zhǔn)確的像素點映射關(guān)系來提高圖像轉(zhuǎn)換準(zhǔn)確率。實驗可得,u方向圖像轉(zhuǎn)換誤差均值由2.289 5降為1.213 3,降低47.01%,v方向圖像轉(zhuǎn)換誤差均值由3.252 5降為1.526 3,降低53.07%。同時,測距誤差均值由58.83 mm降為28.88 mm,降低50.91%。實驗結(jié)果證明了本文所提算法的有效性。本文所提算法可以看作圖像預(yù)處理階段的一部分,通過該算法可以將目標(biāo)的水下圖像轉(zhuǎn)換為等效空氣圖像,解決圖像失真問題,為后續(xù)圖像處理流程提供高質(zhì)量的數(shù)據(jù)支撐,幫助各類計算機視覺技術(shù)實現(xiàn)水下環(huán)境的直接應(yīng)用。