上手一个RGBD深度相机:从原理到实践--ROS noetic+Astra S(中):RGB相机的标定和使用

前言


1 相机标定

1-1 概念回顾
  • 相机标定(Camera Calibration)是计算机视觉中的一个基本步骤,其目的是确定相机的内参(internal parameters)和可能的外参(external parameters)。内参包括焦距(focal length)、主点(principal point)、畸变系数(distortion coefficients)等,而外参则包括相机的位置和方向。
  • 回顾上一次推导的结果
1-2 标定板
  • 标定板(Calibration Board)是相机标定过程中使用的物理图案,用于确定相机的内部和外部参数。标定板上的图案可以是棋盘格、圆点或其他可识别的模式。

  • 类型

    • 棋盘格(Chessboard):这是最常用的标定板类型,通常由黑白相间的方格组成。棋盘格的角点易于检测,并且可以提供丰富的特征点用于标定计算。

    • 圆点(Circle Grid):这种标定板由均匀分布的圆点组成,同样易于检测,并且在某些情况下可能比棋盘格更易于处理。

    • AprilTag:这是一种特殊的二维码,包含了编码信息,可以用于更高级的相机标定和增强现实应用。

  • 使用

    • 在相机标定过程中,标定板被放置在已知位置,相机从多个角度拍摄标定板的图像。通过分析这些图像中的特征点,可以计算出相机的内部参数(如焦距、主点和畸变系数)和外部参数(如旋转矩阵和平移向量)。
  • 这里我使用的是现成玻璃材质的标定板

    • 图中左下角有GP400 12*9-30的字样
      • GP400:标定板的型号
      • 12*9:棋盘格的大小,即12行和9列的方格。
      • 30:每个方格的尺寸,30mm
  • 下面我们看看如何使用这个棋盘格对相机的内参矩阵进行标定。


2 camera-calibration

2-1 介绍
  • camera_calibration 是 ROS 提供的一个相机标定工具包,适用于单目和双目相机的标定。它使用棋盘格作为标定板,而非 AprilTag。该工具包基于 OpenCV 的原理,能够方便地估计相机的内部参数(如焦距、主点和畸变系数)和外部参数(如旋转矩阵和平移向量)
2-2 安装
  • 新开一个终端,我们直接安装即可
bash 复制代码
sudo apt install ros-$ROS_DISTRO-camera-calibration
2-3 RGB标定
  • 老规矩我们连接好相机,打开驱动程序(astra.launch)

  • 标定程序需要订阅到摄像头话题,回顾上一节的内容,我们需要订阅的是/camera/color/image_raw

  • 运行标定程序

    bash 复制代码
    rosrun camera_calibration cameracalibrator.py --size 8x11 --square 0.030 image:=/camera/color/image_raw
    • --size 8x11:注意这里填的不是棋盘格的行列数,是内部角点的行列数

    • --square 0.030:每一小格的边长

    • image:=/camera/color/image_raw:图像话题

  • 上述程序运行后会弹出如下窗口

  • 相机类型选择

    • Camera type摄像头类型:,这里我们选择0
      • 0 pinhole针孔
      • 1 fisheye鱼眼
    • scale:比例,设置为1即可
  • 我们来看右侧这四个进度条

    • X:棋盘格在摄像头视野中的左右移动
    • Y:棋盘格在摄像头视野中的上下移动
    • Size:棋盘格在摄像头视野中的前后移动
    • Skew:棋盘格在摄像头视野中的倾斜转动
  • 我们需要不断移动棋盘格,不断采集四个进度条的数据,当数据采集完成时候,CALIBRATE按钮会变色(尽量让四个条都变成绿色)

  • 依次点击CALIBRATE,标定完成后SAVECOMMIT会亮起,点击SAVE进行保存,点击COMMIT进行提交关闭程序

  • 终端可以看到标定的结果和标定文件保存的位置
    ('Wrote calibration data to', '/tmp/calibrationdata.tar.gz')

  • 我们打开ost.yaml

yaml 复制代码
image_width: 640
image_height: 480
camera_name: narrow_stereo
camera_matrix:
  rows: 3
  cols: 3
  data: [524.2458 ,   0.     , 320.59801,
           0.     , 522.832  , 240.49402,
           0.     ,   0.     ,   1.     ]
distortion_model: plumb_bob
distortion_coefficients:
  rows: 1
  cols: 5
  data: [0.016076, -0.099965, 0.000828, -0.000928, 0.000000]
rectification_matrix:
  rows: 3
  cols: 3
  data: [1., 0., 0.,
         0., 1., 0.,
         0., 0., 1.]
projection_matrix:
  rows: 3
  cols: 4
  data: [519.10468,   0.     , 319.54747,   0.     ,
           0.     , 521.18512, 240.27539,   0.     ,
           0.     ,   0.     ,   1.     ,   0.     ]
  • image_width 和 image_height:即图像的宽度和高度
  • camera_name:这是相机的名称 "narrow_stereo"。
  • camera_matrix:相机矩阵(也称为内参矩阵)描述了相机的内部参数。
  • distortion_model:畸变模型描述了镜头的畸变类型。这里使用了 "plumb_bob" 模型,这是一种简化的径向畸变模型。
  • distortion_coefficients:畸变系数是与畸变模型相关的参数,用于校正镜头的畸变。这里有五个畸变系数:k1, k2, p1, p2, k3。这些系数用于校正镜头的径向和切向畸变。
  • rectification_matrix:校正矩阵用于校正相机的图像,使其更适合于立体视觉应用。在这个例子中,校正矩阵是一个单位矩阵,意味着没有应用特定的几何校正。
  • projection_matrix:
    投影矩阵用于将三维空间中的点投影到二维图像平面上。在这个例子中,投影矩阵与相机矩阵非常相似,但可能包含了一些额外的变换,用于校正图像的几何失真。

2-4 RGB标定使用
  • 根据上一节说的,在ros_astra_camera中,我们可以添加标定的结果到启动文件
xml 复制代码
<launch>
    <!--...-->
    <arg name="color_info_uri" default="file:///you_depth_camera_calib_path/rgb_camera.yaml"/>
    <!--...-->
</launch>
  • 我们观察以下默认的启动时候调用的默认标定文件

  • 我们需要修改我们的标定文件摄像机的名字为rgb_camera

yaml 复制代码
image_width: 640
image_height: 480
camera_name: rgb_camera
  • 同时我们修改启动文件的标定文件路径为我们存放标定文件的路径中
xml 复制代码
<arg name="color_info_uri" default="file:///home/zhlucifer2/ros-bicycle/src/ros_astra_camera/ost.yaml"/>
  • 重新启动相机,可以看到我们的标定文件已经被使用了

小结

  • 本节我们介绍了如何能使用camera-calibration进行RGB相机标定和启动
  • 下一节我们讲讲我们该如何对深度相机进行标定
  • 如有错误,欢迎指出!!!!感谢大家的支持!
相关推荐
春末的南方城市1 天前
CineMaster: 用于电影文本到视频生成的 3D 感知且可控的框架。
人工智能·数码相机·计算机视觉·语言模型·aigc·图像生成
徐行tag1 天前
PnP——根据3D与2d图片估计相机运动
人工智能·数码相机·3d·视觉slam
JANGHIGH3 天前
标定系列——基于标定板的相机内参与LiDAR-相机外参联合标定方法
数码相机
程序员Android3 天前
AI 在未来相机领域的应用前景如何?
人工智能·数码相机·智能电视
幻想趾于现实4 天前
PLC通讯
数码相机·通信协议
幻想趾于现实4 天前
视觉应用工程师(面试)
人工智能·数码相机·计算机视觉
烟锁池塘柳05 天前
Camera ISP Pipeline(相机图像信号处理管线)
图像处理·数码相机·信号处理
3DVisionary5 天前
XTOP3D的DIC技术在极端条件下的应用解决方案
数码相机·3d·航空工业·全场应变测量·航空机匣内部四测头同步测量·反射镜辅助dic观测·四测头方案
视觉人机器视觉7 天前
3D与2D机器视觉机械臂引导的区别
人工智能·数码相机·计算机视觉·3d·视觉检测
LabVIEW开发7 天前
LabVIEW开发中的电机控制与相机像素差
数码相机·labview