EPnP论文笔记

目录

  1. EPnP简介
  2. 关于控制点
  3. 计算相机坐标系下的控制点(GN优化没写)
  4. 计算R,t
  5. 平面(未完成)
  6. 实验(未完成)

1. EPnP简介

1.1 EPnP主要思想

先说一下问题定义,已知n世界坐标系中3D坐标和其对应的图像投影点的2D坐标的参考点对(Reference points)。

EPnP方案是将参考点的相机坐标表示为控制点(control point)的加权和,继而将问题转化成了对这四个控制点的相机坐标系的求解。对于非平面的情况来说,需要4个非共面的控制点,而对于平面来说只需要3个。

1.2 EPnP算法流程

1.2.1 EPnP符号说明

上标为w的点是在世界坐标系下
上标为c的点是在相机坐标系下
所有的p^wp^cc^wc^c均非齐次坐标。

1.2.2 算法流程

  1. 控制点的选择,Select four control points c^w_j(PCA)
  2. Compute the coefficient \alpha
  3. Compute the c^c_j in the camera coordinate
    3.1 Mx = 0
    3.2 L\beta = \rho
    3.3 Gauss-Newton
  4. Recover 3d points in the camera coordinates
  5. Compute the R and t

2. 关于控制点

关于如何选择控制点的问题讲放在稍后讲,先假设我们已有选好的四个控制点。

2.1 Barycentric Coordinates重心坐标

Barycentric Coordinates

给定一个三角形\triangle ABC,则在三角形所在的平面上的任意点P, 都表示为点A、B、C的线性组合:
P = \begin{bmatrix} w_A,w_B,w_C \end{bmatrix} \begin{bmatrix} A\\ B \\ C \end{bmatrix}
以下是重心坐标的推导过程,跳过不看:

2.2 求解权重因子\alpha

EPnP也是采用了这种类似的表示方法,用四个控制点的加权和(weighted sum)来表示参考点,在世界坐标系下,可得:
p^w_i = \sum_{j = 1}^{4}\alpha_{ij} c^w_j , with \sum^{4}_{j=1} \alpha_{ij} = 1
那么在相机坐标系下的参考点P^c_i,可写为:
p^c_i = \begin{bmatrix} R,t \end{bmatrix} \begin{bmatrix} p_i^w \\1 \end{bmatrix} = \begin{bmatrix} R,t \end{bmatrix} \begin{bmatrix} \sum_{j = 1}^{4}\alpha_{ij} c^w_j \\1 \end{bmatrix} = \begin{bmatrix} R,t \end{bmatrix} \begin{bmatrix} \sum_{j = 1}^{4}\alpha_{ij} c^w_j \\ \sum^{4}_{j=1} \alpha_{ij} \end{bmatrix} = \sum^{4}_{j=1} \alpha_{ij} \begin{bmatrix} R,t \end{bmatrix} \begin{bmatrix} c_{j}^{w} \\1 \end{bmatrix} = \sum^{4}_{j=1} \alpha_{ij} c^{c}_{j}

从上面的推导过程中,可以观察到无论是在世界坐标系和相机坐标系,他们在新的参考坐标下共享同一套权重。

为什么需要4个控制点?
假设3个控制点满足要求,那么
p_i^w = \begin{bmatrix} \alpha_{i1},\alpha_{i2},\alpha_{i2}\end{bmatrix} \begin{bmatrix} c^w_1 \\ c^w_2 \\ c^w_3 \end{bmatrix}, \sum^{3}_{j=1} \alpha_{ij} c^{w}_{j} = 1
一共有3个未知数,4个方程式。这种方程式数量大于未知数个数的情况称之为超定方程。只存在最小二乘意义上的解。也就是,在一般情况下,不存在精确满足4个方程的解。
如何求解\alpha?
\begin{bmatrix} \alpha_{i1} \\ \alpha_{i2} \\ \alpha_{i3}\\ \alpha_{i4} \end{bmatrix} = C^{-1} \begin{bmatrix} p^w_i \\ 1 \end{bmatrix}
C = \begin{bmatrix} c^w_1&c^w_2 &c^w_3 &c^w_4 \\ 1 &1 &1 &1\end{bmatrix}


2.3 控制点的选择

理论上来说,控制点的选择没有太多讲究,只要保证C可逆就行了。但是,作者在实验中发现其中一个参考点设置为质心后,该算法的稳定性会上升。这在某种程度上是说的通的,因为质心的使用,使得数据在坐标系上得到归一化
先计算第一个控制点c^w_1:
c^w_1 = \frac{1}{n} \sum^{n}_{i=1} p^w_i
其他的三个点通过PCA计算得出,先计算协方差矩阵:
A = \begin{bmatrix} {p^w_1}^T - {c^w_1}^T \\ \vdots \\ {p^{w}_{n}}^T - {c^w_n}^T \end{bmatrix}
则,协方差矩阵为A^TA
A^TA的特征值为\lambda_{c,i}, i = 1,2,3,对应的特征向量为v_{c,i}, i= 1,2,3,那么剩余的三个控制点可以按照下面的公式来确定:
c^w_j = c^w_1 + \lambda^{\frac{1}{2}}_{c,j-1} v_{c,j-1}, j = 2,3,4


3. 计算相机坐标系下的控制点

3.1 获得线性方程组

设已知的相机内参矩阵为K{\{u_i\} }_{i=1,2, ... , n}{\{p_i \} }_{i=1,2, ... , n}在图像坐标系上的2D投影,那么
w_i \begin{bmatrix} u_i\\ v_i\\ 1\end{bmatrix} = K p_i^{c} = K \sum_{j=1}^{4} \alpha_{ij} c_{j}^{c} = \begin{bmatrix} f_u &0 & u_c\\ 0 &f_v & v_c\\ 0 &0 &1\end{bmatrix} \sum^{4}_{j=1} \alpha_{ij} \begin{bmatrix} x^{c}_{j}\\ y^{c}_{j}\\ z^{c}_{j}\end{bmatrix}
w_i = \sum_{j=1}^{4} \alpha_{ij}z^{c}_{j}
由上可得,2个线性方程组:
\left\{ \begin{aligned} \sum^{4}_{j=1} \alpha_{ij} x^{c}_{j} f_u + \sum^{4}_{j=1} \alpha_{ij} z^{c}_{j}(u-u_i) = 0 \\ \sum^{4}_{j=1} \alpha_{ij} y^{c}_{j} f_v + \sum^{4}_{j=1} \alpha_{ij} z^{c}_{j}(v-v_i) = 0 \end{aligned} \right.
2n个式子的系数在一起的得到2n*12的矩阵Mx就是控制点在相机坐标系下的坐标。
M = \begin{bmatrix} \alpha_{11} f_{u} & 0& \alpha_{11} (u_c - u_1) & \cdots & \alpha_{14} f_{u} & 0 & \alpha_{14} (u_c - u_4) \\ 0 & \alpha_{11} f_v & \alpha_{11}(v_c - v_1) & \cdots & 0 & \alpha_{14} f_v & \alpha_{14}(v_c - v_4) \\ \vdots & \vdots & \vdots & \ddots & \vdots & \vdots & \vdots \\ \alpha_{n1} f_{u} & 0& \alpha_{n1} (u_c - u_1) & \cdots & \alpha_{n4} f_{u} & 0 & \alpha_{n4} (u_c - u_4) \\ 0 & \alpha_{n1} f_v & \alpha_{n1}(v_c - v_1) & \cdots & 0 & \alpha_{n4} f_v & \alpha_{n4}(v_c - v_4) \\ \end{bmatrix}
x = {\begin{bmatrix} {c^{c}_{1}}^T & {c^{c}_{2}}^T & {c^{c}_{3}}^T &{c^{c}_{4}}^T \end{bmatrix}}^T
整理后可得,Mx = 0
显然x落在M的右零空间中,或者x \in ker(M),可以表示为:
x = \sum_{i=1}^{N} \beta_{i} v_{i}

3.2 求解v_i和\beta_i

3.2.1 求解v_i

v_i是矩阵M的N个0奇异值(null\ singular\ value)对应的N个右奇异向量(right-singular vector),可以对M进行SVD求解得到v_i。但是SVD耗时很长,目前时间复杂度最低的SVD解法是O(n^2)

不妨换个思路,可通过求解M^T M的0特征值对应的特征向量更快求解v_i计算矩阵M^T M是EPnP中最耗时的步骤,时间复杂度为O(12*2n*12) = O(n)

在相机坐标系下,对于第i个控制点c_i^c
c^c_i = \sum^{N}_{k=1} \beta_k v^{[i]}_k

3.2.2 求解\beta_i

接下来,就是要求解\{ \beta_i\}_{i=1,2,..,N}

根据N的数量,对\beta_i有不同的求解方式。N是矩阵M^T M的零空间(null\ space)的维度。作者通过仿真实验,发现N和相机焦距f有关

填坑
可以观察到,M^T M的奇异值从第5个开始,都趋近为0。因为实验过程中,存在一些噪音,所以不是严格意义上为0。

两张图的纵轴都代表的是基于300组实验的N=1,2,3,4占比情况。
左图:在同一张图片上加高斯噪声(\sigma = 10),横轴表示不同数量的点对
右图:在同一张图片上,固定6个匹配点对。横轴表示不同程度高斯噪音。
基本上,N=1出现的评率比较高。

In theory, given perfect data from at least six points and a purely perspective camera model, the dimension N of the null-space of M^T M should be exactly one because of the scale ambiguity.
In contrast, if one considers an affine camera model, the null-space of M^T M would have dimensionality four, because of the depth uncertainty of the four control points.
Since a perspective camera with a large focal length may be approximated by an affine model, the value of N is not clear beforehand, and it could be any value between 1 and 4.

原文,至今都没办法很好理解,以后回来填坑吧。

EPnP作者建议只考虑N=1,2,3,4的情况。N确定后,我们可以通过下面这个约束去求解\beta_i
||c^{c}_i - c^{c}_j||^2 = ||c^w_i - c^w_j||^2
上面这个式子的意思是,摄像头的外参描述的只是坐标系的变换,并不会改变点之间的距离。用\beta_i表示c^c_i,我们可以得到:
||\sum^{N}_{k=1}\beta_{k}v^{[i]}_k - \sum^{N}_{k=1}\beta_{k}v^{[j]}_k||^2 = ||c^w_i - c^w_j||^2
对于4个控制点,我们一共可以得到C^2_4 = 6个这样的方程。下面根据N的不同取值,对\beta进行求解。

N = 1

一共有1个未知数,可以直接算出\beta
\beta = \frac{\sum_{i,j \in [1,4]}||v^{[i]} - v^{[j]}|| · ||c^w_i - c^w_j||}{\sum_{i,j \in [1,4]}||v^{[i]} - v^{[j]}||^2}

N = 2

一共有3个未知数
\begin{bmatrix} (v^{[i]}_1 - v^{[j]}_1)^2 & (v^{[i]}_1 - v^{[j]}_1)(v^{[i]}_2 - v^{[j]}_2) & (v^{[i]}_2 - v^{[j]}_2)^2 \end{bmatrix} \begin{bmatrix} \beta_{11}\\ \beta_{12}\\ \beta_{22} \end{bmatrix} = || c^w_i - c^w_j||^2
把上面的式子写成L\beta = \rho,因为未知数小于方程式的数量,用pseudo-inverse解出:
\beta = (L^T L)^{-1}L^T \rho

N = 3

一共有6个未知数,有6个方程。求逆得\beta
\beta = L^{-1} \rho

N = 4

一共有10个未知数,却只有6个方程。这里我们发现一个问题,本身我们只有\beta_1,\beta_2,\beta_3,\beta_4这4个未知数,注意这里是一次项的。但是把式子展开后,在L里的都是形如\beta_{12}的二次项。
论文中使用relinearization,具体步骤如下:

  1. 通过最初的约束方程得到null\ space中的\beta_{ab}
    \beta_{ab}\beta_{cd} = \beta_a \beta_b \beta_c \beta_d = \beta_{a'} \beta_{b'} \beta_{c'} \beta_{d'}
    这里\{a',b',c',d' \}是\{a,b,c,d\}排列的某种情况。例如,已知\beta_{11},\beta_{12},\beta_{13},可得\beta_{23}= \frac{\beta_{12}\beta_{13}}{\beta_{11}}
    如此,我们就可以用\beta_{11},\beta_{12},\beta_{13},\beta_{14}来表示其他的二次项,重新表示成4个未知数。
  2. 通过引入新的二次方程得到新的系数。
  3. 线性求解新方程组
如何选定N的取值?

作者不建议直接选定N的值,而是把4个N值都算出来,选择重投影误差(reprojection error)最小的那个N值。

res = \sum_{i} dist^2(A[R|t]\begin{bmatrix} p^{w}_{i} \\ 1 \end{bmatrix}, u_i)

其中,dist(m,n)是齐次点m和n的2D距离。


4. 求解R,t

1. 计算控制点c^c_i

c^c_i = \sum^{N}_{k=1}

2. 计算参考点的相机坐标

p^c_i = \sum^{4}_{j=1} \alpha_{ij} c^c_j

3. 运用ICP算法就可以求解出R和t了!!!

具体流程可以看我另一篇文章:ICP算法


5. 平面


6. 实验

在实际中要使用EPnP,匹配点的个数n应大于15。


Reference

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 203,456评论 5 477
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 85,370评论 2 381
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 150,337评论 0 337
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,583评论 1 273
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,596评论 5 365
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,572评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 37,936评论 3 395
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,595评论 0 258
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,850评论 1 297
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,601评论 2 321
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,685评论 1 329
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,371评论 4 318
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,951评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,934评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,167评论 1 259
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 43,636评论 2 349
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,411评论 2 342

推荐阅读更多精彩内容