1. 程式人生 > >相機標定原理介紹

相機標定原理介紹

一.總體原理:

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

[1]基本的座標系:

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

[2]一般來說,標定的過程分為兩個部分:

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

    P=K[Rt]

 

二.基本知識介紹及

1、攝像機模型

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);

2、相機座標系成像平面座標系

[1]以O點為原點建立攝像機座標系。點Q(X,Y,Z)為攝像機座標系空間中的一點,該點被光線投影到影象平面上的q(x,y,f)點。

影象平面與光軸z軸垂直,和投影中心距離為f (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)] 3、成像平面座標系畫素座標系

通過下面,可以把像平面座標系物理單位到畫素單位[即(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,v0 為影象中心。

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幾何相關。)

採用理想針孔模型,由於通過針孔的光線少,攝像機曝光太慢,在實際使用中均採用透鏡,可以使影象生成迅速,但代價是引入了畸變。

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

1、徑向畸變 對某些透鏡,光線在遠離透鏡中心的地方比靠近中心的地方更加彎曲,產生“筒形”或“魚眼”現象,稱為徑向畸變。

一般來講,成像儀中心的徑向畸變為0,越向邊緣移動,畸變越嚴重。不過徑向畸變可以通過下面的泰勒級數展開式來校正:

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

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

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

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

2、切向畸變

當成像儀被貼上在攝像機的時候,會存在一定的誤差,使得影象平面和透鏡不完全平行,從而產生切向畸變。也就是說,如果一個矩形被投影到成像儀上時,

可能會變成一個梯形。切向畸變可以通過如下公式來校正:

xcorrected = x + [ 2p1y + p2 (r2 + 2x2) ]

ycorrected = y + [ 2p2p1 (r2 + 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的形式。即它提供了用矩陣運算把二維、三維甚至高維空間中的一個點集從一個座標系變換到另一個座標系的有效方法。和上面的計算過程是對應的。