专栏/ROS2-humble实现相机内参标定

ROS2-humble实现相机内参标定

2024年12月21日 15:28--浏览 · --点赞 · --评论
粉丝:54文章:13

为什么要标定?

相机标定的目的是为了确定相机内部参数和外部参数,以便修正图像并将图像坐标映射到世界坐标,或者从世界坐标映射到图像坐标。这个过程是计算机视觉和三维感知任务的关键步骤之一,它有以下主要目的:

减小畸变:相机镜头和传感器可能引入径向和切向畸变,使得图像中的直线变得弯曲或者物体的形状不准确。通过标定相机,可以矫正这些畸变,使图像更准确。

确定内部参数(intrinsic parameters):内部参数包括焦距、主点坐标和相机畸变参数。这些参数是描述相机如何捕捉世界的重要因素,它们的准确值对于计算深度、距离和姿态等任务至关重要,相机内参标定就是为了获取精确的内部参数

标定原理:

相机成像模型,描述了三维空间点在相机成像平面上的投影关系。

公式如下:

Z%20%5Cbegin%7Bpmatrix%7D%0Au%20%5C%5C%0Av%20%5C%5C%0A1%0A%5Cend%7Bpmatrix%7D%0A%3D%0A%5Cbegin%7Bpmatrix%7D%0Af_x%20%26%200%20%26%20c_x%20%5C%5C%0A0%20%26%20f_y%20%26%20c_y%20%5C%5C%0A0%20%26%200%20%26%201%0A%5Cend%7Bpmatrix%7D%0A%5Cbegin%7Bpmatrix%7D%0AX%20%5C%5C%0AY%20%5C%5C%0AZ%0A%5Cend%7Bpmatrix%7D%0A%5Coverset%7B%5Cmathrm%7Bdef%7D%7D%7B%3D%7D%20%5Cmathbf%7BK%7D%20%5Cmathbf%7BP%7D

各个符号的含义:

  1. (X, Y, Z)

    • 三维空间点的坐标,表示物体在相机坐标系中的位置。

  2. (u, v)

    • 像素坐标系中的坐标,表示三维点在成像平面上的投影点坐标。

  3. Z

    • 到相机光心的深度(深度信息)。

  4. K

  • 相机内参矩阵(Camera Intrinsic Matrix):包含相机的内参信息。

%5Cmathbf%7BK%7D%20%3D%20%0A%5Cbegin%7Bpmatrix%7D%0Af_x%20%26%200%20%26%20c_x%20%5C%5C%0A0%20%26%20f_y%20%26%20c_y%20%5C%5C%0A0%20%26%200%20%26%201%0A%5Cend%7Bpmatrix%7D

  • fx,fy:相机的焦距,分别在x和y方向的像素单位表示。

  • cx,cy:图像的主点(光轴与成像平面交点)在像素坐标系中的坐标。

5. P

    • 三维空间点坐标向量。

这个公式说明了如何将三维世界中的点 (X, Y, Z) 投影到相机成像平面上,并转化为像素坐标 (u,v):

  1. 通过相机内参矩阵 K 将三维点的相机坐标系 (X,Y,Z) 转换为归一化平面坐标。

  2. 乘以深度 Z 来恢复真实的像素坐标。

投影公式展开:

从公式中可以解出像素坐标 (u,v):

u%3D%5Cfrac%7Bf_x%20X%7D%7BZ%7D%20%2B%20c_x%20%5C%5C%20%0Av%3D%5Cfrac%7Bf_y%20Y%7D%7BZ%7D%20%2B%20c_y


标定板

  1. 标定板生成工具:https://calib.io/pages/camera-calibration-pattern-generator

  2. 标定板的脚点定义:角点的个数为棋盘格的标定大小,因此(9 * 6)标定板应有(10 * 7)个黑白方格

安装camera-usb功能包

安装标定程序

启动USB相机

查看相机的话题

启动标定程序

  • -size 当前标定板大小

  • -square 每个小棋盘格的边长,单位米

  • image:=/camera1/image_raw 图像来源主题

  • camera:=/usb_cam 相机名称

标定方法:

调整标定板按照以下顺序调整标定板,使得相机拍摄尽量多的不同视角下的有效照片

  • 前后移动标定板

  • 上下移动标定板

  • 左右移动标定板

  • 沿Yaw轴旋转标定板

  • 沿Pitch轴旋转标定板

  • 沿Roll轴旋转标定板

当X、y、Size、Skew状态条变为绿色时表示结果良好按下“CALIBRATE”即可进行内参的计算

标定完成后点击”SAVE”

文件保存在' ` /tmp/calibrationdata.tar.gz `  


移动文件并解压所

其中ost.yaml就是我们的表定结果

  • image_height、image_width:图片的高、宽

  • camera_name:摄像头名

  • camera_matrix:摄像头的内部参数矩阵

  • distortion_model:畸变模型

  • distortion_coefficients:畸变系数(主要数据:依次为K_1, K_2, P_1 P_2, K_3)

  • rectification_matrix:为矫正矩阵,一般为单位阵

  • projection_matrix:为外部世界坐标到像平面的投影矩阵(主要数据:依次为f_x, f_y, c_x, c_y)

应用

双目相机程序示例
图像畸变处理示例

参考文章:

原文链接:https://blog.csdn.net/xzy53719/article/details/135839286

原文链接:https://blog.csdn.net/m0_56661101/article/details/132732905

原文:《视觉-SLAM十四讲_book2,chapt5—真孔相机模型》

投诉或建议