多相機座標轉換 相機標定及座標系變換

2021-10-12 18:06:41 字數 2116 閱讀 3911

slam系統需要多種感測器支援,通常市場上常見的就是camera感測器,例如單目攝像頭,雙目攝像頭,rgb-d相機等等。不論是深度相機,紅外相機,還是rgb相機,都是需要標定的,每乙個相機的內參都是固定的,相機標定也是產品落地必須做的乙個工程化步驟。多個相機需要對每個相機分別標定。

相機矯正上,比較常用的就是張正友標定法,在opencv和matlab都有配套的函式庫,本文章主要記錄mx學習相機標定的過程,及公式推導,有錯誤請指正。

首先相機是有個模型的,就是小學課本上的小孔成像模型。

圖1 針孔相機模型

focal length指相機焦距,物體在相機內成的是倒像,虛線是相機成的虛像。(為啥相機裡看到的像都是正著的?那是因為人工「智慧型」了)。

圖2 真空相機數學模型

圖2 是針孔相機的乙個數學模型。圖一圖二來自 的10,11兩頁。

從圖2上我們可以看到空間上一點p,到成像平面上一點p,存在三個座標系,哦,其實四個座標系,一般預設右手座標系。這是後期相機之間變換的乙個基礎。

通常稱,四個座標系分別為:世界座標系,相機座標系,影象座標系,畫素座標系。

從後向前講,畫素座標系表示的圖就是看到相機拍出來儲存下來的影象。一般情況下相機座標系光軸都在相機中心,所以成像的影象座標系原點也在中心,然後人為轉換到左上角原點的畫素座標系上。

圖3 畫素座標系與影象座標系

圖3中 u-v座標系表示看到相機儲存下來的**,x-y座標系是成像的位置座標系,可以認為是感測器實際成像區域,從圖中位置可以看出x-y座標系原點在u-v座標系(u0,v0)上,因此可得變換關係:

其中,dx,dy為相機的固有引數,針對某乙個型號感測器來說是固定的,分別表示在x,y方向上每個畫素位置佔多少公釐(mm/pixel),u0,v0一般指影象上的中心位置,可能有一點點偏差。轉換成齊次座標形式就是:

--公式(1)

再向前講影象座標系到相機座標系,還是看圖1圖2。根據針孔相機原理,相機座標系上物體在影象座標系上成立倒像,依據三角形相似可以得出:

轉換成矩陣形式:

--公式(2)

其中 是相機座標系某點(

)所在的深度值。

結合公式(1)和公式(2)得到畫素座標系與相機座標系之間的關係:

--公式(3)

其中 ,中間矩陣稱為相機的內參,一般認為是相機的固定引數。

最後講世界座標系和相機座標系的轉換,我理解的是外部世界是乙個大座標系,相機在這個座標系上乙個點,相機前面有另外乙個點,這個點假設

,在相機座標系上的座標是

,在世界座標系上的座標是

,想想一下上下左右前後的移動相機,就可以移動到這個點在兩個座標系中座標一樣,不需要複雜的操作,稱為剛性變換。

所以在固定相機位置的情況下,這個應該不會用,只有在多個感測器或者相機移動的時候,才會使用到這個座標系。那世界座標系和相機座標系的轉換,可以表示為:

--公式(4)

公式右側矩陣分別記為r,t,成為相機的外參。用於多個感測器之間的標定。

下面是對得到的影象畸變矯正,從相機座標系到畫素座標系上,由於實物是通過透鏡到達感測器感光器件上,以及由於透鏡的製造工藝等,都會引起得到的影象與實際有一點畸變,通常徑向畸變是因為透鏡的原因,切向畸變是由於模組安裝的問題。

圖4 切向畸變和徑向畸變

徑向畸變的數模模型一般是用主點周圍的泰勒級數展開,對大部分透鏡,只需要前兩項,畸變較大的可以用三項:

切向畸變量學模型:

其中 。

綜上畸變的引數一般有5個,opencv裡面一邊表示是

。合併起來就是:

已知以上公式,可以採集不同角度大量的資料,完成相機內參和畸變的矯正。

一般而言,我們採集到的都是畸變後的影象,如果要得到沒有畸變的影象,就需要利用上面的畸變公式推導對映關係,從而獲取真實影象。

多相機座標轉換 osg相機(基礎篇)

恆歌科技 在計算機的三維世界中,相機如同我們的眼睛,捕捉眼前的每一副畫面,反過來物體要能夠被相機在指定的距離和角度下 到,並通過螢幕畫素繪製出來。在這個過程中,物體的三維空間座標需要經過好幾層矩陣變換,最終轉換到二維平面座標,並通過畫素呈現在螢幕中。我們將這幾層矩陣變換過程簡稱為mvpw矩陣變換。下...

ARkit相機座標系轉換

arkit預設的座標系是右手系,但它的z軸是指向拍攝者的,也就是和相機鏡頭朝向相反,這給我們利用arkit獲取的資料進行後續處理產生了困難,因為像openmvs或openmvg中相機z軸朝向都是和相機拍攝方向相同 在openmvg的github上找到了這樣乙個issue,裡面的解決方法僅供參考 ca...

osg 相機座標系

先看這個例子 include include include include int main int argc,char argv return 0 1 程式執行結果 將相機設定到世界座標系 0,0,12 的位置,向下看牛。同時,牛繞著x軸自傳。2 解說 相機座標系,和opengl的相機座標系一致...