何志東,張建偉,梁斌斌
(1.四川大學計算機學院,成都610065;2.四川川大智勝軟件股份有限公司,成都610045)
魚眼鏡頭是一種視角達到了180°甚至更高的廣角鏡頭,超過了人類的肉眼所能看到的范圍,且一般以固定姿態方式工作不需要旋轉和掃描,因此魚眼鏡頭能在視頻監控、機器視覺、機場消防安全等公共安全風險防控等領域發揮巨大作用。但是為了獲得超大廣角,魚眼鏡頭不得不在成像結構方面放棄傳統的小孔成像原理,這就帶來了嚴重的圖像畸變,視覺效果欠佳[1]。如何高效且較為魯棒地解決魚眼圖像的畸變問題已經成為眾多學者的研究方向。
常見的魚眼圖像的畸變校正方法,包括基于相機標定的校正方法以及基于投影變換的校正方法。基于標定的校正方法一般是建立數學模型,雖然多項式擬合往往可以獲得較高精度,但對專業標定設備要求較高,且其結果是數學模型上的對應關系,對于人眼主觀感受上的提升有限[2-5]。而基于投影變換模型的校正方法則是利用相機的光學成像過程的本質,以重投影變換的方式來校正圖像,雖然其校正精度相對于標定法有所下降,但校正原理解簡單,且實現方便結果貼近人眼的直接視覺感受[6-8]。一般而言,對于基于投影變換模型的校正方法,普遍采用的模型包括球面投影,柱面投影以及經緯度投影等[9]。各種基于投影變換模型做畸變矯正的方法均有一些缺陷,本文提出一種將原始魚眼圖像進行平面投影,通過合理投影方式得到多個視野有重復區域的圖像塊,再以半投影變換的圖像拼接算法的思想生成目標圖像的算法。實驗結果表明,本文算法作為一種頗為新穎的方法,達到了預期的效果。
相關學者為了提高畸變校正的視覺效果做了大量研究。楊晶晶等[10]據投影的不變性原理數學推導出畸變直線的斜率,提出了基于幾何性質的魚眼鏡頭成像的校正算法;楊玲等[11]提出以經緯映射的魚眼圖像校正設計方法,將有畸變的魚眼照片進行直接重投影;王嵐等[12]采用基于改進遺傳模擬退火算法的BP神經網絡對相機畸變進行校正,雖不是完全針對魚眼相機,但是對畸變校正提供了一個新穎的思路;潘志昊等[13]提出一種基于深度學習的魚眼圖像畸變校正的方法,利用了卷積神經網絡對畸變圖像的特征進行提取,并創建了一個規模可觀的魚眼畸變圖像的數據集供訓練使用。宋陽等[14]提出在魚眼圖像徑向畸變的標定中使用圓柱形棋盤格,無需考慮透視關系以及鏡頭模板間的距離。
在圖像拼接領域,經典算法是Brown[15]等提出的AutoStitch,該算法首先是使用一個全局單應性矩陣對齊,使用柱面投影,再以Bundle Adjustment算法優化最終以多頻帶融合圖像的經典拼接算法。Gao[16]則提出將待拼接的目標場景分成前景和背景兩個平面,有別于經典的一個全局單應性矩陣,Gao使用兩個單應性矩陣分別對齊前景和背景;Zaragoza等[17]參考了Gao的多單應性矩陣的思想,提出了APAP算法,將待拼接的圖像等距離劃分為相同的網格,而每個網格都可以對應一個單應性矩陣對齊,不俗的效果的同時也帶來了運算量過大的問題;Chang等[18]提出一種新穎的參數變換思想SPHP即半投影變換,結合了投影變換和相似變換的思想,通過將待拼接圖像之間的重疊區域的投影變換外推到非重疊區域中,幾何變換模型逐漸從投影變為相似,平滑地銜接了兩張圖片,減少了投影失真結果更加自然。雒培磊[19]等使用了深度學習的方法來做影像拼接,以卷積神經網絡對待拼接的圖像進行特征提取,再以相關濾波對不同層的特征做相關性分析,取得了不俗的效果。
本文算法流程主要包括魚眼相機參數標定、重投影和圖像塊的拼接3個步驟。
普通相機鏡頭的光學成像模型一般遵循經典的小孔成像原理,有成像公式:

上式φ表示物方視角,f為焦距,r為像點與主點的距離,若φ=±90°,有r=±∞,因此普通的鏡頭的相機視場角度不會太大。而魚眼鏡頭有著特殊的物理組成及比較獨特的光學折射關系,成像也不再遵循傳統的小孔成像原理,因而可以將視角提高至接近甚至大于180°。圖1中可見,在經典成像模型中無法入射進傳感器的光線在魚眼鏡頭模型中也能被穿過鏡頭從而被傳感器捕獲從而采樣。

圖1魚眼鏡頭的光線路徑示意圖
如圖2是在世界坐標系OwXwYwZw,魚眼鏡頭坐標系OcXcYcZc和圖像坐標系OXYZ下的魚眼鏡頭的成像原理模型示意圖,其對應的原點分別是點Ow,Oc,O。其中,Zc軸方向為魚眼鏡頭光軸方向。Pw(X,Y,Z)為空間中一點,Pc(x,y,z)為點Pw線性投影到鏡頭球面的點在相機坐標系上的位置,P,(u,v)為理想情況下,即小孔成像原理中點Pc投影到圖像坐標系中的點,P(u,v)點為點Pc實際投影在圖像坐標系上的點。點Pw的最終實際像點為P點,而非點P,,可見從成像可以發現,經過魚眼鏡頭成像后,成像點發生了偏移。

圖2魚眼鏡頭的成像模型示意圖
需對魚眼鏡頭進行標定過后才能恢復魚眼鏡頭的光學模型。本文采用標定方法的是Scaramuzza[20]等人發布的OcamCalib鏡頭標定工具。OcamCalib工具箱自開源以來憑借出色的準確度和魯棒性,在標定包括魚眼相機在內的任何全向相機時得到了相關研究員的廣泛認可。OcamCalib通過改變相機和標定棋盤格之間的不同位置與角度,采集到多張圖片進行計算,得到相機的內參和外參。如圖2中魚眼圖像的某一點P(u,v),可以通過該工具箱,在圖2的球面上獲得與其唯一對應的三維坐標點Pw。有關系式如下:

在式(2)和式(3)中,f(ρ)的值與魚眼圖像像素點到圖像中心距離ρ相關。f(ρ)的階數N是由標定人員自己定義,系數a0,a1,a2,a3···aN是相機的內參,這些參數即是通過OcamCalib標定工具計算得出。同樣地,外參由此工具計算后,用1個3×3的矩陣給出,前2列分別是對應x和y坐標的旋轉系數,第3列表示平移矢量。相機所在參考系可以由外參確定。對在非線性標定中的參數優化,使用廣泛認可的非線性最小二乘法Levenberg-Marquardt算法和Bundle Adjustment光束平差法。在本文算法中,所需要的參數只有能將魚眼圖像映射到三維坐標的相機內參和畸變系數。
在得到相機相關參數后利用該相機的成像關系做圖像重投影。如圖3所示,是一個將魚眼圖像重投影至平面圖像的投影模式立體圖。平面投影為用多個相同平面與球相切,魚眼圖中心點為O點,平面呈正四邊形且四個頂點與O點的連線之間的夾角為60°,該夾角稱為相機視場角度。以面ABCD中的點為例,P1為圖像上的點P(u,v)通過標定相機后所求得的第一部分中對應的球面三維坐標,P2為該坐標映射到平面ABCD上的交點。

圖3投影立體示意圖
如圖4所示,是與立體圖相對應的投影模式俯視圖。其中線段AC對應圖3中平面ABCD的AC邊,Q點是該線段的中點,QO為光軸方向,半圓形虛線代表魚眼鏡頭,虛線外的五個線段是自定義的五個與圓相切平面。在一個軸中魚眼圖像被投影在了5個連續的平面,平面有兩個維度的軸,因此圖像會被投影在5×5=25個平面上,即分成了25個子圖像。仍以球面三維坐標點P1為例,有關系式如下:

式中θ為P1O和QO的夾角,即光線和光軸的夾角,l為PQ的弧長f為半圓的半徑。通過上式即可通過球面三維坐標點的相對位置l求得P2Q,結合上文相機標定參數即可求得魚眼圖像各像素點到投影后目標圖像的一一映射關系。
為了能使圖像正常拼接,將平面投影過后的多張圖像進行融合在一起,在重投影時須制造重疊區域。本文采用多次平面投影獲得多張圖像,且多個平面之間設計了重疊區域,圖4所示,相機視場角度設為60°,相機以45°旋轉角進行旋轉且無平移操作,圖中陰影區域即為相鄰投影的重疊區域。

圖4投影平面俯視示意圖
與Brown[15]等提出的使用一個全局單應性矩陣對齊的基礎上柱面投影,再以Bundle Adjustment算法優化參數并最終以多頻帶進行融合的經典拼接算法不同,Chang等[18]提出一種新穎的參數變換思想SPHP,即半投影變換,結合了投影變換和相似變換的思想,通過將待拼接圖像之間的重疊區域的投影變換外推到非重疊區域中,在圖像上的幾何變換模型逐漸從投影變換變為相似變換,平滑地銜接了兩張圖片,結果更加自然。雖然該方法在拼接處可能存在重影和隆起,但是在物體的形狀保持方面有較好的效果。Chang等首先計算用以進行圖像變換的單應矩陣H,然后為了變換后的圖像進行保形而計算WH-1。在這個變換中,W是一個3段分段函數,對應如圖6中的3個區域:在u≤u1,u1≤u≤u2,u2≤u時分別對應RH,RT,RS。其中,區域RH是直接投影變換模型;區域RS存在一個曲面方程,三維空間上是一個平滑的二次曲面,銜接了兩個不同的幾何變換模型區域;區域RT則采用相似變換模型。公式表達如下:

在中間區RT中的定義是逐漸改變其幾何變換模型從H( )u,v到的函數。分段變換與經典變換的區別如圖5所示,(a)是原始圖像,(b)是傳統的投影變換得到個圖像而(c)是上文所提及的對應3個區域進行不同幾何變換得到的投影變換,顯然有著更好的保形效果。

圖5經典投影變換和半投影變換對比圖
通過如圖6所示的在半投影變換下的俯視圖,可以更加理解分段半投影變換。在拼接流程結束后圖中AC段和EF段繼續保留原有的平面投影模型下的圖像,而FA段則對應了RT區域。這相當于在平面投影的時候,各個相鄰平面的重疊區域部分通過一個直紋面方程進行投影,從而取代了相交平面各自的投影,才使得拼接圖像之間平滑銜接減少失真。
本次實驗采用魚眼鏡頭是DETU公司生產的Sphere S型號1200w像素全景相機,附帶的鏡頭視角達到了236°。實驗平臺配置為Windows10,MAT?LAB2017b,原始魚眼圖像如圖7所示。為避免拍攝時候抖動影像采樣,在魚眼標定部分,固定魚眼鏡頭,使用棋盤格圍繞魚眼鏡頭進行多次采樣挑選10張成像質量較好的圖片輸入給OcamCalib開源工具箱,會自動檢測出棋盤格內的網格角點。本文使用的標定板具有17×8=136個角點,其中一張魚眼照片尺寸為4032×3024。正如圖2所示,OcamCalib開源工具箱在求出了相機參數后,即可計算從魚眼成像照片到球面三維坐標系的轉換。

圖6半投影變換下的俯視圖示意

圖7魚眼相機采集的原圖
如圖8所示,在經過平面投影后,魚眼原圖像被重投影成為了25個圖像塊,且相鄰兩圖像之間具有一定的視角重疊區域,每個圖像塊的像素大小完全相同,邊緣圖像塊因為投影方式會有約一半大小的黑邊。對每一個經過重投影生成的圖像塊而言,都是是消除了魚眼畸變地帶來的視覺效果,即可認為單張圖是完成了魚眼的畸變矯正。由于多圖的圖像拼接運算量過于巨大計算相當耗時,且在進行特征點的提取和矩陣運算是占用運算能力和內存很大,筆者因實驗設備老舊計算機性能孱弱,舍棄了幾張邊緣帶黑邊的子圖,但是這并不影響對算法最終效果的評價。

圖8原圖投影后的子圖像
投影后的部分子圖通過上文所提及的拼接算法后生成的圖像如圖9所示。整體看,畸變曲線基本全部校正為直線。從圖像中間往邊緣看,中間部分由于徑向畸變而彎曲的書桌邊緣已經矯正得較為豎直且平滑,而邊緣部分的電腦顯示器也得到了很好的恢復,由扭曲的形狀矯正成了較為直觀的矩形。并且因為平面透視投影面大小選取適當,邊緣的圖像沒有產生很強的拉伸效果,符合人眼的視覺特性。雖然由于拼接算法本身的局限在拼接處有局部出現微弱的隆起現象,但是并不影響整個魚眼矯正圖像較為自然,符合人的直觀感受。這里由于篇幅限制,不將實驗圖像細節結果一一列出,總體而言,校正后的圖像清晰亮度分布均勻畫質較好,且圖像真實感器,達到了畸變矯正要求。

圖9本文算法矯正后圖像
本文通過將魚眼圖像投影到多個平面分割成多個子圖,且相鄰子圖之間具有視角重疊區域,再此基礎上通過半投影變換構造直紋面方程的圖像拼接方式將各個子圖重新拼接為一張較為完成的圖像以達到魚眼圖像畸變校正的目的。最終實驗表明該算法矯正效果達到預期,生成圖像質量較好,總體符合人眼的視覺直觀特性。在魚眼鏡頭畸變校正領域具有一定的創新性,提供了一個新的思路。但是本文亦存在改進的地方:
(1)使用范圍受限,有一定的誤差。拼接算法需要對圖像中特征點進行提取,故不同環境下生成的矯正圖可能并不一致且需要重新運行拼接程序,不便于離線操作。
(2)數據運算較大,提取特征和矩陣運算都需要較大的運算能力和內存空間。
(3)圖像效果受拼接算法的影響可能出現局部重影和隆起而影響視覺效果。