前面文章《從零開始學習「張氏相機標定法」(一)成像幾何模型》中我們學習了相機成像幾何模型,知道了如何將世界坐標系中的三維坐標和像素坐標系中的二維坐標聯繫起來,根據《從零開始學習「張氏相機標定法」(二)單應矩陣》,我們根據標定棋盤圖紙及其對應的照片已經可以得到單應矩陣H了。如下所示:

下一步如何求相機內外參數呢?

我們知道H是內參矩陣和外參矩陣的混合體,而我們想要最終分別獲得內參和外參。所以需要想個辦法,先把內參求出來(先求內參是因為更容易),得到內參後,外參也就隨之解出了。

我們先不考慮鏡頭畸變,來看看如何求解內參和外參。求解思路是利用旋轉向量的約束關係,以下是具體推導,建議自己演算一遍,加深理解。

為了利用旋轉向量之間的約束關係,我們先將單應性矩陣H化為3個列向量,即H=[h1 h2 h3],則有

按元素對應關係可得:

因為旋轉向量在構造中是相互正交的,即r1和r2相互正交,由此我們就可以利用「正交」的兩個含義,得出每個單應矩陣提供的兩個約束條件:

約束條件1:旋轉向量點積為0(兩垂直平面上的旋轉向量互相垂直),即:

約束條件2:旋轉向量長度相等(旋轉不改變尺度),即:

所以一個單應性矩陣H可以提供上述兩個約束條件。那麼如何利用上述兩個約束條件求解內參或者外參呢?我們一步一步來看,由前面可知內參矩陣M:

記:

我們看到B為對稱矩陣,真正有用的元素只有6個(主對角線任意一側的6個元素)。把B帶入前面兩個約束條件後可轉化為:

上面兩約束中的式子均可寫為通式

的形式,定義3X3的單應矩陣H=[h1 h2 h3]的第i列列向量:

將如下表達式代入上述的約束單項式:

為了簡化表達形式,令:

則有:

由此,兩約束條件最終可以轉化為如下形式:

如果我們拍攝了n張不同角度的標定圖片,因為每張圖片我們都可以得到一組(2個)上述的等式。其中,v12,v11,v22可以通過前面已經計算好的單應矩陣得到,因此是已知的,而b中6個元素是待求的未知數。因此,至少需要保證圖片數 n>=3,我們才能解出b。

根據n張不同角度的標定圖片,最終我們得到了一個矩陣集合 Vb=0 ,其中V是一個 (2n x 6) 的矩陣。如果 n>=3,就可以得到唯一解b(帶有一個比例因子)。

如果 n=2,也就是隻有兩張標定圖片,那麼我們可以設置內參中的γ=0(γ表示由於製造誤差產生的兩個坐標軸偏斜參數,通常很小,可忽略),將前面式子(搬運到下圖)中γ=0可以看到對應 B12=0,換句話說,就是增加了一個約束條件:[0, 1, 0, 0, 0, 0]b = 0。

如果n=1,只能假設u0, v0已知(位於圖像中心)且 γ=0,這樣只能解出fx, fy兩個參數。

前面說到,B中包含一個尺度因子λ,即:

假設我們已經根據前面計算得到了矩陣B元素的值,那麼根據已知的矩陣B很容易解出內參,如下:

得到內參數後,內參矩陣M也已知。單應矩陣H也已知,因此可繼續求得外參數:

其中又由旋轉矩陣性質有

則可得

實際情況下,數據中是存在噪音的,所以計算得到的旋轉矩陣R並不一定能滿足旋轉矩陣的性質。所以通常根據奇異值分解來得到旋轉矩陣R。

上述的推導結果是基於理想情況下的解,從理論上證明瞭張氏標定演算法的可行性。但在實際標定過程中,一般使用最大似然估計進行優化。假設我們拍攝了n張標定圖片,每張圖片裏有m個棋盤格角點。三維空間點X在圖片上對應的二維像素為x,三維空間點經過相機內參M,外參R,t變換後得到的二維像素為x,假設雜訊是獨立同分布的,我們通過最小化x, x的位置來求解上述最大似然估計問題:

現在我們來考慮透鏡畸變的影響,由於徑向畸變的影響相對較明顯,所以主要考慮徑向畸變參數,根據經驗,通常只考慮徑向畸變的前兩個參數k1,k2就可以(增加更多的參數會使得模型變的複雜且不穩定)。實際求解中,通常把k1,k2也作為參數加入上述函數一起進行優化,待優化函數如下所示

上述非線性優化問題通常用Levenberg-Marquardt(LM)演算法進行迭代求解。一般將k1,k2初值設為0。

至此,張氏相機標定理論部分已經介紹完畢。下一篇會詳細介紹一下優化演算法。

本文首發於公眾號:計算機視覺life。原文鏈接:從零開始學習「張氏相機標定法」(三)推導求解


推薦閱讀:
查看原文 >>
相關文章