cv2.projectPoints如何实际工作?

时间:2018-06-15 14:37:59

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

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

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

enter image description here

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

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

但是现在,由于z = 2r31,预测点不再有r32

1 个答案:

答案 0 :(得分:2)

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

X + t1
Y + t2
2

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

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

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