【入門】(二)相機標定、矩陣求解、相機位姿勢估計

目錄

目錄

一、相機模型、內參、外參,畸變以及相機標定

二、基本矩陣與對極約束

三、單應矩陣

四、相機姿勢估計


一、相機模型、內參、外參,畸變以及相機標定

1、座標系轉換

(1)座標系概念

世界座標系:與相機無關,獨立的座標系

世界座標系(world coordinate)(Xw,Yw,Zw)也稱爲測量座標系,是一個三維直角座標系,以其爲基準可以描述相機和待測物體的空間位置。世界座標系的位置可以根據實際情況自由確定。

相機座標系:與相機有關的座標系,其中X,Y與成像平面平行,原點爲光心,Z爲光軸方向

相機座標系(camera coordinate)(Xc,Yc,Zc)也是一個三維直角座標系,原點位於鏡頭光心處,x、y軸分別與相面的兩邊平行,z軸爲鏡頭光軸,與像平面垂直。

圖像座標系:平面二維座標系,與成像平面平行,原點在圖像中心。

像素座標系:以像素爲單位,原點在圖像左上角。

(2)座標系之間的轉換

世界座標系與相機座標系:

反映相機在世界座標系中的位置,也可以叫做外參,用一個旋轉R和平移T矩陣表示。其轉換關係如下所示:

其中R爲3*3的旋轉矩陣,t爲3*1的平移矢量,(xc,yc,zc,1)T爲相機座標系的齊次座標,(xw,yw,zw,1)T爲世界座標系的齊次座標。

推導過程:

 

設Pc是空間點P在相機座標系座標,Pw是其在世界座標系下的座標,則Pc和Pw之間的座標變換可以用一個旋轉矩陣R和一個平移向量t表示,如下所示

Pc=PwR+t,座標矩陣表示如下所示,R爲3*3的旋轉矩陣,t爲3*1的平移矩陣,分別表示在x,y,z三個方向上的旋轉平移

\begin{bmatrix} Xc\\ Yc\\ Zc \end{bmatrix}=\begin{bmatrix} R11 & R12 & R13\\ R21& R22& R23\\ R31& R32& R33 \end{bmatrix} \begin{bmatrix} Xw\\ Yw\\ Zw \end{bmatrix}+\begin{bmatrix} t1\\ t2\\ t3 \end{bmatrix}

爲了計算方便,改爲齊次座標表示如下所示

\begin{bmatrix} Xc\\ Yc\\ Zc\\ 1 \end{bmatrix}=\begin{bmatrix} Xw\\ Yw\\ Zw\\ 1 \end{bmatrix} \begin{bmatrix} R11 & R12& R13 & t1\\ R 21& R22& R23 &t2 \\ R31& R32& R33& t3\\ 0& 0& 0 & 1 \end{bmatrix}=\begin{bmatrix} R &t \\ 0^{T}& 1 \end{bmatrix} \begin{bmatrix} Xw\\ Yw\\ Zw\\ 1 \end{bmatrix}

三維相機座標系與二維圖像座標系的轉換:利用小孔成像原理。

相機針孔成像模型如下所示:

相機座標系與圖像座標系轉換爲空間點P(Xc,Yc,Zc)和其像點P(x,y)的轉換,假設空間在P在相機座標系中的座標爲[Xc,Yc,Zc]^{T},其成像點p在成像平面上的座標爲[x,y]^{T},那麼兩者可以用如下公式表示

s\begin{bmatrix} x\\ y\\ 1 \end{bmatrix}=\begin{bmatrix} f &0 &0 &0\\ 0 & f &0&0 \\ 0&0 &1&0 \end{bmatrix} \begin{bmatrix} Xc\\ Yc\\ Zc\\ 1 \end{bmatrix},其中f爲相機焦距(光心到圖像平面的距離),s爲比例因子(s不爲0),公式中爲齊次座標表示。

推導過程如下:

P在相機座標系中的座標爲[Xc,Yc,Zc]^{T},其成像點p在成像平面上的座標爲[x,y]^{T},像點p在相機座標系上的座標爲[x',y',z']^{T},其中z'=f,x‘=x,y'=y。

根據小孔成像原理,有如下相似三角形:

根據三角形的相似關係(圖中),有如下公式:

\frac{Zc}{f}=\frac{Xc}{x'}=\frac{Yc}{y'},公式整理可以得到\left\{\begin{matrix} x'=f\frac{Xc}{Zc}\\ y'=f\frac{Yc}{Zc} \\ z'=f \end{matrix}\right.,即有\left\{\begin{matrix} x=f\frac{Xc}{Zc}\\ y=f\frac{Yc}{Zc}\end{matrix}\right.擴展座標的維度)將其線性化,則有如下表達式

\begin{bmatrix} \breve{x}\\ \breve{y}\\ \breve{z} \end{bmatrix}=\begin{bmatrix} f & 0& 0& 0\\ 0& f & 0& 0\\ 0& 0& 1& 0\\ \end{bmatrix} \begin{bmatrix} Xc\\ Yc\\ Zc\\ 1 \end{bmatrix}=\begin{bmatrix} fXc\\ fYc\\ Zc \end{bmatrix}=\begin{bmatrix} xZc\\ yZc\\ Zc \end{bmatrix},其中\left\{\begin{matrix} x=\breve{x}/Zc\\ y=\breve{y}/Zc\\ Zc\neq 0 \end{matrix}\right.,則從相機座標到平面座標的轉換關係如下:

Zc\begin{bmatrix} x\\ y\\ 1 \end{bmatrix}=\begin{bmatrix} f &0 &0 &0\\ 0 & f &0&0 \\ 0&0 &1&0 \end{bmatrix} \begin{bmatrix} Xc\\ Yc\\ Zc\\ 1 \end{bmatrix}.

圖像座標系與像素座標系\Rightarrow像素座標系到相機座標系

æ­¤å¤è¾å¥å¾ççæè¿°

二維像素座標系和二維圖像座標系之間有一個平移和縮放變換。推導過程如下

設點p圖像座標爲p(x,y),像素座標爲(u,v),像素座標原點在左上角,u軸水平向左,v軸豎直向下,圖像座標原點在圖像中心點,其之間有一個平移(cx,cy),像素是個矩形塊,設其在x,y方向上長度分別爲\alpha ,\beta,那麼從圖像座標系變爲像素座標系爲x方向縮放\alpha倍,豎直方向縮放\beta倍,且平移(cx,cy),有如下公式

\left\{\begin{matrix} u=\alpha x+c_{x}\\ v=\beta y+c_{y} \end{matrix}\right.= \left\{\begin{matrix} u=\alpha f\frac{Xc}{Zc}+c_{x}\\ v=\beta f\frac{Yc}{Zc}+c_{y} \end{matrix}\right.,則有

\begin{bmatrix} u\\ v\\ 1 \end{bmatrix}=\frac{1}{Zc}\begin{bmatrix} f_{x}&0&c_{x}\\ 0&f_{y}&c_{y}\\ 0&0&1 \end{bmatrix} \begin{bmatrix} Xc\\ Yc\\ Zc \end{bmatrix}

其中f_{x}=\alpha f,f_{y}=\beta f,分別稱爲u軸和v軸上的歸一化焦距,f是相機的焦距,\alpha(dX)和\beta(dY)分別表示傳感器u軸和v軸上單位像素的尺寸大小,單位爲mm/pixel,現代技術下一般二者相等cx和cy則表示的是光學中心,即攝像機光軸與圖像平面的交點,通常位於圖像中心處,故其值常取分辨率的一半。

其中K=\begin{bmatrix} f_{x}&0&c_{x}\\ 0&f_{y}&c_{y}\\ 0&0&1 \end{bmatrix}爲相機內參

世界座標系到像素座標系

\begin{bmatrix} u\\ v\\ 1 \end{bmatrix}=\frac{1}{Zc}\begin{bmatrix} f_{x}&0&c_{x}&0\\ 0&f_{y}&c_{y}&0\\ 0&0&1&0 \end{bmatrix} \begin{bmatrix} Xc\\ Yc\\ Zc \\1\end{bmatrix}=\frac{1}{Zc}\begin{bmatrix} f_{x}&0&c_{x}&0\\ 0&f_{y}&c_{y}&0\\ 0&0&1&0 \end{bmatrix}\begin{bmatrix} R&t \\ 0^{T}& 1 \end{bmatrix} \begin{bmatrix} Xw\\ Yw\\ Zw \\1\end{bmatrix}

其中\begin{bmatrix} R &t \\ 0^{T}& 1 \end{bmatrix}相機外參,注意R,t爲世界座標到相機座標的變換Pc=RPw+t;

2、相機畸變參數

畸變參數:

畸變(distortion)是對直線投影(rectilinear projection)的一種偏移。

簡單來說直線投影是場景內的一條直線投影到圖片上也保持爲一條直線。

畸變簡單來說就是一條直線投影到圖片上不能保持爲一條直線了,這是一種光學畸變(optical aberration),可能由於攝像機鏡頭原因。

徑向畸變與切向畸變

1、徑向畸變來自於透鏡形狀 ,由於光線透過鏡頭的彎曲程度造成,在遠離透鏡中心的地方比靠近中心的地方更加彎曲,對於徑向畸變,成像儀中心(光學中心)的畸變爲0,隨着向邊緣移動,畸變越來越嚴重。一般包括枕形畸變、桶形畸變。

2、切向畸變來自於整個攝像機的組裝過程,是由於透鏡本身與成像平面不平行而產生的。

考慮畸變的情況:考慮較爲明顯的徑向畸變和切向畸變

徑向畸變矯正參數:k1,k2,k3,切向畸變矯正參數:p1,p2,一共需要考慮5個畸變參數。

反畸變計算參考:http://www.cnblogs.com/mafuqiang/p/8134617.html

3、相機標定

標定步驟:

1、打印一張棋盤格,把它貼在一個平面上,作爲標定物。 
2、通過調整標定物或攝像機的方向,爲標定物拍攝一些不同方向的照片。 
3、從照片中提取棋盤格角點。 
4、估算理想無畸變的情況下,五個內參和六個外參。 
5、應用最小二乘法估算實際存在徑向畸變下的畸變係數。 
6、極大似然法,優化估計,提升估計精度。

二、基本矩陣與對極約束

立體幾何中有以下問題:

1、已知一幅圖像中一點,如何尋找另一幅圖像中這個點的對應點(根據是否知道相機的相對位置,此問題求解方式不同)

2、已知兩幅圖像中兩點是對應關係,如何求解兩相機的相對位置和姿態

3、已知多幅圖像中同一3D點的對應點,如何求解該3D點的3D座標

對於問題2,可以用對極幾何約束,基本矩陣求解,推導與介紹如下所示

基本概念:

立體成像的基本幾何就是對極幾何。下圖是最經典的對極幾何示意圖。

O1和O2爲兩個相機(也有可能是一個相機在不同時刻的位置)的主點,P爲空間中一個物點,兩個相對的白色平面是像面(嚴格按照光路應該是在O1 O2點的後方,與P點相反方向,CV中默認採用這種往前畫的方式節省空間)。p1和p2是P點在像面上的對應點,e1 e2爲像面和O1 O2的交點。O1O2爲基線,也被稱作相機的移動方向。有幾個概念如下:

--基線:兩個相機中心的連線O1O2

--對極點:e1,e2爲對極點,基線與兩個成像平面的角點

--對極平面:任何過基線的平面被稱爲對極平面,三維點P,像點p1,p2,相機中心點O1O2五個點一定在同一個對極平面上,當單位點P變化時,對極平面繞着基線旋轉,形成對極平面束

--對極線:對極平面與成像平面的交線,如圖e1p1,e2p2,所有的對極線相交於對極點

對極平面約束:表達了像點x和對極線的對應關係

相機1的像點p1在成像平面上的對應點p2一定在對極線l'上,因此存在一個像點p1到另一圖像上的對極線l'的對應關係。基礎矩陣F表示的就是這種從點到直線的映射。

基本矩陣表達式推導:

假設像點P在相機1座標爲p(x,y,z),在相機2座標爲p'(x’,y',z'),假設相機1通過旋轉平移矩陣R,t可以得到相機2,那麼

p'=pR+t.

由共面幾何約束,可以得到

\underset{O2P}{\rightarrow}\cdot\left ( \underset{O1O2}{\rightarrow} \times \underset{O1P}{\rightarrow} \right )=0,

將座標點同一到相機座標2,則有

\underset{O2P}{\rightarrow}=p';\underset{O2O1}{\rightarrow}=t;\underset{O1P}{\rightarrow}=p'-t=Rp+t-t=Rp,代入上式則有

(p')^{T}\cdot t_{x}Rp=0(1),其中t_{x}爲t的反對稱矩陣(將向量叉乘表達方式變換爲矩陣點乘),t_{x}=\begin{bmatrix} 0 & -t3& t2\\ t3&0 &-t1 \\ -t2 & t1 & 0 \end{bmatrix}

假設相機1內參爲k,相機2內參爲k',將相機座標變爲像素座標表達,對應像點分別爲m,m',由於

zm=kp,z‘m'=k'p',其中z,z'爲比例因子,代入上式(1),則有

z'(m')^{T}(k')^{-T}\cdot [R][t_{x}] zmk^{-1}=zz'(m')^{T}(k')^{-T} [R][t_{x}] mk^{-1}=0,

則有

(m')^{T}Fm=(m')^{T}(k')^{-T} Ek^{-1}m=(m')^{T}(k')^{-T} [R][t_{x}]k^{-1}m=0

其中F=(k')^{-T} [R][t_{x}] k^{-1}爲基礎矩陣,E= [R][t_{x}]爲本質矩陣

從基礎矩陣到相機位姿

相機的相對位姿可以通過特徵點匹配估計出來:

  • 提取兩幅圖像的特徵點,並進行匹配
  • 利用匹配得像點計算兩視圖的基礎矩陣F
  • 已知相機內參,從基礎矩陣F中分解得到相機的選擇矩陣R和平移向量t

基礎矩陣求解

加上有像點p1(u1,v1),像點p1(u2,v2).則根據對極約束,有

p1F(p2)^{T}=0表達爲矩陣形式如下

\begin{bmatrix} u1&v1&1\\ \end{bmatrix}F\begin{bmatrix} u2\\ v2\\ 1 \end{bmatrix}=0,其中F=\begin{bmatrix} f11 & f12 &f13 \\ f21 & f22 & f23\\ f31& f32&f33 \end{bmatrix}爲3*3的矩陣,有9個未知元素。然而,上面的公式中使用的齊次座標,齊次座標在相差一個常數因子下是相等,F也就只有8個未知元素,也就是說,只需要8對匹配的點對就可以求解出兩視圖的基礎矩陣F。具體求解過程參考:https://www.cnblogs.com/wangguchangqing/p/8214032.html

opencv中使用函數findFundamentalMat(),即可解決

三、單應矩陣

基本概念:

單應(Homography)是射影幾何中的概念,又稱爲射影變換。它把一個射影平面上的點(三維齊次矢量)映射到另一個射影平面上,並且把直線映射爲直線,具有保線性質。總的來說,單應是關於三維齊次矢量的一種線性變換,可以用一個3×3的非奇異矩陣H表示。

\begin{bmatrix} u_{1}\\ v_{1}\\ 1 \end{bmatrix}=H\begin{bmatrix} u_{2}\\ v_{2}\\ 1 \end{bmatrix},

其中,(u1,v1,1)^{T}表示圖像1中的像點,(u2,v2,1)^{T}是圖像2中的像點,也就是可以通過單應矩陣H將圖像2變換到圖像1.

單應矩陣表達式推導

假設在某平面上點X,用兩個相機拍攝投影點分別爲m,m',平面在相機座標1上單位發現了爲N,則平面表達式如下

N^{T}X1=d,其中X1爲點X在相機座標1的座標,相機2下的座標可以表達爲X2=X1R+t,則有如下表達式

X2=RX1+t=(R\cdot \frac{1}{N^{T}}d+t)*1=(R\cdot \frac{1}{N^{T}}d+t)*\frac{N^{T}X1}{d}=(R+\frac{N^{T}}{d}t)X1,

將相機座標轉爲像素座標,假設相機內參都爲k則有

m'=k(R+\frac{N^{T}}{d}t)k^{-1}m,其中H=k(R+\frac{N^{T}}{d}t)k^{-1}就是單應矩陣。

單應矩陣求解

單應性變換的目標是通過給定的幾個點(通常是4對點)來得到單應性矩陣。具體推導過程參考:

https://www.zhihu.com/question/23310855

在opencv中用findHomography()求單應矩陣。

單應矩陣與基本矩陣的區別

1、兩圖像間的對極約束和場景的結構無關,也就是說對極約束對於任意場景結構的兩幅圖像都是成立的,不能給出兩幅圖像上的像點的一一對應關係,只能給出點對應的必要條件,另一幅圖像上與圖像上對應的像點在位於對應的對極線上。基礎矩陣F描述的實際是一種點和直線的映射關係,而不是一種點對點的約束關係,並不能給出另一個點的確切位置。

2、平面間的單應,並不像對極約束完全不需要場景的結構信息,它對場景的結構有了要求:場景的點必須在同一個平面上,因此單應矩陣H也就能夠對兩圖像上對應點的提供更多的約束,知道了某點在一幅圖像的像點位置後,可以通過單應矩陣,求得其在另一幅圖像中像點的確切位置。

參考:https://www.cnblogs.com/wangguchangqing/p/8287585.html

相機只有旋轉沒有平移下的單應:

m'=kRk^{-1}m,H=kRk^{-1},可由H分解得到旋轉矩陣,此時基本矩陣F=(k')^{-T} [R][t_{x}] k^{-1}=0,無法分解得到旋轉矩陣。

總結:

  • 在相機只有旋轉而沒有平移的情況下,兩視圖的對極約束就不再適用,這時可以使用單應矩陣HH來描述兩個圖像像點的對應關係。
  • 在這種情況下,兩圖像點的匹配不依賴於三維點的深度信息,無法使用三角法重構出三維點在世界座標系中的三維座標。

基本矩陣,本質矩陣,單應矩陣的求解總結

8點法求基本矩陣,5點法求本質矩陣,4點法求單應矩陣。

旋轉平移矩陣:本質矩陣的svd分解,與真實相差一個尺度因子。

參考:https://blog.csdn.net/xholes/article/details/79935700

關於幾個矩陣的區別,參考知乎“理工男”回答,https://www.zhihu.com/question/27581884我覺得很通俗易懂

四、相機姿勢估計

相機位姿的三種方法:

1. 2D-2D: 特徵點在同一平面或近平面時,通過Homograpy Matrix可以恢復相機位姿;當特徵點的深度明顯不同時則需要利用對極幾何,通過求得Fundamental Matrix或者Essential Matrix來恢復相機位姿。

2.2D-3D: 通過已知的三維點,以及這些點與給定特徵點的關係,恢復相機位姿,常見的是PnP。

3.3D-3D: 使用ICP對前後兩幀各自的三維點進行匹配,得到兩幀間的相對位姿。

從基本矩陣中恢復出相機旋轉平移矩陣R,t

1、採用8點求出基本矩陣F

2、標定相機內參,得到基礎矩陣E,理論上旋轉平移矩陣有6個自由度,但是由於尺度等價,變爲5個自由度

3、SVD分解,得到旋轉平移矩陣R,t,與真實值相差一個尺度因子

SVD分解推導:

參考:https://blog.csdn.net/kokerf/article/details/72911561詳細推導

參考https://www.cnblogs.com/houkai/p/6665506.html

1992年,Hartley提出了從本質矩陣在相差一個尺度因子的情況下恢復出攝像機投影矩陣的四個可能解,然後從四個解中選擇一個正確解的方法。

假設S=[t_{x}],本質矩陣E=[t_{x}]R=SR,有如下定理:

從本質矩陣中恢復出的相機位姿R爲真實旋轉矩陣,但是t爲單位向量,與真實的值相差一個比例因子,在opencv3中用函數recoverPose求解得到。

注意:

“計算基礎矩陣或本質矩陣”適用於特徵點不共面的情況;右側“計算單應矩陣”適用於特徵點共面的情況(比如牆壁、地面、航拍等場合)。在實際應用中,如果事先無法知道特徵點是否共面,則應當同時計算本質矩陣和單應矩陣,選擇重投影誤差比較小的那個作爲最終的運動估計矩陣

關於平移矩陣的平移尺度解釋https://blog.csdn.net/heyijia0327/article/details/50758944

2D-2D相機位姿估計的問題:

  • 尺度不確定性
    用上面的方法估計出的相機平移向量t的值並沒有單位,也就是說相機移動的距離只有相對值,沒有絕對值。這是單目相機固有的尺度不確定性問題,無法從根本上解決。因此單目SLAM中一般把初始化後的t歸一化,即把初始化時移動的距離默認爲1,此後的距離都以這個1爲單位。

  • 初始化的純旋轉問題
    單目初始化不能只有旋轉,必須要有一定程度的平移,否則由於t趨近於0,導致無從求解R或者誤差非常大。

  • 多於8對點的情況
    如果匹配的點對數多於8(大多數情況都是這樣),可以考慮充分利用這些點,而不是隻從中選擇8對用於計算。推薦的算法是隨機採樣一致性(Random Sample Consensus,RANSAC),該算法可以有效地避免錯誤數據對整體結果的影響。在代碼中,只需要將findFundamentalMat函數的第三個參數從CV_FM_8POINT換成CV_FM_RANSAC就可以了。

鏈接:https://www.jianshu.com/p/fbf56587a268

3D-2D相機估計(PnP問題)

假設:如果一直2d像素點和其對應的3d空間點,那麼可以求解出相機所在的空間位置,這就是pnp問題。

當3d-2d匹配的點對大於3時,可以相機空間位姿。

理解參考:PnP單目相姿估計

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章