Opencv cv2.projectPoints实际上是如何工作的?
我正在尝试编写自己的实现,只是为了练习,而我的实现并没有按照预期的那样运行 我假设一个针孔相机没有失真,所以我所做的就是把下面的方程应用到我所有的平面对象点上 假设在某个世界空间中(平面和相机都存在),平面距离为2个单位。因此,在世界坐标空间中,平面上的所有点都具有Opencv cv2.projectPoints实际上是如何工作的?,opencv,computer-vision,linear-algebra,projection,camera-calibration,Opencv,Computer Vision,Linear Algebra,Projection,Camera Calibration,我正在尝试编写自己的实现,只是为了练习,而我的实现并没有按照预期的那样运行 我假设一个针孔相机没有失真,所以我所做的就是把下面的方程应用到我所有的平面对象点上 假设在某个世界空间中(平面和相机都存在),平面距离为2个单位。因此,在世界坐标空间中,平面上的所有点都具有z=2。但是,在平面自身的坐标空间中,平面上的所有点都具有z=0。因此,向量[xyz1]实际上是[xy01]对于我试图投影的所有坐标。假设我在姿势估计中发现,对象在z方向上平移-2。将这个向量乘以找到的姿势,我得到向量 r11X +
z=2
。但是,在平面自身的坐标空间中,平面上的所有点都具有z=0
。因此,向量[xyz1]
实际上是[xy01]
对于我试图投影的所有坐标。假设我在姿势估计中发现,对象在z
方向上平移-2
。将这个向量乘以找到的姿势,我得到向量
r11X + r12Y + t1
r21X + r22Y + t2
r31X + r32Y + 2
但是现在,投影点不再具有
z=2
,因为r31
和r32
投影点的工作原理与您描述的公式相同。在没有旋转(旋转矩阵是恒等式)的简单情况下,最后会得到如下结果:
X + t1
Y + t2
2
这正是你所期望的。您正在使用姿势估计,这意味着这个简单的情况几乎永远不会发生,因为您总是会有一些错误,但应该非常小。。。。这意味着在结束时,r31X+r32Y
应导致接近0的结果。如果情况并非如此,则姿势估计可能存在错误。同时,考虑这两个值也可以相互抵消。< /P>
还有一件事,一旦你乘以整个公式,你将得到一个3D向量,你必须将向量除以最后一个分量,才能得到2D投影点
如果可能的话,你最好给出一个有数字的例子,以了解你实际有多大的误差,并看看这是否是由于另一件事造成的…Afair在opengl文档或ted书籍或其他东西中对3d投影有一些很好的解释。