B站 ?:道傳科技上位機 ? 觀看教程
一、什么是相機標定
相機標定(Camera Calibration)是指通過實驗或算法手段確定相機的內部參數(如焦距、主點坐標、畸變系數)和外部參數(如旋轉矩陣、平移向量)的過程。這些參數共同描述了相機的成像模型,使得三維空間中的物體能夠被準確投影到二維圖像平面上。
二、標定的核心意義
1.幾何映射關系的建立:標定解決了“像素如何對應物理尺寸”的問題,例如在工業檢測中,標定后的系統可通過圖像直接計算工件的實際尺寸。
2.畸變校正:真實鏡頭存在徑向畸變(桶形、枕形)和切向畸變(梯形),標定可消除圖像變形,提升測量精度。
3.多傳感器協同:在雙目視覺或激光雷達-相機融合系統中,標定確定不同傳感器間的坐標系轉換關系,確保數據一致性。
三、坐標系和相機成像以及參數
一.四種坐標系
1.世界坐標系(World Coordinate System):描述物體在真實空間中的絕對位置。
2.相機坐標系(Camera Coordinate System):以相機光心為原點,光軸為Z軸。
3.圖像坐標系(Image Coordinate System):以光軸與成像平面的交點為原點,單位為毫米。
4.像素坐標系(Pixel Coordinate System):以圖像左上角為原點,單位為像素。
二、內參和外參矩陣
除了世界坐標系, 后面三個坐標系只跟相機本身有關。 相機內參表達的就是這三個坐標之間的轉換關系, 而相機外參表達的是相機與世界坐標系之間的轉換關系。成像的過程實質上是幾個坐標系的轉換。首先空間中的一點由世界坐標系轉換到相機坐標系 ,然后再將其投影到物理成像平面 ( 成像平面坐標系 ) ,最后再將成像平面上的數據轉換像素坐標系 。
從世界坐標到像素坐標總共有3步轉換, 前面2個合在一起就是相機內參, 最后一個是相機外參。如下左圖所示
三、畸形模型
四、內參標定方法
棋盤格標定法(張正友標定法):使用已知尺寸的棋盤格標定板,通過多角度拍攝圖像,提取角點并求解單應性矩陣,結合最小二乘法優化內外參數。此方法精度高、操作簡便,是工業界主流。步驟:拍攝多幅棋盤格圖像(通常需15-20張)。檢測角點并亞像素優化。利用線性最小二乘解算初始參數。通過Levenberg-Marquardt算法非線性優化,最小化重投影誤差。如下左圖
圓形標定板:利用圓形標記點,適用于高精度場景(如醫療影像),但對離焦敏感。如下右圖
五、外參的標定方法
外參標定的核心是:已知多個點分別在相機坐標系下的坐標和在世界坐標系下的坐標, 求它們之間的映射關系。
常用求解PnP 的方法,即已知多個點, 在像素坐標系的二維坐標, 和在世界坐標系的三維坐標,并且已知內參, 求解旋轉平移矩陣。
六、雙目標定的標定方法
雙目標定的主要目的是確定兩個攝像頭之間的相對位置關系,以便通過視差計算物體的三維信息?。雙目視覺系統通過兩個攝像頭獲取圖像,利用視差原理來計算物體的深度信息。為了實現這一目的,需要對兩個攝像頭進行精確的標定,以確定它們之間的位置關系和參數?。
可以看到,為了將兩個圖像調整到同一平面且中心水平對齊(外極線校準),我們需要知道兩個攝像頭的相對位置關系,具體來講就是:旋轉矩陣R和平移矩陣T,然后對應將圖像做旋轉和平移即可。獲取立體校正的參數就是立體標定要做的工作,實際上只是對每個鏡頭進行前面單目標定,用單目標定的參數計算得到立體校正的參數。
雙目視覺技術在機器人導航、三維重建、測量和增強現實等領域有廣泛應用。通過精確的雙目標定,可以提高系統的準確性和可靠性,確保機器人或設備能夠準確地感知和理解周圍環境,從而執行復雜的任務?
七、其他標定方法
一、 自標定方法
基于場景約束:利用自然場景中的平行線、消失點等幾何特征推導參數,適用于無法放置標定物的場合(如戶外SLAM)。
基于深度學習:使用神經網絡直接從圖像回歸參數,無需顯式建模,但需大量標注數據。
二、 零失真相機標定
通過LCD顯示屏生成相移光柵,建立像素級映射關系,適用于廣角鏡頭和復雜畸變矯正,精度可達亞像素級。
八、一些關鍵的算子和流程
準備階段:
1. 首先要獲取相機的初始內參(焦距,畸變系數,單個像素的寬,單個像素高,圖像 坐標的中心值橫坐標,圖像坐標中心值的縱坐標,圖像寬度,圖像高度)
?2. 根據標定板的大小利用 gen_caltab 算子,生成描述文件。(保存到指定位置)
?3. 拍攝 14—20 組標定板圖像(eye_in_hand),并準確記錄每組圖像在拍攝時 TOOL_IN_BASE 位姿(此位姿從機器人中讀取)。 備注:在獲取標定圖像時,標定板不動,機器人末端的擺動要盡可能的全面,繞各 個軸的旋轉角要盡量的大。標定板要出現在相機視野的各個角落。理論上圖像越多, 角度越全面,標定精度越高。
標定階段:
?1. 讀取相機初始內參,設置描述文件路徑
?2. 創建標定數據模型 create_calib_data
3. 設置相機的參數類型 set_calib_data_cam_parm
4. 設置標定板的數據類型(此處用到了描述文件)
?5. 設置標定模式 set_calib_data(我使用的是非線性的方法)
?6. 循環讀取圖像將標定板的位姿信息和機器人末端在基坐標系位姿(TOOL_IN_BASE) 保存到標定數據模型中。
?7. 進行手眼標定 calibrate_hand_eye 備注:手眼標定最終獲得的是相機與機器人末端的位姿關系(Camera_In_Tool)。在循 環輸入 TOOL_IN_BASE 時其輸入格式一定要是 YZX 的(至少我試過 XYZ,YZY 是不行的), 到此標定就結束了。 如果是使用該標定結果的話,要先選擇參考的平面進行一步標定獲得參考的 obj_in_cam, 然后再計算抓取物體點與 obj_in_cam 的關系。所用到的方程如下: