2012年9月8日 星期六

攝像頭校正 camera calibration - part 1 camera model

PART 1 Camera Model


所謂 Camera model 是使用幾何(geometry)的方式描述真實世界中的物體在 camera 影像平面上的成像方式. 本文會說明最基本的 camera model, 也就是針孔攝像頭模型(pinhole camera model). 另外, 使用鏡片(lens)可以增加進入成像平面的單位時間光線總量,因此縮短了曝光所需要的時間, 但是使用lens也造成了影像或多或少產生了畸變(distortions), 因此我們還需要了解 lens distortion model.
有了camera 的 geometry model 以及 lens 的 distortion model 就可以建構完整的 camera 的內部參數(intrinsic parameter),   camera calibration 需要使用到 camera 的內部參數.




攝像頭模型 (Camera model)
如圖一, 若是把被攝物體直接放置在成像平面之前, 被攝物體是否可以在成像平面上清晰成像呢? 答案是否定的, 因為光線是直線前進的, 光線擊中被攝物體的 A 點後, 除了一部分光線被該物體吸收, 其餘的光線將會朝向四面八方漫射, 這種狀況使得被攝物體上的 A 點無法在成像平面上形成唯一的對應光點, 同理, 被攝物體上的其他點也都無法產生清晰的影像. 因此, 這樣的放方式, 在成像平面上, 將只會有一片模糊的影像.

圖一
為了解決前面所說的成像問題,我們使用一個簡單的 camera model, 也就是 針孔攝像頭模型(pinhole camera model), 如圖二, 簡單來說, 我們可以在被攝物體和成像平面之間放置一塊隔版, 隔板上有一個極小的孔洞, 孔洞可以過濾從 A 點漫射出來的光線, 只讓較少的一些光線通過,其他光線都被這片隔版阻擋. 在理想狀況下, 若孔洞可以小到只讓一條光線通過, 則被攝物體的點 A 在成像平面上只有唯一的一個對應光點, 此時可成像出最清晰的影像. 反之, 若孔洞越大, 通過的光線越多則成像就越模糊. pinhole camera model 的缺點是經過針孔的光線量小, 因此需要較長的曝光時間. 現代的鏡頭則使用鏡片(lens), 鏡片具有選擇光線的能力, 且鏡片直徑遠大於針孔, 可以在單位時間內讓更多光線通過, 因此曝光時間遠低於針孔.
圖二

接下來, 我們根據圖二 , 建立一個 pinhole camera model.
如圖三,
圖三
X 是被攝物體上的一點, x 則是該點在成像平面上的對應點,  f 稱為焦距 (focal length), Z 是針孔平面到點 X 的距離, 由相似三角形 得到 :
EQ1
等號左邊的負號是因為被攝物體和其成像平面上的影像上下顛倒,

提供另一種思考 pinhole model 的方式, 如圖四所示:
圖四 Engraving by Albrecht Durer, 1525
假設你將右眼遮住只使用左眼, 透過一個畫有方格子的方窗觀看景物, 在你的桌上有一個對應大小的格子方框, 然後你將透過方窗所看到的景物畫在桌上的格子方框內. 此時, 畫下的影像其實就是紀錄了穿過方窗進到觀察點(眼睛)的所有光線. 這樣的成像方式其實是等效於 pinhole camera model. 我們可以用圖五說明:
圖五
左邊的 center of projection 就是圖四中的眼睛, 成像平面則對應圖四中的方窗.
和圖三的 camera model不同的是成像平面移到了眼睛前方, 而且成像平面上的影像也不會上下顛倒. 圖五的 camera model, 由相似三角形可以得到下面的結果:
EQ2
等號左邊沒有負號了. 此時的 f 是 center of projection 到成像平面之間的距離. optical axis 和成像平面的交點稱為 principal point.

整理前面的結論, 一個空間中的點 Q (X,Y,Z), 成像在二維平面的座標是 q(x,y,f), 則
EQ3
理想上, principal point 是成像平面的中心, 也就是影像的中心, 但是實際上因為組裝上的誤差, 整個 image sensor 的中心不會準確落在 principal center, 因此加入 Cx, Cy 參數來  modeling 影像中心的偏差, 另外, 在影像平面需以 pixel 為單位, 且 image sensor 上的像素長寬比 (aspect ratio) 有可能不是 1, 也就是說像素是矩形而不是正方形, 因此加入 Sx, Sy 參數, 新的公式如下:

EQ4

此處 的單位是 mm, Sx, Sy 的單位是 pixel/mm, 整理後得公式如下:
EQ5
將三維空間中的點Q 轉換為二維平面上的點q的過程稱為投影轉換(projection transform), 這樣的轉換會使用到 homogeneous coordinate. 方便我們以矩陣的方式表示, EQ5 以矩陣方式表示如下:

EQ6
其中

EQ7
由 EQ6, EQ7, 我們完成了 camera model 的建立.


結論

本文使用簡單的方式描述成像原理, 也說明了如何建構 camera model. 
fx,fy,Cx,Cy 四個參數稱為 camera 內部參數(camera intrinsic). 文章前面提到使用鏡片的好處, 但是鏡片會造成影像畸變, 因此需要校正程序把畸變校正回來, 校正程序需要使用到 camera 內部參數, 這在下一篇文章 : camera calibration part2 calibration 會做說明.


35 則留言:

  1. 回覆
    1. 想請教兩個問題~
      1. 怎麼從EQ5導到EQ7的?
      直觀地看,如果M如EQ7中所寫,那麼Q好像應該等於[X/Z Y/Z 1],不知道我是不是有哪個觀念漏掉?
      2. EQ7中的w是怎麼出現的?對於成像平面的意義是什麼?
      謝謝!

      刪除
    2. 我之前也在這裡的推倒卡住, 後來這樣看就很好理解
      另 q' = z [x y 1] , q' = MQ (這就說的通了)
      求得 q' 後, 在另 q = q' / z = [x y 1] 可求得 x y
      如果有看過 opencv 的作法, 後面會有一個 / z 的動作
      這樣一來整個系統就說的通了

      刪除
    3. 如果將EQ7當作EQ5的衍生, 而不是直接的方程式推導. 則可發現EQ7不僅可求得成像平面上的平面座標, 還可求得物體與center of projection的實際距離.

      刪除
  2. http://users.ece.gatech.edu/lanterma/mpg10/mpglecture04f10_3dto2dproj.pdf

    回覆刪除
  3. 國內實在難得見到camera calibration的文章
    著實佩服
    想請教
    針孔成像模型中
    針孔到成像平面的中心點距離為f
    到成像平面上的其他點應該都大於f
    好像幾乎所有的文獻都忽略掉了這點
    不知是不是OpenCV的相機校正參數可修正此問題
    還是我弄錯了
    而且印象中相機的組合鏡頭並非一個焦點
    而是形成locus

    回覆刪除