小孔成像與相機的幾何校準

小孔成像與相機的幾何校準

來自專欄 All in Camera

本文系微信公眾號《大話成像》,知乎專欄《all in camera》原創文章

大話成像讀者QQ交流群 :237427716 大話計算機視覺QQ交流群:651805282

本站教學視頻大話成像之《數字成像系統》32講已上線淘寶,搜索關鍵字『大話成像』即可找到,或使用鏈接

PC用戶: item.taobao.com/item.ht

手機用戶可使用鏈接: 複製這條信息¥adMo0tqbc2N¥後打開手淘

請購買了視頻的讀者加入QQ群:679050565,群名稱:數字成像系統課程,驗證消息請輸入購買課程時候的個人ID。

1998年9月27日,美國橄欖球聯賽辛辛那提猛虎隊和巴爾的摩烏鴉隊的比賽電視轉播畫面中出現了一條貫穿球場的黃線。

計算機利用攝像機的位置以及球場方位信息,在電視畫面中疊加出了這條黃線,標示出下一次進攻的開始位置;這條小小的黃線也標示了計算機視覺技術普遍應用時代的來臨。

為了在電視畫面上準確畫出那條黃線,需要精確地計算出球場在攝像機畫面里的像素坐標,即我們需要建立一個三維空間坐標和成像平面坐標之間的對應關係。

相機參數標定基於相機的投影模型,計算圖像投影的相關參數。這些參數可以分為與相機內部特性相關聯的內參和與相機空間位置相關聯的外參。

相機參數標定被廣泛應用於圖像處理與計算機視覺領域,例如視頻防抖,增強現實,車載多攝像頭全景視頻拼接,三維景深估計等等。

  1. 相機投影模型

小孔成像

早在春秋戰國時期,墨子在其著作《墨經》中提出了「光八條」,論述了光、物、影三者的關係。墨子設計的小孔成像實驗形象地驗證了光的直線傳播特性以及物與影的幾何投影關係,墨子的光八條概括了孔徑相機的最基本的原理。

下圖描繪了小孔成像投影模型,為了簡化模型可以做如下約束限制:

1.投影中心位於空間坐標原點O

2.光軸與空間坐標軸Z重合

3.焦平面與投影平面重合。

4.三維空間中的點P(X,Y,Z)在投影平面上的對應像點為pc(u,v)。

通過簡單的幾何推導,空間中的點P和投影平面上的點pc之間的坐標關係可以由下面的等式表示:

把這個公式改寫成下面的矩陣形式,等式右邊的第一個矩陣就是一個最簡化的相機內參矩陣。它只有一個參數,即相機的焦距f

我們日常使用的相機遠比小孔成像模型複雜。通常,由於相機的成本和製造工藝等原因,感光像素點的水平和垂直方向的長度可能會略有差別,透鏡的光軸可能並沒有穿過成像平面中心點,透鏡在不同位置對光線的折射率也會略有差別。這些誤差的存在使我們無法使用一個簡化了的模型精確地計算出三維空間中的點與其對應像點之間的坐標關係。

我們根據相機的實際特性對上述模型做出改進:

  1. 焦距f以像平面坐標軸u(水平)和v(垂直)兩個方向分別計算。
  2. 增加兩個參數px和py,分別表示透鏡光學中心相對像平面坐標軸u和v的偏移量。
  3. 增加一個參數s,表示由於成像平面與透鏡切向不平行造成的圖像扭曲係數。

以上參數為相機內參,修改後的相機內參矩陣K:

內參矩陣K為上對角矩陣

當我們用相機拍照時,相機的擺放位置並不固定。即無法滿足小孔成像模型約束條件一和二。引入相機外參矩陣E,用來表示相機位置信息:

外參矩陣E

外參矩陣E由兩部分組成:

  1. 旋轉矩陣R,表示相機在三維空間中相對X,Y,Z軸的旋轉角度。
  2. 位置向量t,表示相機在三維空間中相對X,Y,Z軸的偏移位置。

內參矩陣和外參矩陣相乘即為相機投影矩陣C:

投影矩陣C

旋轉矩陣R為正交矩陣

相機投影公式確定了三維空間中點P(X,Y,Z)與其對應投影點Pc(u,v)的坐標轉換關係,定義如下:

確定了相機投影模型,我們就可以開始討論相機的標定問題了。相機標定就是通過一定的方法,計算出前面提到的組成相機投影模型的五個內參與十二個外參,共計十七個參數。

  • 求解投影矩陣C

首先利用相機投影公式

計算相機投影矩陣C,投影矩陣為3x4矩陣,共計十二個參數。

如果我們能夠得到三維空間中的一些點P(X, Y, Z) 的坐標值,並且也算出它們對應的像點pc(x, y) 的坐標值,我們把它們的坐標值帶入投影公式。

每一個三維空間中的點與其在二維平面上的投影點可列出兩個線性方程。為了求解方程中的十二個未知數,至少需要六個點,列出十二個線性方程。通常為了計算更加精確,需要多於六個點組成線性方程組進行求解。使用最小二乘法求出線性方程組的解,即投影矩陣的係數。

把方程組改寫為矩陣形式,等式左邊列向量a為投影矩陣中需要求解的係數。

12個未知數,n個點,2n個方程。當n大於6時,方程組的解不唯一。用最小二乘法擬合出最優解。

  • 分解內參矩陣K和外參矩陣E

投影矩陣C是內參矩陣K和外參矩陣E的乘積。K矩陣為上對角矩陣,R矩陣為正交矩陣。利用這個特性,可以使用QR分解把投影矩陣C分解為對應的內參矩陣K和外參矩陣E。

QR分解的matlab代碼:

function [R Q] = rq(M)

[Q,R] = qr(flipud(M))

R = flipud(R);

R = fliplr(R)

Q = Q;

Q = flipud(Q);

2.相機參數標定

幸運的是我們並不需要自己計算相機投影矩陣,有很多開源軟體和免費的工具能夠幫助我們完成相機標定的計算工作。比如OpenCV和Camera Calibration

Toolbox for Matlab

使用Matlab toolbox進行相機標定的步驟:

  • 模板圖像採集

從不同角度拍攝一組(6到12張)棋盤格圖像,列印標準棋盤格模板圖像,粘貼在平整的硬質紙板上。將拍攝得到的圖像輸入標定工具。

  • 使用標定工具計算圖像角點

求解相機投影矩陣C需要知道三維空間中的點與其在投影平面上的點的坐標值。棋盤格上面的每個方格的間距是已知的,標定工具一般都會有角點檢測演算法自動檢測出圖像中的方格角點的像素坐標值。

下圖所示標定工具自動計算出棋盤格水平方向七個,垂直方向五個,共三十五個方格的角點坐標。

  • 計算相機內參以及外參

標定工具得到了足夠多點的坐標數據,可以使用前面提到的線性方程組求解出相機的內外參數。

內參係數

內參係數表示相機自身的一些物理特性,例如焦距,光軸偏移量,扭曲係數(由於成像平面和透鏡切向不平行導致投影模型中的成像平面坐標軸u和v不嚴格正交)等。

以下為標定得出的內參係數:

Focal

Length: fc = [ 601.33366 594.81753 ] ± [ 10.15357 10.28791 ]

Principal

point: cc = [ 408.90844 218.56370 ] ± [ 15.09591 10.61684 ]

Skew: alpha_c = [ 0.00000 ] ± [ 0.00000 ]

=> angle of pixel axes = 90.00000 ± 0.00000 degree

Distortion: kc = [ 0.11724

-0.33892 -0.00156 0.00514

0.00000 ] ± [ 0.02078

0.10831 0.00182 0.00234

0.00000 ]

外參係數:

外參係數表示相機所處的空間位置信息,旋轉與平移。每張照片對應的外參係數是不同的。下圖在三維坐標系下描繪了相機的外參,形象的反應了拍攝每張照片時相機在空間中的相對位置。

拍攝第十一張圖像時相機的外參:

Translation vector: Tc_ext = [ -119.353349 -13.081730 412.246488 ]

Rotation vector: omc_ext = [

2.494117 1.322902 0.652620 ]

Rotation matrix: Rc_ext = [

0.489370 0.719887 0.492220

0.828665 -0.559720 -0.005259

0.271720 0.410459 -0.870455 ]

3.相機標定應用實例

  • 圖像畸變校正

相機參數標定使用標準棋盤格做參考圖像,理想情況下相機拍攝的圖像中黑白格子應該是呈直線排列。但由相機鏡頭多少會產生一些非線性形變,如上左圖所示,在圖像的邊緣區域棋盤格呈現出明顯的弧度。上右圖是畸變校正之後的圖像。

鏡頭產生的畸變大致可分為切向(Tangential

distortion)和徑向(Radial

distortion)畸變。

徑向畸變引起的像素點坐標偏移可用以下公式表示:

切向畸變引起的像素點坐標偏移可以用以下公式表示:

以上五個參數組成相機畸變係數 (k1, k2, k3, p1, P2),畸變係數與相機特性相關,也可以歸入相機內參係數。

下圖中綠色坐標軸所連接的X軸方向上的六個點和Y軸方向上的七個點在理想的投影模型中應該分別分布在直線上。它們的理想坐標值(x, y)和實際像素坐標值(xdistorted, ydistorted)都可計算得到。十三個點帶入上面列的方程組中,可以用最小二乘擬合得出(k1, k2, k3, p1, P2)。

  • 視頻防抖

拍攝視頻的過程中,相機不穩定會造成視頻抖動,如下圖所示。如果在視頻拍攝過程中使用感測器(陀螺儀,加速度計) 記錄下相機實時空間位置 (相機的外參) ,配合相機標定的內參,可以計算出在三維空間中原本固定不動的點在視頻序列中的坐標隨著相機外參的變化而變化。利用相機內外參數,對視頻序列里的圖像像素點坐標進行反投影變換,可以很好的消除視頻抖動。

視頻防抖演算法的實現還需要其它一些技術,今後有機會再展開討論。

  • 三維景深估計

雙目成像系統利用兩個相機成像的差別計算景深。需要事先精確的知道兩個相機之間的相對位置。可以用相機參數標定的方法得到兩個相機的外參,由此可以得到兩個相機之間的相對位置信息。

歡迎大家關注我們的公眾號大話成像大話計算機視覺,並加入我們的兩個QQ交流群交流一些工作學習中的問題 。


推薦閱讀:

漫談數碼相機發展史:有些事實可能會顛覆你的認知
數碼相機上的幾種拍攝模式,你能夠了如指掌嗎?
買相機不知道怎麼選?知道這些就不再迷茫!
怎樣用數碼相機拍夜景?
數碼攝影班攝影教程--數碼相機的工作系統(15) - 綠島樂曲的日誌 - 網易博客

TAG:單反相機 | 數碼相機 | 相機 |