天天看點

(單/雙目)圖像标定全流程(C++/Opencv實作)---原理篇

最近在做圖像标定工作,現對标定相關工作做個總結,以便後續檢視。

相關代碼參考:

想要學習目标标定,首先要了解,相機模型中的四個平面坐标系,以及他們之間的轉化關系。

理論如下:

(1)圖像像素坐标系(u, v)

以像素為機關,是以圖像的左上方為原點的圖像坐标系;

(2)圖像實體坐标系(也叫像平面坐标系)(x, y)

以mm為機關,用實體機關表示圖像像素位置,定義坐标系O-XY,原點O定義在相機與圖像平面交點;

(3)相機坐标系(攝影機坐标系) (Xc, Yc, Zc)

以mm為機關,以相機的光心作為原點,Zc軸與光軸重合,并垂直于成像平面,且取攝影方向為正方向,Xc、Yc軸與圖像實體坐标系的x, y軸平行,且OcO為錄影機的焦距f;

(4)世界坐标系 (Xw, Yw, Zw)

根據具體情況而定,該坐标系描述環境中任何物體的位置,滿足右手法則;

(單/雙目)圖像标定全流程(C++/Opencv實作)---原理篇

u = x d x + u 0 v = y d y + v 0 u = \frac{x} {{dx}} + {u_0}{\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} v = \frac{y} {{dy}} + {v_0} u=dxx​+u0​v=dyy​+v0​

latex加矩陣的公式實在過于繁瑣,遂直接截圖了

(單/雙目)圖像标定全流程(C++/Opencv實作)---原理篇
(單/雙目)圖像标定全流程(C++/Opencv實作)---原理篇
(單/雙目)圖像标定全流程(C++/Opencv實作)---原理篇
(單/雙目)圖像标定全流程(C++/Opencv實作)---原理篇

其中,内參矩陣

(單/雙目)圖像标定全流程(C++/Opencv實作)---原理篇

外參矩陣

(單/雙目)圖像标定全流程(C++/Opencv實作)---原理篇
(單/雙目)圖像标定全流程(C++/Opencv實作)---原理篇
(單/雙目)圖像标定全流程(C++/Opencv實作)---原理篇

錄影機坐标與世界坐标系之間的轉換(剛體變換和平移)。

(單/雙目)圖像标定全流程(C++/Opencv實作)---原理篇

R為分别繞XYZ軸旋轉的效果總和

(單/雙目)圖像标定全流程(C++/Opencv實作)---原理篇
(單/雙目)圖像标定全流程(C++/Opencv實作)---原理篇

其由三個方向的 控制,故有三個自由度。T是指兩個坐标系原點的XYZ坐标分量,即平移向量。

單目标定:

基本思路:求得每個标定闆對應的單應矩陣,再聯合優化所有标定闆資料得到相機内參矩陣,再得到每個标定闆對應的外參。

相機标定的目的就是建立錄影機圖像像素位置與場景點位置之間的關系,即世界坐标系與圖像坐标系之間的關系。方法就是根據錄影機模型,由已知特征點的圖像坐标求解錄影機的模型參數,進而可以從圖像出發恢複出空間點三維坐标,即三維重建。是以要求解的參數包括4個内參數和5個畸變參數,對于外參數,即旋轉矩陣的三個旋轉參數R和平移向量的三個參數T。

雙目立體标定:

雙目錄影機标定和單目錄影機标定最主要的差別就是雙目錄影機需要标定出左右錄影機坐标系之間的相對關系。

雙目錄影機需要标定的參數:錄影機内參數矩陣,畸變系數矩陣,本征矩陣,基礎矩陣,旋轉矩陣以及平移矩陣。

雙目視覺中兩個攝像頭之間的相對位置關系,即兩個坐标系之間的相對位置關系,可以通過兩個矩陣來描述:旋轉矩陣R和平移矩陣T。

我們用旋轉矩陣R和平移矩陣T來描述左右兩個錄影機坐标系的相對關系,具體為:将左錄影機下的坐标轉換到右錄影機下的坐标。

假設空間中有一點P,其在世界坐标系下的坐标為Pw,其在左右錄影機坐标系下的坐标可以表示為

(單/雙目)圖像标定全流程(C++/Opencv實作)---原理篇

Rl,Tl為左攝像頭經過單目标定得到的相對标定物的旋轉矩陣和平移向量,Rr,Tr為右攝像頭經過單目标定得到的相對标定物的旋轉矩陣和平移向量。

左右相機分别進行單目标定,就可以分别得到Rl,Tl,Rr,Tr,帶入上式就可以求出左右相機之間的旋轉矩陣R和平移T。求得的R和T就是立體标定要得到的結果。

亞像素定位:通常圖像被離散化成像素形式,每個像素對應一個整數坐标位置,而為了達到精确性,需要精确到浮點坐标位置,是以涉及到亞像素定位問題。亞像素定位就是計算特征所在圖像中的真實位置,而真實位置有時候并不在像素所在整數坐标位置上,而是在像素的内部。即存在于兩個實際像素之間的像素,被稱為“亞像素”。

繼續閱讀