文章目录
前言
学习SLAM笔记. 如有侵权,请告知删除
特征点法
{
理解图像特征点的意义
,
掌握在单幅图像中
提取特征点
及多幅图像中
匹配特征点
的方法
理解对极几何的原理
,
利用对极几何的约束
,
恢复出
图像之间
的摄像机的三维运动
理解如何通过三角化
,
获得二维图像上对应的
三维结构
理解
P
N
P
问题
,
及利用已知
三维结构与图像的对应关系
,
求解摄像机的三维运动
.
理解
I
C
P
问题
.
及利用
点云
的匹配关系
,
求解摄像机的三维运动
.
特征点法\begin{cases} 理解图像特征点的意义,掌握在单幅图像中\color{#00F}{提取特征点}\color{#000}及多幅图像中\color{#00F}匹配特征点\color{#000}的方法\\ 理解对极几何的原理,利用对极几何的约束,恢复出\color{#00F}图像之间\color{#000}的摄像机的三维运动\\ 理解如何通过三角化,获得二维图像上对应的\color{#00F}三维结构\color{#000}\\ 理解PNP问题,及利用已知\color{#00F}三维结构与图像的对应关系,\color{#000}求解摄像机的三维运动.\\ 理解ICP问题.及利用\color{#00F}点云\color{#000}的匹配关系,求解摄像机的三维运动.\\ \end{cases}
特征点法⎩
⎨
⎧理解图像特征点的意义,掌握在单幅图像中提取特征点及多幅图像中匹配特征点的方法理解对极几何的原理,利用对极几何的约束,恢复出图像之间的摄像机的三维运动理解如何通过三角化,获得二维图像上对应的三维结构理解PNP问题,及利用已知三维结构与图像的对应关系,求解摄像机的三维运动.理解ICP问题.及利用点云的匹配关系,求解摄像机的三维运动.
提示:以下是本篇文章正文内容,下面内容例可供参考
一、图像特征点
经典SLAM中以相机位姿-路标来描述SLAM过程
—路标是三维空间中固定不变的点,可以在特定位姿下观测到
—在视觉SLAM中,可以利用图像特征点作为SLAM中的路标
特征点
特征点是图像当中具有代表性的部分,如轮廓点丶较暗区域中的亮点,较亮区域中的暗点等。
----可重复性:相同的区域可以在不同的图像中找到
----可区别性:不同的区域有不同的表达
----高效性:同一图像中,特征点的数量应该小于像素的个数
----本地性:特征仅与一小片图像区域有关.特征点的信息
----位置、大小、方向、评分等关键字
----特征点周围的图像信息描述子
例子:当谈论在一张图像中计算SIFT特征时, 是指提取SIFT关键点,并计算SIFT描述子
充分考虑了在图像变换过程中的光照、尺度、旋转等变化、结果精确、但计算量大。GPU无法实时计算SIFT特征。
1.1、ORB特征点提取
关键点:Oriented FAST(一种改进的FAST角点)
描述子:改进BRIEF
关键点:
FAST:主要检测局部像素灰度变化明显的地方(如一个像素与领域的像素差别较大,则更可能是角点)1 、在图像中选取像素 p , 假设它的亮度为 I p 。 2 、设一个阈值 T ( 比如 I p 的 20 % ) 。 3 、以像素 p 为中心 , 选取半径为 3 的圆上的 16 个像素点。 4 、假设选取的圆上 , 有 连续 的 N 个点的亮度大于 I p + T 或者小于 I p − T , 那么像素 p 可以被认为是特征点 ( N 通常取 12 , 记为 F A S T − 12 。其他常用的 N 取值为 9 和 11 , 他们分别被称为 F A S T − 9 , F A S T − 11 ) 。 5 、循环以上四步 , 对每个像素执行相同的操作。 \color{#000}1、在图像中选取像素p,假设它的亮度为I_p。\\ 2、设一个阈值T(比如I_p的20\%)。 \\ 3、以像素p为中心,选取半径为3的圆上的16个像素点。\\ 4、假设选取的圆上,有\color{#00F}连续\color{#000}的N个点的亮度大于I_p+T或者小于I_p-T, 那么像素p可以被认为是特征点\\(N通常取12,记为FAST-12。其他常用的N取值为9和11, 他们分别被称为FAST-9,FAST-11)。\\ 5、循环以上四步,对每个像素执行相同的操作。 1、在图像中选取像素p,假设它的亮度为Ip。2、设一个阈值T(比如Ip的20%)。3、以像素p为中心,选取半径为3的圆上的16个像素点。4、假设选取的圆上,有连续的N个点的亮度大于Ip+T或者小于Ip−T,那么像素p可以被认为是特征点(N通常取12,记为FAST−12。其他常用的N取值为9和11,他们分别被称为FAST−9,FAST−11)。5、循环以上四步,对每个像素执行相同的操作。
在FAST12中,提出一个高效的检测,来快速
排除
一大部分非特征点的点。该测试仅仅检查在位置1、5、9、13四个位置的像素如果不满足至少三个角点亮度大于l+T或小于l-T,那么p不可能是一个角点。
FAST缺点:
—原始FAST角点经常出现扎堆的现象(分布不均匀)。所以在第一遍检测之后,还需要用非极大值抑制,在一定区域内仅保留相应极大值的角点,避免角点集中问题。
—由于FAST角点不具有方向信息
且存在尺寸问题
ORB添加了尺度和旋转的描述:尺度不变性通过构建图像金字塔来实现,旋转是由灰度质心法来实现。
1.1.1、关键点
关键点:Oriented FAST(一种改进的FAST角点)
Oriented FAST:尺度不变性通过构建图像金字塔来实现
金字塔是计算图视觉中常用的一种处理方法,如下图所示。金字塔底层是原始图像。每往上一层,就对图像进行一个固定倍率的缩放,这样我们就有了不同分辨率的图像。较小的图像可以看成是远处看过来的场景。在特征匹配算法中,我们可以匹配不同层上的图像,从而实现尺度不变性。例如:如果相机在后退,那么我们应该能够在上一个图像金字塔的上层和下一个图像金字塔的下层中找到匹配。
Oriented FAST:旋转是由灰度质心法来实现。
质心是指以图像块灰度值作为权重的中心。其具体操作步骤如下:
1.在一个小的图像块B中,定义图像块的距为:
m p q = ∑ x , y ∈ B x p y q I ( x , y ) , p , q = { 0 , 1 } . m_{pq}=\sum_{x,y∈B}x^py^qI(x,y),~~~~p,q=\{0,1\}. mpq=x,y∈B∑xpyqI(x,y), p,q={0,1}.
2.通过距可以找到图像块的质心:
C = ( m 10 m 00 , m 01 m 00 ) . C=(\frac{m_{10}}{m_{00}},\frac{m_{01}}{m_{00}}). C=(m00m10,m00m01).
3. 链接图像块的 几何中心 O 质心 C , 得到一个方向向量 O C → , 于是特征点的方向可以被定义为 : θ = a r c t a n ( m 01 m 10 ) . 3.\color{#000}链接图像块的\color{#F0F}{几何中心}\color{#000}O\color{#F0F}质心C,\color{#000}得到一个方向向量\overrightarrow{OC},于是特征点的方向可以被定义为:\\ \theta=arctan(\frac{m_{01}}{m_{10}}). 3.链接图像块的几何中心O质心C,得到一个方向向量OC,于是特征点的方向可以被定义为:θ=arctan(m10m01).
1.1.2、描述子
问:为何要计算描述子?
答:每张图片会提取很多特征点,我们希望相同特征点之间能够建立起联系,为后续的解算相机位姿,三维点等提供准确的条件。上面说的联系即描述子,描述子大致(其中的条件需要自行设置)相同则判定为同一点。
具体可以参考:ORB描述子的理解
描述子:BRIEF
一种二进制描述子,其描述向量由许多个0和1的组成
{
1
关键点附近两个像素
l
(
p
)
>
l
(
q
)
0
关键点附近两个像素
l
(
p
)
<
l
(
q
)
\begin{cases} 1&关键点附近两个像素l(p)>l(q)\\ 0 & 关键点附近两个像素l(p)<l(q) \end{cases}
{10关键点附近两个像素l(p)>l(q)关键点附近两个像素l(p)<l(q)
- BRIEF-128: 在特征点附近的128次像素比较:
1.在图像块内平均采样;
2.p和q都符合(0, S21/25)的高斯分布;
3.p符合((0, S21/25))的高斯分布,而q符合(0, S21/100)的高斯分布;
4.在空间量化极坐标下的离散位置随机采样;
5.吧p固定为(0,0),q在周围平均采样;其中(S21/25)是斜方差.
工业中经常使用第二种的高斯分布
描述子与特征点的关系
1.以关键点(紫色点)为圆心(几何质心),以d为半径做圆。
2.计算质心(蓝色点),得到特征点方向(绿色箭头)。
3.选取某一模式下的pq点对.(为了方便选取了2对)。
4.根据特征点方向,将其旋转到与x轴平行,并将所有pq点对进行旋转。
5.按照规则if(l§>l(q)) val=1; else val=0;
6.按照顺序排列描述子。
通过计算特征点方向,使得ORB的描述子具备了旋转不变性,更鲁棒了。
旋转矩阵:
那么:
x = r c o s ( ϕ ) y = r s i n ( ϕ ) x ′ = r c o s ( θ + ϕ ) = r c o s ( θ ) c o s ( ϕ ) − r s i n ( θ ) s i n ( ϕ ) = x c o s ( θ ) − y s i n ( θ ) y ′ = r s i n ( θ + ϕ ) = r s i n ( θ ) c o s ( ϕ ) + r c o s ( θ ) s i n ( ϕ ) = x s i n ( θ ) + y c o s ( θ ) x=rcos(\phi)\\y=rsin(\phi)\\ x'=rcos(\theta+\phi)=rcos(\theta)cos(\phi)-rsin(\theta)sin(\phi)=xcos(\theta)-ysin(\theta)\\ y'=rsin(\theta+\phi)=rsin(\theta)cos(\phi)+rcos(\theta)sin(\phi)=xsin(\theta)+ycos(\theta) x=rcos(ϕ)y=rsin(ϕ)x′=rcos(θ+ϕ)=rcos(θ)cos(ϕ)−rsin(θ)sin(ϕ)=xcos(θ)−ysin(θ)y′=rsin(θ+ϕ)=rsin(θ)cos(ϕ)+rcos(θ)sin(ϕ)=xsin(θ)+ycos(θ)
得到:
[ x ′ y ′ ] = [ c o s θ − s i n θ s i n θ c o s θ ] [ x y ] \begin{bmatrix} x'\\y' \end{bmatrix}=\begin{bmatrix} cos\theta & -sin\theta\\ sin\theta &cos\theta \end{bmatrix} \begin{bmatrix} x\\y \end{bmatrix} [x′y′]=[cosθsinθ−sinθcosθ][xy]
描述子:BRIEF总结
1.优点: BRIEF使用了随机选点的比较,速度比较快,而且由于使用了二进制表达,存储起来也十分方便.
2.缺点: 原始的BRIEF描述子不具有旋转不变性,在图像发生旋转时容易走失. 而ORB在FAST特征点提取阶段计算了关键点的方向,
计算了旋转之后的"BRIEF"特征,使ORB的描述子具有较好的旋转不变性.
3. 注意BRIEF是一种二进制描述,需要使用汉明距离度量.
二、图像特征点
特征匹配解决了SLAM中的数据关联问题,即确定当前看到的路标与之前看到的路标之间的对应关系。
通过对图像与图像或者图像与地图之间的描述子
进行精准匹配,可以为后续的姿态估计、优化等操作减轻大量负担,而且,由于图像特征的局部特性,误匹配的情况存在。
考虑两个时刻的图像:
−
−
在图像
I
t
中提取到特征点
x
t
m
,
m
=
1
,
2
,
.
.
.
,
M
;
在图像
I
t
+
1
中提取到特征点
x
t
+
1
n
,
n
=
1
,
2
,
.
.
.
,
N
−
−
暴力匹配
:
对每个特征点
x
t
m
与所有的
x
t
+
1
n
测量描述子的距离
,
然后排序
,
取最近的一个作为匹配点
.
−
−
当特征点数量很大
,
暴力匹配的运算量会变得很大
,
选用一些改进算法
,
如
:
快速近似最近邻
(
F
L
A
N
N
)
算法
.
--在图像I_t中提取到特征点x_t^m, m=1,2,...,\color{#F00}M\color{#000}; 在图像I_{t+1}中提取到特征点x_{t+1}^n,n=1,2,...,\color{#F00}N\color{#000}\\ --\color{#00F}暴力匹配:\color{#000}对每个特征点x_t^m与所有的x_{t+1}^n测量描述子的距离,然后排序,取最近的一个作为匹配点.\\ --当特征点数量很大,暴力匹配的运算量会变得很大,选用一些改进算法,如:快速近似最近邻(FLANN)算法.
−−在图像It中提取到特征点xtm,m=1,2,...,M;在图像It+1中提取到特征点xt+1n,n=1,2,...,N−−暴力匹配:对每个特征点xtm与所有的xt+1n测量描述子的距离,然后排序,取最近的一个作为匹配点.−−当特征点数量很大,暴力匹配的运算量会变得很大,选用一些改进算法,如:快速近似最近邻(FLANN)算法.
三、计算相机运动
-----如果只有两个单目图像,得到2D-2D间的关系(对应极几何)
-----我们得到一些3D点和2维图像投影,即3D-2D间的关系(PNP)
-----当相机为双目、RGB-D, 或者通过某种方法得到距离信息.得到3D-3D间的关系(ICP)
1. 2D-2D对应极几何
已知:1.在像素坐标
上的投影点为p1和p2; I1的一个特征点p1,在I2中对应特征点p2(匹配
正确);相机内参
想要求:1.第一帧到第二帧的相机运动为R,t
相机坐标系-像素坐标系
z
(
u
v
1
)
=
(
f
x
0
c
x
0
f
y
c
y
0
0
1
)
(
X
Y
Z
)
=
K
P
˜
c
z\begin{pmatrix} u\\v\\1 \end{pmatrix}=\begin{pmatrix} f_x & 0& c_x\\0&f_y&c_y\\0&0&1 \end{pmatrix}\begin{pmatrix} X\\Y\\Z \end{pmatrix}=K\~P_c
z
uv1
=
fx000fy0cxcy1
XYZ
=KP˜c
基线
:
O
1
O
2
极点
:
基线与平面的交点
(
e
1
,
e
2
)
极平面
:
包含基线的平面
(
O
1
,
O
2
,
P
三个点可以确定一个平面
)
极线
:
对极平面与图像平面的交线
(
l
1
,
l
2
)
基线:O_1O_2 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\\ 极点: 基线与平面的交点(e_1,e_2)~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\\ 极平面:包含基线的平面(O_1,O_2,P三个点可以确定一个平面)\\ 极线:对极平面与图像平面的交线(l_1,l_2)~~~~~~~~~~~~~~~~~~~~~~~~~
基线:O1O2 极点:基线与平面的交点(e1,e2) 极平面:包含基线的平面(O1,O2,P三个点可以确定一个平面)极线:对极平面与图像平面的交线(l1,l2)
注意 不管p点在那里,只有在红色的射线上(拉近或者放远),它在图像上都对应于p1点的位置.
现在,我们从代数的角度来分析这里的几何关系。在第一帧的坐标系下,设P在空间为:
P
=
[
X
,
Y
,
Z
]
T
P=[X,Y,Z]^T
P=[X,Y,Z]T根据针孔模型,我们知道两个像素点p1,p2,的像素位置为:
s
1
p
1
=
K
3
∗
3
P
3
∗
1
,
s
2
p
2
=
K
(
R
P
+
t
)
其中
s
1
(
u
v
1
)
=
K
(
x
c
y
c
z
c
=
s
1
)
:
s
1
就是
P
的深度
s_1p_1=K_{3*3}P_{3*1}, ~~ s_2p_2=K(RP+t)\\其中s_1\begin{pmatrix} u\\v\\1 \end{pmatrix}=K\begin{pmatrix} x_c\\y_c\\z_c=s_1 \end{pmatrix}:s_1就是P 的深度
s1p1=K3∗3P3∗1, s2p2=K(RP+t)其中s1
uv1
=K
xcyczc=s1
:s1就是P的深度
这里K为相机内参矩阵,R,t为两个坐标系的相机运动。具体来说,这里计算的是R21和t21.因为它们把第一个坐标系下的坐标换到第二个坐标系下。
1.1 对极几何
对极约束刻画了O1,O2,P 共面的关系,简洁的给出了两个匹配点的空间位置.
p
2
T
K
−
T
t
∧
R
K
−
1
p
1
=
0.
E
=
t
∧
R
,
F
=
K
−
T
E
K
−
1
,
x
2
T
E
x
1
=
p
2
T
F
p
1
=
0
\color{#F00}p_2^TK^{-T}t^\wedge RK^{-1}p_1=0.\\ E=t^\wedge R, F=K^{-T}EK^{-1}, x_2^TEx_1=p_2^TFp_1=0
p2TK−Tt∧RK−1p1=0.E=t∧R,F=K−TEK−1,x2TEx1=p2TFp1=0
- 本质矩阵E, 基础矩阵F,在内参已知的情况下,可以使用E
- 相机位姿估计问题分为两步: 1. 根据匹配点的像素位置求出E或者F
2.根据E或者F求出R,t
内参在SLAM中通常是已知的,则在实践过程中往往使用形式更简单的E
本质矩阵:"
- 性质1: E满足对极约束: x 2 T E x 1 = 0. x_2^TEx_1=0. x2TEx1=0.这是等式为零的约束,对E乘以任意非零常数后,对极约束仍然成立, 则成为E在不同尺度下是等价的(尺度等价性).
- 性质2: (内在性质): 一个3×3的矩阵式本质矩阵的充要条件是
它的奇异值中有两个相等而第三个为0
(det(E)=0)
ps: 奇异性: → 已知 A 为本质矩阵 , 证 A 有一个零奇异值 , 并且另外两个非零奇异值相等 证 : 由题意得 A = t ∧ R = T R ( 其中 T = t ∧ ) , 将 A 奇异值分解为 : A = u Σ v T < 1 > ( 其中 u u T = E , v v T = E , Σ = ( δ 1 0 0 0 δ 2 0 0 0 δ 3 ) , δ 1 , δ 2 , δ 3 为 A 的奇异值 ) A ⋅ A T = T R ⋅ ( T R ) T = T R ⋅ R T T T = T ⋅ T T < 2 > 另一方面 A ⋅ A T = ( u Σ v T ) ( u Σ v T ) T = u Σ v T v Σ T u T = u Σ 2 u T < 3 > 从上式可以看出 u 是 A ⋅ A T 的特征矩阵 , Σ 2 对应的特征值 . 奇异值和特征值的关系 下面求 A ⋅ A T 的特征值 : 有 < 2 > A ⋅ A T = T ⋅ T T = ( 0 − t 3 t 2 t 3 0 − t 1 − t 2 t 1 0 ) ( 0 t 3 − t 2 − t 3 0 t 1 t 2 − t 1 0 ) = ( t 3 2 + t 2 2 − t 1 2 + t 2 2 − t 1 2 + t 3 2 − t 1 2 + t 2 2 − t 3 2 + t 1 2 − t 2 2 + t 3 2 − t 1 2 + t 3 2 − t 2 2 + t 3 2 t 2 2 + t 1 2 ) 记 t 1 2 + t 2 2 + t 3 2 = k ( k > 0 ) 则 ∣ λ E − T ⋅ T T ∣ = λ ( k − λ ) 2 = 0 , 则 λ 1 = 0 , λ 2 = k , λ 3 = k . 则 A 的奇异值为 0 , k , k . \to已知A为本质矩阵,证A有一个零奇异值,并且另外两个非零奇异值相等\\ \color{#000}证:由题意得A=t^\wedge R=TR(其中T=t^\wedge),将A奇异值分解为:A=u\Sigma v^T~~~~<1>\\ (其中uu^T=E,vv^T=E,\Sigma=\begin{pmatrix} \delta_1 & 0 & 0\\ 0 & \delta_2 & 0\\0 & 0 & \delta_3 \end{pmatrix},\color{#00F}\delta_1,\delta_2,\delta_3为A的奇异值)\color{#000}\\ A·A^T=TR·(TR)^T=TR·R^TT^T=T·T^T~~~~<2>\\ 另一方面A·A^T=(u\Sigma v^T)(u\Sigma v^T)^T=u\Sigma v^T v\Sigma^Tu^T=u\Sigma^2u^T~~~~<3>\\ 从上式可以看出u是A·A^T的特征矩阵,\color{#00F}\Sigma^2对应的特征值.\color{#000}\\\color{#00F}~奇异值和特征值的关系~\\~\\~\\ \color{#F00}下面求A·A^T的特征值:~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\color{#000}\\ 有<2> ~~A·A^T=T·T^T=\begin{pmatrix} 0&-t_3&t_2\\ t_3&0&-t_1\\ -t_2&t_1&0\\ \end{pmatrix} \begin{pmatrix} 0&t_3&-t_2\\ -t_3&0&t_1\\ t_2&-t_1&0\\ \end{pmatrix}=\begin{pmatrix} t_3^2+t_2^2 & -t_1^2+t_2^2 & -t_1^2+t_3^2\\ -t_1^2+t_2^2 & -t_3^2+t_1^2 & -t_2^2+t_3^2\\ -t_1^2+t_3^2 & -t_2^2+t_3^2 & t_2^2+t_1^2\\ \end{pmatrix}\\ 记t_1^2+t_2^2+t_3^2=k (k>0)则|\lambda E-T·T^T|=\lambda (k-\lambda )^2=0,则\lambda_1=0,\lambda_2=k,\lambda_3=k.\\ 则A的奇异值为0,\sqrt{k},\sqrt{k}. →已知A为本质矩阵,证A有一个零奇异值,并且另外两个非零奇异值相等证:由题意得A=t∧R=TR(其中T=t∧),将A奇异值分解为:A=uΣvT <1>(其中uuT=E,vvT=E,Σ= δ1000δ2000δ3 ,δ1,δ2,δ3为A的奇异值)A⋅AT=TR⋅(TR)T=TR⋅RTTT=T⋅TT <2>另一方面A⋅AT=(uΣvT)(uΣvT)T=uΣvTvΣTuT=uΣ2uT <3>从上式可以看出u是A⋅AT的特征矩阵,Σ2对应的特征值. 奇异值和特征值的关系 下面求A⋅AT的特征值: 有<2> A⋅AT=T⋅TT= 0t3−t2−t30t1t2−t10 0−t3t2t30−t1−t2t10 = t32+t22−t12+t22−t12+t32−t12+t22−t32+t12−t22+t32−t12+t32−t22+t32t22+t12 记t12+t22+t32=k(k>0)则∣λE−T⋅TT∣=λ(k−λ)2=0,则λ1=0,λ2=k,λ3=k.则A的奇异值为0,k,k.
- 性质3: 本质矩阵E=[t]×R只有五个自由度:旋转矩阵与平移矢量各有三个自由度,但是有一个整体尺度因子的多异性,于是减少了一个自由度。
- 本质矩阵仅依赖于外部参数(R,t)
- { 基于 E 有 5 个自由度的事实 , 表明我们最少可以用 5 对点来求解 E 通用的方法把 E 当成普通 3 ∗ 3 矩阵 : 8 对点发 \begin{cases} 基于E有5个自由度的事实, 表明我们最少可以用5对点来求解E \\通用的方法把E当成普通3*3矩阵:\color{#0FF}8对点发 \end{cases} {基于E有5个自由度的事实,表明我们最少可以用5对点来求解E通用的方法把E当成普通3∗3矩阵:8对点发
1.1.1 求E
八点法求E:"
将E看成通常意义下的33的矩阵,去掉尺度因子后剩八个自由度
考虑一对匹配点,其归一化坐标
为:
x
1
=
[
u
1
v
2
1
]
,
x
2
=
[
u
2
v
2
1
]
x_1=\begin{bmatrix} u_1\\ v_2\\ 1 \end{bmatrix}, x_2=\begin{bmatrix} u_2\\ v_2\\ 1 \end{bmatrix}
x1=
u1v21
,x2=
u2v21
根据对极约束:
(
u
2
,
v
2
,
1
)
(
e
1
e
2
e
3
e
4
e
5
e
6
e
7
e
8
e
9
)
(
u
1
v
1
1
)
=
0
(u_2,v_2,1)\begin{pmatrix} e_1&e_2&e_3\\ e_4&e_5&e_6\\ e_7&e_8&e_9 \end{pmatrix}\begin{pmatrix} u_1\\ v_1\\ 1 \end{pmatrix}=0
(u2,v2,1)
e1e4e7e2e5e8e3e6e9
u1v11
=0写成向量的形式:
e
=
[
e
1
,
e
2
,
e
3
,
e
4
,
e
5
,
e
6
,
e
7
,
e
8
,
e
9
]
T
,
[
u
2
u
1
,
u
2
v
1
,
u
2
,
v
2
u
1
,
v
2
,
u
1
,
u
1
,
1
]
⋅
e
=
0.
e=[e_1,e_2,e_3,e_4,e_5,e_6,e_7,e_8,e_9]^T,\\ [u_2u_1,u_2v_1,u_2,v_2u_1,v_2,u_1,u_1,1]·e=0.
e=[e1,e2,e3,e4,e5,e6,e7,e8,e9]T,[u2u1,u2v1,u2,v2u1,v2,u1,u1,1]⋅e=0.
定理:设A是mn矩阵,如果R(A)=r<n,则其次线性方程组Ax=0的基础解析存在(非零解)。且每个基础解析中含有n-r个解向量。
把左侧的系数矩阵记为A
A
e
=
0
Ae=0
Ae=0对于八点法,A的大小为m:8×n:9。如果系数矩阵的秩r=8,那么它的解空间位数n-r=1,也就是一条直线。这与尺度等价性是一致的。则E的元素可以通过上述方程解得。
如果秩小于8?存在线性相关,比如两点对是共线的。
以上都在讨论8个方程都是线性无关的,如果方程数大于8,有彼此线性相关的方程组,我们该如何求解?
把左侧的系数矩阵记为A
A
e
=
0
Ae=0
Ae=0
如果给定的匹配点数多于8,该方程构成一个超定方程,即不一定存在e使得上式成立,此时可以计算一个最小二乘解
m
i
n
∣
∣
A
e
∣
∣
2
2
=
m
i
n
e
T
A
T
A
e
min||Ae||_2^2=mine^TA^TAe
min∣∣Ae∣∣22=mineTATAe求出了最小二乘意义下的E矩阵。
最小二乘:
是一种直线拟合的方式。其核心的思想就是说求解未知参数,使得理论值与观测值之差(误差, 或者说残差)的平方和(一般叫做损失函数)达到最小:
E
=
∑
i
=
1
n
e
i
2
=
∑
i
=
1
n
(
y
i
−
y
ˆ
)
2
E=\sum_{i=1}^ne_i^2=\sum_{i=1}^n(y_i-\^y)^2
E=i=1∑nei2=i=1∑n(yi−yˆ)2
不过,当可能存在误差匹配的情况下,我们会更倾向于使用随机采样一致性来求。该算法适用于很多带误差匹配的数据。
最小二乘的一个缺点:
当异常点较多时.由于最小二乘是使得所有点离目标函数最近,所以为了保证这一点,拟合直线会使得模型鲁棒性较差,进而得出较差的拟合结果。
什么是RANSAC?
RANSAC为RandomSampleConsensus(随机抽样一致)的缩写,它是根据包含异常数据
的样本数据集,计算出数学模型参数,得到有效样本的算法。它于1981年Fischler和Bolles提出。
算法:
- 随机的从S中选择s个数据点组成一个样本作为模型的一个示例,其中s是构建模型需要最少的点,如拟合直线s=2
- 计算S中所有点与模型的距离,确定模型距离
阈值t
内的数据点集Si,Si成为采样的一致集并定义为S的内点。
- 如果Si的大小(内点的数目)大于某个
阈值T
,用Si的所有点重新估计模型并结束。 - 如果Si的大小小于T,选择一个新的子集并重复1,2,3的过程
- 经过
N
次试验选择最大一致集Si,并用Si所有点重新估计模型。
Conclusion: { i n p u t : 含有外点的数据集 S o u t p u t 我们期望拟合出的模型和内点集 \begin{cases}input:&含有外点的数据集S\\output & 我们期望拟合出的模型和内点集 \end{cases} {input:output含有外点的数据集S我们期望拟合出的模型和内点集
1.1.2 从E中分解R和t
对E进行奇异性分解
E
=
U
Σ
V
T
E=U\Sigma V^T
E=UΣVT
(U与V是正交矩阵,Σ为奇异值矩阵)
JacobiSVD<MatrixXd>svd(E,ComputeThinU |ComputeThinV);
Matrix3d sigma;
Vector3d sigma3=svd.singularValues();
sigma<<(sigma3(0)+sigma3(1))/2,0,0,0,(sigma3(0)+sigma(1))/2,0,0,0,0;
根据现行方程解出的E,可能不满足E的内在性质----它的奇异值不一等是σ,σ,0的形式,这时,在做SVD分解时会可以把Σ矩阵调整成上面的样子,具体方法为: 对八点求得的E进行SVD分解后,会得到奇异值矩阵Σ=diag(σ1,σ2,σ3),不妨σ1>>σ2>>σ3,取
E
=
U
d
i
a
g
(
σ
1
+
σ
2
2
,
σ
1
+
σ
2
2
,
0
)
V
T
E=Udiag(\frac{σ_1+σ_2}{2},\frac{σ_1+σ_2}{2},0)V^T
E=Udiag(2σ1+σ2,2σ1+σ2,0)VT
t
1
∧
=
U
R
Z
(
π
2
)
Σ
U
T
R
1
=
U
R
Z
T
(
π
2
)
V
T
t
2
∧
=
U
R
Z
(
−
π
2
)
Σ
U
T
R
2
=
U
R
Z
T
(
−
π
2
)
V
T
t_1^\wedge=UR_Z(\frac{\pi}{2})\Sigma U^T~~~R_1=UR_Z^T(\frac{\pi}{2})V^T\\ ~\\ t_2^\wedge=UR_Z(-\frac{\pi}{2})\Sigma U^T~~~R_2=UR_Z^T(-\frac{\pi}{2})V^T
t1∧=URZ(2π)ΣUT R1=URZT(2π)VT t2∧=URZ(−2π)ΣUT R2=URZT(−2π)VT
证明: SLAM十四讲7视觉里程
R,t组合起来有四种情况(点在相机前原理)
1.2 单应矩阵H
- 八点法在特征点共面时会退化
- 设一堆匹配好的特征点位于某平面上,则这个平面p满足方程
n T P + d = 0. 其中 n T 为平面法向量 ⇓ − n T P d = 1. n^TP+d=0.\\其中n^T为平面法向量\\\Downarrow\\-\frac{n^TP}{d}=1. nTP+d=0.其中nT为平面法向量⇓−dnTP=1.
- 两个图像特征点的坐标关系
- p 2 ≅ K ( R P + t ) ≅ K ( R P + t ⋅ ( − n T P d ) ) ≅ K ( R − t n T d ) P ≅ K ( R − t n T d ) K − 1 p 1 . 记做 H ⇓ p 2 ≅ H p 1 H 的定义与旋转 , 平移及平面 , 内参有关 , 单应矩阵也是一个 3 ∗ 3 的矩阵 p_2\cong K(RP+t)\\ \cong K(RP+t·(-\frac{n^TP}{d}))\\ \cong K(R-\frac{tn^T}{d})P\\ \cong K(R-\frac{tn^T}{d})K^{-1}p_1.记做H\\ \Downarrow \\ p_2 \cong Hp_1\\H的定义与旋转,平移及平面,内参有关,单应矩阵也是一个3*3的矩阵 p2≅K(RP+t)≅K(RP+t⋅(−dnTP))≅K(R−dtnT)P≅K(R−dtnT)K−1p1.记做H⇓p2≅Hp1H的定义与旋转,平移及平面,内参有关,单应矩阵也是一个3∗3的矩阵
p
2
≅
H
p
1
.
上式展开
⇓
(
u
2
v
2
1
)
≅
(
h
1
h
2
h
3
h
4
h
5
h
6
h
7
h
8
h
9
)
(
u
1
v
1
1
)
去掉前三行
⇓
u
2
=
h
1
u
1
+
h
2
v
1
+
h
3
h
7
u
1
+
h
8
v
1
+
h
9
v
2
=
h
4
u
1
+
h
5
v
1
+
h
6
h
7
u
1
+
h
8
v
1
+
h
9
p_2\cong Hp_1. \\ 上式展开\Downarrow~~~~~~~~~~~~~~~~~\\ \begin{pmatrix} u_2 \\v_2\\1 \end{pmatrix}\cong\begin{pmatrix} h_1 & h_2 & h_3\\ h_4 & h_5 & h_6\\h_7 & h_8 & h_9\\ \end{pmatrix} \begin{pmatrix} u_1 \\v_1\\1 \end{pmatrix} \\ 去掉前三行\Downarrow~~~~~~~~~~~~~~~~~~~~\\ u_2=\frac{h_1u_1+h_2v_1+h3}{h_7u_1+h_8v_1+h9}\\ v_2=\frac{h_4u_1+h_5v_1+h6}{h_7u_1+h_8v_1+h9}
p2≅Hp1.上式展开⇓
u2v21
≅
h1h4h7h2h5h8h3h6h9
u1v11
去掉前三行⇓ u2=h7u1+h8v1+h9h1u1+h2v1+h3v2=h7u1+h8v1+h9h4u1+h5v1+h6
求解线性方程组可恢复单应矩阵H
对但应矩阵进行分解,才可以得到相应的旋转矩阵R和平移向量t(数值法与解析法)
与本质矩阵分解类似,单应矩阵的分解同样会得到四组解。如果已知成像的地图点和深度为正值(点在相机前方),则可以排除两组解,最后剩下的两组解,可以通过更多的先验信息来判断。
尺度不确定性:
— 从R和t的计算公式中,可以发现
k
E
=
k
t
∧
R
kE=kt^\wedge R
kE=kt∧R
乘以k倍,等式也成立,所以我们如果程序输出t=0.882, 这个0.882 究竟是0.882米还是0.882厘米,我们没办法确定
— 由于尺度的关系,不同的t决定了以后计算点p的深度也是不同的,所以回复的物体深度也是跟尺度有关的,我们说的结构回复只是回复了物体的结构框架,而不是实际意义的物体尺寸。
— 当我们对两幅图像计算E并回复R和t时,他们的尺度都是一样的,本来是同一个点,在不同尺寸下,深度不一样,这个时候就很麻烦,一次这个尺度需要统一.
三、三角测量
为什么要使用三角测量?
如果一直用对极几何求两帧之间的位姿,这样求得的两帧之间t的尺度每一次都不固定, 所以要先用三角测量得到一个深度, 把尺度固定下来。三角化之后就把地图和相机<固定>在同一个尺度下,但这个尺度还是不<确定>的。
三角测量:是指通过在两处观察同一个点的夹角,从而确定该点的距离。
理论上直线
O
1
p
1
与
O
2
p
2
在场景中会相较于一点
p
,
该点即两个特征点所对应的地图点的三维场景中的位置。
但是由于噪声的影响
,
这两条直线往往无法相交
,
则可以通过最小二乘求解。
理论上直线O_1p_1与O_2p_2在场景中会相较于一点p,该点即两个特征点所对应的地图点的三维场景中的位置。\\但是由于噪声的影响,这两条直线往往无法相交,则可以通过最小二乘求解。
理论上直线O1p1与O2p2在场景中会相较于一点p,该点即两个特征点所对应的地图点的三维场景中的位置。但是由于噪声的影响,这两条直线往往无法相交,则可以通过最小二乘求解。
几何关系:
设 x 1 和 x 2 为两个特征点的归一化坐标 s 1 x 1 = s 2 R x 2 + t . 现在已知 R 和 t , 要求 s 1 和 s 2 求 s 2 时 , 两侧乘 x 1 ∧ s 1 x 1 ∧ x 1 = s 2 x 1 ∧ R x 2 + x 1 ∧ t . 另外 , 由于噪声的存在 , 我们估计的 R 和 t 不一定使等号成立 , 则用最小二乘法求解 : 求 [ x 1 , − R x 2 ] [ s 1 s 2 ] = t 的最小二乘 . 设x_1和x_2为两个特征点的归一化坐标\\ \color{#F00}{s_1x_1=s_2Rx_2+t.}\color{#000}\\ 现在已知R和t,要求s_1和s_2\\求s_2时,两侧乘x_1^\wedge\\ \color{#F00}{s_1x_1^\wedge x_1=s_2x_1^\wedge Rx_2+x_1^\wedge t.}\color{#000}\\另外,由于噪声的存在,我们估计的R和t不一定使等号成立,则用最小二乘法求解:\\ 求[x_1,-Rx_2]\begin{bmatrix} s_1\\ s_2 \end{bmatrix}=t的最小二乘. 设x1和x2为两个特征点的归一化坐标s1x1=s2Rx2+t.现在已知R和t,要求s1和s2求s2时,两侧乘x1∧s1x1∧x1=s2x1∧Rx2+x1∧t.另外,由于噪声的存在,我们估计的R和t不一定使等号成立,则用最小二乘法求解:求[x1,−Rx2][s1s2]=t的最小二乘.
三角化中的问题:
—三角测量是由平移得到的,有平移才会出现对极几何中的三角形。则纯旋转是无法使用三角测量的。
—平移的大小会引起:像素不确定性导致的深度的不确定性
1. 当存在误差时,平移越大,误差对深度计算的影响越小。
2.但当平移变大时,会导致图像的外观成像发生变化,变化越大特征与匹配就越困难。
3. 于是产生矛盾: 平移太大会导致匹配失效, 平移太小三角化精度不够
三、3D-2D:PNP
3.1 问题描述:
已知:
- 3D:上一帧的相机坐标系下的3D点
- 2D: 两幅图片的匹配信息,像素坐标
- 其他:内参矩阵
求:
两帧之间的变换矩阵R,t
问题求解:
{
直接线性变换
(
D
L
T
)
P
3
P
E
P
N
P
U
P
N
P
非线性优化
(
B
u
n
d
l
e
A
d
j
u
s
t
m
e
n
t
)
\begin{cases} \color{#F00}直接线性变换(DLT)\\P3P\\ \color{#000}EPNP\\UPNP\\ \color{#F00}非线性优化(Bundle Adjustment) \end{cases}
⎩
⎨
⎧直接线性变换(DLT)P3PEPNPUPNP非线性优化(BundleAdjustment)
3.2 直接线性变换(DLT)
数学语言描述:
某个空间点的其次坐标
P
=
(
X
Y
Z
1
)
,
在图像
I
1
(
上一帧图像
)
中
,
投影到特征点
x
1
=
(
u
1
v
1
1
)
(
归一化坐标
)
P=\begin{pmatrix} X\\ Y\\ Z \\ 1\\ \end{pmatrix},在图像I_1(上一帧图像)中,投影到特征点x_1=\begin{pmatrix} u_1\\ v_1 \\1 \end{pmatrix}(归一化坐标)
P=
XYZ1
,在图像I1(上一帧图像)中,投影到特征点x1=
u1v11
(归一化坐标)
定义曾广矩阵[R|t]为一个3×4的矩阵,包含了旋转和平移信息此时相机的位姿R和t是未知的
s
(
u
1
v
1
1
)
=
(
t
1
t
2
t
3
t
4
t
5
t
6
t
7
t
8
t
9
t
10
t
11
t
12
)
(
X
Y
Z
1
)
.
归一化平面
与世界坐标系
s\begin{pmatrix} u_1 \\ v_1 \\ 1 \end{pmatrix}=\begin{pmatrix} t_1 &t_2 &t_3 &t_4\\ t_5 &t_6 &t_7 &t_8\\ t_9 &t_{10} &t_{11} &t_{12} \\ \end{pmatrix}\begin{pmatrix} X \\ Y \\Z\\1 \end{pmatrix}. ~~~~~~ \color{#F00}{归一化平面 \\ 与世界坐标系}
s
u1v11
=
t1t5t9t2t6t10t3t7t11t4t8t12
XYZ1
. 归一化平面与世界坐标系
用最后一行把s消去,会得到两个约束
u
1
=
t
1
X
+
t
2
Y
+
t
3
Z
+
t
4
t
9
X
+
t
10
Y
+
t
11
Z
+
t
12
,
v
1
=
t
5
X
+
t
6
Y
+
t
7
Z
+
t
8
t
9
X
+
t
10
Y
+
t
11
Z
+
t
12
u_1=\frac{t_1X+t_2Y+t_3Z+t_4}{t_9X+t_{10}Y+t_{11}Z+t_{12}}, v_1=\frac{t_5X+t_6Y+t_7Z+t_8}{t_9X+t_{10}Y+t_{11}Z+t_{12}}
u1=t9X+t10Y+t11Z+t12t1X+t2Y+t3Z+t4,v1=t9X+t10Y+t11Z+t12t5X+t6Y+t7Z+t8
定义矩阵的行向量:
t
1
=
(
t
1
,
t
2
,
t
3
,
t
4
)
T
,
t
2
=
(
t
5
,
t
6
,
t
7
,
t
8
)
T
,
t
3
=
(
t
9
,
t
1
0
,
t
1
1
,
t
1
2
)
T
,
则有
[
R
∣
t
]
=
(
t
1
T
t
2
T
t
3
T
)
,
带入两个约束中于是有
:
t
1
T
P
−
t
3
T
P
u
1
=
0
,
t
2
T
P
−
t
3
T
P
v
1
=
0
,
t_1=(t_1,t_2,t_3,t_4)^T, t_2=(t_5,t_6,t_7,t_8)^T,t_3=(t_9,t_10,t_11,t_12)^T,\\则有[R|t]=\begin{pmatrix} t_1^T\\ t_2^T \\t_3^T \end{pmatrix}, 带入两个约束中于是有:\\~ \\ t_1^TP-t_3^TPu_1=0,\\t_2^TP-t_3^TPv_1=0,
t1=(t1,t2,t3,t4)T,t2=(t5,t6,t7,t8)T,t3=(t9,t10,t11,t12)T,则有[R∣t]=
t1Tt2Tt3T
,带入两个约束中于是有: t1TP−t3TPu1=0,t2TP−t3TPv1=0,
则每个特征点提供了两个
关于t的线性约束,假设一共有N个特征点,则可以列出下列方程组:
(
P
1
T
0
−
u
1
P
1
T
0
P
1
T
−
v
1
P
1
T
⋮
⋮
⋮
P
N
T
0
−
u
N
p
N
T
0
P
N
T
−
v
N
P
N
T
)
(
t
1
t
2
t
3
)
=
0.
\begin{pmatrix} P_1^T & 0 & -u_1P_1^T\\ 0 & P_1^T & -v_1 P_1^T\\ \vdots &\vdots &\vdots\\ P_N^T &0&-u_Np_N^T\\ 0& P_N^T& -v_NP_N^T \end{pmatrix}\begin{pmatrix} t_1 \\ t_2 \\ t_3 \end{pmatrix}=0.
P1T0⋮PNT00P1T⋮0PNT−u1P1T−v1P1T⋮−uNpNT−vNPNT
t1t2t3
=0.
在这个方程中,[R|t]一共有12维,则最少通过6对匹配点可以实现矩阵的线性求解,当匹配点大于6对时, 对超定方程求最小二乘解即可。
DLT求解局限:
在DLT求解过程中,直接将[R|t]矩阵看成12个未知数,忽略了其中的关系(旋转矩阵R∈SO(3)),因此求得的解不一定满足该约束(未必是正交矩阵),则我们必须针对DLT估计的左边的3×3的矩阵寻找一个最好的旋转矩阵对它进行近似。
3.3 直接线性变换(DLT)
数学语言描述:输入数据为3对
3D-2D的匹配点
已知
{
O
是相机光心
3
D
点为
A
,
B
,
C
(
世界坐标系的点
)
2
D
点为
a
,
b
,
c
(
A
,
B
,
C
在相机平面上的投影
)
求解
⟹
得到该点在相机坐标系下的
3
D
坐标。
已知\begin{cases}O是相机光心\\ 3D点为A,B,C&(世界坐标系的点)\\2D点为a,b, c &(A,B,C在相机平面上的投影)\end{cases} 求解 \implies 得到该点在相机坐标系下的3D坐标。
已知⎩
⎨
⎧O是相机光心3D点为A,B,C2D点为a,b,c(世界坐标系的点)(A,B,C在相机平面上的投影)求解⟹得到该点在相机坐标系下的3D坐标。
一旦3D点在相机坐标系下的坐标可以算出,就得到了3D-3D对应的点,把PNP问题转化为了ICP问题
Δ
O
a
b
−
Δ
O
A
B
,
Δ
b
c
−
Δ
O
B
C
,
Δ
O
a
c
−
Δ
O
A
C
.
三组相似三角形
O
A
2
+
O
B
2
−
2
O
A
⋅
O
B
⋅
c
o
s
<
a
,
b
>
=
A
B
2
O
B
2
+
O
C
2
−
2
O
B
⋅
O
C
⋅
c
o
s
<
b
,
c
>
=
B
C
2
余弦定理
O
A
2
+
O
B
2
−
2
O
A
⋅
O
B
⋅
c
o
s
<
a
,
b
>
=
A
B
2
除以
O
C
2
,
记
x
=
O
A
O
C
,
y
=
O
B
O
C
→
{
x
2
+
y
2
−
2
x
y
c
o
s
<
a
,
b
>
=
A
B
2
O
C
2
y
2
+
1
2
−
2
y
c
o
s
<
b
,
c
>
=
B
C
2
O
C
2
x
2
+
1
2
−
2
x
c
o
s
<
a
,
c
>
=
A
C
2
O
C
2
x
2
+
y
2
−
2
x
y
c
o
s
<
a
,
b
>
−
v
=
0
y
2
+
1
2
−
2
y
c
o
s
<
b
,
c
>
−
u
v
=
0
x
2
+
1
2
−
2
x
c
o
s
<
a
,
c
>
−
w
v
=
0
记
v
=
A
B
2
O
C
2
,
u
v
=
B
C
2
O
C
2
,
w
v
=
A
C
2
O
C
2
把第一个式子中的
v
放到等式一边
,
并带入后两个式子中
:
(
1
−
u
)
y
2
−
u
x
2
−
2
c
o
s
<
b
,
c
>
y
+
2
u
x
y
c
o
s
<
a
,
b
>
+
1
=
0
(
1
−
w
)
x
2
−
w
y
2
−
2
c
o
s
<
a
,
c
>
x
+
2
w
x
y
c
o
s
<
a
,
b
>
+
1
=
0
\Delta Oab-\Delta OAB, \Delta bc-\Delta OBC,\Delta Oac-\Delta OAC. \qquad \color{#0FF}三组相似三角形\color{#000}\\ OA^2+OB^2-2OA·OB·cos<a,b>=AB^2 \qquad\qquad\qquad\\ OB^2+OC^2-2OB·OC·cos<b,c>=BC^2 \qquad \color{#0FF}余弦定理\color{#000}\\ OA^2+OB^2-2OA·OB·cos<a,b>=AB^2 \qquad\qquad\qquad\\ \color{#0F0}除以OC^2,记x=\frac{OA}{OC},y=\frac{OB}{OC}\color{#000} \to \begin{cases} x^2+y^2-2xycos<a,b>=\frac{AB^2}{OC^2}\\ y^2+1^2-2ycos<b,c>=\frac{BC^2}{OC^2}\\ x^2+1^2-2xcos<a,c>=\frac{AC^2}{OC^2} \end{cases}\\ \begin{matrix} x^2+y^2-2xycos<a,b>-v=0\\ y^2+1^2-2ycos<b,c>-uv=0\\ x^2+1^2-2xcos<a,c>-wv=0 \end{matrix}\color{#00f}记v=\frac{AB^2}{OC^2},uv=\frac{BC^2}{OC^2},wv=\frac{AC^2}{OC^2}\color{#000}\\ \color{#0F0}把第一个式子中的v放到等式一边,并带入后两个式子中:\color{#000}\\ (1-u)y^2-ux^2-2cos<b,c>y+2uxycos<a,b>+1=0\\ (1-w)x^2-wy^2-2cos<a,c>x+2wxycos<a,b>+1=0
ΔOab−ΔOAB,Δbc−ΔOBC,ΔOac−ΔOAC.三组相似三角形OA2+OB2−2OA⋅OB⋅cos<a,b>=AB2OB2+OC2−2OB⋅OC⋅cos<b,c>=BC2余弦定理OA2+OB2−2OA⋅OB⋅cos<a,b>=AB2除以OC2,记x=OCOA,y=OCOB→⎩
⎨
⎧x2+y2−2xycos<a,b>=OC2AB2y2+12−2ycos<b,c>=OC2BC2x2+12−2xcos<a,c>=OC2AC2x2+y2−2xycos<a,b>−v=0y2+12−2ycos<b,c>−uv=0x2+12−2xcos<a,c>−wv=0记v=OC2AB2,uv=OC2BC2,wv=OC2AC2把第一个式子中的v放到等式一边,并带入后两个式子中:(1−u)y2−ux2−2cos<b,c>y+2uxycos<a,b>+1=0(1−w)x2−wy2−2cos<a,c>x+2wxycos<a,b>+1=0
关于x和y的一元二次方程:
已知:
三个余弦角cos<a,b>,cos<b,c>,cos<a,c>
v = A B 2 O C 2 , u v = B C 2 O C 2 , w v = A C 2 O C 2 ⇓ u = B C 2 A B 2 , ω = A C 2 A B 2 v=\frac{AB^2}{OC^2},uv=\frac{BC^2}{OC^2},wv=\frac{AC^2}{OC^2}\\ \Downarrow\\ u=\frac{BC^2}{AB^2},\omega=\frac{AC^2}{AB^2} v=OC2AB2,uv=OC2BC2,wv=OC2AC2⇓u=AB2BC2,ω=AB2AC2
未知:x与y(随着相机移动会发生变化), x = O A O C , y = O B O C x=\frac{OA}{OC},y=\frac{OB}{OC} x=OCOA,y=OCOB
求解方法:吴消元法
求解结果:A,B,C在当前相机坐标系下的3D坐标
总结:
P
3
P
=
{
利用三角形性质
求解
A
、
B
、
C
在当前相机坐标系下的
3
D
坐标
转换一个
3
D
−
3
D
的位姿估计问题
=
=
>
>
I
C
P
(
比较容易
)
P3P=\begin{cases}利用三角形性质 \\ 求解A、B、C在当前相机坐标系下的3D坐标\\ \color{#00F}转换一个 3D-3D的位姿估计问题 ==>> ICP(比较容易)\end{cases}
P3P=⎩
⎨
⎧利用三角形性质求解A、B、C在当前相机坐标系下的3D坐标转换一个3D−3D的位姿估计问题==>>ICP(比较容易)
存在的问题:
1. P3P只利用3个点的信息,当给定的配对点多于三组时,难以利用更多信息.
2. 如果3D点或2D点受噪声影响,或者存在误匹配,则算法失效
3.4 非线性优化(Bundle Adjustment) PNP问题
思想: 前面说的线性方法,往往是先求相机位姿,再求空间点位置
非线性优化则是把他们看成优化变量,放在一起优化,因此可以构建一个定义于李代数上的非线性最小二乘问题
分析目标函数: 我们通过特征匹配知道p1,p2是同一空间点的投影,估计了一个相机位姿,使得3D的实际投影位置与观测位置存在一个误差(重投影误差),则把误差求和,构建最小二乘问题,然后寻找最好的相机位姿
,使其最小化
T
∗
=
arg
T
min
1
2
∑
i
=
1
n
∣
∣
u
i
−
u
i
′
∣
∣
2
2
(
1
)
T^*=\arg_T\min\frac{1}{2}\sum_{i=1}^n || u_i - u_i ' ||_2^2 \qquad (1)
T∗=argTmin21i=1∑n∣∣ui−ui′∣∣22(1)
已知:
- 某空间点在上一帧相机坐标为 P i = ( X 1 Y i Z i ) 上一帧相机坐标系 − 像素坐标系 ⟹ s [ u i ′ v i ′ 1 ] = K T [ X i Y i Z i 1 ] 其次坐标到 非齐次坐标 的转换 观测投影位置 : u i ′ = [ u i ′ v i ′ ] P_i=\begin{pmatrix} X_1\\ Y_i \\Z_i \end{pmatrix} \qquad \begin{matrix}上一帧相机坐标系-像素坐标系\\ \Longrightarrow \\ s\begin{bmatrix}u_i'\\v_i'\\1\end{bmatrix}=KT\begin{bmatrix}X_i\\Y_i\\Z_i\\1\end{bmatrix} \color{#00F}\begin{matrix}其次坐标到\\非齐次坐标\\的转换~~~~~~~~\end{matrix} \end{matrix} \qquad 观测投影位置: u_i'=\begin{bmatrix}u_i'\\v_i'\end{bmatrix} Pi= X1YiZi 上一帧相机坐标系−像素坐标系⟹s ui′vi′1 =KT XiYiZi1 其次坐标到非齐次坐标的转换 观测投影位置:ui′=[ui′vi′]
- "实际"投影的像素坐标为:
u
i
′
=
[
u
i
′
v
i
′
]
u_i'=\begin{bmatrix}u_i'\\v_i'\end{bmatrix}
ui′=[ui′vi′]
带入模型(1): T ∗ = arg min T 1 2 ∑ i = 1 n ∣ ∣ u i − 1 s i K T P i ∣ ∣ 2 2 目标函数 T^*=\arg\min_T\frac{1}{2}\sum_{i=1}^n || u_i - \frac{1}{s_i}KTP_i ||_2^2 \qquad \color{#F00}{目标函数} T∗=argTmin21i=1∑n∣∣ui−si1KTPi∣∣22目标函数
通过高斯牛顿法,L-M等优化算法进行求解,首先我们要知道每个误差关于优化变量的导数:
e ( x + D e l t a x ) ≈ e ( x ) + J Δ . 这里的 J 是那种形式 e(x+\ Delta x)≈e(x)+J\Delta. \qquad \color{#00F}这里的J是那种形式 e(x+ Deltax)≈e(x)+JΔ.这里的J是那种形式
优化这个目标函数,用的是李代数扰动,则对扰动小量δξ求导:
∂ e ∂ δ ξ = lim δ ξ → 0 e ( δ ξ ⊕ ξ ) − e ( ξ ) δ ξ = ∂ e ∂ P ′ ∂ P ′ ∂ δ ξ \color{#F00}\frac{\partial e}{\partial \delta \xi} = \lim_{\delta \xi \to 0}\frac{e(\delta \xi ⊕\xi)-e(\xi)}{\delta \xi}=\frac{\partial e}{\partial P'}\frac{\partial P'}{\partial \delta \xi} ∂δξ∂e=δξ→0limδξe(δξ⊕ξ)−e(ξ)=∂P′∂e∂δξ∂P′
其中,P’是P(上一帧相机坐标系下的点)经过外参矩阵T变换到当前帧相机坐标系下的点
P ′ = ( T P ) 1 : 3 = [ X ′ , Y ′ , Z ′ ] T \color{#F00}P'=(TP)_{1:3}=[X',Y',Z']^T P′=(TP)1:3=[X′,Y′,Z′]T
那么,相机投影模型相对于P’为 s u ′ = K P ′ s [ u i ′ v i ′ 1 ] = K [ X i Y i Z i ] 利用第三行消去 s ( 实际上就是 P ′ 的距离 ) u ′ = f x X ′ Z ′ + c x , v ′ = f y Y ′ Z ′ + c y ( 3 ) \color{#00F}su'=KP' \color{#000}\\ s\begin{bmatrix}u_i'\\v_i'\\1\end{bmatrix}=K\begin{bmatrix}X_i\\Y_i\\Z_i\end{bmatrix} \begin{matrix}利用第三行消去s(实际上就是P'的距离)\\ u'=f_x\frac{X'}{Z'}+c_x,\qquad v'=f_y\frac{Y'}{Z'}+c_y \end{matrix}\qquad(3) su′=KP′s ui′vi′1 =K XiYiZi 利用第三行消去s(实际上就是P′的距离)u′=fxZ′X′+cx,v′=fyZ′Y′+cy(3)
在模型(2)中, 其中u_i是像素坐标的测量值(不会随位姿改变,则为常量),后一项为预测值e_i对P’求导; 实际上也就是:
− 1 s i K T P i = − 1 s i K T P i − 1 s i s u ′ 其中 − 1 s i K T P i 为预测模型 -\frac{1}{s_i}KTP_i=-\frac{1}{s_i}KTP_i \qquad -\frac{1}{s_i}su' \qquad 其中-\frac{1}{s_i}KTP_i为预测模型 −si1KTPi=−si1KTPi−si1su′其中−si1KTPi为预测模型
对P’求导,由(3)可知
∂ e ∂ P ′ = − [ ∂ u ∂ X ′ ∂ u ∂ Y ′ ∂ u ∂ Z ′ ∂ v ∂ X ′ ∂ v ∂ Y ′ ∂ v ∂ Z ′ ] = − [ f x Z ′ 0 − f x X ′ Z ′ 2 0 f y Z ′ − f y Y ′ Z ′ 2 ] \frac{\partial e}{\partial P'}=-\begin{bmatrix} \frac{\partial u}{\partial X'}& \frac{\partial u}{\partial Y'} &\frac{\partial u}{\partial Z'}\\ \frac{\partial v}{\partial X'}&\frac{\partial v}{\partial Y'}&\frac{\partial v}{\partial Z'} \end{bmatrix}=-\begin{bmatrix} \frac{f_x}{Z'}& 0 &-\frac{f_xX'}{Z'^2}\\ 0& \frac{f_y}{Z'} &-\frac{f_yY'}{Z'^2}\\ \end{bmatrix} ∂P′∂e=−[∂X′∂u∂X′∂v∂Y′∂u∂Y′∂v∂Z′∂u∂Z′∂v]=−[Z′fx00Z′fy−Z′2fxX′−Z′2fyY′]
∂ P ′ ∂ δ ξ = ∂ ( e x p ( ξ ∧ ) P ) ∂ δ ξ = [ I − ( R P + t ) ∧ 0 T 0 T ] → [ I − P ′ ∧ ] = [ 1 0 0 0 Z ′ − Y ′ 0 1 0 − Z ′ 0 X ′ 0 0 1 Y ′ − X ′ 0 ] ∂ e ∂ δ ξ = lim δ ξ → 0 e ( δ ξ ⊕ ξ ) − e ( ξ ) δ ξ = ∂ e ∂ P ′ ∂ P ′ ∂ δ ξ \color{#F00}\begin{matrix} \frac{\partial P'}{\partial \delta \xi}=\frac{\partial (exp(\xi^\wedge)P)}{\partial \delta\xi}= \begin{bmatrix}I & -(RP+t)^\wedge\\ 0^T&0^T\end{bmatrix}\\ \to \begin{bmatrix}I&-P'^\wedge\end{bmatrix}= \begin{bmatrix}1 & 0&0&0&Z'&-Y'\\ 0 & 1 & 0 &-Z'&0&X' \\0 & 0 & 1 &Y' &-X'&0 \end{bmatrix}\end{matrix} \color{#000}\qquad \frac{\partial e}{\partial \delta \xi}= \lim_{\delta \xi \to 0}\frac{e(\delta \xi ⊕\xi)-e(\xi)}{\delta \xi}= \frac{\partial e}{\partial P'}\frac{\partial P'}{\partial \delta \xi} ∂δξ∂P′=∂δξ∂(exp(ξ∧)P)=[I0T−(RP+t)∧0T]→[I−P′∧]= 1000100010−Z′Y′Z′0−X′−Y′X′0 ∂δξ∂e=δξ→0limδξe(δξ⊕ξ)−e(ξ)=∂P′∂e∂δξ∂P′
将这两项相乘,就得到了2×6的雅可比矩阵:
∂ e ∂ δ ξ = − [ f x Z ′ 0 − f x X ′ Z ′ 2 − f x X ′ Y ′ Z ′ 2 f x + f x X ′ 2 Z ′ 2 − f x Y ′ Z ′ 0 f y Z ′ − f y Y ′ Z ′ 2 − f y − f y Y ′ 2 Z ′ 2 f y X ′ Y ′ Z ′ 2 f y X ′ Z ′ ] 2 × 6 的雅可比矩阵是误差对于扰动小量位姿的偏导数 \color{#F00}\frac{\partial e}{\partial \delta \xi}=-\begin{bmatrix} \frac{f_x}{Z'} & 0&-\frac{f_xX'}{Z'^2}&-\frac{f_xX'Y'}{Z'^2}&f_x+\frac{f_xX'^2}{Z'^2}&- \frac{f_xY'}{Z'}\\~\\ 0 & \frac{f_y}{Z'} & -\frac{f_yY'}{Z'^2} &-f_y-\frac{f_yY'^2}{Z'^2}&\frac{f_yX'Y'}{Z'^2}&\frac{f_yX'}{Z'} \end{bmatrix} \\~ \color{#000}\\2×6的雅可比矩阵是误差对于扰动小量位姿的偏导数 ∂δξ∂e=− Z′fx 00Z′fy−Z′2fxX′−Z′2fyY′−Z′2fxX′Y′−fy−Z′2fyY′2fx+Z′2fxX′2Z′2fyX′Y′−Z′fxY′Z′fyX′ 2×6的雅可比矩阵是误差对于扰动小量位姿的偏导数
2. 是把上一帧相机坐标系下的3D点,乘了转换矩阵外参(R和t), 转换到当前帧相机坐标系下的3D点,再乘以内参(K)最后变到当前帧图片的像素坐标系下,得到预测的像素点。
3. 前段匹配像素点,例如ORRB, 光流匹配的。
4. 两者像素点相差会构成一个误差函数。这个误差函数的自变量就是外参,通过调整外参,使得误差最小。
除了优化位姿(R和t),还希望优化特征点的空间位置,则需要讨论e关于空间点(世界坐标系)P的导数
∂
e
∂
P
=
∂
e
∂
P
′
∂
P
′
∂
P
\frac{\partial e}{\partial P}=\frac{\partial e}{\partial P'}\frac{\partial P'}{\partial P}
∂P∂e=∂P′∂e∂P∂P′
∂
e
∂
P
′
=
−
[
∂
u
∂
X
′
∂
u
∂
Y
′
∂
u
∂
Z
′
∂
v
∂
X
′
∂
v
∂
Y
′
∂
v
∂
Z
′
]
=
[
f
x
Z
′
0
−
f
x
X
′
Z
′
2
0
f
y
Z
′
−
f
y
Y
′
Z
′
2
]
P
′
=
R
P
+
t
=
e
x
p
(
ξ
∧
)
P
∂
P
′
∂
P
=
R
}
∂
e
∂
P
=
[
f
x
Z
′
0
−
f
x
X
′
Z
′
2
0
f
y
Z
′
−
f
y
Y
′
Z
′
2
]
R
.
\left. \begin{array}{l} \frac{\partial e}{\partial P'}=-\begin{bmatrix} \frac{\partial u}{\partial X'} & \frac{\partial u}{\partial Y'}&\frac{\partial u}{\partial Z'}\\ \frac{\partial v}{\partial X'} & \frac{\partial v}{\partial Y'} & \frac{\partial v}{\partial Z'}\\ \end{bmatrix}= \begin{bmatrix} \frac{f_x}{Z'}& 0 &-\frac{f_xX'}{Z'^2}\\ 0& \frac{f_y}{Z'} &-\frac{f_yY'}{Z'^2}\\ \end{bmatrix}\\\color{#0F0} P'=RP+t=exp(\xi^\wedge)P\qquad\frac{\partial P'}{\partial P}=R \\ \end{array} \right\} \frac{\partial e}{\partial P}=\begin{bmatrix} \frac{f_x}{Z'}& 0 &-\frac{f_xX'}{Z'^2}\\ 0& \frac{f_y}{Z'} &-\frac{f_yY'}{Z'^2}\\ \end{bmatrix}R.
∂P′∂e=−[∂X′∂u∂X′∂v∂Y′∂u∂Y′∂v∂Z′∂u∂Z′∂v]=[Z′fx00Z′fy−Z′2fxX′−Z′2fyY′]P′=RP+t=exp(ξ∧)P∂P∂P′=R⎭
⎬
⎫∂P∂e=[Z′fx00Z′fy−Z′2fxX′−Z′2fyY′]R.
总结
引用: