首页 文章

cv2.projectPoints如何实际工作?

提问于
浏览
1

我正在尝试编写自己的cv2.projectPoints实现,仅用于练习,而我的实现并没有按预期运行 .

我假设没有失真的针孔相机,所以我所做的就是将以下等式应用于我的所有平面物点 .

enter image description here

让我们说在一些世界空间(飞机和摄像机都存在),飞机距离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 .

1 回答

  • 2

    项目点的工作方式与您描述的公式相同 . 在没有旋转的简单情况下(旋转矩阵是同一性),你会得到如下结果:

    X + t1
    Y + t2
    2
    

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

    还有一件事,一旦你将WHOLE公式相乘,你将获得一个3D矢量,你必须将矢量除以最后一个分量以获得2D投影点 .

    如果可能的话,你会举一个数字的例子,以了解你实际有多少错误,看看是否是由于另一件事......

相关问题