當前位置:首頁 » 操作系統 » opencv標定源碼

opencv標定源碼

發布時間: 2025-06-23 04:56:58

❶ 小覓雙目攝像頭D1000-IR-120/Color模組評測(下)

分析 camera 的參數

每個相機鏡頭都有不同的參數,因此針對每個鏡頭都需要做光學標定。首先需要對鏡頭進行參數建模,分投影模型和畸變模型,投影模型我們選用比較通用的 pinhole 模型,包括焦距,光心。畸變模型我們選用 radtan 模型,包括徑向畸變,切向畸變。

Pinhole 模型即針孔相機模型,投影方程及示意圖為:

其中 fx , fy 為焦距, cx , cy 為光心, (x,y,z) 為相機坐標系下的 3d 點坐標, (ix,iy) 為圖像坐標系下的像素點坐標。

Radtan 模型即 radial-tangential 模型,包括徑向畸變參數和切向畸變參數。畸變方程及示意圖為:

以上是單個相機鏡頭的一些標定參數,被稱為內參。如果具有多個相機鏡頭,比如現在廣泛使用的雙目相機,則還存在相機與相機之間的變換關系,被稱為外參,模型及示意圖如下:

其中 (x0,y0,z0)』 和 (x1,y1,z1)』 分別是每個相機自身坐標系下的同一 3d 點坐標,R 是旋轉矩陣,T 是平移向量,R 和 T 被稱為外參,表示相機間的相對旋轉和相對平移。

相機標定是計算機視覺領域經久不衰的研究方向,一般都是使用非線性的迭代優化方法求迭代解。下面我們將使用兩個工具包來標定手上的小覓相機,並與相機本身自帶標定參數做對比。

首先是被廣泛使用的 opencv 的標定方法. 我們使用了 opencv 自帶的 stereo_calib 例子。使用小覓相機採集了 1280*720 解析度大小(下同)的圖像, opencv 默認是使用黑白棋盤格作為標定板,我們使用 A4 紙列印了一個9X6大小的棋盤格,採集了一組17對的雙目圖像,共三組,用於標定。其中一對圖像樣例及特徵提取結果如下圖所示:

基於標定板的標定演算法一般是先為待求解參數設置初值,由於標定板上的特徵點(如果是黑白棋盤格則是格子角點)分布及坐標已知,則採用 PnP 初始化所有相機的 pose ,然後使用非線性優化方法迭代優化。目標函數則是投影誤差方程。

程序優化結束後,利用優化得到的內外參數值,可以得到去畸變及雙目校正後的結果圖:

圖中紅色方框為圖像有效區域,而綠色直線為雙目的對極線。可以看出,左右圖中任意一個相同的點,都在同一條水平直線上,即完成了雙目校正。我們還可以看到校正後的圖像形變比較大,這是因為小覓相機採用的是 FOV 視角比較大比較接近魚眼的鏡頭,而 pinhole 投影模型是平面投影模型,因此這樣會導致形變比較大。如果 FOV 視角過大,則應該採用魚眼投影模型比如 omni 模型來建模。

下面我們採用更加專業的標定工具包 Kalibr 來進行雙目標定。Kalibr 不僅支持多種相機模型,畸變模型,還支持多相機標定,卷簾相機標定,imu-camera 聯合標定。是目前開源工具包中功能較為全面的一個。

Kalibr 也支持多種類型標定板目標,如棋盤格,原點整列,二維碼棋盤格,這里我們使用了 kalibr 默認的二維碼棋盤格,其中圖像樣例及特徵提取效果圖如下,其中左圖是角點提取效果, 而右圖是二維碼中心的提取結果,這種基於區域的特徵提取相比基於角點的特徵提取的優勢是,對運動模糊更加魯棒:

運行完 kalibr 標定程序後, 會生成一個詳細的標定結果報告, 以下是一些標定結果示例:

從圖中及標定結果可以看出小覓這款相機基本是平行的,相機間的相對旋轉非常小。而我們得到重投影誤差比較大,這一般與採集數據的過程,及標定板的精密程度非常相關。

在使用兩種工具包的多組數據進行了標定之後,我們同時使用小覓相機的 api 獲取了相機出廠自帶的內外參,與我們自身標定的結果對比,我們使用 kalibr 標定了 5 組數據,使用 opencv 標定了 3 組數據,主要對比三類參數,camera0 的內參, camera1 的內參,camera1 相對 camera0 的外參:

由於 opencv 中的相機內參沒有徑向畸變參數,我們將其設置為 0 , 從表中數據可以看出,不同 kalibr 數據組之間的一致性比較好,與小覓出廠數據也較為接近。 但是與 opencv 的標定結果相差較大。

分析 imu-camera 聯合標定

Kalibr 最大的優勢在於可以實現 imu 和 camera 的聯合標定,相比 visual-odometry , visual-internal-odometry 具有尺度可知,重力方向可知,旋轉預測精確等許多優勢,因此在 camera 系統中加入 imu 是許多 slam 系統的選擇,但是 imu 和 camera 之間相對關系的標定還是一個相對復雜的問題。而 Kalibr 將這個問題納入了工具包,提供了標定的演算法。

Kalibr 做 imu-camera 聯合標定的前提是提供 camera 標定參數, 及 imu 是已經校正好的 (kalibr 也提供更復雜的演算法聯合標定時同時標定 imu 的 scale 和 misalignment , 但本文不考慮這個問題) 。因此我們在對手中的小覓相機做聯合標定時, 使用了上一節 kalibr 標出的相機內外參作為固定參數, 在採集 imu 的時候還設定了 PROC_IMU_ALL 模式,即同時校正了溫漂問題和 scale/misalignment 問題。

Kalibr 做 imu-camera 聯合標定的框架與camera標定的框架基本一致。需要標定 imu 與camera 的相對旋轉和平移。但與 camera 標定最大的不同是,camera 標定是靜態的標定,而 imu 數據是時序相關的,每個數據都帶一個時間戳,即動態標定。camera 產生的圖像數據的時間戳與 imu 產生的 gyro/acc 數據的時間戳並不一定完全同步,所以涉及到不同硬體的時間戳同步問題。因此 Kalibr 還將 camera 與 imu 之間時間戳的延時加入了優化參數中。

參照 Kalibr 的文檔,我們同樣採集了 5 組數據用於標定,在數據採集過程中需要注意的主要有兩點,一是需要經量激勵加速度計的各個軸,因此只有 imu 產生足夠的數據變化,一些參數才能變得可觀,即可優化。二是需要提高外部環境光強度,降低快門和曝光時間,因為需要運動,如果曝光時間長,則圖像會產生運動模糊,會影響特徵提取的精度。下圖是運行 kalibr 動態標定的重投影誤差結果示意圖:

從上圖可知,結果有一些誤差比較大的 outlier 點,這可能會影響標定的效果。

在和小覓的技術同學溝通後,小覓的技術也進行了 Kalibr 標定,從重投影誤差看,標定的結果還可以,outlier 較少。

標定的結果有很多影響因素,這個問題,還可以進一步深挖。

小覓的技術標定結果如下圖:

我們使用 api 從小覓相機中讀出出廠標定的結果,與我們 kalibr 的標定結果做對比,數據如下:

從表中可以看出,在 imu 與 camera 的相對平移值上,我們的標定結果與出廠數據差別較大,達到厘米級,但是 kalibr 結果本身的分布是相對一致的。

熱點內容
sql復習題 發布:2025-06-23 08:33:09 瀏覽:844
肥料壓縮 發布:2025-06-23 08:33:09 瀏覽:959
redis創建資料庫 發布:2025-06-23 08:26:44 瀏覽:77
垂直演算法 發布:2025-06-23 08:26:41 瀏覽:728
c語言水手分椰子3121 發布:2025-06-23 08:15:09 瀏覽:922
linux安裝jdk命令 發布:2025-06-23 08:05:00 瀏覽:700
和平精英在哪裡輸入密碼換賬號 發布:2025-06-23 08:04:58 瀏覽:755
手機貼吧上傳圖片 發布:2025-06-23 07:56:55 瀏覽:767
python給list排序 發布:2025-06-23 07:49:37 瀏覽:422
android與usb通信 發布:2025-06-23 07:48:45 瀏覽:712