相机姿态估计(四)--AP3P

AP3P

论文:An Efficient Algebraic Solution to the Perspective-Three-Point Problem

从数学的角度,提出了经典P3P算法的更快,更鲁棒,更准确的求解算法。根据已知3对点,可以计算相机位姿和参数。

问题定义:

给定特征fi i = 1, 2, 3在参考坐标系中的位置相机姿态估计(四)--AP3P,以及特征点在相机坐标系中的方向测量向量相机姿态估计(四)--AP3P,目标是估计相机的旋转矩阵和位置相机姿态估计(四)--AP3P。其中C表示相机坐标系,G表示 参考坐标系。

相机姿态估计(四)--AP3P

根据几何关系,我们得出:

相机姿态估计(四)--AP3P

其中di表示参考坐标系中相机到特征点的欧式距离,两两相减,并投影到对应面的法向量:

相机姿态估计(四)--AP3P

为了计算旋转矩阵中的角度,我们定义如下因子分解:

相机姿态估计(四)--AP3P

其中: 

相机姿态估计(四)--AP3P

将式子5代替到公式2中,得到标量方程:(相机姿态估计(四)--AP3P未知)

相机姿态估计(四)--AP3P

然后利用罗德里格斯变换:

相机姿态估计(四)--AP3P

为了求其他两个角度,定义如下因子分解:

相机姿态估计(四)--AP3P

利用旋转矩阵特性:

相机姿态估计(四)--AP3P

化简式10:

相机姿态估计(四)--AP3P

式13表述的几何关系下图所示:

相机姿态估计(四)--AP3P

接着,再次采用罗德里格斯变换得到:

相机姿态估计(四)--AP3P

展开并重排上式:

相机姿态估计(四)--AP3P

 其中:

相机姿态估计(四)--AP3P

出现3次,由此,我们重写式12:

相机姿态估计(四)--AP3P

 

 为了化简等价于16式的18式,我们寻找一个相机姿态估计(四)--AP3P,使得下式成立:

相机姿态估计(四)--AP3P

推出:

相机姿态估计(四)--AP3P

然后,根据19、8式得到:

相机姿态估计(四)--AP3P

接着,利用14式,展开18式,得到一个16式的等价结果:

相机姿态估计(四)--AP3P

 在24式中,代替17式为0,并重排结果:

相机姿态估计(四)--AP3P

带入具体的i = 1,2到式25,得到:

相机姿态估计(四)--AP3P

因为:

相机姿态估计(四)--AP3P

继续化简式26,同时 引入新参数相机姿态估计(四)--AP3P

相机姿态估计(四)--AP3P

然后用相机姿态估计(四)--AP3P代替相机姿态估计(四)--AP3P

相机姿态估计(四)--AP3P

相机姿态估计(四)--AP3P

 根据28式,得到:

相机姿态估计(四)--AP3P

计算两边的归一化结果:

相机姿态估计(四)--AP3P

得到一个关于相机姿态估计(四)--AP3P的4阶多项式.更加简洁的表达如下:

相机姿态估计(四)--AP3P

剩下的就是如何计算相机姿态估计(四)--AP3P的问题了,作者采用,逼近的方式找到式38的近似解,一旦找到式38的4个解,便采用牛顿方法进行优化,以最小代价提高精度。

另外,要注意的是:

对于每个cos,可能会得到2个sin值,如下:

相机姿态估计(四)--AP3P

这会导致计算出2个旋转矩阵, 因此,借用di>0,可以排除一个无效的。下一步,根据每对(cos相机姿态估计(四)--AP3P ,sin相机姿态估计(四)--AP3P ),计算(cos相机姿态估计(四)--AP3P ,sin相机姿态估计(四)--AP3P ),利用式37:

相机姿态估计(四)--AP3P

最后,根据19、27,5,我们找到相机位置,也可以利用5,12,18式,更快速得到:

相机姿态估计(四)--AP3P

 我们定义如下旋转矩阵:

相机姿态估计(四)--AP3P

因此:

相机姿态估计(四)--AP3P

 将式54带入53,得:

相机姿态估计(四)--AP3P

接着,计算相机位置:

相机姿态估计(四)--AP3P

这里,为了速度,只计算了一个点i=3,如果更在意精度,可以用最小二乘拟合i=1,2,3点的结果。

最后,AP3P已经在OpenCV3中实现了。