【问题标题】:How does cv2.projectPoints actually work?cv2.projectPoints 实际上是如何工作的?
【发布时间】:2018-11-25 10:16:19
【问题描述】:

我正在尝试编写自己的 cv2.projectPoints 实现,只是为了练习,但我的实现没有按预期运行。

我假设针孔相机没有失真,所以我所做的只是将以下等式应用于我的所有平面对象点。

假设在某个世界空间中(平面和相机都存在于其中),平面距离 2 个单位。所以,在世界坐标空间中,平面上的所有点都有z=2。但是,在平面自身的坐标空间中,平面上的所有点都有z=0。因此,对于我要投影的所有坐标,矢量[X Y Z 1] 实际上是[X Y 0 1]。假设我在姿态估计中发现对象在z 方向上平移了-2。将此向量乘以找到的姿势后,我得到向量...

r11X + r12Y  + t1
r21X + r22Y  + t2
r31X + r32Y  + 2

但是现在,由于r31r32,投影点不再有z = 2

【问题讨论】:

  • 在 opengl 文档或 ted 书籍或其他方面有一些很好的 3d 投影解释。

标签: opencv computer-vision linear-algebra projection camera-calibration


【解决方案1】:

项目点的工作原理与您描述的公式一样。在没有旋转的简单情况下(旋转矩阵是恒等式),您最终会得到如下结果:

X + t1
Y + t2
2

这正是您所期望的。您正在使用姿势估计,这意味着这种简单的情况几乎不会出现,因为您总会有一些错误,但应该很小......这意味着最后r31X + r32Y 应该导致接近0. 如果不是这样,那么位姿估计可能有误差。另外,请考虑两个值也可以相互抵消。

还有一件事,一旦你乘以整个公式,你会得到一个 3D 向量,你必须将向量除以最后一个分量才能得到 2D 投影点。

如果可能的话,最好举一个带有数字的例子来了解你实际有多少错误,看看它是否是由于其他原因造成的......

【讨论】:

    猜你喜欢
    • 2021-01-21
    • 2011-09-27
    • 2021-12-16
    • 2013-03-14
    • 2021-03-23
    • 2011-02-11
    • 2017-07-31
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多