中国 · 南京 · 栖霞区紫东路2号紫东国际创意园B3-2幢5F
+86-18994094214 (仅工作日:8:30~17:30)
contact@oakchina.cn

【转】OAK-D双目相机进行标定及标定结果说明

【转】OAK-D双目相机进行标定及标定结果说明

作者:A. hyh@CSDN
编辑:OAK中国

▌一、启动相机

roslaunch depthai_examples stereo_inertial_node.launch enableRviz:=false depth_aligned:=false stereo_fps:=4

enableRviz:=false:这个参数可以打开或关闭 Rviz 可视化工具,在这里是关闭 Rviz。
depth_aligned:=false:此参数控制是否输出深度映射图像,这里是不输出。
stereo_fps:=4:设置实时立体摄像机帧率为 4 帧/秒。

▌二、录制视频

rosbag record /stereo_inertial_publisher/left/image_rect /stereo_inertial_publisher/right/image_rect -O stereo.bag

这个命令使用了 rosbag record 指令来记录两个 topics:
/stereo_inertial_publisher/left/image_rect和/stereo_inertial_publisher/right/image_rect。

这两个 topics 分别对应相机的左侧和右侧图像。

-O stereo.bag 是一个可选参数,在此处用于指定保存记录数据的文件名为“stereo.bag”。因此,执行这个命令后,ROS系统会在后台记录左摄像头和右摄像头的图像,并将它们保存到名为“stereo.bag”的ROS bag文件中。

CTRL+C停止录制

▌三、标定

rosrun kalibr kalibr_calibrate_cameras --bag ../stereo.bag --topics /stereo_inertial_publisher/left/image_rect /stereo_inertial_publisher/right/image_rect --models pinhole-radtan pinhole-radtan --target ../OAK_D/april_6x6.yaml

这是一个ROS命令行命令,用于使用Kalibr包中的kalibr_calibrate_cameras节点对相机进行标定。下面是参数的简要解释:

  • rosrun:一个ROS命令,用于在终端中运行ROS节点或包。 kalibr_calibrate_cameras:相机标定节点名。
  • kalibr_calibrate_cameras:相机标定节点名。
  • –bag …/stereo.bag:这是一个ROS bag文件的路径,其中包含用于标定的图像和传感器数据。
  • –topics /stereo_inertial_publisher/left/image_rect /stereo_inertial_publisher/right/image_rect:用于标定的图像主题名称。
  • –models pinhole-radtan pinhole-radtan:指定相机模型类型。
  • –target/home/gagaga/catkin_ws/src/OKA_D/april_6x6.yaml:指定标定板的参数文件路径和名称。

▌四、生成的结果

图一:述了两个相机之间共同观察一个场景的次数。这个概念也被称为“共视图”或“互测图”。在这个图中,每个节点表示一个空间点,每条边表示两个相机之间的观测次数,权重则表示两个相机观察同一点的互测次数,权重越高说明观测的次数越多,表明对点的准确测量更可靠。

图二:“camera system”通常是指通过相机的内参和外参,描述整个相机系统的参数矩阵。它定义了相机系统从世界坐标系到图像平面中每一个像素的转换关系,从而将双目视觉中的两个独立的视觉通道进行了合并。

图三: “cam0:estimated poses”指代的是相机1(左相机)在世界坐标系下的相对位姿。

图四:由于标定的误差和测量的噪声,相机参数可能不是完全准确的,需要进行误差分析。一个常用的评估标准是极线误差(Polar Error)。“cam0:polar error”描述了左相机与右相机之间重投影误差的分布情况。具体地说,polar error是每个点的实际位置与其在另一个相机的影像平面上估计位置之间的距离,并且以极线为单位描述,即该误差是沿着极线方向的距离。在标定后,相机参数被用于立体校正,即将左右相机图像对齐以便于进行立体匹配。在立体匹配过程中,对于每个左图像上的像素点,需要在右相机上寻找其对应的点,这可以通过以下方法之一实现:极线搜索,立体匹配,深度估计等。无论使用哪种方法,都需要估算出点在右相机上的位置。Polar Error反映了这个位置估计的准确性。

图五:cam0:azimuthal error”是指对于每个点的实际值和估计值之间的方位角误差,其中方位角是指相对于相机水平轴(ox 轴)的角度。该指标反映了计算出的深度值与实际深度之间的误差,并以弧度或角度形式成单个度量值。评估Polar Error和Azimuthal Error是双目相机标定后检查和优化立体视觉重建算法的重要过程。

图六:“cam0: reprojection errors”是双目相机标定的一个指标,用于评估每个图像特征点的重新投影误差大小。具体地说,它是将标定后的相机内外参数应用于特征点的2D像素坐标,计算其与实际特征点的图像位置之间的距离(通常以像素为单位),以此度量标定的准确度。 Reprojection Error为检测标定结果的精度提供了一个简单而有效的方法。通常,如果平均重投影误差非常小(一般小于1个像素),那么标定结果被认为是非常优良的。反之,如果平均重投影误差很大,则需要对标定结果进行调整或重新标定。

图七:在标定中,需要识别和清除这些异常值,以提高标定结果的准确性。“location of removed outlier corners”是双目相机标定结果图中的一个指标,用于表示在标定过程中检测到的异常点所在的图像位置。这通常是一个交互式图表,显示所有检测到的异常点的位置,以及根据算法获取的异常临界值。异常点可以通过各种合适的算法和技术进行检测和去除。在标定过程中,可能会将其与其他异常值分离,并记录其坐标信息。因此,“location of removed outlier corners”显示了这些异常值的位置,以便研究人员评估标定准确性并了解哪些数据点对标定的影响最大。

stereo-results-cam.txt 是双目相机标定的结果文件,其中记录了标定结果中双目相机各自的内外参数和它们之间的相对变换关系等重要信息。这些参数可以被用于计算相机的外部位姿和三维点云坐标。由于标定的精度和准确性直接影响后续任务的质量,因此该文件是双目相机标定的一个重要输出。

D矩阵畸变参数k1、k2、p1、p2
distortion: [-0.01351866 0.00282827 -0.00084567 0.00188117] ± [0.00055869 0.00046119 0.00011658 0.00016122]:这个参数描述了相机的畸变模型,其中 [-0.01351866 0.00282827 -0.00084567 0.00188117] 是相机的畸变系数向量,该向量表示相机畸变的类型和程度;而 [+0.00055869 0.00046119 0.00011658 0.00016122] 表示每个畸变系数的估计误差,类似于标准差。

projection: [570.19685483 572.9469566 633.05769608 348.96007466] ± [0.54881124 0.55288321 0.29987289 0.28100582]:这个参数表示相机的内部参数,包括焦距和光心的坐标等信息。具体描述了相机像素坐标系到相机坐标系的投影关系,[570.19685483 572.9469566 633.05769608 348.96007466] 表示相机的 4 个主要内部参数,也就是相对应的相机的焦距和光心坐标等特征;而 [+0.54881124 0.55288321 0.29987289 0.28100582] 表示每个主要内部参数的估计误差,类似于标准差。

reprojection error: [-0.000031, -0.000001] ± [1.270309, 1.373586]:该参数表示重投影误差,是反映相机标定质量的一个指标。[-0.000031, -0.000001] 是相机平均的重投影误差,表示相机将 3D 点投影到图像空间中的重投影误差;而 [+1.270309, 1.373586] 则是对这个误差的估计误差,类似于标准差。

索引