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. [ZJOI2010]排列计数

    题目描述 称一个1,2,...,N的排列P1,P2...,Pn是Magic的,当且仅当2<=i<=N时,Pi>Pi/2. 计算1,2,...N的排列中有多少是Magic的,答案可能很 ...

  2. [USACO17JAN]Promotion Counting晋升者计数

    题目描述 奶牛们又一次试图创建一家创业公司,还是没有从过去的经验中吸取教训--牛是可怕的管理者! 为了方便,把奶牛从 1 \cdots N(1 \leq N \leq 100, 000)1⋯N(1≤N ...

  3. slab机制

    1.内部碎片和外部碎片 外部碎片 什么是外部碎片呢?我们通过一个图来解释: 假设这是一段连续的页框,阴影部分表示已经被使用的页框,现在需要申请一个连续的5个页框.这个时候,在这段内存上不能找到连续的5 ...

  4. hdu 2243 考研路茫茫——单词情结(AC自动+矩阵)

    考研路茫茫——单词情结 Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others)Total ...

  5. [HNOI2009]最小圈

    题目描述 对于一张有向图,要你求图中最小圈的平均值最小是多少,即若一个圈经过k个节点,那么一个圈的平均值为圈上k条边权的和除以k,现要求其中的最小值 输入输出格式 输入格式: 第一行2个正整数,分别为 ...

  6. python变量、条件循环语句

    1. 变量名 - 字母  - 数字  - 下划线  #数字不能开头:不能是关键字:最好不好和python内置的函数等重复 2. 条件语句 缩进用4个空格(Tab键)注意缩进如果是空格键和Tab键混用, ...

  7. 上传本地项目到Github

    进入要上传的本地文件夹,右键打开Git Bash Here,然后进行以下步骤: 1.在命令行中,输入"git init",使Test文件夹加入git管理: 2.输入"gi ...

  8. 镜像文件、光盘、iso文件、启动盘

    刚入大学,有一门计算机硬件维修课程,韩国彬老师(学生们公认的好老师).当时韩老师教给了我们好多实用的好东西,例如装系统,做镜像文件,装虚拟机,ghost版本系统,计算机组装等等.由于高中刚刚过度到大学 ...

  9. java 反射机制 观点

    反射,当时经常听他们说,自己也看过一些资料,也可能在设计模式中使用过,但是感觉对它没有一个较深入的了解,这次重新学习了一下,感觉还行吧! 一,先看一下反射的概念: 主要是指程序可以访问,检测和修改它本 ...

  10. Linux下使用MD5加密BASE64加密

    这里以字符串123456为例子,它的md5密文值为:e10adc3949ba59abbe56e057f20f883e 这里以1.txt为需要被加密的文件. 一. 用oppnssl md5 加密字符串和 ...