相機標定


先放一個知乎上面通俗易懂的解答:

作者:陳明猷
鏈接:https://www.zhihu.com/question/29448299/answer/102658379
來源:知乎
著作權歸作者所有,轉載請聯系作者獲得授權。

我們從單目視覺說起。平時我們都說要做視覺識別、測量雲雲,然后我們就會去拍照,再對數字圖像做各種處理,顏色處理、灰度化、濾波、邊緣檢測、霍夫變換,最后得到了希望得到的特征,是這樣的對吧?

不過請注意!到了這一步,其實我們僅僅是得到了一坨坨感興趣的像素而已!究竟要怎樣才能把這些像素轉化到現實世界的對象中呢?也就是說,究竟要怎樣對這些僅存在於圖像中的東西進行測量,才能得到具有實際意義和尺度的數據呢?這個時候我們就懵逼了……

沒錯, 攝像機標定的存在意義就是解決這個蛋疼的問題!!!

我們繼續看看,通過攝像機標定我們可以知道些什么:

1.外參數矩陣。告訴你現實世界點(世界坐標)是怎樣經過旋轉和平移,然后落到另一個現實世界點(攝像機坐標)上。

2.內參數矩陣。告訴你上述那個點在1的基礎上,是如何繼續經過攝像機的鏡頭、並通過針孔成像和電子轉化而成為像素點的。

3.畸變矩陣。告訴你為什么上面那個像素點並沒有落在理論計算該落在的位置上,還tm產生了一定的偏移和變形!!!

好了,到這里是不是明白了一點?上述3點的每一個轉換,都有已經有成熟的數學描述,通過計算,我們完全可以精確地重現現實世界的任意一個點到其數字圖像上對應像素點的投影過程。
對於雙目視覺系統,通過立體標定還能進一步得到下面的參數:

4.結構參數。告訴你右攝像機是怎樣相對於左攝像機經過旋轉和平移達到現在的位置。
通過結構參數,便能把左右攝像機獲取的圖像的每一個像素點之間的關系用數學語言定量描述,保證兩個相機都處於我們“可求”的狀態。


總的來說,攝像機標定是通過尋找對象在圖像與現實世界的轉換數學關系,找出其定量的聯系,從而實現從圖像中測量出實際數據的目的。

當然,其實上述的各個轉換過程大部分都不需要用戶自己一個個寫程序實現,比如opencv就集成了單目標定函數calibracamera()、畸變校正函數undistortinitialmap()、雙目標定函數stereocalibrate()……
其實自己親自走一遍流程就很容易領會到整個視覺測量的邏輯。比如說,在畸變校正中需要用到單目標定的畸變參數輸出和內參數輸出,在雙目標定中需要用到單目標定的外參數輸出,在外極線校准中需要用到雙目標定的結構參數輸出,在立體匹配中中需要用到外極線校准的輸出參數,在三維反求中需要用到立體匹配的輸出參數。用戶自己走完一遍這個流程,基本上就發現沒有做標定的話,幾乎什么都干不了。

 

 

什么是相機標定?

1:相機標定含義(解決什么是相機標定)

           在圖像測量過程以及機器視覺應用中,為確定空間物體表面某點的三維幾何位置與其在圖像中對應點之間的相互關系,必須建立相機成像的幾何模型,這些幾何模型參數就是相機參數。在大多數條件下這些參數必須通過實驗與計算才能得到,這個求解參數的過程就稱之為相機標定(或攝像機標定)。

基本的坐標系:

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

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

  • 第一步是從世界坐標系轉換為相機坐標系,這一步是三維點到三維點的轉換,包括 Rt (相機外參)等參數;
  • 第二部是從相機坐標系轉為圖像坐標系,這一步是三維點到二維點的轉換,包括 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);
  • 像平面坐標系是以 xy(小寫)兩個軸組成的且原點在 p 點,度量值為米(m);
  • 圖像坐標系一般指圖片相對坐標系,在這里可以認為和像平面坐標系在一個平面上,不過原點是在圖片的角上,而且度量值為像素的個數(pixel);

相機 轉換到 像平面

知道上面的簡單知識后,如果知道相機坐標系中的一個點 X(現實三維世界中的點),在像平面坐標系對應的點是 x,要求求從相機坐標系轉為像平面坐標系的轉換,也就是從 X 點的(X,Y,Z)通過一定的轉換變為 x 點的(x,y)。注意:(X,Y,Z)(大寫)是在相機坐標系,而(x,y)(小寫)是在像平面坐標系(還不是圖像坐標系,原點不同。)觀察第二個圖,很簡單的可以得到這個轉換: 
x=fX/Zy=fY/Z(X,Y,Z)?(fX/Z,fY/Z)

可以表示為矩陣計算為(在這里用的是齊次坐標的表示方式,關於齊次坐標文章最下面有介紹): 
?????XYZ1?????????fXfYZ???=???ff1000????????XYZ1?????

可以簡寫為(P 就是所謂的投影矩陣,當然現在還不完整): 
x=PX

加入偏移量

通過上面,可以把相機坐標系轉換到像平面坐標系,但是像平面坐標系和圖像坐標系雖然在同一個平面上,但是原點並不是同一個,而目標是要轉換到圖像坐標系下,所以還需要一步操作,如下圖:

這里寫圖片描述

如上圖所示(圖片來自UIUC計算機視覺課件),其中主點 p 是像平面坐標系的原點,但在圖像坐標系中的位置為(px,py),在這里,圖形坐標系的原點是圖片的左下角,所以可以得到: 
(X,Y,Z)?(fX/Z+px,fY/Z+py)

相當於在上面的基礎上加了一個p點坐標的偏移量,同時可以表示為矩陣計算為(在這里用的是齊次坐標的表示方式): 
?????XYZ1?????????fX+ZpxfY+ZpyZ???=???ffpxpy1000????????XYZ1?????

整理一下得: 
???fX+ZpxfY+ZpyZ???=???ffpxpy1??????111000????????XYZ1?????

所以最后可以得到 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=???mxmy1??????ffpxpy1???=???αxαyβxβy1???

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

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

坐標系介紹

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

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

世界 轉換到 相機

根據上面的公式可以得到從一個三維點從世界坐標系轉換到相機坐標的變換公式如下(也是用的齊次坐標的表示方式): 
Xcam=(X?cam1)=[R0?RC?1](X?1)=[R0?RC?1]X

世界 轉換到 圖像

根據上面的討論知道了怎樣從世界坐標系轉換到相機坐標系(平移和旋轉)以及從相機坐標系轉換到圖像坐標系(相機內參變換),所以帶入上面的矩陣計算,可以得到: 
x=K[I0]Xcam=K[R?RC?]X

這樣就得到了最終的投影矩陣 P : 
P=K[Rt]

其中: 
t=?RC?

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

畸變參數(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 表示修復后的坐標;
  • k1k2k3 表示徑向畸變參數;
  • p1p2 表示切向畸變參數;

所以最終得到5個畸變參數: 
D=(k1,k2,p1,p2,k3)

相機標定

2:相機標定意義(解決為什么要進行相機標定)

           計算機視覺的基本任務之一是從攝像機獲取的圖像信息出發計算三維空間中物體的幾何信息,並由此重建和識別物體,而空間物體表面某點的三維幾何位置與其在圖像中對應點之間的相互關系是由攝像機成像的幾何模型決定的,這些幾何模型參數就是攝像機參數。在大多數條件下,這些參數必須通過實驗與計算才能得到。無論是在圖像測量或者機器視覺應用中,相機參數的標定都是非常關鍵的環節,其標定結果的精度及算法的穩定性直接影響相機工作產生結果的准確性。因此,做好相機標定是做好后續工作的前提,提高標定精度是科研工作的重點所在。

3:相機標定的方法(解決如何進行相機標定)

           相機標定方法有:傳統 相機標定法、主動視覺相機標定方法、相機自標定法。

          攝像機相對於世界坐標系的方位。標定精度的大小,直接影響着計算機視覺(機器視覺)的精度。迄今為止,對於攝像機標定問題已提出了很多方法,攝像機標定的理論問題已得到較好的解決,對攝像機標定的研究來說,當前的研究工作應該集中在如何針對具體的實際應用問題,采用特定的簡便、實用、快速、准確的標定方法。


免責聲明!

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



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