2012年10月23日 星期二

攝像頭校正 camera calibration - part 2 calibration


Lens Distortion

在前一篇文章 攝像頭校正 camera calibration - part 1 camera model提到 使用 lens 的好處是可以增加進光量, 縮短曝光時間. 但是缺點則是會造成非線性的影像形變.

常見的兩種主要形變, 分別是徑向( radial distortion)以及 切向形變 (tangent distortion). 徑向形變是由於 lens 的形狀, 使得距離lens中心越遠的光線在通過 lens時彎折較大越靠近 lens 中心的光線則彎折越小切向形變則是由 camera 模組組裝的誤差造成的. 主要是 lens sensor 並非平行對齊. 圖一是兩種形變的影像.





圖一 徑向型變(左) 與切向型變(右)


圖二是某個 camera lens radial distortion , 圖中使用箭頭方向表示 形變的方向, 箭頭的長度表示形變的量. 因此可以看出在影像周邊的radial distortion 比較明顯.
此圖中箭頭方向朝向內, 這種 radial distortion 稱為桶狀形變( barrel distortion), 另一種箭頭方向朝外, 稱為枕狀形變( pincushion distortion).
圖三是 camera lens tangent distortion , 同樣的, 從圖中的箭頭方向和長度代表了影像中 tangent distortion 的型變方向和強度.

圖二
圖三

校正 radial distortion 以及 tangent distortion 的 modeling 如下

EQ1  校正 radial distortion 的 model

EQ2  校正 tangent distortion 的 model

這兩種 undistortion 的方式是  OpenCV或是 matlab 所實作的方式. 
EQ1 以及 EQ2 中的 k1, k2, p1, p2, k3 稱為camera 的形變參數(distortion parameter).



Calibration

在前一篇文章 攝像頭校正 camera calibration - part 1 camera model, 我們已經瞭解了 camera model 的內部參數(intrinsic parameter) , 現在來看何謂 camera 的外部參數(extrinsic parameter), camera 的外部參數用來描述 世界座標(world coordinate) camera 座標(camera coordinate)之間的座標系統轉換關係.
如圖四所示:
圖四

 這個 轉換 關係包括了 rotation 以及 translation. EQ3 中的 [R t]:

EQ3

在本文中假設 lens 以及 sensor 的參數皆是未知, 我們要介紹的 camera calibration 方法為 張正友法. 主要原因是張正友 方法是 OpenCV 以及 matlab 所使用的校正方法, 張正友方法所強調的特點是 calibration方法的彈性以及校正物件的容易取得如圖五所示張正友方法的校正物件 為一個平面物件(planar object), 並且在平面上貼上校正專用的 pattern. 
圖五 校正 pattern
使用待校正的 camera拍攝不同角度的校正物件,得到一影像序列(理論上至少兩張影像), 張正友校正法使用這影像序列 校正出該 camera 的內部參數, 外部參數, 以及形變參數.
圖六為影像序列.
圖六

如圖七所示張正友方法的校正物體是一平面物件, 而成像所在的 image也是一個平面物件將空間中某個平面上的一點 transform到另一個平面上, computer vision 領域中此 transform 稱為 planar Homography.
圖七 planar homography
 若校正物體為一平面物件, EQ3 可簡化為 EQ4:

EQ4
令 

則 EQ4 可寫成
EQ5
planar Homography H
EQ5 寫成
EQ6
Planar homography 包括了兩個部分, 一為transform, 也就是 camera 外部參數, 另一個是 projection, 也就是 camera 的內部參數.  EQ6中的 H 可表示為:
EQ7



Homography constrain

r1, r2 為互相垂直的旋轉向量, 且其大小(長度)相同. 產生兩個 constrain

EQ8

以及
EQ9
EQ7 的結果帶入 EQ8 以及EQ9 得到 EQ10 以及 EQ11:
EQ10

EQ11
由 H 的定義我們知道:

另外, 令 


可得到矩陣B為一對稱矩陣如下:

以 EQ10 為例:
EQ12

因為 B 是一個對稱矩陣, 因此可以寫出 EQ14 如下:
EQ13

另外, EQ13可整理為EQ15的型式:
EQ14
EQ13, EQ14, 我們可將EQ11, EQ12 這兩個 constrain用以下方式表示:
EQ15

前面提到, 張正友 校正法 使用一序列影像, 假設此依序列有 N 張影像, 則我們可以得到 N EQ15 如下:

V是一個 2N x 6 的矩陣. N >=3, 擇理論上可以解出一組唯一的 b陣列. b 陣列為已知後, 攝像頭的內部參數就可以得知, 如下:
EQ16


求出所有的內部參數後, EQ7 中的 矩陣即為已知, 接者來看 EQ7 中的H = { h1, h2, h3} , 稍早提到 是一個 3x3 矩陣稱為homograph, 是位於兩個平面上的對應點之間的 transform 關係. H 中需解出 6 個未知數, 因此我們至少要有 6 對已知的對應點.

如下圖八所示的一個校正 pattern 可以提取出 40 個角點(如圖九)這些角點就是對應點.

圖八
     

圖九
解出 H , 即可求解出 EQ7 中的 r1, r2, t. 其實亦可解出 r3如下:
因此矩陣 R:
因為影像資料中的雜訊, 計算出的 r1, r2 可能並不互相垂直. 須對 R 做奇異值分解.


conclusion

本文介紹了 張正友法的攝像頭校正方式, 接下來的Part3 Camera Calibration - OpenCV 實做 會介紹使用 OpenCV 進行攝像頭校正實做.

5 則留言:

  1. 謝謝,很詳細,讓我了解到自己想了解的部分
    在國內真的很少人再介紹Calibration,感謝您!

    回覆刪除
  2. 真的,很好的文章,感謝。

    回覆刪除
  3. 請問在EQ1,EQ2中的r是個定值?還是指影像中某點距離影像中心的距離?

    回覆刪除