【问题标题】:Project image points to object points with opencv 3.0.0 beta使用 opencv 3.0.0 beta 将图像点投影到对象点
【发布时间】:2015-05-05 05:38:54
【问题描述】:

我使用 opencv 3.0.0 beta。

我校准了我的相机,我想将图像点 (2D) 投影到 3D 点。

我看到了函数:void fisheye::projectPoints(InputArray objectPoints, OutputArray imagePoints, InputArray rvec, InputArray tvec, InputArray K, InputArray D, double alpha=0, OutputArray jacobian=noArray()),但我想要相反的投影。

我知道:

  • 相机矩阵,
  • 失真系数,
  • 平移向量,
  • 旋转矢量和
  • 我的对象 3D 点与 3D 原点之间的距离。

我该怎么做?

【问题讨论】:

  • 不可能...你会怎么做?唯一的方法是通过像素创建一条射线,并说对象点在该射线上的“某处”。如果你知道相机和物体之间的深度范围,你可以说“它在光线上的这个位置”......所以如果你没有一些额外的(例如深度)信息,或者多个相交的光线(=多个相机)那个像素,你不能从图像“投影”到物体!!
  • 因为从对象到图像的投影减少了无法重建的信息(距离);)
  • 好吧,我没想到。如果对象必须在圆形表面上(由网格表示),那有可能吗?
  • 嗯,如果您知道相机的内在+外在参数并且您知道网格(位置),您可以拍摄相同类型的光线并计算与网格的交集为该像素的对象点!
  • 抱歉,我编辑了我的问题。事实上,我没有网格,只有我的对象 3D 和 3D 原点之间的距离。那么,opencv 可以给我射线方向吗?

标签: opencv camera-calibration fisheye opencv3.0


【解决方案1】:

如果您知道物体的 3D 几何形状和对应的 2D 图像点,那么您就可以从 3D-2D 点对应关系中找到物体的姿态。

你需要知道:

  • objectPoints:3D对象坐标空间中的对象点数组,
  • imagePoints – 对应二维图像点的数组,
  • 以及相机矩阵和畸变系数

然后solvepnp() 将估计rvectvec 一起将点从模型坐标系带到相机坐标系。

【讨论】:

  • 单应性计算后如何通过ORB匹配找出objectPoints和imagePoints?
【解决方案2】:

“图像点”是图像中网格角的坐标。这些以像素比例给出。

“对象点”是网格角在“对象空间”中的坐标,即它们相对于彼此的位置。

因此,例如,您可以在图像坐标(127, 265) 处设置左上角,其对象坐标为(0, 0),因为左上角是两个轴上的第一个。其右侧的下一个角可能有坐标(145, 263),其对象坐标将是(1, 0)(即第二列第一行的角)等。

【讨论】:

    【解决方案3】:

    为了解决我的问题,我实现了自己的重投影功能。这个函数是 fisheye::projectPoint 的反函数。这是针对我的问题的,因为我的 3D 点和原点之间的距离是已知的。

    感谢 Micka 的 cmets。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2023-03-03
      • 1970-01-01
      • 2014-05-13
      • 1970-01-01
      • 2019-09-24
      相关资源
      最近更新 更多