極簡單目攝像機標定理論

目錄

 

前言

一:opencv自帶的相機標定函數

二:單目相機標定關係詳解

 1.世界座標系到攝像機座標系

 2.攝像機座標系到圖像座標系

3.圖像座標系到像素座標系


前言

攝像機標定:

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

如下圖,世界座標系表示的就是現實中空間某物體的真實座標(XwYwZw),並且單位是mm,長度單位。經過攝像機拍回來的圖片呢,就變成了一個個離散的像素點(u,v),單位爲pixel。兩個不同的表達形式,兩種單位,這是怎麼轉換的?這裏面就涉及到H這個轉換關係了,這個是神祕的H,就是我們要標定的重點(內參、外參、畸變參數),後面重點就是揭開它的面紗。

一:opencv自帶的相機標定函數

先簡單直觀的看下opencv這個數字圖像處理的庫是怎麼對相機進行標定的。

四步驟:

1.網上下載一個標定靶圖片,自己打印一個,貼起來

2.換着角度換着相機位置,拍攝多幅標定靶的圖片

3.寫好程序,開始標定(這裏有一個,奉獻出來,鏈接見文末)

4.輸出一堆結果數據

其中程序中很重要的一塊,是利用了這個一個opencv標定工具包:

cvCalibrateCamera2( object_points,

                   image_points,

                   point_counts,//指定不同視圖裏點的數目

                   cvSize(image_width,image_height),

                   intrinsics,

                   distortion_coeff,

                   rotation_vectors,

                   translation_vectors,

                   0);

註釋:

object_points中,InitCorners3D(object_points, ChessBoardSize, NImages, SquareWidth);

1.要已知ChessBoardSize=cvSize(ChessBoardSize_w,ChessBoardSize_h); 也就是棋盤格的X方向上的角點個數和Y方向上的角點個數;

2.NImages,:所有待標定的圖片數目;

3.SquareWidth = 26.1,單個黑色正方形棋盤格子的邊長單位mm。(如圖所示)

 

 拋棄其中繁瑣的計算,細細思考一下這個過程:已知標定靶的橫縱角點數量和每個黑色方格的物理長度squarewidth,就相當於知道了該標定靶棋盤格的所有物理參數,轉換着位姿拍攝標定靶;然後在圖像上得到各個物理世界角點所對應的像素座標,最後生成一堆數據(內參、外參、畸變參數),即相機標定的結果H,也就是世界座標系和像素座標系的轉換關係。

內參:顧名思義,攝像機內部的參數,是由於攝像機自身製造等原因造成獨有的參數,和外部沒關係,固有的。

外參:外部引入的,由於攝像機自身發生旋轉,平移等的動作,就引入了外部的一些參數,是變化的。

畸變參數:理論上也歸屬於內參。

有了這些參數,就可以將世界座標系和像素座標系建立了關係,目的就是這個,後面將詳細剖析這部分關係。

二:單目相機標定關係詳解

如下圖,就可以簡述攝像機標定的整個過程了。下面我們一步一步的分析整個過程,開始吧。

 1.世界座標系到攝像機座標系

 

  1. 𝑂𝑤−𝑋𝑤 𝑌𝑤 𝑍𝑤: 世界座標系,單位mm
  2. 𝑂𝑐−𝑋𝑐 𝑌𝑐 𝑍𝑐:相機座標系,單位𝑚𝑚
  3. o−𝑥𝑦:圖像座標系,單位mm
  4. uv-:像素座標系,單位pixel

註釋:

  1. 𝑂𝑤---建立世界座標系的原點位置
  2. 𝑂𝑐---攝像機的光心
  3. P(Xw,Yw,Zw)---世界座標系中的一點
  4. p---圖像中的成像點,在圖像座標系中的座標(x,y),在像素座標系中的座標(u,v)
  5. f---相機焦距,o與Oc的距離

 言歸正傳,上面我們說到世界座標系到攝像機座標系經過的是剛體變換,何爲剛體變換?

剛體變換:一幅圖像中的兩點間的距離,經過變換到另一幅圖像中後仍然保持不變;那有什麼變換形式呢?旋轉,平移,鏡像。

 

 這裏面就說到的就是旋轉和平移,在座標轉換裏面被稱之爲旋轉矩陣R和平移矩陣T,表達的是世界座標系原點與攝像機光心之間的關係。因其與攝像機無關,所以稱這兩個參數爲攝像機的外參數。細細思考下,世界座標系原點拋一個球,落在了攝像機座標系原點上,這個球會發生了什麼樣子的變換呢?1.兩點之間,位置變了,肯定會有距離關係,平移向量T也就是從世界座標系的原點到光心的矢量;2.應該還會旋轉。

這樣就總結了兩點:1.距離,因爲在x,y,z的座標系中,可以用向量形式表示空間中的任意一點;2.旋轉,同樣的x,y,z就繞着這三個軸進行旋轉,也一樣能表示任何一個旋轉角度。這樣就是平移矩陣T和旋轉矩陣R的由來。R+T是不是就可以在三維空間中隨心所欲的移動了,everywhere can go。

這裏貼自己的筆記圖片,醜了點,望見諒。

R=r1*r2*r3,其由三個方向的旋轉角度共同決定,故具有三個自由度,也就是歐拉角(Roll, Pitch, Yaw)

註釋:如果對其中繞各軸旋轉矩陣具有感興趣的,爲什麼採用正弦和餘弦這樣表示,查看這裏有個視頻,很清楚:旋轉關係

 2.攝像機座標系到圖像座標系

 何爲透視投影(Perspective transformation):

定義:用中心投影法將形體投射到投影面上,從而獲得一種較爲接近視覺效果的單面投影圖;

特點:近大遠小,不平行於成像平面的平行線會相較於消隱點(vanish point)

舉例:皮影戲

 註釋:攝像機座標系到圖像座標系轉化中,圖像座標乘以Z𝑐等於攝像機座標,其中Z𝑐是攝像機光心到成像平面之間的場景中真實物體之間的距離。三維世界中物體的一點,對應着二維圖像座標系中的一個座標,而二維圖像座標系中的一個座標,對應着Z𝑐=N,(N爲自然數)的一系列三維世界中的點。這也就是引入雙面視覺,用於策略Z𝑐,從二維圖像準確對應三維空間中一點的原因。

3.圖像座標系到像素座標系

 圖像座標系和像素座標系的轉換,是已經將物體投影到了成像平面上進行的二次轉換。

回顧下:

 

 

世界座標系中的一點,單位mm,經過R,T旋轉平移矩陣後,轉換到了攝像機座標系,單位mm;攝像機座標系經過透視變換,這一點座標被轉換到了圖像座標系,焦距f單位mm,轉換後單位還是mm;下一步就是圖像座標系到像素座標系的轉換,像素座標系下的單位是離散化的,單位pixel。這是怎麼發生轉換的呢?

帶着這個問題,發現圖像座標系乘以另一個矩陣,就得到了像素座標系下的座標。其中,每個像素的物理尺寸大小爲 dx * dy ,表示每一列和每一行分別代表多少mm,即1pixel=dx mm ,這樣就將連續的圖像座標系轉換到了離散的像素座標系(u,v),如同這樣:世界座標系中的一個矩形框,在像素座標系下,成了這個樣子,後者也就是變成相機成像後的樣子。

 

中間的所有變換矩陣呢,統稱起來叫做單應性矩陣,如下圖所示:

 

通常令最後一個元素h33爲1或者使其F範數爲1,其自由度爲8;

理論上,8自由度的H我們至少需要4對對應的點(世界座標系對應像素座標系)才能計算出單應矩陣,至少需要四個點。這個時候知道opencv自帶的相機標定函數cvCalibrateCamera2爲什麼需要知道標定靶的信息了吧。

vs2015的opencv相機標定:鏈接:https://pan.baidu.com/s/1-Gjf12sMuZHYCzqmas62Mg 
提取碼:7ypm 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章