我們知道,攝像頭在進行圖像拍攝時,最理想的位置是能垂直與拍攝平面的,這樣能保證圖像能按照原來的幾何比重重現。
然而在智能駕駛汽車的實際應用中,受到智能車車體結構的限制,車體控制要求攝像頭有一定的預瞄距離,攝像頭的水平和垂直掃射面通常是成扇形擴張的,且攝像頭與地面一般成一定角度安裝。
這種角度的存在會在圖像邊緣處造成一定的成像畸變?;兊慕Y果是在后期圖像處理過程中產生一系列如下的類似問題:
1)垂直線被拍攝成斜線導致斜率計算錯誤;
2)遠處的彎道可能由于畸變被壓縮導致曲率計算錯誤等等。
3)對于旁車道車輛狀態在識別過程中產生嚴重的畸變,在后期處理的時候會存在匹配不上的問題;
諸如上面各類問題都是可能存在在整個圖像感知中,如果畸變處理不得當會對整個圖像質量和后續神經網絡識別造成較大的風險。
為了滿足智能車的實時控制需求,一般需要再實際應用場景中針對攝像頭圖像畸變提出相應的矯正算法。
智能汽車主要的畸變種類
相機畸變包含徑向畸變、切向畸變、離?畸變、薄棱鏡畸變等,智能汽車上的相機畸變主要有徑向畸變和切向畸變。
徑向畸變分為桶形畸變和枕型畸變。
通常我們智能泊車系統一般采用的環視攝像頭由于采用廣角拍攝,其對應的畸變類型通常是徑向畸變。徑向畸變產?的主要原因是鏡頭徑向曲率的不規則變化,它會導致圖像的扭曲變形,這種畸變的特點是以主點為中?,沿徑向移動,離的距離越遠,產?的變形量就越?。對于?個矩形的嚴重徑向失真需要被較正成理想線性鏡頭的圖像才可以進入后端處理過程。
而行車系統一般采用的前視、側視、后視攝像頭由于采用一般的CMOS工藝攝像頭進行拍攝,且由于前側視攝像頭安裝過程中可能不能保證透鏡與成像面嚴格平行,同時也可能是由于制造上的缺陷使透鏡不與成像平面平行,從而產生切向畸變,這種現象通常發?于成像儀被粘貼在攝像機的時候。
徑向畸變和切向畸變模型中一共有5個畸變參數,在Opencv中他們被排列成一個5*1的矩陣,依次包含k1、k2、p1、p2、k3,經常被定義為Mat矩陣的形式。
對于畸變矯正來說,這5個參數就是相機標定中需要確定的相機的5個畸變系數。參數k1、k2、k3被稱為徑向畸變參數,其中k3是可選參數。
對于畸變嚴重的相機(如?眼相機),可能還會有k4、k5、k6。切向畸變可以用兩個參數p1 和 p2 來表示:至此,得到了共五個參數:K1、K2、K3、P1、P2,這五個參數是消除畸變所必須的,稱為畸變向量,也叫相機外參數。
因此,求得這5個參數后,就可以校正由于鏡頭畸變引起的圖像的變形失真,下圖顯示根據鏡頭畸變系數校正后的效果:
通過5個畸變系數找到這個點在像素平面上的正確位置公式如下:
畸變后的點可以通過內參矩陣投影到像素平面,得到該點在圖像上的正確位置(u,v):
圖像畸變矯正方法
與相機模型方法論不同,圖像去畸變是為了補償透鏡缺陷,對原始圖像進行徑向/切向去畸變,之后在使用該相機模型。處理圖像畸變的方法主要涉及選擇何種相機模型進行圖像投影。
典型相機模型投影方式有球面模型和柱面模型。
1、魚眼相機成像畸變矯正
通常類似魚眼鏡頭會產生極大的形變,比如普通相機成像過程中,直線投影到像平面上還是一定大小的直線,但是魚眼相機拍攝的圖到像平面上則會變成非常大且長的直線,甚至部分場景下直線檢測會被投影到無窮大,因此針孔模型無法為魚眼鏡頭建模。
為了將盡可能大的場景投影到有限的圖像平面內,魚眼鏡頭一版由十幾個不同的透鏡組合而成,在成像過程中,入射光線經過不同程度的折射,投影到尺寸有限的成像平面上,使得魚眼鏡頭與普通鏡頭相比起來擁有了更大的視野范圍。
研究表明魚眼相機成像時遵循的模型近似為單位球面投影模型。這理我們為了更好的適配相機針孔模型的推導過程,常用的方法是采用投影到球面相機模型過程來進行。
對于魚眼相機成像過程的分析可以分成兩步:
1)三維空間點線性投影到一個球面上,當然這個球面是我們假設的虛擬球面,將其球心看成與相機坐標原點重合。
2)單位球面上的點投影到像平面上,這個過程是非線性的。
如下圖表示了一種智駕系統中從魚眼相機拍攝變換到球面相機的圖像處理過程。假設相機坐標系下的點為X=(x,y,z),像素坐標為x=(u,v)。那么它的投影過程表示如下:???
1、第一步是用攝像機采集世界坐標系下的三維點,并將圖像坐標系下的成像點投影到歸一化單位球面坐標上;
2、將相機坐標中心沿著z軸偏離個單位,得到如下:
3、考慮單位球面,將球面進行歸一化為1個單位:
4、將球面投影模型變換到針孔模型上,得到相應的主點坐標,以該主點坐標可以建立對應的標準的相機坐標系模型:
2、柱面坐標投影
對于諸如前視、側視攝像頭這樣的終端來說,通常捕獲的圖像主要產生的是切向畸變。切向畸變通常推薦采用柱面相機模型,其優點是指用戶可以獲得諸如魚眼相機的全景圖中360度范圍內任意切換視線,也可以在一個視線上改變視角,來取得接近或遠離的效果,同時,柱面全景圖像也較為容易處理,因為可以將圓柱面沿軸切開并展開在一個平面上,傳統的圖像處理方法常??梢灾苯邮褂茫嫒皥D并不要求照相機的標定十分準確。
用戶在水平方向上有360度的視角,在垂直方向上也可以做一定的視角變化,但是角度范圍則受到限制,由于柱面模型的圖像質量均勻,細節真實度更高,應用范圍比較廣泛。
總體來說,柱面全景圖顯著優點歸納為以下兩點:
1)它的單幅照片的獲取方式比立方體形式和球面形式的獲取方式簡單。普通車載相機(如前視、側視攝像頭)基本就可以獲取到原始圖像。
2)柱面全景圖容易展開為一個矩形圖像,可以直接用計算機常用的圖像格式進行存儲和訪問。柱面形式的全景圖在垂直方向允許參與者視線的轉動角度小于180度,但是絕大多數應用中,水平方向的360度環視場景足以表達空間信息。
這里我們重點講下如何利用柱面相機對原圖像進行畸變矯正處理的算法,實際上這是個從獲得虛擬相機到原相機映射關系的過程。這里的虛擬相機是指針對真實圖像到生成柱面圖的映射關系。
如下圖表示了一種智駕系統中從普通車載相機拍攝變換到柱面相機的圖像處理過程。其中,獲得虛擬相機圖?的實質就是求虛擬相機到原相機的映射關系,通?的過程如下:
首先,對于前/側視原始視頻圖像可以設置為目標圖像dst img;其中該目標圖上的主點(u,v)為基礎點進行2D到3D的逆投影變換到目標相機坐標圖上,該目標相機可重構出世界坐標系下的該點位置(x,y,z);隨后,在三維坐標系下通過投影變換算法得到虛擬相機下對應的原始相機圖像Src Camera;在對該原始相機圖像進行3D到2D的投影變換就可以得到對應的矯正后的圖像Src img(u’,v’),該圖像可通過重構的方式恢復出虛擬相機下的原始圖像dst img。
從柱面相機模型可以看出柱面相機模型到針孔相機模型的變換公式如下:
如上公式中,其中u,v表示針孔相機平面主點(也叫像素坐標系中的坐標),fx、fy、cx、cy表示由于制造或安裝誤差產生的兩個坐標軸偏斜參數。該主點乘以圓柱坐標系下的半徑距離則可以得到相應的投影在柱面坐標上。
ρ來進行多項式近似,柱?相機2D->3D空間的過程中是不確定ρ的,當Tdst=Tsrc時,ρ取不同值時,從3D空間->側視/前視相機2D求得的虛擬相機的映射是相同的;若Tdst!=Tsrc, 得到的虛擬相機的圖像隨ρ的不同?變化。對于給定的柱?圖2D位置(u,v),在給定ρ的條件下,由如上公式可以計算dst camera柱面坐標系下的3D的相機坐標xc , yc, zc。
Φ用來進行多項式近似,Φ是入射光線和圖像平面的夾角,這個值和魚眼相機的參數很像。
接下來是相機變換過程,總結起來包括如下過程。
首先設置虛擬相機圖像分辨率為想要獲取的鳥瞰IPM圖的分辨率;其中虛擬相機圖像的主點為IPM圖分辨率的中心(一般假設不設置偏移)。其次,設置虛擬相機的fx、fy以及相機位置,其中高度設置為1,與fx、fy設置方式相對應,可以根據需求修改y的偏移量。
由此,則可以根據目標相機dst camera的外參(R,T)dst,把dst camera相機坐標(xc,yc,zc)dst轉化為觀測坐標系vcs坐標,隨后再結合src camera的外參(R,T)src,將VCS坐標轉化為src camera相機坐標(xc,yc,zc)src 。
總結
由于車載相機通常搭載不同的成像鏡頭,這種多元件的構造結構使得對于車載相機的折射關系分析不能簡單采用原來的針孔相機模型進行適配。特別是對于魚眼相機來說,由于需要擴大可視范圍,這種折射率所帶來的圖像畸變更是明顯。
本文我們重點介紹了適配于智能駕駛系統各類不同視覺傳感器的去畸變方法,主要通過投影方式將世界坐標系下的圖像投影到虛擬球面坐標系和虛擬柱面坐標系下,從而依靠2D—>3D的相機變換來去除畸變。部分算法在長期實踐基礎上相對于經典去畸變算法有所改進 。
審核編輯:劉清