我想知道有多少2D< - >使用直接线性变换算法对计算机视觉中相机的姿态估计需要3D点对应以及为什么?
在姿势估计中,搜索的3x4矩阵是[R | T]有12个未知参数。在DLT中,每个点对应给出2个线性无关方程,所以我假设,需要6个对应来求解方程。
在openCV
solvePnp
的实施中,只需要4分,我无法弄清楚原因。
如果有人可以解释姿势估计需要多少对应以及原因,那将会非常有帮助。谢谢!
答案 0 :(得分:0)
外部方向(或姿势)只有六个参数,三个用于方向,三个用于位置。基本上我们只需要三个点来估计相机的姿势(正如你所说的每个点给出两个约束)但是它不会给你一个独特的解决方案,但你确定你有一定数量的解决方案。
因此,至少有四点可以获得独特的解决方案。这是一个非线性问题,需要迭代的方法。
如果你使用12个未知数的矩阵,那么你可以线性地解决问题,你可以找到最接近的旋转矩阵,它不必是正交的。
修改强>
如果您使用了12个未知数,正如我所说,您只能得到pose = 6参数的近似值。所以这是DFT解决方案之后的又一步。
在opencv函数中,我不知道他们在哪里使用DFT,请查看link
解决PnP问题的方法:
CV_ITERATIVE
迭代方法基于Levenberg-Marquardt优化。在这种情况下,函数会找到一个最小化重投影误差的姿势,即观察投影imagePoints和投影(使用projectPoints())objectPoints之间的平方距离之和。
CV_P3P
方法基于X.S.的论文。高,X.-R.侯,J。唐,H.-F。 Chang“透视 - 三点问题的完整解决方案分类”。在这种情况下,该函数只需要四个对象和图像点。
CV_EPNP
方法由F.Moreno-Noguer,V.Lepetit和P.Fua在论文“EPnP:Efficient Perspective-n-Point Camera Pose Estimation”中介绍。
修改强>
我阅读了实施内容,你是对的,他们从DFT开始,只是为了初始化相机的6个参数,然后他们使用CvLevMarq Class来最小化错误重投影。
答案 1 :(得分:0)
当我们只有4个已知的3D-2D对应关系时,即,齐次线性方程组的数量(8)小于未知参数的数量(12),将有无数个非零解。我们仅向迭代求解器提供一个可能或可行的解决方案,作为初始估计。可以根据一些约束(例如|| x || = 1等)来选择此解决方案。 有道理吗?