【視頻開發】【計算機視覺】相機標定(Camera calibration)《二》

簡介

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

基本的座標系:html

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

通常來講,標定的過程分爲兩個部分:spring

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

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

座標系介紹

相機到圖片

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

  • 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) (小寫)是在像平面座標系(還不是圖像座標系,原點不一樣。)觀察第二個圖,很簡單的能夠獲得這個轉換: 
spa

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

能夠表示爲矩陣計算爲(在這裏用的是齊次座標的表示方式,關於齊次座標文章最下面有介紹): 
code

XYZ1fXfYZ=ff1000XYZ1

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

x=PX

加入偏移量

經過上面,能夠把相機座標系轉換到像平面座標系,可是像平面座標系和圖像座標系雖然在同一個平面上,可是原點並非同一個,而目標是要轉換到圖像座標系下,因此還須要一步操做,以下圖:htm

這裏寫圖片描述

如上圖所示(圖片來自UIUC計算機視覺課件),其中主點  p  是像平面座標系的原點,但在圖像座標系中的位置爲 (px,py) ,在這裏,圖形座標系的原點是圖片的左下角,因此能夠獲得: 
圖片

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

至關於在上面的基礎上加了一個p點座標的偏移量,同時能夠表示爲矩陣計算爲(在這裏用的是齊次座標的表示方式): 
ip

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),從圖片中能夠很容易看出區別,具體見下圖(圖片來自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 的形式。即它提供了用矩陣運算把二維、三維甚至高維空間中的一個點集從一個座標系變換到另外一個座標系的有效方法。和上面的計算過程是對應的。

簡介

攝像機標定(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=ff
相關文章
相關標籤/搜索