几何校准 和 ros环境下标定Balser相机
几何校准
基本概念
内参数
- 内参数是相机内部的参数,与相机的位置无关,由镜头和感光元器件的特性决定。
- 包括:主距,主点,畸变参数
畸变参数
径向畸变:正和负径向畸变
- [@] 正径向畸变 (桶形畸变):
- 在这种畸变中,图像中心附近的点会向外移动,图像看起来像是从中心向外膨胀,尤其是在图像的边缘部分,变形最为显著。
- 关键点: 随着点到图像中心的距离增加,畸变也增加。即,距离越远,图像拉伸得越厉害。这种畸变的增量与角度无关,仅与点到中心的距离有关。
- [@] 负径向畸变 (枕形畸变):
- 在这种畸变中,图像中的点向内收缩,图像看起来像是被压入到中心,尤其是在图像的边缘部分,收缩更为明显。
- 关键点: 随着点到图像中心的距离增加,畸变也增加,但方向相反,即图像被向中心挤压。这个畸变的增量同样与角度无关,仅与点到中心的距离有关。
- 切向畸变 (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文件就是我们需要的标定结果输出结果: