張正友相機標定法

2021-09-18 03:51:51 字數 3423 閱讀 5945

1. 為什麼需要相機標定

因為每個鏡頭在生產和組裝過程中可能會出現不同程度的畸變(畸變是一種光學錯位現象,通俗的講就是本來是直線的物體,實際拍出的效果是扭曲的);而通過相機標定可以矯正這種畸變,避免拍出的影象出現畸變。另外,可以根據相機標定得到的相機引數建立相機成像幾何模型,將世界座標系中的3d影象對映到二維平面上,這意味著我們也可以從二維影象+模型逆推到原來三維資訊。

2. 張正友相機標定法原理

在介紹詳細原理之前,先講下這個方法的步驟:

1、列印一張棋盤格,把它貼在乙個平面上,作為標定物。

2、通過調整標定物或攝像機的方向,為標定物拍攝一些不同方向的**。

3、從**中提取棋盤格角點(harris)。

4、估算理想無畸變的情況下,五個內參和六個外參。

5、應用最小二乘法估算實際存在徑向畸變下的畸變係數。

6、極大似然法,優化估計,提公升估計精度。

2.1 基本方程

2.1.1 注釋

二維點用m=[u,v]的轉置,三維點用m=[x,y,z]的轉置表示。三維點m和他平面影象投影點m關係如下

s是任意比例因子。[r,t] 稱為外參,r是旋轉矩陣,t是評議矩陣。a是相機內矩陣引數。

(u0,v0)是任意座標的主點,α和β是影象u和v軸的比例因子,c是描述兩個座標軸傾斜角的引數。

2.1.2 模型平面與其影象間的單應性關係

因為標定物是平面,所以我們可以把世界座標系構造在z=0的平面上。然後進行單應性計算。令z=0可以將上式轉換為如下形式:

當z=0時,m可以表示為m=[x,y]的轉置,m的增廣向量=[x,y,1]的轉置。因此點m和它的在影象上對映點m的關係用單應性矩陣h聯絡為:

h是乙個3x3的係數矩陣。

2.1.3 內參的約束條件

令h=[h1,h2,h3],由上述的點m和影象對映點m的關係可知:

其中λ是任意的標量。因為r1和r2分別是繞x,y軸旋轉的,所以r1和r2是正交的,可得r1和r2的內積是0。因為旋轉不改變尺度,旋轉向量的模是1,即|r1|=|r2|=1。根據上述結論可得對乙個給定的單應性矩陣,對內參有兩個基本的約束條件:

式子中,h1,h2是通過單應性求解出來的那麼未知量就僅僅剩下,內參矩陣a了。內參陣a包含6個引數:α,β,u0,v0,γ,1。其中有五個未知量,那麼如果我們想完全解出這五個未知量,則需要3個單應性矩陣。3個單應性矩陣在2個約束下可以產生6個方程。這樣可以解出全部的五個內參了。我們至少需要三張不同的標定物的平面**,才能獲得三個不同的單應性矩陣。

2.2 解決方法

2.2.1 內參矩陣

令:

可得出b是對稱矩陣,對稱矩陣有三對對稱的元素是相等的,所以只要解出下面6個元素就可以得到完整的b,為此,將這六個元素構成向量b。

接下來,假設h的第i列向量如下:

於是可以得到

因此可以得到

根據2.1.3得到的兩個約束條件,可以寫為齊次式:

如果觀測了n張,迭代可以得到

v是乙個2nx6的矩陣。如果n>3,通常會得到乙個唯一解b。根據b我們可以計算內參矩陣a。當 n = 2時, 一般可令畸變引數γ = 0。當 n = 1時, 僅能估算出α 與 β, 此時一般可假定像主點座標 u0 與 v0 為0。

根據公式:

可從矩陣b中取出內部引數:

2.2.2 外參矩陣

通過2.2.1 的運算,我們獲得了鏡頭的內參矩陣。對於外部引數可通過homography求解,由 h = [h1 h2 h3] = λa[r1 r2 t],可以根據上面公式進行化簡可得到如下:

3.實驗結果

相對於複雜的三維物體,平面棋盤模式更加容易處理。所以我們用棋盤作為相機標定的標定物。同時,二維物體相對於三維物體會缺少一部分資訊,於是我們會多次改變棋盤的方位來捕捉影象,以求獲得更豐富的座標資訊。所以我們需要使用標定板在不同位置、不同角度、不同姿態下拍攝標定,最少需要3張,以10~20張為宜。

在本次實驗中,一共選取了20張標定物,其中標定物棋盤的小格仔實際大小為24mm。使用matlab的camera calibrator。在應用程式中找到camera calibrator開啟。

可參考教程 裡面有詳細使用方法。

lens distortion 透鏡畸變

radialdistortion: [0.0241 -0.0631] 徑向畸變

tangentialdistortion: [0 0] 切向畸變

camera extrinsics 相機外參

rotationmatrices: [3x3x15 double] 旋轉矩陣

translationvectors: [15x3 double] 平移向量

accuracy of estimation 估計正確性

meanreprojectionerror: 0.5827 平均重投影誤差

reprojectionerrors: [49x2x15 double] 重投影誤差

reprojectedpoints: [49x2x15 double] 重投影點

calibration settings 校準設定

numpatterns: 15 數量

worldpoints: [49x2 double]

worldunits: 『mm』

estimateskew: 0

numradialdistortioncoefficients: 2 徑向畸變係數

estimatetangentialdistortion: 0 估計切向畸變

python張正友相機標定法的實現

背景 我們拍攝的物體都處於三維世界座標系中,而相機拍攝時鏡頭看到的是三維相機座標系,成像時三維相機座標係向二維影象座標系轉換。不同的鏡頭成像時的轉換矩陣不同,同時可能引入失真,標定的作用是近似地估算出轉換矩陣和失真係數。為了估算,需要知道若干點的三維世界座標系中的座標和二維影象座標系中的座標,也就是...

關於張正友標定法

關於演算法的實現最好參照一下 opencv2計算機視覺程式設計手冊 第191頁,講的非常好,事實上我們只需要有3d點和2d點的對應我們就可以計算出對應的相機矩陣了,但是一直讓我迷惑的是3d點如何得到。那麼張正友標定法事實上是建立了乙個棋盤模型,對這個棋盤模型進行了不同角度的拍照,這樣這些拍照imag...

張正友相機標定

1.關於資料說明 張正友標定2000 lm演算法1978 the levenberg marquardt algorithm,implementation and theory opencv 參考 其中關於calibratecamera函式可見 此函式會輸出乙個3x3內參矩陣,乙個5維畸變係數,n幅...