首先,任何標定都是用基於小孔模型的數學模型去近似相機模型,我們需要用fx = f/dx, fy = f/dy,影象座標系中的光心原點座標(和可能的縮放因子ks)這5個相機內引數,切向畸變引數和徑向畸變引數,共5+n個引數來「近似」整個相機投影模型。這是我們需要求解的量。
1.1求解標準的內引數矩陣
想想我們平時用opencv(matlab等)進行單目標定時,我們需要提前測量出:棋盤格格點之間的物理距離。
在像平面和棋盤格平面乙個單應性對映。假設棋盤格平面就在世界座標xoy上,即z座標為0:
設a為內引數矩陣:
稱為skew引數,如果成像的橫軸和縱軸不平行則skew引數不為0。且γ=
fx∗c
otα γ=f
x∗co
tα,其中α α
為橫軸縱軸的夾角。
由重投影可以得到:
即: 由於r1,r2正交(乙個繞x旋轉,乙個繞y旋轉),而且r1,r2的模為1,所以得到兩個約束方程:
每一張標定影象可以得到乙個世界座標系到當前相機座標系的單應性矩陣,乙個單應性矩陣可以得到兩個約束方程,那麼只要三張影象就可以求解處內引數矩陣的所有引數(如果不考慮skew引數
γ γ
,即兩張含標定板的影象就可以標定處所有內引數
1.2求解畸變引數(待更新)
由於畸變計算公式為:
徑向畸變:
切向畸變:
我們將標定板中n個格點通過內外引數投影到像面上,再進行畸變計算公式矯正;如果畸變引數正好,點會與像平面上的吻合。所以這個步驟可以用優化的方式(如高斯牛頓、lm演算法)來做,最小化投影誤差之和,來優化得到畸變引數。
當然,上述1.1,1.2兩部分都是在拍20張含有標定板(標定板佔整張影象一定比例,最好是約一半,不能達到的話,至少應讓標定板涵蓋影象的各個角落),然後用最小二乘的優化方法來估計最好的內引數和畸變引數。
2.1 雙目之間位姿關係(旋轉和基線長度)
雙目標定包含兩部分:求解每個相機的內引數矩陣(單目標定);求解兩個相機之間的旋轉和平移引數(嚴格意義上是6個引數)
我們一般在標定好單目(如上述1)後,再進行雙目標定。
標定單目時,我們可以到外引數,即標定板所代表的世界座標系到當前像面座標系的位姿變換pi
p
i(旋轉和平移):
同時得到左相機和右相機相對於同一位置的標定板的位姿變換pl
,pr pl,
pr,那麼左右相機的相對位姿即為: p=
p−1l
prp =p
l−1p
r從中即可得到兩相機的平移和旋轉關係,也即旋轉和基線長度關係。
當然,這個過程也常常是在拍多張含有標定板的影象後進行最小二成優化的方法來求解最佳的p。
2.2 雙目矯正
由於雙目的主要作用常常是三角測量測距,這要求兩個相機光心所在直線完全平行且等高。但現實的雙目立體視覺系統中,不存在完全的共麵行對準的兩個相機影象平面的(理想情況:兩相機影象平面平行,光軸和影象平面垂直,且光心連線與相機座標系橫軸平行)。
所以我們要對左右相機出來的進行立體校正,使得看起來就和理想共麵行對準的相機拍攝出來的一樣:
校正前:
矯正後:
(待續)
1.2.
opencv雙目標定
有 解釋 opencv有自帶的雙目標定例子。下邊opencv雙目相機校正的 是在自帶的程式stereo calib.cpp基礎上修改的,位置在 xx opencv sources samples cpp 使用時拷貝目錄下的26張和stereo calib.xml到當前工程目錄下,並在工程除錯 命令引...
雙目測距步驟二 單 雙目標定
打算直接使用matlab來標定,畢竟opencv自帶的標定不太準確,數學工具還是要利用起來的。1 單目標定參考 已完成單目標定。具體的內外畸變引數部落格寫的很詳細了。程式執行示例 include opencv2 opencv.hpp include using namespace cv using ...
opencv 單目雙目標定錯誤集錦
一.對於物點像點不匹配的問題 opencv 4.2.0 error unspecified error number of object and image points must be equal expected numberofobjectpoints numberofimagepoints ...