相機標定(Camera calibration)


簡單介紹

攝像機標定(Camera calibration)簡單來說是從世界坐標系換到圖像坐標系的過程。也就是求終於的投影矩陣 P 的過程,以下相關的部分主要參考UIUC的計算機視覺的課件(網址Spring 2016 CS543 / ECE549 Computer vision)。

基本的坐標系:

  • 世界坐標系(world coordinate system)。
  • 相機坐標系(camera coordinate system);
  • 圖像坐標系(image coordinate system);

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

  • 第一步是從世界坐標系轉換為相機坐標系,這一步是三維點到三維點的轉換。包含 R t (相機外參)等參數;
  • 第二部是從相機坐標系轉為圖像坐標系。這一步是三維點到二維點的轉換,包含 K (相機內參)等參數;

相機坐標系 轉換到 圖像坐標系

坐標系介紹

相機到圖片

如上圖所看到的(圖片來自UIUC計算機視覺課件)。是一個小孔成像的模型,當中:

  • C 點表示camera centre,即相機的中心點,也是相機坐標系的中心點;
  • Z 軸表示principal axis,即相機的主軸;
  • p 點所在的平面表示image plane,即相機的像平面。也就是圖片坐標系所在的二維平面。
  • p 點表示principal point。即主點。主軸與像平面相交的點;
  • C 點到 p 點的距離。也就是右邊圖中的 f 表示focal length,即相機的焦距;
  • 像平面上的 x y 坐標軸是與相機坐標系上的 X Y 坐標軸互相平行的。
  • 相機坐標系是以 X Y Z (大寫)三個軸組成的且原點在 C 點。度量值為米(m);
  • 像平面坐標系是以 x y (小寫)兩個軸組成的且原點在 p 點,度量值為米(m);
  • 圖像坐標系一般指圖片相對坐標系,在這里能夠覺得和像平面坐標系在一個平面上,只是原點是在圖片的角上,並且度量值為像素的個數(pixel)。

相機 轉換到 像平面

知道上面的簡單知識后,假設知道相機坐標系中的一個點 X (現實三維世界中的點)。在像平面坐標系相應的點是 x ,要求求從相機坐標系轉為像平面坐標系的轉換,也就是從 X 點的 (X,Y,Z) 通過一定的轉換變為 x 點的 (x,y) 。注意: (X,Y,Z) (大寫)是在相機坐標系。而 (x,y) (小寫)是在像平面坐標系(還不是圖像坐標系。原點不同。

)觀察第二個圖,非常簡單的能夠得到這個轉換:

x=fX/Z
y=fY/Z
(X,Y,Z)(fX/Z,fY/Z)

能夠表示為矩陣計算為(在這里用的是齊次坐標的表示方式,關於齊次坐標文章最以下有介紹):

XYZ1fXfYZ=ff1000XYZ1

能夠簡寫為( P 就是所謂的投影矩陣,當然如今還不完整):

x=PX

增加偏移量

通過上面,能夠把相機坐標系轉換到像平面坐標系,可是像平面坐標系和圖像坐標系盡管在同一個平面上,可是原點並非同一個,而目標是要轉換到圖像坐標系下。所以還須要一步操作。例如以下圖:

這里寫圖片描寫敘述

如上圖所看到的(圖片來自UIUC計算機視覺課件),當中主點 p 是像平面坐標系的原點,但在圖像坐標系中的位置為 (px,py) ,在這里。圖形坐標系的原點是圖片的左下角,所以能夠得到:

(X,Y,Z)(fX/Z+px,fY/Z+py)

相當於在上面的基礎上加了一個p點坐標的偏移量,同一時候能夠表示為矩陣計算為(在這里用的是齊次坐標的表示方式):

XYZ1fX+ZpxfY+ZpyZ=ffpxpy1000XYZ1

整理一下得:

fX+ZpxfY+ZpyZ=ffpxpy1111000XYZ1

所以最后能夠得到 K 。也就是平時所說的相機內參(Intrinsic parameters):

K=ffpxpy1

以及投影矩陣 P (在這里能夠覺得旋轉矩陣 R 為單位矩陣 I 。平移矩陣 t 都為0,這也是為什么要拆成這樣的方式),為:
P=K[I0]

像素坐標

前面也提到了在圖像坐標系中用的不是現實生活中的m來度量。而是用的 pixel 的個數,所以在上面轉換到圖像坐標系中還有個問題。就是坐標的表示還是m,並沒有轉換到像素坐標系統;在這里須要引入一個新概念就是:

  • mx 表示在水平方向1m的長度包含的像素的個數;
  • my 表示在豎直方向1m的長度包含的像素的個數;

可能有人奇怪為啥不是一個值,還須要分別指定 mx my 呀,這是由於通過上面能夠得到一個像素點的大小(m度量)為:

1mx×1my

可是須要說明的是像素並不一定是一個正方形。有時候可能也是一個矩形。所以要分別指定。
所以能夠把上面相機內參 K 變為更新為。轉換公式把 K 替換就可以,其它不變:

K=mxmy1ffpxpy1=αxαyβxβy1

一般來說。在使用相機內參K計算坐標系轉換時,提供的都是已經變換后的值;比如會提供 fx fy cx cy 四個值代表相機內參 K ,事實上 fx 就是這里的 αx ,同理 fy αy cx βx cy βy

世界坐標系 轉換到 圖像坐標系

坐標系介紹

如上圖所看到的(圖片來自UIUC計算機視覺課件)。從世界坐標系轉換到相機坐標系是三維空間到三維空間的變換。一般來說須要一個平移操作和一個旋轉操作就能夠完畢這個轉換。用公式表演示樣例如以下(能夠理解為世界坐標系原點先平移到相機坐標系的位置然后在做一次坐標系旋轉,使坐標軸對齊。):

X˜cam=R(X˜C˜)

  • R 表示旋轉矩陣;
  • X˜ 表示 X 點在世界坐標系中的位置;
  • C˜ 表示相機原點 C 在世界坐標系中的位置;
  • X˜cam 表示 X 點在相機坐標系中的位置;

世界 轉換到 相機

依據上面的公式能夠得到從一個三維點從世界坐標系轉換到相機坐標的變換公式例如以下(也是用的齊次坐標的表示方式):

Xcam=(X˜cam1)=[R0RC˜1](X˜1)=[R0RC˜1]X

世界 轉換到 圖像

依據上面的討論知道了如何從世界坐標系轉換到相機坐標系(平移和旋轉)以及從相機坐標系轉換到圖像坐標系(相機內參變換),所以帶入上面的矩陣計算,能夠得到:

x=K[I0]Xcam=K[RRC˜]X

這樣就得到了終於的投影矩陣 P

P=K[Rt]

當中:

t=RC˜

在這里, K 一般稱為相機內參(intrinsic parameters),描寫敘述了相機的內部參數,包含焦距 f 、主點 p 的位置、以及像素與真實環境的大小比例等。這個是固有屬性,是提供好的。 R t 稱為相機外參(extrinsic parameters)。 R 在這里是旋轉矩陣。能夠轉換為三維的旋轉向量。分別表示繞 x y z 三個軸的旋轉角度。 t 眼下就是一個平移向量,分別表示在 x y z 三個方向上的平移量。

畸變參數(distortion parameters)

在幾何光學和陰極射線管(CRT)顯示中。畸變(distortion) 是對直線投影(rectilinear projection)的一種偏移。

簡單來說直線投影是場景內的一條直線投影到圖片上也保持為一條直線。那畸變簡單來說就是一條直線投影到圖片上不能保持為一條直線了。這是一種光學畸變(optical aberration)。可能由於攝像機鏡頭的原因,這里不討論。有興趣的能夠查閱光學畸變的相關的資料。
畸變一般能夠分為兩大類,包含徑向畸變和切向畸變。

基本的一般徑向畸變有時也會有輕微的切向畸變。

徑向畸變(Radial distortion

徑向畸變的效應有三種。一種是桶形畸變(barrel distortion),還有一種是枕形畸變(pincushion distortion)。還有一種是兩種的結合叫做胡子畸變(mustache distortion),從圖片中能夠非常easy看出差別。詳細見下圖(圖片來自wikipedia):

徑向畸變能夠用例如以下公式修正:

xcorr=xdis(1+k1r2+k2r4+k3r6)

ycorr=ydis(1+k1r2+k2r4+k3r6)

切向畸變(tangential distortion

切向畸變是由於透鏡與成像平面不嚴格的平行,其能夠用例如以下公式修正:

xcorr=xdis+[2p1xy+p2(r2+2x2)]

ycorr=ydis+[p1(r2+2y2)+2p2xy]

當中:

  • xdis ydis 表示有畸變的坐標;
  • xcorr ycorr 表示修復后的坐標;
  • k1 k2 k3 表示徑向畸變參數;
  • p1 p2 表示切向畸變參數。

所以終於得到5個畸變參數:

D=(k1,k2,p1,p2,k3)

相機標定

那么能夠利用這些來進行終於的任務相機標定。簡單的過程能夠描寫敘述為通過標定板。例如以下圖。能夠得到n個相應的世界坐標三維點 Xi 和相應的圖像坐標二維點 xi ,這些三維點到二維點的轉換都能夠通過上面提到的相機內參 K 。相機外參 R t ,以及畸變參數 D 經過一系列的矩陣變換得到。

如今就用這些相應關系來求解這些相機參數。最后就是用線性方法求解方程式。這里就不做討論了。

那為什么要做相機標定呢?
每一個鏡頭的畸變程度各不同樣,通過相機標定能夠校正這樣的鏡頭畸變。事實上能夠覺得用這樣的標定的方式來求解相機內參和畸變參數。相當於一種相機校准,然后這些參數就能夠用於后面的求解。

比如求解新拍的兩幅圖片相對的 R t 。求解這個外參用到就是標定得到的相機內參和畸變參數。

齊次坐標
就是將一個原本是n維的向量用一個n+1維向量來表示。
很多圖形應用涉及到幾何變換。主要包含平移、旋轉、縮放。

以矩陣表達式來計算這些變換時,平移是矩陣相加,旋轉和縮放則是矩陣相乘,綜合起來能夠表示為 x=RX+t (注:由於習慣的原因,實際使用時一般使用變化矩陣左乘向量)( R 旋轉縮放矩陣, t 為平移矩陣, X 為原向量, x 為變換后的向量)。

引入齊次坐標的目的主要是合並矩陣運算中的乘法和加法,表示為 x=PX 的形式。即它提供了用矩陣運算把二維、三維甚至高維空間中的一個點集從一個坐標系變換到還有一個坐標系的有效方法。

和上面的計算過程是相應的。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM