基礎知識之針孔相機模型

針孔相機模型

翻譯自Wikipedia,外加自己的一點理解。
原始文檔:https://www.yuque.com/lart/idh721/zgv3i6

Pinhole camera model

針孔相機模型(Pinhole camera model),描述了三維空間中的點的座標與其在理想針孔相機的圖像平面上的投影之間的數學關係,其中相機光圈被描述爲一個點,並且沒有使用透鏡來聚焦光線。**該模型不包括例如由鏡頭和有限尺寸的光圈引起的幾何變形或未聚焦對象的模糊。也沒有考慮到大多數實際的相機僅具有離散的圖像座標。**這意味着針孔相機模型只能用作從3D場景到2D圖像的映射的一階近似(a first order approximation)。其有效性取決於相機的質量,並且通常隨着鏡頭失真效果的增加而從圖像的中心到邊緣降低。

針孔相機模型沒有考慮到的一些影響可以得到補償,例如通過對圖像座標應用適當的座標變換;如果使用高質量的照相機,其他的影響就足夠小以至於可以忽略不計。這意味着針孔相機模型通常可以用來合理地描述相機如何描繪三維場景,例如在計算機視覺和計算機圖形學中。

The geometry and mathematics of the pinhole camera

這一部分主要基於下圖來介紹針孔相機模型各參數之間的關係。這個圖畫的真心好,用來解釋針孔相機模型非常方便直觀。

image.png

這裏的X1X2X3座標系是左手系(我們一般繪製會畫成右手系),這樣的結果是,這裏的OZ軸(也就是圖中的OX3軸)實際上是與過去常見的右手系中的表示相反。

在圖中示出了與針孔相機映射有關的幾何形狀。該圖包含以下基本對象:

  • 一個原點在O點的三維正交座標系,這也是相機光圈(camera aperture)的位置。座標系的三個軸被稱爲X1、X2、X3。X3軸指向相機的觀察方向(viewing direction),稱爲光軸(optical axis)、主軸(principal axis)或主射線(principal ray)。由軸X1和X2張成的平面(the plane which is spanned by axes X1 and X2)是相機的正面,或稱主平面(principal plane)。
  • 一個像平面(image plane),其中三維世界通過相機光圈進行投影。像平面平行於軸X1和X2,並且在X3軸的負方向上與原點O距離爲f,其中f是針孔相機的焦距(focal length)。針孔相機的實際實現意味着像平面的位置應使與X3軸在座標-f處相交,其中f>0。
  • 在光軸(optical axis)和像平面相交處的點R,該點稱爲主點(principal point)或圖像中心(image center)。
  • 真實世界中的某一點P,有相對於軸X1、X2、X3的座標(x1,x2,x3)。
  • 點P在相機中的投影線(projection line)。也就是圖中穿過點P和點O的綠線。
  • 點P在像平面上的投影,記作點Q。這個點由投影線(綠色)與像平面的交點表示。在任何實際情況下,我們可以假設x3>0,這意味着交點(intersection point)是定義良好的。
  • 在像平面上也有一個二維座標系:原點在R,軸Y1和Y2分別平行於X1和X2。點Q相對於這個座標系的座標是(y1,y2)。

假設攝像機的針孔孔徑是無窮小的一點,所有的投影線都必須通過針孔孔徑。在文獻http://homepages.inf.ed.ac.uk/rbf/CVonline/LOCAL_COPIES/FUSIELLO4/tutorial.html#x1-30003中,在三維空間中的這一點被稱爲光學(或鏡頭或相機)中心(optical or lens or camera center)。

接下來,我們想了解座標(y1,y2)上的點Q的與座標(x1,x2,x3)上的點P之間的依賴關係。這可以在下圖的幫助下完成,下圖顯示了與前一幅圖相同的場景,但現在是沿着X2軸負方向從上方向下看。

image.png

在這個圖中,我們看到兩個相似的三角形,都有部分投影線(綠色)作爲它們的斜邊。左面的三角的兩條直角邊長度爲-y1和f,右三角的爲x1和x3。因此可以使用tan關係寫成形式y1f=x1x3\frac{-y_1}{f}=\frac{x_1}{x_3}y1=fx1x3y_1=-\frac{fx_1}{x_3}的形式。相似的,沿着X1軸的負方向觀察,可以得到:y2f=x2x3\frac{-y_2}{f}=\frac{x_2}{x_3}或者y2=fx2x3y_2=-\frac{fx_2}{x_3}。這可以整體寫成如下形式:
image.png

該表達式描述了點P的三維座標(x1,x2,x3)與其在像平面上的投影點Q的圖像座標(y1,y2)之間的關係。

Rotated image and the virtual image plane

針孔攝像機描述的從3D座標到2D座標的映射是透視投影(perspective projection),然後在圖像平面中旋轉180°。這對應於真實的針孔攝像機的工作方式;產生的圖像旋轉了180°,並且投影對象的相對大小取決於它們到焦點的距離,而圖像的整體大小取決於像平面和焦點之間的距離f。爲了產生不旋轉的圖像(這是我們對相機的期望),有兩種可能性:

  1. 將像平面中的座標系旋轉180°(沿Y1或Y2任一方向)。這是任何針孔相機的實際實現方式解決該問題的方式。對於照相相機(photographic camera),我們在觀看之前先旋轉圖像;對於數碼相機(digital camera),我們按旋轉的順序讀出像素。
  2. 將像平面放置在X3軸的f處而不是-f處,然後重新進行以前的計算。這將生成虛(或正面)像平面(virtual (or front) image plane),該像平面在實踐中無法實現,但提供的理論相機比實際相機更易於分析。

在這兩種情況下,從3D座標到2D圖像座標的結果映射由上面的表達式給出,但是不再有負號。因此可得:
image.png

Homogeneous coordinates

從空間中點的3D座標到2D圖像座標的映射也可以用齊次座標(homogeneous coordinates)表示。假設x是齊次座標(4維向量)中3D點的表示,而y則是該點在針孔相機(3維矢量)模型下,在圖像中的表示。那麼以下關係成立
在這裏插入圖片描述
其中C是3×4的相機矩陣(camera matrix),而\sim表示投影空間(projective spaces)元素之間的等價性(我們不考慮原始的相等,而是考慮按非零倍數伸縮後的相等)。這意味着左側和右側最多相差一個非零的標量倍數。這種關係的結果是C也可以看作是投影空間的元素。如果兩個相機矩陣等價於標量乘法(僅相差個標量倍數),則它們是等效的。

針孔相機映射的這種描述(作爲線性變換C,而不是作爲兩個線性表達式的一部分),可以簡化3D和2D座標之間關係的許多推導。

在計算機視覺中,相機矩陣或(相機)投影矩陣(camera matrix or (camera) projection matrix) 是描述針孔相機從真實世界3D點到圖像上2D點的映射的3×4矩陣。
由針孔相機模型關係:
image.png
用齊次座標(homogeneous coordinates)改寫,進一步擴展和簡化,這裏不考慮原始對應的相等,而是考慮按非零倍數伸縮後的相等:
image.png
最終得到:
image.png
即:
在這裏插入圖片描述
這裏的C可以進一步改寫:
image.png
最後一步是C本身是一個投影元素。
更多細節參考對應的wiki。

與實際數字圖像座標的關係

這個時候,像平面的座標實際上是從左上角開始的,所以這裏對應的主點需要計算出來,相較於原始的實現:

image.png

這裏需要修改這裏的y1和y2。假設對應的主點的座標爲(c1,c2),則調整後可以得到:
(y1c1)×x3/f=x1(y2c2)×x3/f=x2 (y_1-c_1) \times x_3 / f = x_1 \\ (y_2-c_2) \times x_3 / f = x_2

這裏的正負號已經隱含在了計算中。

參考鏈接

發佈了153 篇原創文章 · 獲贊 72 · 訪問量 11萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章