幾何校準
基本概念
內引數
- 內引數是相機內部的引數,與相機的位置無關,由鏡頭和感光元器件的特性決定。
- 包括:主距,主點,畸變引數
畸變引數
徑向畸變:正和負徑向畸變
- [@] 正徑向畸變 (桶形畸變):
- 在這種畸變中,影像中心附近的點會向外移動,影像看起來像是從中心向外膨脹,尤其是在影像的邊緣部分,變形最為顯著。
- 關鍵點: 隨著點到影像中心的距離增加,畸變也增加。即,距離越遠,影像拉伸得越厲害。這種畸變的增量與角度無關,僅與點到中心的距離有關。
- [@] 負徑向畸變 (枕形畸變):
- 在這種畸變中,影像中的點向內收縮,影像看起來像是被壓入到中心,尤其是在影像的邊緣部分,收縮更為明顯。
- 關鍵點: 隨著點到影像中心的距離增加,畸變也增加,但方向相反,即影像被向中心擠壓。這個畸變的增量同樣與角度無關,僅與點到中心的距離有關。
- 切向畸變 (Tangential Distortion):
- 切向畸變會使影像中的直線發生一定的扭曲,通常是由於鏡頭安裝在相機上時沒有完全對準成像平面而引起的。這個畸變會導致影像中的直線變成曲線,但不像徑向畸變那樣規則。
- 切向畸變往往會導致影像的一部分看起來傾斜或彎曲,尤其是在影像的角落處。
鏡頭畸變的數學模型
棋盤格標定
(5 封私信 / 81 條訊息) 為何opencv張正友相機標定需要十幾張棋盤格照片? - 知乎 (zhihu.com)
詳解見知乎,此方法的推導有所不懂。
獲取各引數:
棋盤格標定演算法流程
- 透過世界座標系下的棋盤格角點座標和影像座標系下的角點座標計算單應矩陣H
- 透過外參中旋轉矩陣提供的約束建立約束方程,並使用至少3張圖(3個不同位置拍攝棋盤格)來計算相機的內參K
- 透過已知的H和K反推出外參R,t
- 將畸變係數初始化為0,並將1.2.3計算出的內參、外參作為初始值進行非線性最佳化
實踐
ros 環境下標定Balser相機
參考教程
攝像頭標定--camera_calibration-CSDN部落格
csdn 付費資源下載網站
影片教程(5) Calibration of USB camera for AprilTag package in ROS - YouTube
標定棋盤格下載 Camera Calibration Pattern Generator – calib.io
本教程在已經配置好 basler 相機的 pylon 環境下進行。
詳細環境配置參考 : ubuntu20.04安裝basler相機ROS驅動並使用ROS採集資料_basler相機 ros-CSDN部落格 (注意看評論可規避一些坑,師弟師妹看課題組思維導圖,都有介紹)
程式碼
- 首先安裝必要的包:
sudo apt install ros-noetic-camera-calibration
- 建立新終端,啟動 ROS 核心:
roscore
- 新開終端,啟動 Basler 相機(這是我 basler sdk 的存放位置):
source ~/ROS_Basler_camera/catkin_ws/devel/setup.bash
roslaunch pylon_camera pylon_camera_node.launch
- 檢查相機是否正常工作(新開終端):
# 檢視影像話題
rostopic list | grep image
# 檢視影像流是否正常
rosrun image_view image_view image:=/pylon_camera_node/image_raw
- 如果影像正常,新開終端執行標定程式(根據你的標定板引數修改):
# 假設標定板是 8x11 格子(內角點 7x10),格子尺寸 16mm
rosrun camera_calibration cameracalibrator.py --size 7x10 --square 0.016 image:=/pylon_camera_node/image_raw camera:=/pylon_camera_node
命令介面:
標定完成介面:點選儲存 save,儲存路徑在 tmp/calibrationdata. tar. gz
yaml檔案就是我們需要的標定結果輸出結果: