您當前的位置:首頁 > 文化

菜鳥談相機標定(一):張氏標定原理淺析

作者:由 劉弟弟 發表于 文化時間:2021-02-16

好久沒寫部落格了,今天嘛,咱們來盤盤相機標定的道!!!

本弟弟最近面試的時候被問到相機標定的演算法流程,還有相機標定精度對SLAM演算法的影響,幸虧我原先看過張正友的論文,也看過X乎網友大神寫的一些blog,於是我就和麵試官大概談了一下張氏標定的求解思路和標定的影響,萬幸面試官反饋還不錯。

本弟弟認為,一個合格的工程師,必須要知其然,更要知其所以然。所以本弟弟回家後查了一下相關資料,發現相機標定這一塊竟然如此複雜,甚至標定板的大小,拍攝標定板的角度都都會對標定精度有影響,根本不是我們調個OpenCV函式,隨便拍攝幾張圖片那麼簡單。同時,相機模型的選用還有標定結果的評價,也對SLAM系統的影響非常之巨大。

為了記錄這次所學,也為了和廣大網友共同進步,共同學習,準備寫一系列關於相機模型和標定的文章。

正如筆者的網名,我就是個弟弟,也剛開始學習,技術水平還比較低,寫的也是自己的學習體會,如有疏漏,非常歡迎各位網友批評指正,麼麼噠。

本文是第一篇,先從最簡單的針孔模型(pinhole model)標定講起。

首先嘛,關於相機標定呢,有幾種方法:(1)。相機自標定法。(2)。基於主動視覺的標定方法。(3)。基於標定物的相機標定方法。張氏標定法屬於第三種方法。

本文主要分為以下幾部分,

重點是OpenCV中的程式碼梳理

張氏標定論文簡介。

張氏標定的OpenCV程式碼梳理

(重點關注相機內參初始化部分,

因為程式碼和論文的實現方式有一些不同。

隨後的內參外參和畸變最佳化問題,個人認為說白了就是個BA問題,本文不準備深入探究。關於BA,歡迎閱讀我的另一篇文章:劉弟弟:淺談PNP的BA求解!)。

總結與討論。

1.張氏標定論文簡介(

Zhang Z 。 A Flexible New Technique for Camera Calibration[J]。 IEEE Transactions on Pattern Analysis and Machine Intelligence, 2000, 22(11):1330-1334。)

張氏標定,簡單來說就是個透過單應矩陣的約束求解相機內參的過程。

1.1 棋盤格空間位置求解

因為我們使用棋盤格來作為標定物,那麼棋盤格的大小和個數我們都是知道的,這樣,如果我們定義棋盤格所在的平面為(世界座標系下):

 Z^{Global}=0 \\

的平面,那麼棋盤格上的每個角點的3D座標我們都可以確定為:

M_{i}^{Golbal}=\left[ X_{i},Y_{i},0 \right]^{T} \\

這樣,如果我們有N張照片,且已知棋盤格的大小和個數,我們就可以得到每個3D點的位置(可以定義棋盤上任意一點為世界座標系原點)。然後,透過角點檢測,我們就可以確定N組匹配好的3D點座標和2D點座標了。

1.2單應矩陣

菜鳥談相機標定(一):張氏標定原理淺析

1。1 論文中的相機內參矩陣定義

首先定義相機內參矩陣A,這和我們平時使用的針孔模型有些不同,除了fx,fy,cx,cy被換了個名字之外,A矩陣還多了個引數γ,論文中解釋為“The parameter describing the skewness of the two image axes。”不過我看論文裡面可以直接把γ設定為0,並且OpenCV裡面也確實是這麼做的,咱們就直接把γ當成0吧,哈哈。

為了統一符號,本文以後的相機內參表示以論文中的符號為準。

上圖方程(1)中,

m

代表影象上的點,

M

代表棋盤格上的3D位置點,

s

代表尺度因子。

因為我們有N組已知匹配的3D點與2D點,我們對(1)式進行簡化,可以得到單應矩陣表示的方程。

菜鳥談相機標定(一):張氏標定原理淺析

1。2 單應矩陣

再對上式進行一些變換,可以構建出兩個約束:

菜鳥談相機標定(一):張氏標定原理淺析

1。3 利用單應矩陣構建約束

簡單寫下(3)和(4)的推導過程:

因為:

\left[ h_{1}\ h_{2}\ h_{3}\right]\ =\lambda A\left[ r_{1}\ r_{2}\ t\right]\\

所以,針對於(3)式:

h_{1}=\lambda A r_{1}\\ h_{2}=\lambda A r_{2}\ \Rightarrow\  \\ A^{-1}h_{2}=\lambda r_{2} \Rightarrow\\ A^{-T}A^{-1}h_{2}=\lambda A^{-T}r_{2}\Rightarrow \\ h_{1}^{T}A^{-T}A^{-1}h_{2}=\lambda h_{1}^{T} A^{-T}r_{2}\Rightarrow \\ h_{1}^{T}A^{-T}A^{-1}h_{2}=\lambda r_{1}^{T} A^{T} A^{-T}r_{2}\Rightarrow \\ h_{1}^{T}A^{-T}A^{-1}h_{2}=0 \ \ \ \ \ \ \ \ \ \ (3)

針對於(4)式:

h_{1}=\lambda A r_{1}\Rightarrow\\ A^{-1}h_{1}=\lambda r_{1} \Rightarrow\\ A^{-T}A^{-1}h_{1}=\lambda A^{-T}r_{1}\Rightarrow \\ h_{1}^{T}A^{-T}A^{-1}h_{1}=\lambda h_{1}^{T} A^{-T}r_{1}\Rightarrow \\ h_{1}^{T}A^{-T}A^{-1}h_{1}=\lambda r_{1}^{T} A^{T} A^{-T}r_{1}\Rightarrow \\ h_{1}^{T}A^{-T}A^{-1}h_{1}=  \lambda r_{1}^{T}r_{1}= \lambda  \\

同理可得:

h_{2}^{T}A^{-T}A^{-1}h_{2}=  \lambda r_{2}^{T}r_{2}= \lambda  \\ h_{1}^{T}A^{-T}A^{-1}h_{1} = h_{2}^{T}A^{-T}A^{-1}h_{2} \ \ \ \ \ \ (4)

推導過程用到了旋轉矩陣

R

單位正交的性質(

r_{1},r_{2}

為單位向量且相互正交)。

1.3 絕對二次曲線(absolute conic)與絕對二次曲面

暫略,有空寫,附參考:

多檢視幾何(multiple view geometry)中的二次曲線,二次曲面到底有什麼用?

1.4 初始化內參數的求解

有了約束方程,我們就可以求解未知引數了

(建議看看原論文,X乎打公式太麻煩了,我就不打了,直接貼圖)。

菜鳥談相機標定(一):張氏標定原理淺析

菜鳥談相機標定(一):張氏標定原理淺析

這樣求解出來的

R

t

,還有內參矩陣

A

了,相機內參和外參的初始化就完成了。

2.張氏標定的opencv程式碼梳理

這篇文章太長了,其餘內容挪到下一篇文章裡面:

標簽: 標定  相機  矩陣  內參  棋盤