【问题标题】:Object points and Image points in OpenCV calibrateCameraOpenCV calibrateCamera 中的对象点和图像点
【发布时间】:2020-08-16 08:34:40
【问题描述】:

我想澄清一下 OpenCV 的 calibrateCamera 函数的参数。 功能是 cv.CalibrateCamera2(objectPoints, imagePoints, pointCounts, imageSize, cameraMatrix, distCoeffs, rvecs, tvecs, flags=0)

据我了解,“imagePoints”是平面校准图案中“检测到”的角。但我不明白 objectPoints 在帮助我们恢复 cameraMatrix 中的作用,以及它们的值的设置方式。

【问题讨论】:

  • 世界 3D x,y,z 点
  • 但是从示例中,我看到对象点通常是根据棋盘图案的尺寸来表示的。比如[8,3,0],[8,2,0]等等等等。
  • 是的,可能是这样,因为棋盘是一个平面,可以认为是在 z=0 平面上,所以所有点都有 z=0 坐标。
  • 嗯,我觉得我没看懂,所以我会更深入地阅读理论。
  • 检测到的角是图像中的棋盘角。对象点是 3D 世界中的检查点角。您可以自己选择坐标系,因此通常将坐标与 3D 平面对齐。您可以在 3D 中选择不同的平面,内在参数的结果应该不会有很大差异,但相机位置会有所不同。因此,如果您对所需的坐标系有所了解,请使用该信息。请记住,移动相机将得到与移动棋盘相同的投影(但相反)。

标签: python opencv


【解决方案1】:

总结

  • objectPoints 是“世界坐标”中从不“移动”的参考点(因为参考是图案计划)
  • objectPoints 坐标基于图案平面参考 (0,0,0) 点和参考长度
    • 大多数教程都参考棋盘的左上角
    • 参考长度是棋盘图案的“正方形的边长”
    • Z 坐标始终为 0,因为图案是平面的,并且棋盘点深度在棋盘平面中没有变化
  • 在相机校准期间,objectPoints 坐标与其对应的 imagePoints 像素坐标相对应
  • cameraCalibration 估计静态场景周围摄像机运动的外在([R|t] 矩阵)参数
  • cameraCalibration 估计焦距 (fx, fy) 和图像中心 (cx, cy) 的内在参数
  • cameraCalibration 尝试最小化运行重投影误差,即观察到的特征/图像点与投影对象点之间的距离平方和的总和

另外,值得注意的是“目前,内在参数的初始化(当 CV_CALIB_USE_INTRINSIC_GUESS 未设置时)仅针对平面校准模式(其中对象点的 Z 坐标必须全为零)实现。3D 校准装置可以只要提供了初始cameraMatrix,也可以使用。” 因此,如果您不提供相机焦距(fx,fy)和图像中心(cx,cy)内在参数,则必须使用平面(Z=0)校准模式。

详细看objectPoints定义

  • std::vectorstd::vector<:vec3f> - 校准图案坐标空间中校准图案点的向量向量(“世界坐标”)
    • 第一个向量 std::vector

      • 包含与模式视图数量一样多的元素
      • 如果在每个视图中显示相同的校准图案并且完全可见,则所有矢量将是相同的 [大小]
      • [如果使用] 部分遮挡的图案,甚至不同视图中的不同图案。然后,向量将不同[大小]
    • 第二个向量 cv::Vec3f

      • 包含与校准图案中要检测的点数一样多的元素
    • 第三个向量 第二个向量 std::vector

      • 包含要映射的图案上的 (X,Y,Z) 坐标,以及将在校准图案的投影上找到的 2D 坐标
      • 这些点是 3D 的,但由于它们位于图案坐标系中,因此,如果装备是平面的,则将模型放置在 XY 坐标平面上可能是有意义的,这样每个输入对象点的 Z 坐标为0.
      • 或者换一种说法,“世界坐标系附在棋盘上,由于所有角点都在一个平面上,所以我们可以任意选择Zw,每个点都为0”
    • “在校准过程中,我们通过一组已知的 3D 点 (Xw, Yw, Zw) [在世界坐标中] 及其在图像中对应的像素位置 (u,v) 来计算相机参数。”

      • 你有一个模式,你给它的点分配“世界坐标”。 IE。每个点之间的相对距离,与这个世界的参考比例尺相比,即“正方形的边长”
      • 如果需要,您可以有 10 种不同的图案,并处理它们以在图像中找到它们对应的像素位置 (u,v)
      • 您不关心相机的方向与图案(棋盘)相比,calibrateCamera 将在其算法中根据每个校准图案点与图案点“世界坐标”之间的像素距离来估计它们
      • calibrateCamera 将执行外部参数的 [R|t] 矩阵的估计
        • “[R|t] 将点 (X, Y, Z) 的坐标转换为相对于相机固定的坐标系。相机的方向。” “描述静态场景周围的相机运动”
      • calibrateCamera 将估计参数焦距 (fx, fy) 和图像中心 (cx, cy) 内在参数
      • "[calibrateCamera 将] 运行全局 Levenberg-Marquardt 优化算法以最小化重投影误差,即观察到的特征点 imagePoints 与投影的距离平方和的总和(使用相机参数的当前估计值和姿势) 对象点 objectPoints"

参考文献

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2015-05-05
    • 2019-05-03
    • 2010-09-21
    • 2017-10-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-12-09
    相关资源
    最近更新 更多