相機標定原理介紹(一)

http://blog.csdn.net/aptx704610875/article/details/48914043標定實例算法

 

一.整體原理:數組

攝像機標定(Camera calibration)簡單來講是從世界座標系換到圖像座標系的過程,也就是求最終的投影矩陣的過程。性能

[1]基本的座標系:atom

  • 世界座標系;
  • 相機座標系;
  • 成像平面座標系;
  • 像素座標系

[2]通常來講,標定的過程分爲兩個部分:spa

  • 第一步是從世界座標系轉爲相機座標系,這一步是三維點到三維點的轉換,包括R,t(相機外參,肯定了相機在某個三維空間中的位置和朝向)等參數;
  • 第二部是從相機座標系轉爲成像平面座標系(像素座標系),這一步是三維點到二維點的轉換,包括K(相機內參,是對相機物理特性的近似)等參數;
  • 投影矩陣 P=K [ R | t ]    是一個3×4矩陣,混合了內參和外參而成。
    P=K[Rt]

 

二.基本知識介紹及.net

一、攝像機模型3d

Pinhole Camera模型以下圖所示:
攝像機模型與標定 - 小企鵝 - 企鵝的博客
 
 是一個小孔成像的模型,其中:
  [1]O點表示camera centre,即相機的中心點,也是相機座標系的中心點;
  [2]z軸表示principal axis,即相機的主軸;
  [3]q點所在的平面表示image plane,即相機的像平面,也就是圖片座標系所在的二維平面;
  [4]O1點表示principal point,即主點,主軸與像平面相交的點;
  [5]O點到O1點的距離,也就是右邊圖中的f,即相機的焦距;
  [6]像平面上的x和y座標軸是與相機座標系上的X和Y座標軸互相平行的;
  [7]相機座標系是以X,Y,Z(大寫)三個軸組成的且原點在O點,度量值爲米(m);
  [8]像平面座標系是以x,y(小寫)兩個軸組成的且原點在O1點,度量值爲米(m);
  [9]像素座標系通常指圖片相對座標系,在這裏能夠認爲和像平面座標系在一個平面上,不過原點是在圖片的角上,並且度量值爲像素的個數(pixel);
 
二、相機座標系成像平面座標系
[1]以O點爲原點創建攝像機座標系。點Q(X,Y,Z)爲攝像機座標系空間中的一點,該點被光線投影到圖像平面上的q(x,y,f)點。
圖像平面與光軸z軸垂直,和投影中心距離爲(f是相機的焦距)。按照三角比例關係能夠得出:
x/f = X/Z       y/f = Y/Z   ,即 x = fX/Z       y = fY/Z
以上將座標爲(X,Y,Z)的Q點映射到投影平面上座標爲(x,y)的q點的過程稱做投影變換
上述Q點到q點的變換關係用3*3的矩陣可表示爲:q = MQ ,其中
  
    最終得出透視投影變換矩陣爲:
(1)
M稱爲攝像機的內參數矩陣單位均爲物理尺寸。
(X,Y,Z)(fX/Z,fY/Z)
(X,Y,Z)(fX/Z,fY/Z)
經過上面,能夠把相機座標系轉換到像圖像座標系的物理單位[即(X,Y,Z)(x,y)]
三、成像平面座標系像素座標系
經過下面,能夠把像平面座標系物理單位到像素單位[即(u,v)]
 
以圖像平面的左上角或左下角爲原點創建座標系。假設像平面座標系原點位於圖像左下角,水平向右爲u軸,垂直向上爲v軸,均以像素爲單位。
以圖像平面與光軸的交點O1 爲原點創建座標系,水平向右爲x軸,垂直向上爲y軸。 原點O1通常位於圖像中心處,O1在以像素爲單位的圖像座標系中的座標爲(u0, v0)。
像平面座標系和像素座標系雖然在同一個平面上,可是原點並非同一個。
攝像機模型與標定 - 小企鵝 - 企鵝的博客

設每一個像素的物理尺寸大小爲 dx * dy (mm) ( 因爲單個像素點投影在圖像平面上是矩形而不是正方形,所以可能dx != dy)
圖像平面上某點在成像平面座標系中的座標爲(x, y),在像素座標系中的座標爲(u, v),則兩者知足以下關係:[即(x, y)(u, v)]
u = x / dx + u0            v = y / dy +  v0
用齊次座標與矩陣形式表示爲:
攝像機模型與標定 - 小企鵝 - 企鵝的博客
 將等式兩邊都乘以 Q(X,Y,Z)座標中的Z可得:
攝像機模型與標定 - 小企鵝 - 企鵝的博客
 將攝像機座標系中的(1)式代入上式可得:
  則右邊第一個矩陣和第二個矩陣的乘積亦爲 攝像機的內參數矩陣(單位爲像素),相乘後可得:
(2)
 和(1)式相比,此 內參數矩陣中f/dx, f/dy,  cx/dx+u0, cy/dy+v0  的單位均爲像素。令 內參數矩陣爲K,則上式可寫成:
攝像機模型與標定 - 小企鵝 - 企鵝的博客 (3)
三.相機內參K(與棋盤所在空間的3D幾何相關)
 
在計算機視覺中,攝像機內參數矩陣
其中 爲攝像機的焦距,單位通常是mm;dx,dy 爲像元尺寸;u0,v爲圖像中心。
fx = f/dx, fy = f/dy,分別稱爲x軸和y軸上的歸一化焦距.
 
爲更好的理解,舉個實例:
現以NiKon D700相機爲例進行求解其內參數矩陣:
就算你們身邊沒有這款相機也無所謂,能夠在網上百度一下,很方便的就知道其一些參數——      
  焦距 f = 35mm   最高分辨率:4256×2832     傳感器尺寸:36.0×23.9 mm
根據以上定義能夠有:
u0= 4256/2 = 2128   v0= 2832/2 = 1416  dx = 36.0/4256   dy = 23.9/2832
fx = f/dx = 4137.8   fy = f/dy = 4147.3

分辨率能夠從顯示分辨率與圖像分辨率兩個方向來分類。
[1]顯示分辨率(屏幕分辨率)是屏幕圖像的精密度,是指顯示器所能顯示的像素有多少。因爲屏幕上的點、線和麪都是由像素組成的,
顯示器可顯示的像素越多,畫面就越精細,一樣的屏幕區域內能顯示的信息也越多,因此分辨率是個很是重要的性能指標之一。
能夠把整個圖像想象成是一個大型的棋盤,而分辨率的表示方式就是全部經線和緯線交叉點的數目。
顯示分辨率必定的狀況下,顯示屏越小圖像越清晰,反之,顯示屏大小固定時,顯示分辨率越高圖像越清晰。
[2]圖像分辨率則是單位英寸中所包含的像素點數,其定義更趨近於分辨率自己的定義。
 四.畸變參數(與點集如何畸變的2D幾何相關。)

採用理想針孔模型,因爲經過針孔的光線少,攝像機曝光太慢,在實際使用中均採用透鏡,可使圖像生成迅速,但代價是引入了畸變。code

有兩種畸變對投影圖像影響較大: 徑向畸變和切向畸變。blog

一、徑向畸變
對某些透鏡,光線在遠離透鏡中心的地方比靠近中心的地方更加彎曲,產生「筒形」或「魚眼」現象,稱爲徑向畸變。
通常來說,成像儀中心的徑向畸變爲0,越向邊緣移動,畸變越嚴重。不過徑向畸變能夠經過下面的泰勒級數展開式來校訂:

xcorrected = x(1+k1r2+k2r4+k3r6)圖片

ycorrected = y(1+k1r2+k2r4+k3r6)

這裏(x, y)是畸變點在成像儀上的原始位置,r爲該點距離成像儀中心的距離,xcorrected ycorrected )是校訂後的新位置。

對於通常的攝像機校訂,一般使用泰勒級數中的前兩項k1和k2就夠了;對畸變很大的攝像機,好比魚眼透鏡,可使用第三徑向畸變項k3

二、切向畸變

當成像儀被粘貼在攝像機的時候,會存在必定的偏差,使得圖像平面和透鏡不徹底平行,從而產生切向畸變。也就是說,若是一個矩形被投影到成像儀上時,
可能會變成一個梯形。切向畸變能夠經過以下公式來校訂:
xcorrected x + [ 2p1y + p(r+ 2x2) ]
ycorrected y + 2p2p(r+ 2y2) ]
這裏(x, y)是畸變點在成像儀上的原始位置,r爲該點距離成像儀中心的距離,xcorrected ycorrected )是校訂後的新位置。
 
 
五.攝像機的外參數

旋轉向量(大小爲1×3的矢量或旋轉矩陣3×3)和平移向量(tx,ty,tz)。

旋轉向量:旋轉向量是旋轉矩陣緊湊的變現形式,旋轉向量爲1×3的行矢量。

 r就是旋轉向量,旋轉向量的方向是旋轉軸 ,旋轉向量的模爲圍繞旋轉軸旋轉的角度。

經過上面的公式,咱們就能夠求解出旋轉矩陣R。一樣的已知旋轉矩陣,咱們也能夠經過下面的公式求解獲得旋轉向量:

六.思考
 
那爲何要作相機標定呢?
【1】進行攝像機標定的目的求出相機的內、外參數,以及畸變參數
【2】標定相機後一般是想作兩件事:一個是因爲每一個鏡頭的畸變程度各不相同,經過相機標定能夠校訂這種鏡頭畸變矯正畸變,生成矯正後的圖像;另外一個是根據得到的圖像重構三維場景
       攝像機標定過程,簡單的能夠簡單的描述爲經過標定板,以下圖,能夠獲得n個對應的世界座標三維點Xi和對應的圖像座標二維點xi,這些三維點到二維點的轉換均可以經過上面提到的相機內參K ,相機外參 R t,以及畸變參數 D ,通過一系列的矩陣變換獲得。
 

七.標定內幕過程的分析:

1.假設有N個角點和K個棋盤圖像(不一樣位置),須要多少個視場和角點才能提供足夠的約束來求解這些參數呢?

K個棋盤,能夠提供2NK的約束,即2NK的方程。(乘以2是由於每一個點都由x和y兩個座標值組成)

忽略每次的畸變,那麼咱們須要求解4個內參數和6K個外參數。(由於對於不一樣的視場,6個外參數是不一樣的)

那麼有解的前提是方程的總數應該大於等於未知參數的總數即2NK>=6K+4,或者寫成(N-3)K>=2。

爲了方便理解,下圖是一個3×3大小的棋盤,紅色圈標記出了它含有的內角點:

若是咱們令N=5,K=1,帶入到上述不等式,是知足不等式,這就是意味着咱們僅須要一個視場和帶有5個內角點的棋盤就能夠求解出10個參數了。其實否則,爲了描述投影視場的全部目標只須要4個點,即一次性在四個方向上延展正方形的邊,把它變成任意四邊形。所以,不管一個平面上檢測到多少個角點,咱們只能獲得4個有用的角點信息。如上圖所示是一個3×3大小的棋盤,有4個內角點。對於每個視場,咱們僅能給出4個有用的角點信息,那麼上述的公式中N就約束爲4,即公式變爲(4-3)K>=2,即K>=2。即要求解10個參數最少須要兩個視場。考慮到噪聲和數值穩定性要求,對大棋盤需求收集更多的圖像。爲了獲得高質量結果,至少須要10幅7×8或者更大棋盤的圖像(並且只在移動棋盤在不一樣圖像中足夠大以從視場圖像中獲得更加豐富的信息)。

2.數學是怎麼應用於標定的?

OpenCV選着那些可以很好工做於平面物體的方法。OpenCV中使用的求解焦距和偏移的算法是基於張的方法,但求解畸變參數則是另一個基於Brown的方法。

(1)首先咱們假定求解標定參數時,攝像機沒有畸變。對於每個棋盤視場,咱們獲得一個前面描述的單應性矩陣H,大小爲3×3。將H寫成列向量的形式,即H=[h1 h2 h3],每一個h是3×1向量,單應性矩陣H是物理變換(旋轉、平移)和相機內參數組成。咱們的目的就是分解這個H,可以從中分解出這些成分。


M是攝像機內參數矩陣,r1,r2是旋轉矢量3×1,t是平移矢量,縮放因子s,對應項相等獲得以下:

          λ=1/s

咱們知道R=[r1,r2,r3],r3消失,是由於咱們另Z=0。R是一個正交陣,即R的轉置等於R的逆。正交陣的每一個列向量是兩兩正交且單位化的(即模爲1),那麼r1和r2是相互正交。

正交的含義有兩個:兩個矢量的點積爲0,兩個矢量的長度相等。下面咱們就用這兩個約束來進行求解。


咱們將r1和r2帶入到上述的公式得:


令:

展開有:

 

其中M公式以下:

(注意:這裏的cx、Cy至關於上面的U0、V0

將M帶入公式,能夠獲得矩陣B的通用形式的封閉解:



這裏從新寫一下兩個約束:


因爲B是對稱真,那麼B能夠僅有對角線下半元素或者對角線上半元素表示,便可以有6個元素表示。咱們將通用形式展開,而且提取出B成分,那麼通用形式能夠寫成含有旋轉成分和含有B成分的6個元素組成的向量的點積(注意:是點積,不是兩個矩陣相乘),以下:


從上述公式,咱們已知單應性矩陣H,那麼它其中的每個元素咱們都是已知的,那麼上述Bij是咱們要求解的值,

咱們能夠組合兩個約束爲以下的形式:

每個視場咱們能夠獲得形如上面描述的2個公式(上述黃色部分),那麼對於K的視場,咱們能夠獲得2K個這樣的公式。

咱們堆積這些方程有:

b是要求解未知數矢量大小爲6×1,V是2K×6的矩陣,若是K>=2,那麼方程有解b=[B11,B12,B22,B13,B23,B33]T。攝像機內參數能夠從B矩陣的封閉解中直接獲得

外參數(旋轉和平移)能夠由單應性條件計算獲得:

上述公式中,λ,M,H,都是求解的獲得的做爲已知量,(r3=r1×r2,這是由於r1,r2,r3兩兩正交)。

須要當心的是,當咱們使用真實的數據求解時,將計算獲得的r向量放在一塊兒(R=(r1,r2,r3)),咱們並不能獲得精確的旋轉矩陣R,使得R爲正交陣。

爲了解決這個問題,咱們常使用強制的方法,即對R進行奇異值分解,R=UDVT,U,V爲正交陣,D爲對角陣,若是R是正交陣,那麼奇異值分解後的對角陣D是單位陣,那麼咱們將單位陣I代替對角陣D,進而重構出知足正交條件的R.

(2)在前面的工做中,咱們老是先忽略透鏡畸變,而後求解獲得的系統。若是針孔模型是完美的,令(xp,yp)爲點的位置,令(xd,yd)爲畸變的位置,那麼有:

經過下面的替換,能夠獲得沒有畸變的標定結果:

就像先前描述的那樣,上述5個畸變參數:k1,k2,k3,p1,p2,須要3個角點構成的6組方程就能夠求解。咱們猜想一下,咱們經過前面的計算已經求解出相機的內參數:fx,fy,cx,cy,棋盤平面上角點的座標爲世界座標,其中X,Y咱們能夠理解爲在其平面上的座標,Z是一個尺度,由於咱們知道求解單應性矩陣H,也是一個尺度,因此具體怎麼控制,先不用管,咱們就能夠經過上述公式一求解出xp和yp,xd,yd就是成像儀上角點的真實位置,那麼就能夠由xp,yp和xd,yd的點對,帶入到上述的公式二,求能夠求解出5個畸變係數。


備註
齊次座標
就是將一個本來是n維的向量用一個n+1維向量來表示。
許多圖形應用涉及到幾何變換,主要包括平移、旋轉、縮放。以矩陣表達式來計算這些變換時,平移是矩陣相加,旋轉和縮放則是矩陣相乘,綜合起來能夠表示爲x=R*X+t (
注:由於習慣的緣由,實際使用時通常使用變化矩陣左乘向量)( R 旋轉縮放矩陣, t 爲平移矩陣, X 爲原向量, x 爲變換後的向量)。
引入齊次座標的目的主要是合併矩陣運算中的乘法和加法,表示爲x=P*X的形式。即它提供了用矩陣運算把二維、三維甚至高維空間中的一個點集從一個座標系變換到另外一個座標系的有效方法。和上面的計算過程是對應的。
相關文章
相關標籤/搜索