EPnP笔记

问题描述

已知n个空间点在世界坐标系下的坐标P_i^w及其图像坐标系下的坐标u_i,所要求解的问题是如何根据空间点和图像点之间的对应关系求解旋转矩阵R和平移向量t。

EPnP基本思路

-EPnP算法将世界坐标系中的3D坐标表示为一组虚拟的控制点的加权和。对于一般情形,EPnP算法要求控制点的数目为4,且这4个控制点不能共面。通过求解4个控制点在相机坐标系下的坐标,就可以进一步求解出相机位姿

求解虚拟控制点图像坐标

  • 在世界坐标系中设定4个非共面虚拟控制点,齐次坐标记为\{C_i^w|i=1,2,3,4\}

    注意这里是在世界坐标系中设定控制点

    四个点通常选为:
    C_1^w=[0,0,0,1]^T$$ $$C_2^w=[0,0,0,1]^T$$ $$C_3^w=[0,0,0,1]^T$$ $$C_4^w=[0,0,0,1]^T

    image

  • 空间点的世界坐标和控制点有如下关系
    p_i^w=\sum^4_{j=1}\alpha_{ij}C_j^w,with\sum^4_{j=1}=\alpha_{ij}=1
    向量[\alpha_{i1},\alpha_{i2},\alpha_{i3},\alpha_{i4}]^T可以看作空间点P_i^W在以控制点\{C_i^w|i=1,2,3,4\}为基的欧氏空间的坐标。
    同样的由于线性关系在欧式变换下的不变形有:
    p_i^c=\sum^4_{j=1}\alpha_{ij}C_j^c

  • 空间点P_i和图像点u_i的投影成像关系为:
    \lambda_iu_i=K[R,t]P_i^w=KP^c_i=K\sum_{j=1}^4\alpha C_j^c
    设控制点相机坐标系下C_j^c=[x_j^c,y_j^c,z_j^c]^T,则
    \lambda_i=\sum_{j=1}^4\alpha_{ij}z_j^c
    把上面两个式子结合可得:
    \sum_{j=1}^4\alpha_{ij}fx_j^c-\alpha_{ij}u_iz_j^c=0
    \sum_{j=1}^4\alpha_{ij}fy_j^c-\alpha_{ij}v_iz_j^c=0

令Z=[Z_1^{cT},Z_2^{cT},Z_4^{cT},Z_4^{cT}]^T,Z^c_j=[fx_j^c,fy^c_j,z_j^c]^T,j=1,2,3,4,所以Z是1*12的向量

n个空间点可以得到线性方程组:
MX=0
其中X=[c_1^{cT},C_2^{cT},C_3^{cT},C_4^{cT}]^T,每个元素是控制点在摄像头坐标系下的坐标。
X=\sum^N_{i=1}\beta_iv_i
可以计算M^TM的特征向量得到v_i ,但还需要求出\beta_i
对于第i个控制点:
c_i^c=\sum^N_{k=1}\beta_kv_k^{[i]}
v_k^{[i]}是特征向量v_k的第i个3×1 sub-vector

  • 高斯牛顿优化:
    摄像头的外参描述的只是坐标变换,不会改变控制点之间的距离
    ||\sum^N_{k=1}\beta_kv_k^{[i]}-\sum^N_{k=1}\beta_kv_k^{[j]}||^2=||c_i^w-c^w_j||^2
    优化目标函数:
    Error(\beta)=\sum_{(i,j)s.t.i<j}(||\sum^N_{k=1}\beta_kv_k^{[i]}-\sum^N_{k=1}\beta_kv_k^{[j]}||^2-||c_i^w-c^w_j||^2)^2

计算相机位姿

  1. 控制点在相机坐标系下的坐标
    c_i^c=\sum^N_{k=1}\beta_kv_k^{[i]},i=1,...,4
  2. 计算3D参考点在摄像头参考坐标系下的坐标:
    p_i^c=\sum^4_{j=1}\alpha_{ij}C_j^c,i=1,...,n
  3. 计算\{P_i^w\}_{i=1,...,n}的重心P^w_0和矩阵A:
    A= \left[ \begin{matrix} p_1^{w^T}-p_0^{w^T}\\ ....\\ p_n^{w^T}-p_0^{w^T} \end{matrix} \right]
  4. 计算\{P_i^c\}_{i=1,...,n}的重心P^c_0和矩阵B:
    B= \left[ \begin{matrix} p_1^{c^T}-p_0^{c^T}\\ ....\\ p_n^{c^T}-p_0^{c^T} \end{matrix} \right]
  5. 计算H:
    H=B^TA
  6. 计算H的SVD分解:
    H=U\Sigma V^T
  7. 计算旋转R
    R=UV^T
    如果|R|<0,那么R(2,:)=-R(2,:)
  8. 计算平移t:
    t=p^c_0-Rp^w_0
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

  • 前言 最近翻阅关于从2D视频或者图片中重构3D姿态的文章及其源码,发现都有关于摄像机参数的求解,查找了相关资料,做...
    予汐阅读 6,610评论 0赞 3
  • synchronized 对象 对象相当于一个key,拥有这个key则可以访问,没有则不能访问,key有两种,一个...
    剑道_7ffc阅读 240评论 0赞 0
  • 幻灯片临摹【公众号:改变自己】的显示图片。 临摹练习0612 临摹内容:记录流逝的时光 实现效果:可自动更新时间 ...
    Aleao阅读 198评论 0赞 0
  • 山山夕夕阅读 180评论 0赞 0
  • ...这些年,我笑了,我累了,我怕了,我忍了,到最后我懂了,也变了,时间带走了太多东西,也证实了好多东西!如今我什...
    mo晴空阅读 236评论 0赞 0

友情链接更多精彩内容