相機成像模型
1. 小孔成像
大部分相機成像原理都可以簡化為小孔成像,如下圖所示:
和以前課本上學習的一樣,上圖中蠟燭透過相機的針孔,在感光器上成倒立的像,這一個簡單的模型即為針孔相機的成像模型。基於這個模型,我們最希望解決的問題是:蠟燭在現實世界中的位置和圖片中蠟燭像素點之間有着怎樣的關系呢?
2. 四個坐標系
為了用數學語言來描述針孔相機模型,我們需要建立四個坐標系:世界坐標系,攝像機坐標系,圖像物理坐標系和圖像像素坐標系。在下圖中P是現實世界中物體,P‘是其對應的圖片中的像素點,光心O即為相機的針孔處,對應的四個坐標系如下:
- 世界坐標系:是客觀三維世界的絕對坐標系,也稱客觀坐標系。就是物體在真實世界中的坐標。 世界坐標系是隨着物體的大小和位置變化的,單位是長度單位。如圖中P點是現實世界中的物體,若以地球中心為原點,便能確定其坐標\(P_w(X_w,Y_w,Z_w)\)
- 攝像機坐標系:以相機的光心(針孔處)為坐標系的原點,以平行於圖像的x和y方向為x軸和y軸,z軸和光軸平行,x, y,z互相垂直,單位是長度單位。如圖中以光心O為原點建立的xyz三個坐標軸O(x,y,z)
- 圖像物理坐標系:以主光軸和圖像平面交點為坐標原點,x'和y'方向為坐標軸,如圖所示,單位是長度單位。如圖中以O’為原點,建立的x‘y'坐標軸O'(x',y')
- 圖像像素坐標系:以圖像的左上角頂點為坐標原點,u和v方向平行於x'和y'方向,單位是以像素計。一般以圖片左上角為原點,圖片的寬為x軸,高為y軸。(注意:其他三個坐標系單位是長度單位,只有圖像坐標系是像素單位)
建立好這四個坐標系后,從現實世界中的物體,到圖片中的像素點,可以描述為下面幾個步驟:
-
在世界坐標系中建立物體的坐標
-
世界坐標系和攝像機坐標系之間的轉換
-
攝像機坐標系和圖像物理坐標系之間的轉換
-
圖像物理坐標系和圖像像素坐標之間的轉換
3. 坐標系轉換
3.1 世界坐標系轉換攝像機坐標系
世界坐標系通過旋轉和平移,可以轉換為攝像機坐標系。如下圖中,P為現實世界中物體,坐標系\(x_wy_wz_w\)通過旋轉和平移能得到坐標系\(x_cy_cz_c\)。
假設物體P在世界坐標系中的坐標為\((X_w, Y_w, Z_w)\), 變換到攝像機坐標系后的坐標后為\((X_c, Y_c, Z_c)\),由於變換過程只涉及到旋轉和平移,可以通過旋轉矩陣和平移矩陣來描述,根據歐式變換可以得到下面表達式:
表達式有兩點說明下:
- 其中R為旋轉矩陣,一般為3x3矩陣,t為平移向量,一般為3x1矩陣,則L_w為4x4矩陣
- 其中的坐標中加1,是齊次坐標形式,為了方便矩陣計算
歐式變換和齊次坐標不了解的參考:
歐式變換:https://zhuanlan.zhihu.com/p/279198334
齊次坐標:https://www.zhihu.com/question/59595799
3.2 攝像機坐標系轉換圖像物理坐標系
以O點為中心,可以構建一個下圖中的相似三角形(注意圖中O'P'的距離雖然不是X‘,想象把P’分別投影到x', y'的三角形依然是相似的),對於這個相似三角形有疑問的可以參考:https://www.edmundoptics.cn/knowledge-center/application-notes/imaging/understanding-focal-length-and-field-of-view/
根據相似三角形,可以構建如下關系:
用矩陣表示如下:
3.3 圖像物理坐標系轉換圖像像素坐標系
圖像物理坐標系采用的是長度單位,坐標原點一般是圖片中心位置;而圖像像素坐標系采用的是像素單位,坐標原點一般是圖片左上角位置,如下圖所示,因此圖像物理坐標系轉換成圖像像素坐標系需要兩步:
- 根據一個像素占多少長度,將長度單位轉換為像素單位
- 將轉換后的像素坐標進行平移,使坐標原點為左上角
用數學公式描述兩個步驟如下:
上述表達式需要說明下:
- \((u,v)\)是圖像像素坐標系坐標,\((X',Y')\)是圖像物理坐標系坐標
- \(u_0,v_0\)是需要平移的長度,一般為圖片寬,高的一半
- \(dx和dy\):x方向和y方向的一個像素分別占多少個(可能是小數)長度單位
用矩陣表示上面關系如下:
4. 公式匯總
將上面三步轉換過程進行匯總,可以得到如下的關系式:
注意:等式左邊第二個矩陣多補了一列0,是為了湊成3x4的矩陣,因為后面歐式變換矩陣是4x4的矩陣
關系式含義描述如下:
對於上面最終的表達式,常常會寫成不同的形式,其中涉及到的兩個概念:相機內參矩陣和外參矩陣,歸一化坐標。
1. 相機內參和外參
相機焦距f,光心位置\(u_0,v_0\)等都是相機內部參數,組成的矩陣即為內參矩陣,旋轉矩陣R,平移矩陣t等外部參數組成的即為外參矩陣。
上圖中內參矩陣的兩個矩陣相乘,可以寫成一個矩陣:
因此,最終的表達式可以寫成:
2. 歸一化坐標
上面計算公式里面有一個\(\frac{1}{Z_c}\),\(Z_c\)是相機坐標系下物體的Z軸坐標,當得到相機坐標系下的坐標后,常會歸一化坐標:
因此最終表達式可以總結為:
5. 歸納總結
了解了上面一大段的推算和概念,我們可以總結下針孔相機成像模型整個過程:
- 首先,世界坐標系下有一個三維點\(P_w\)
- 若世界坐標系到相機坐標系下的變換為旋轉矩陣 R 和平移向量t 組成的變換矩陣 T,那么\(P_w\)在相機坐標系下的坐標為 \(P_c = RP_w+ t = T*P_w\)
- 此時的\(P_c\)三個分量分別是\(X_c, Y_c, Z_c\),我們需要把它投影到歸一化平面Z=1上,這樣我們得到了相機坐標系下\(P_c\)的歸一化坐標 \(P_c' = (X_c/Z_c, Y_c/Z_c, 1)\)
- 用內參矩陣乘K以歸一化坐標就得到了像素坐標 \(P_{uv} = K*P_c'\)