何林飛 朱 煜 林家駿 黃俊健 陳旭東
(華東理工大學(xué)信息科學(xué)與工程學(xué)院 上海 200237)
魚眼鏡頭是視場(chǎng)角能達(dá)到180度甚至更高的一種超廣角鏡頭,由于其外型與魚的眼睛相似,因此得名魚眼鏡頭。魚眼圖像是由魚眼鏡頭拍攝所得的圖像,其中心部分的圓形是光線經(jīng)過魚眼鏡頭所成的像,也是魚眼圖像中最主要的有效區(qū)域。由于魚眼鏡頭擁有超廣的視場(chǎng)角,所成圖像中信息量大,因此在虛擬現(xiàn)實(shí)技術(shù)[1]、視頻目標(biāo)跟蹤[2]、汽車輔助駕駛[3]、機(jī)器人定位與導(dǎo)航[4]等方面擁有廣泛的應(yīng)用價(jià)值。然而魚眼鏡頭所成的圖像畸變情況嚴(yán)重,要使用魚眼圖像,必須要先解決其畸變的問題。
將帶有畸變的魚眼圖像映射為普通的平面透視圖像的方法包括文獻(xiàn)[5-6]的算法,它們通過優(yōu)化由用戶指定的場(chǎng)景信息所定義的能量函數(shù)來解決畸變問題。此外還有根據(jù)鏡頭成像的幾何模型,先將魚眼圖像映射到球面上,再根據(jù)球面的經(jīng)緯度將圖像展開的經(jīng)緯度映射[7]的方法。
利用魚眼圖像的超廣角特點(diǎn),實(shí)現(xiàn)雙目魚眼圖像拼接生成一幅360度全景圖像具有實(shí)際應(yīng)用價(jià)值。典型的圖像拼接方法是基于特征的二維平面圖像拼接,利用SIFT[8]、SURF[9]、ORB[10]等特征,計(jì)算多幅圖像之間的匹配關(guān)系,實(shí)現(xiàn)二維圖像的拼接。但雙目魚眼圖像的重合部分少,且存在對(duì)齊等問題,在接縫處的匹配拼接是一個(gè)難點(diǎn)。
Ho等[11]提出了一種兩步修正法對(duì)雙目魚眼圖像進(jìn)行拼接。首先將魚眼圖像展開為平面圖像,然后通過仿射變換和圖像偏移兩步修正圖像,再進(jìn)行拼接。該方法需要在平面圖像上進(jìn)行兩次修正才能實(shí)現(xiàn)匹配拼接,效率不高。
本文設(shè)計(jì)實(shí)現(xiàn)了一套基于空間匹配的雙目魚眼鏡頭全景圖像生成算法,流程如圖1所示,主要分為展開和拼接兩個(gè)部分。在展開部分,首先通過雙目魚眼鏡頭獲取兩幅魚眼圖像,然后根據(jù)鏡頭成像原理,將兩幅魚眼圖像映射變換為兩幅球面圖像,再通過經(jīng)緯展開的方法,將球面圖像展開得到展開圖像。在拼接部分,由于裝配等原因,兩幅球面圖像不是完全對(duì)齊的,本文提出一種球面圖像的空間旋轉(zhuǎn)匹配方法,直接通過球面圖像計(jì)算得到圖像間的空間旋轉(zhuǎn)關(guān)系,對(duì)齊兩幅球面圖像的經(jīng)緯度,再拼接得到全景球面圖像。求解旋轉(zhuǎn)關(guān)系的過程中,使用RANSAC方法[12]以消除噪聲的影響。
圖1 算法總體流程圖
魚眼圖像的整個(gè)展開過程如圖2所示。首先將雙目魚眼鏡頭所成的魚眼圖像映射到空間單位球面上得到球面圖像,再將空間球面圖像展開為平面展開圖像。
(a) (b) (c)圖2 魚眼圖像的展開
魚眼鏡頭的成像原理可以用球面透視成像模型[7]來描述。如圖3所示,把魚眼鏡頭的表面看作一個(gè)半球面,鏡頭外空間景物的光線投射到球面上。光線透過鏡頭之后,不同的入射光線投射到位置不同的相機(jī)感光部件上,形成一幅圓形的魚眼圖像。
圖3 魚眼鏡頭成像模型
按照鏡頭成像原理,將魚眼圖像重新映射到單位球面上。首先通過變角度掃描線法獲取魚眼圖像中圓形有效區(qū)域的圓周點(diǎn),利用圓擬合算法[13]求解得到有效區(qū)域的中心點(diǎn)(xc,yc)和半徑Rc。該區(qū)域中的像素點(diǎn)可以用(ρ,φ)來表達(dá),其中ρ∈[0,Rc],φ∈[0,2π),其與原點(diǎn)在左上角的圖像坐標(biāo)系下的像素點(diǎn)(x,y)之間的關(guān)系為:
(1)
魚眼圖像的有效區(qū)域像素點(diǎn)與單位球面坐標(biāo)系下的點(diǎn)(xs,ys,zs)之間的關(guān)系為:
(2)
式中:θ為光線入射角,θ與ρ的關(guān)系可以根據(jù)鏡頭的ρ-θ數(shù)據(jù),利用雙線性插值的方法獲得所有θ∈[0,π]范圍內(nèi)的數(shù)據(jù)。
然后對(duì)球面圖像再利用經(jīng)緯度展開[14],可以得到尺寸為w×h的展開圖像。
(3)
在實(shí)驗(yàn)中,通過雙目魚眼相機(jī)獲取如圖4所示的雙目魚眼圖像,將其映射到單位球面上得到如圖5所示的兩幅球面圖像。
圖4 原始雙目魚眼圖像
圖5 兩幅單位球面圖像
在理想情況下,雙目魚眼鏡頭的兩個(gè)成像平面完全平行,得到的兩幅球面圖像Sl和Sr經(jīng)緯度完全匹配,則可以利用式(4)的動(dòng)態(tài)權(quán)重法根據(jù)圖像的經(jīng)緯度直接拼接融合兩幅球面圖像,得到完整的全景球面圖像。
Sall=αSl+(1-α)Sr
(4)
但是對(duì)于實(shí)際的雙目魚眼相機(jī),在安裝的過程中,很難保證雙目魚眼相機(jī)兩個(gè)魚眼鏡頭的成像平面完全平行,當(dāng)兩個(gè)成像平面發(fā)生偏轉(zhuǎn)的時(shí)候,兩幅球面圖像的經(jīng)緯度就會(huì)有所偏差,在經(jīng)緯度沒有對(duì)齊時(shí)直接進(jìn)行拼接,則會(huì)出現(xiàn)圖像不連續(xù)的錯(cuò)誤拼接結(jié)果。
對(duì)于這一問題,一般的圖像拼接方法是基于平面的展開圖像進(jìn)行處理。從如圖2(a)所示的魚眼圖像得到如圖2(c)所示的展開圖像后,在展開圖像上確定圖像之間的變換關(guān)系,即單應(yīng)矩陣H。首先將兩幅展開圖像之間的關(guān)系定義為(xpl,ypl)=H(xpr,ypr),然后在展開圖像上提取SIFT特征點(diǎn),并進(jìn)行匹配,通過匹配的特征點(diǎn)對(duì)求解得到單應(yīng)矩陣H,最終通過單應(yīng)矩陣匹配兩幅展開圖像,并完成拼接。
然而由于雙魚眼圖像之間的未對(duì)準(zhǔn)關(guān)系是由于鏡頭成像面的空間旋轉(zhuǎn)原因?qū)е?,在空間中確定旋轉(zhuǎn)關(guān)系并進(jìn)行空間的匹配和拼接能獲得更好的效果。因此,本文提出了球面圖像的空間匹配拼接方法,直接對(duì)兩幅球面圖像計(jì)算空間上的旋轉(zhuǎn)關(guān)系,并在空間上直接進(jìn)行拼接得到球面全景圖像的方法。
為了確定兩幅球面圖像之間的準(zhǔn)確旋轉(zhuǎn)關(guān)系,首先需要提取兩幅球面圖像的特征點(diǎn)并進(jìn)行匹配。本文利用SIFT算法,提取球面上的特征點(diǎn)。
原始的SIFT算法是在平面圖像上進(jìn)行,但由于球面圖像是三維空間曲面上的圖像,不能直接使用該方法進(jìn)行計(jì)算。因此首先通過式(3)所示的映射關(guān)系將球面圖像轉(zhuǎn)換為展開圖像,然后利用SIFT算法在展開圖像上計(jì)算得到關(guān)鍵點(diǎn)的坐標(biāo)和關(guān)鍵點(diǎn)的描述子,再將關(guān)鍵點(diǎn)坐標(biāo)重新映射到三維空間球面上。
在展開圖像上點(diǎn)(xp,yp)的鄰域?yàn)?
(5)
若該點(diǎn)映射到單位球面上得到坐標(biāo)(xs,ys,zs),用球面坐標(biāo)可以表示為(1,θs,φs),其中:φs為該點(diǎn)的經(jīng)度;θs為該點(diǎn)的緯度。根據(jù)式(3)的關(guān)系,式(5)表達(dá)的該點(diǎn)在展開圖像上鄰域映射到球面圖像上的區(qū)域?yàn)椋?/p>
(6)
本文根據(jù)得到的球面圖像特征點(diǎn)匹配對(duì)(xsl,ysl,zsl)、(xsr,ysr,zsr),利用矩陣SVD分解算法推導(dǎo)出求解空間旋轉(zhuǎn)關(guān)系的旋轉(zhuǎn)矩陣。
定義兩幅單位球面上的圖像之間相差一個(gè)旋轉(zhuǎn)矩陣R,它們之間的旋轉(zhuǎn)關(guān)系可以表達(dá)為pl=[xsl,ysl,zsl]T=R[xsr,ysr,zsr]T=Rpr。
建立優(yōu)化問題求解旋轉(zhuǎn)矩陣R:
(7)
式中:m為特征點(diǎn)對(duì)的數(shù)目。
由于旋轉(zhuǎn)矩陣R是正交矩陣,式(7)的優(yōu)化問題等價(jià)為:
(8)
式中:Pl=[pl1,pl2,…,plm];Pr=[pr1,pr2,…,prm]。
設(shè)W=VTRU=(wij)3×3,由于矩陣U、V、R均為正交矩陣,因此W也為正交矩陣,從而有|wij|≤1。因此:
(9)
當(dāng)W=I時(shí)取最大值,得到:
R=VUT
(10)
在兩球面圖像旋轉(zhuǎn)矩陣的求解過程中,同樣使用RANSAC隨機(jī)采樣的方法,消除m個(gè)特征點(diǎn)中的噪聲點(diǎn)對(duì)結(jié)果的影響。
至此,將本文提出的全景圖像生成算法步驟總結(jié)如下:
步驟1獲取雙目魚眼圖像及圖像的有效區(qū)域中心點(diǎn)(xc,yc)和半徑Rc,將有效區(qū)域映射到單位球面上得到兩幅單位球面圖像Sl和Sr;
步驟2計(jì)算得到球面圖像的SIFT特征點(diǎn),并對(duì)特征點(diǎn)進(jìn)行匹配;
步驟3利用配對(duì)特征點(diǎn)計(jì)算得到旋轉(zhuǎn)矩陣R;
步驟6將全景球面圖像Sall展開得到全景展開圖像。
針對(duì)圖5所示的兩幅球面圖像,利用SIFT算法,提取空間球面上的SIFT特征點(diǎn)并進(jìn)行匹配,球面兩側(cè)匹配結(jié)果如圖6所示。
圖6 兩幅單位球面圖像特征點(diǎn)匹配結(jié)果
根據(jù)圖6得到的特征點(diǎn)與匹配結(jié)果,按照所述的矩陣SVD分解計(jì)算得到旋轉(zhuǎn)矩陣:
使用yaw-pitch-roll的歐拉角描述方式,計(jì)算旋轉(zhuǎn)矩陣對(duì)應(yīng)的歐拉角,結(jié)果如表1所示。可以看出,計(jì)算得到的角度與真實(shí)角度相比,平均偏差為0.08度,各角度的誤差都在0.13度以內(nèi),計(jì)算誤差很小。
表1 兩幅魚眼圖像旋轉(zhuǎn)關(guān)系計(jì)算結(jié)果
對(duì)圖5所示的兩幅球面圖像直接進(jìn)行拼接,得到圖7(a)和(c)。由于存在旋轉(zhuǎn)誤差,從局部放大圖中可以很明顯地看出圖像中兩側(cè)雨棚不連續(xù),拼接結(jié)果有很大錯(cuò)誤。
(a) 直接拼接球面結(jié)果
(b) 球面旋轉(zhuǎn)后拼接球面結(jié)果
(c) 直接拼接展開圖結(jié)果
(d) 球面旋轉(zhuǎn)后拼接展開圖結(jié)果
(e) 基于平面展開圖像匹配拼接結(jié)果圖7 拼接結(jié)果對(duì)比
利用基于平面的展開圖像進(jìn)行處理并拼接,得到圖7(e)。從局部放大圖中可以看出,該方法雖然能在一定程度上減少誤差,但仍然存在拼接處的較明顯錯(cuò)誤。左側(cè)的雨棚已經(jīng)連續(xù),右側(cè)的雨棚雖然較圖7(c)有較好的連續(xù)效果,但出現(xiàn)了重影的現(xiàn)象,拼接效果仍不理想。根據(jù)本文算法,利用空間匹配關(guān)系,用旋轉(zhuǎn)矩陣旋轉(zhuǎn)其中一幅單位球面圖像后進(jìn)行拼接,得到圖7(b)和(d),顯然,拼接處圖像的效果得到明顯改善。
將直接拼接、平面匹配拼接和本文空間匹配拼接三種不同方法得到的全景展開圖像與真實(shí)場(chǎng)景圖像進(jìn)行相似性對(duì)比,計(jì)算拼接部分的峰值信噪比(Peak Signal to Noise Ratio,PSNR)和結(jié)構(gòu)相似性(Structural SIMilarity,SSIM),PSNR和SSIM越高,表示得到的結(jié)果與真實(shí)場(chǎng)景越相似,效果越好。計(jì)算結(jié)果如表2所示,可以看出,本文方法得到的全景結(jié)果與真實(shí)場(chǎng)景最為相似,效果最好。
表2 不同方法的全景圖像與真實(shí)場(chǎng)景圖像的相似性
整個(gè)算法驗(yàn)證完成后,在Android系統(tǒng)上實(shí)現(xiàn),程序獲取雙目魚眼相機(jī)的數(shù)據(jù),并通過本文提出的算法實(shí)現(xiàn)全景圖像和球面圖像的生成與展示。雙目魚眼相機(jī)與Android手機(jī)通過Wi-Fi通信,用RTSP協(xié)議傳輸視頻流,對(duì)分辨率為960×480的視頻,使用OpenGL進(jìn)行實(shí)時(shí)渲染,幀率可達(dá)30幀/秒。
Android系統(tǒng)上實(shí)現(xiàn)的全景圖像的顯示效果如圖8所示,包括球面內(nèi)部和從球面外部觀看的效果。
(a) 室外球面內(nèi)效果
(b) 室外球面外效果
(c) 室內(nèi)球面內(nèi)效果
(d) 室內(nèi)球面外效果圖8 球面圖像展示效果
本文提出一種基于空間匹配的雙目魚眼鏡頭全景圖像生成算法,對(duì)兩幅魚眼圖像進(jìn)行精準(zhǔn)拼接。首先,利用雙目魚眼鏡頭獲取兩幅魚眼圖像,將雙魚眼圖像映射到空間球面,再拼接為一幅完整的空間全景球面圖像。在拼接的過程中,為了獲得準(zhǔn)確的全景圖像,提出空間旋轉(zhuǎn)匹配方案:通過SFIT提取空間特征點(diǎn),得到兩幅魚眼圖像的特征點(diǎn)配準(zhǔn)關(guān)系,利用矩陣SVD求解兩個(gè)單位球面圖像的空間旋轉(zhuǎn)關(guān)系。實(shí)驗(yàn)表明本文算法能很好地解決雙魚眼圖像的匹配拼接問題。整個(gè)算法驗(yàn)證完成并在Android系統(tǒng)上實(shí)現(xiàn),具有良好的實(shí)用價(jià)值。