EPnP算法

相机坐标系用\(F^c\),世界坐标系用\(F^w\)表示,任何一点可以用四个控制点\(p_i^w\)表示
\begin{equation}
p_i^w=\sum_{j=1}^4\alpha_{ij}c_j^w, \quad with \sum_{j=1}^4\alpha_{ij}=1
\end{equation}
对于相机坐标系同样成立
\begin{equation}
p_i^c=\sum_{j=1}^4\alpha_{ij}c_j^c, \quad with \sum_{j=1}^4\alpha_{ij}=1
\end{equation}
对于上面的公式,首先需要说明的是\(\alpha_{ij}\)确实存在。因为\(c_j^w\)或\(c_j^c\)构成的方程组是欠定的,所以一定存在解。
理论上来说,控制点可以随便选择,这里选择控制点为参考点的中心,其他的点在PCA得到的主轴上单位长度处,从而提高算法的稳定性。

控制点在相机坐标系的坐标

根据投影方程得到世界坐标系中参考点坐标和相机坐标系中参考点的约束关系:
\begin{equation}
\forall i, \quad \omega_i
\left[
\begin{array}{c}
\mathbf{u_i} \
1
\end{array}
\right]
=Ap_i^c=A\sum_{j=1}^4\alpha_{ij}c_j^c
\end{equation}
写成矩阵的形式为:
\begin{equation}
\forall i,\quad \omega_i
\left[
\begin{array}{c}
u_i \
v_i \
1
\end{array}
\right]
=\left[
\begin{array}{ccc}
f_u & 0 & u_c\
0 & f_v & v_c\
0 & 0 & 1
\end{array}
\right]
\sum_{j=1}^4\alpha_{ij}
\left[
\begin{array}{c}
x_j^c\
y_j^c\
z_j^c
\end{array}
\right]
\end{equation}
将等式的第三列代入第一二列,得到
\begin{equation}
\sum_{j=1}^4\alpha_{ij}f_ux^c_j+\alpha_{ij}(u_c-u_i)z^c_j=0
\end{equation}
\begin{equation}
\sum_{j=1}^4\alpha_{ij}f_v y^c_j+\alpha_{ij}(v_c-v_i)z^c_j=0
\end{equation}
因此,可以得到下面的线性方程组:
\begin{equation}
\rm{Mx= 0}, \quad with\quad \rm{x=[c_1^{cT},c_2^{cT},c_3^{cT},c_4^{cT}]^T}
\end{equation}
上面的方程中,四个控制点总共12个未知变量,\(\rm{M}\)为\(2n\times 12\)的矩阵。因此,\(\rm{x}\)属于\(\rm{M}\)的右零空间,\(\rm{v_i}\)为矩阵\(\rm{M}\)的右奇异向量,可以通过求解\(\rm{M^TM}\)的零空间特征值得到。
\begin{equation}
\rm{x}=\sum _{i=1}^{N}\beta_i \rm{v}_i
\end{equation}
[说明]使用\(\rm{M^TM}\)比使用\(\rm{M}\)计算量更少,因为\(\rm{M^TM}\)是求解是常数复杂度,而\(\rm{M}\)是\(O(n^3)\)的复杂度,但是计算\(\rm{M^TM}\)的复杂度是\(O(n)\)的。

选择合适的线性组合

上面求解的\(\rm{x}\)中,需要确定\(\beta_i\),也就是确定合适的线性组合。根据参考点的位置不同,矩阵\(\rm{M^TM}\)的零空间维数可能为\(N=1\rightarrow4\)维。求解\(\beta\)的策略是控制点在坐标系\(\mathcal{F}^w\)和\(\mathcal{F}^c\)中,两两之间的距离是相同,而\(\rm{x}\)的\(3k+1-3k\)分量表示分别表示不同的控制点在相机坐标系中的坐标,总共有\(C_4^2=6\)个约束。
如果\(N=1\),则根据约束有
\begin{equation}
\Vert \beta \rm{v}^{[i]}-\beta \rm{v}^{[j]}\Vert^2=\Vert c_i^w - c_j^w\Vert^2
\end{equation}
所以
\[\beta=\frac{\sum_{[i,j]\in [1;4]}\Vert \rm{v}^{[i]} - \rm{v}^{[j]}\Vert\cdot \Vert \rm{c}^w_i - \rm{c}^w_j\Vert}{\sum_{[i,j]\in [1;4]}\Vert \rm{v}^{[i]} - \rm{v}^{[j]}\Vert^2}\]
如果\(N=2\),
\begin{equation}
\Vert \beta_1 \rm{v}^{[i]}_1 + \beta_2 \rm{v}^{[i]}_2-(\beta_1 \rm{v}^{[j]}_1+\beta_2\rm{v}^{[j]}_2)\Vert^2=\Vert c_i^w - c_j^w\Vert^2
\end{equation}
由于\(\beta_1\)和\(\beta_2\)只以二次项出现在方程中,记\(\rm{\beta}=[\beta_1^2,\beta_1\beta_2, \beta_2^2]^T\), \(\rho\)的每一项为\(\Vert c_i^w - c_j^w\Vert^2\),得到相面的方程
\begin{equation}
L\beta = \rho
\end{equation}
其中\(L\)是由\(\rm{v}_1\)和\(\rm{v}_2\)构成的\(6\times 3\)的矩阵。
上面的方程可以通过\(\beta = (L^TL)^{-1}L^T\rho\)得到,然后通过选择合适的符号从\(\beta_1^2,\beta_1\beta_2,\beta_2^2\)使得所有的\(p_i^c\)有正的\(z\)坐标。

如果\(N=3\)则和\(N=2\)差不多,唯一的区别在于使用的是\(L\)的逆,而不是伪逆,此时的\(L\)为\(6\times 6\)的矩阵。

G-N优化

前面的步骤可以得到目标点在相机坐标系中的闭式解,作为G-N优化的初始值,优化的变量为\(\beta=[\beta_1, \cdots,\beta_N]^T\),目标函数为
\begin{equation}
Error(\beta)=\sum_{(i,j) s.t. i<j}(\Vert c_i^c - c_j^c \Vert ^2-\Vert c_i^w - c_j^w\Vert ^2)
\end{equation}
该优化过程和参考点的数目无关,优化步骤和时间是常数。

计算R,t

前面的两步计算不同维数的零空间的误差,选择误差最小维数对应的\(\beta\),从而得到\(\rm{x}\),恢复出控制点在相机坐标系中的坐标并根据质心坐标系数得到参考点在相机坐标系的坐标。剩下的工作就是已知一组点云在两个坐标系中的坐标,求两个坐标系的位姿变换。
步骤如下:
(1)求中心点,\(p_c^c=\frac{\sum{p_c^i}}{N}\),\(p_w^c=\frac{\sum{p_w^i}}{N}\);
(2)去中心,\(q_c^i=p_c^i- p_c^c,q_w^i=p_w^i-p_w^c\);
(3)计算\(H\)矩阵,\(H = \sum_{i=1}^{N}q_c^i q_w^{iT}\)
(4)对\(H\)进行SVD,\(H=U \Lambda V^T\);
(5)计算\(X=VU^T\),如果\(det(x)=1\),则\(R=X\),\(t=P_c^c- RP_w^c\)。否则\(R(2,\cdot)=-R(2,\cdot)\)

EPnP算法的更多相关文章

  1. Gaze Estimation学习笔记(1)-Appearance-Based Gaze Estimation in the Wild

    目录 前言 简介 论文概述 论文主要内容 MPIIGaze数据集 引入CNN的新Gaze Estimation方法 人脸对齐与3D头部姿态判断 归一化 使用CNN进行视线检测 论文作者进行的实验及结果 ...

  2. ORB-SLAM2-tracking线程

    tracking线程 Tracking线程的主要工作是从图像中提取ORB特征,根据上一帧进行姿态估计或者进行通过全局重定位初始化位姿,然后跟踪已经重建的局部地图,优化位姿,再根据一些规则确定新的关键帧 ...

  3. [转]【视觉 SLAM-2】 视觉SLAM- ORB 源码详解 2

    转载地址:https://blog.csdn.net/kyjl888/article/details/72942209 1 ORB-SLAM2源码详解 by 吴博 2 https://github.c ...

  4. ORB-SLAM3论文阅读:ORB-SLAM3: An Accurate Open-Source Library for Visual, Visual-Inertial and Multi-Map SLAM

    简介 ORB-SLAM3是第一个能在单目.双目.RGBD鱼眼相机和针孔相机模型下运行视觉.视觉-惯导以及多地图SLAM的系统.其贡献主要包括两方面:提出了完全依赖于最大后验估计的紧耦合视觉-惯导SLA ...

  5. CGA裁剪算法之线段裁剪算法

    CGA裁剪算法之线段裁剪算法 常用的线段裁剪算法有三种:[1]Cohen_SutherLand裁剪算法,[2]中点分割裁剪算法,[3]参数化方法. 1. Cohen_SutherLand裁剪算法 为了 ...

  6. ORB-SLAM(十一)EPnP

    EPnP在ORB-SLAM中主要用于Tracking线程中的重定位Relocalization模块,需要通过当前关键帧Bow与候选帧匹配上的3D地图点,迅速建立当前相机的初始姿态. PnP问题解决了已 ...

  7. B树——算法导论(25)

    B树 1. 简介 在之前我们学习了红黑树,今天再学习一种树--B树.它与红黑树有许多类似的地方,比如都是平衡搜索树,但它们在功能和结构上却有较大的差别. 从功能上看,B树是为磁盘或其他存储设备设计的, ...

  8. 分布式系列文章——Paxos算法原理与推导

    Paxos算法在分布式领域具有非常重要的地位.但是Paxos算法有两个比较明显的缺点:1.难以理解 2.工程实现更难. 网上有很多讲解Paxos算法的文章,但是质量参差不齐.看了很多关于Paxos的资 ...

  9. 【Machine Learning】KNN算法虹膜图片识别

    K-近邻算法虹膜图片识别实战 作者:白宁超 2017年1月3日18:26:33 摘要:随着机器学习和深度学习的热潮,各种图书层出不穷.然而多数是基础理论知识介绍,缺乏实现的深入理解.本系列文章是作者结 ...

随机推荐

  1. 【BZOJ2809】【APIO2012】派遣

    Background 在一个忍者的帮派里,一些忍者们被选中派遣给顾客,然后依据自己的工作获取报偿. Description 在这个帮派里,有一名忍者被称之为Master.除了Master以外,每名忍者 ...

  2. ●BZOJ 3238 [Ahoi2013]差异

    题链: http://www.lydsy.com/JudgeOnline/problem.php?id=3238 题解: 后缀数组套路深. 问题转化为求出任意两个后缀的LCP之和 在计算贡献时,各种不 ...

  3. hdu 5112 (2014北京 水)

    题意:有个人在跑步,一直每个时间他所在的位置,求最大速度 #include <iostream> #include <cstring> #include <cstdio& ...

  4. SPOJ COT(树上的点权第k大)

    Count on a tree Time Limit: 129MS   Memory Limit: 1572864KB   64bit IO Format: %lld & %llu Submi ...

  5. [bzoj4822][Cqoi2017]老C的任务&[bzoj1935][Shoi2007]Tree 园丁的烦恼

    来自FallDream的博客,未经允许,请勿转载,谢谢. 老 C 是个程序员.     最近老 C 从老板那里接到了一个任务——给城市中的手机基站写个管理系统.作为经验丰富的程序员,老 C 轻松地完成 ...

  6. Python3中无法导入ssl模块的解决办法

    这个问题,已经困扰我好几天了,本萌新刚开始接触python,想爬取几个网页试试,发现urllib无法识别https,百度后才知道要导入ssl模块,可是发现又报错了. 本人实在无法理解为什么会报错,因为 ...

  7. sqlserver 按照特定值排序查询结果

    select * from t_ss_student order by case when xm like '林%' then 1 else 2 end asc; 姓林的会排在前面

  8. App上架应用市场,如何攻破安全过检难题

    App的安全过检与众所熟知的安全检测是两个完全不同的概念.首先App行业本身对App安全过检有一定的要求与规范,其次2017年6月1日正式实施的<中国网络安全法>中就曾要求App在渠道上线 ...

  9. redis锁处理并发问题

    redis锁处理并发问题 redis锁处理高并发问题十分常见,使用的时候常见有几种错误,和对应的解决办法. set方式 setnx方式 setnx+getset方式 set方式 加锁:redis中se ...

  10. npm ERR! Windows_NT 10.0.10586

    安装vue脚手架时候一直失败,如图: npm cache clean 管理员下安装: 快捷键 win +x , 按A进入: