我正在尝试编写自己的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
但是现在,由于 r31
和 r32
,预计的点不再具有 z = 2
.
1 回答
项目点的工作方式与您描述的公式相同 . 在没有旋转的简单情况下(旋转矩阵是同一性),你会得到如下结果:
这正是您的期望 . 你正在使用一个姿势估计,这意味着这个简单的情况几乎永远不会,因为你总会有一些错误,但应该很小....这意味着最后
r31X + r32Y
应该导致接近0的东西 . 如果不是这种情况,则姿势估计可能有误差 . 另外,请考虑两个值也可以相互抵消 .还有一件事,一旦你将WHOLE公式相乘,你将获得一个3D矢量,你必须将矢量除以最后一个分量以获得2D投影点 .
如果可能的话,你会举一个数字的例子,以了解你实际有多少错误,看看是否是由于另一件事......