转载自:https://zhuanlan.zhihu.com/p/76361026
分享学习
EPnP算法
参考资料:
- 杨小东的知乎 https://zhuanlan.zhihu.com/p/59070440
- https://blog.youkuaiyun.com/jessecw79/article/details/82945918
- EPnP: An accurate O(n) solution to the PnP problem
- 视觉SLAM十四讲
- 柴政pnp算法讲解,https://www.youtube.com/watch?v=EX8Y9kB1sSw
问题模型
已知世界坐标下的 个3d点,以以及它们在图像上对应的2d像素点,还有相机的内参数。
求解相机坐标系到世界坐标系的 .
控制点和HB坐标
三维点的非齐次坐标表示为 :
表示点对个数。EPnP引入了控制点,利用控制点的线性组合对3d点进行表示
用上标 和
分别表示世界坐标系和相机坐标系,世界坐标系下的三维点可以用4个控制点表达:
控制点选定好之后, 称为homogeneous barycentric coordinates,就是唯一确定的。将上式写成齐次坐标的形式。
上式的含义就是3D点齐次坐标可以表示为控制点齐次坐标的线性组合。假设相机外参数为 为,控制点在相机坐标系下的坐标
有:
对于3D点在相机坐标系下的坐标 有:
也就是说,同一个3D点在相机坐标系和世界坐标系的HB坐标是相同的,我们可以在世界坐标系下求得HB坐标,拿到相机坐标系使用。进一步如果我们求出了控制点在相机坐标系下的坐标 ,我们就可以得到世界坐标系下的3D点
到相机坐标系下的3D点
匹配关系,这样的话,就可以得到相机坐标系和世界坐标系之间3D-3D之间的匹配关系,进一步利用ICP算法进行求解
。
控制点选择
世界坐标系下的3D点集, ,选择3D参考点的中心为第一个参考点:
其余的点定义在数据的主方向上,首先定义矩阵
计算 的特征值
,以及对应的特征向量
,那么剩余的三个控制点为
控制点确定后,根据式(4)可以得到每个世界坐标系下的 对应的HB坐标。
求解控制点在相机坐标系下的坐标

由相机的投影模型。
可以进一步有:
消去 ,可以得到两个线性方程
其中 ,相机内部参数,
为已知量,未知量为控制点在相机坐标系下的坐标
。把所有的
个点都串联起来,得到线性方程
展开有
其中未知量 .对该方程求解可以得到控制点在相机坐标系下的坐标。式(17)的解为M的零空间。
其中 为
的右奇异向量,对应的奇异值为0。具体的求解步骤为:求解
的特征值和特征向量,特征值为0的特征向量为
.
根据约束 ,求解
。其中
为世界坐标系下4个控制点之间的距离的平方,可以直接直接计算出来,是一个6维的向量。
直接考虑 当N=4的时候,第i个控制点在相机坐标系下的坐标有
控制点之间的长度约束,控制点在世界坐标系和相机坐标系下的长度相等。
该约束可以构建方程
其中 ,
.
对于
近似求解 ,记
,也就是把
写成了列向量的形式。
- 近似求解方法1
- 近似求解方法2
- 近似求解方法3
可以根据以上三种方法求得, 的初值
高斯牛顿优化
优化的目标函数
残差项
优化变量 ,
残差项对优化变量的雅克比矩阵
normal equation:
利用Gauss-newton迭代法求得最优的
计算相机位姿
- 计算控制点在相机坐标系下的坐标 :
- 计算3D参考点在相机参考坐标系的坐标。
- 计算
的重心
和矩阵
- 计算
的重心
和矩阵
.
- 计算矩阵
- 计算
的svd分解 :
- 计算旋转
如果 ,那么
- 计算位姿中的平移