赞
踩
已知多个图像上的对应点坐标,求出相机的投影矩阵M和对应点的三维坐标。
已知内参、多点的图像坐标,求外参和三维坐标。(如果多视角图是由一个相机拍摄,只需要知道一个相机的内参,如果是多个相机拍摄,需要多个相机的内参)
把世界坐标系放在第一个相机坐标系O1下,这样第一个相机的外参矩阵[I 0]已知。只需要求出R,T。(如何求出R,T?)
答:用本质矩阵F和基础矩阵E能求出
求解出三维点坐标Xj的流程:
1.在两幅图像上取8对点。求出基础矩阵F(归一化八点法在极几何里有讲)
2.已知基础矩阵F、两个相机的内参数K1、K2求出本质矩阵E
3.分解本质矩阵E,求出旋转矩阵R、平移矩阵T(该方法的核心)
4.利用三角化(线性法或者非线性法)求出三维点坐标Xj
如何把E分解成R、T?
由
x
2
T
F
x
1
=
0
\ x_2^TFx_1=0
x2TFx1=0得出F的符号和尺度无法确定,所以E的尺度和符号也无法确定。
为了能用E推出R、T给出了两个矩阵W,Z,这两个矩阵是为了方便推导后面的公式直接给出的,没有什么特别意义,diag(1,1,0)是单位阵最后一行的1变成0,在相差一个正负号的情况下,Z=diag(1,1,0)W=diag(1,1,0)
W
T
W^T
WT 。
所以得出
E=[
T
x
]
R
=
U
Z
U
T
R
=
U
d
i
a
g
(
1
,
1
,
0
)
W
U
T
R
\textbf{E=[}T_x]R=UZU^TR=Udiag(1,1,0)WU^TR
E=[Tx]R=UZUTR=Udiag(1,1,0)WUTR,
调用奇异值分解SVD分解算法直接算出 U和V,所以
V
T
=
W
U
T
R
V^T=WU^TR
VT=WUTR
由于W和U都是正交矩阵
W
−
1
=
W
T
,
U
−
1
=
U
T
W^{-1}=W^T,U^{-1}=U^T
W−1=WT,U−1=UT.就能求出R了,由于E的两种表示形式,可以求出两个不同的R(注意:旋转矩阵是正交变换、不改变定向、行列式为1。如果矩阵的各列向量都是单位向量,并且两两正交(就是垂直)。那么就说这个矩阵是正交矩阵。)
对[
T
x
T_x
Tx]进行SVD分解,拿出
U
T
U^T
UT的第三列就是T(无法确定符号)
因为符号无法确定,所以可能出现4种情况,只有一种情况是正确的。
通过对多个点进行重建,找出符合实际的正确的一组解
歧义:如果只有一张图,我们无法知道建筑物的实际高度,但是我们加入先验信息,比如人的实际高度,我们就能得到建筑物的实际高度。
欧式结构恢复:恢复的结构与真是场景之间相差一个相似变换(旋转、平移、缩放)为什么旋转平移也无法确定呢?
因为这是把世界坐标系定在了相机坐标系O1上了,所以并不知道物体实际的东南西北朝向。
仿射相机:如果R,Q,P点到平面π的距离远小于其到相机的距离时,可近似的看成R,Q,P同处在平面π上。
好处:从三维点到像素点的映射仅相差一个固定的系数。把Z固定为
Z
0
Z_0
Z0
仿射相机M矩阵与一般相机的M矩阵不同就是把v变成0.M是3*4的矩阵
这里回顾一下x是图像平面上的齐次坐标,降一维变成
x
E
x^E
xE变成欧式坐标,下面同理,X是摄像机坐标系下的齐次坐标[x,y,z,1],所以在仿射变换里
m
3
X
=
1
m_3X=1
m3X=1。
最后经过几次变换,让世界坐标系到图像坐标系的映射不经过齐次变换,而直接用欧式变换完成映射 即
x
E
=
A
X
E
+
b
x^E=AX^E+b
xE=AXE+b
最后仿射结构恢复问题就变成了求解:1.三维点坐标 2.投影矩阵A和b
(如何求解?)1.数据中心化 2.因式分解获得运动与结构
这里的小写x都是图像平面的像素点坐标,2x1的矩阵,大写X是世界坐标系的坐标3x1的矩阵,b被消掉了。B站讲解定位:如果把3D点的均值点当做世界坐标系的坐标原点,就可以直接完成中心化后的像素坐标点与三维坐标点X的映射关系,即
x
i
j
^
=
A
i
X
j
\hat{x_{ij}}=A_iX_j
xij^=AiXj,跳过中间的
X
j
^
\hat{X_j}
Xj^过程。
x
i
j
x_{ij}
xij中的i代表第几个相机,j代表第几个点,例
x
23
x_{23}
x23代表第2个相机上的第3个点。虽然D写得很大,但是D的秩只能为3,此时要解出M,S。(对D进行奇异值分解)
由于D的秩为3,所以理论上只有三个特征值(实际不是,但是我们取出最大的三个特征值当做近似),依据最大的3个特征值得出U,W,V。其中U为2mx3 ,W为3x3,
V
T
V^T
VT为3xn。最后M=U,S=W
V
T
V^T
VT,解出了M,S。(歧义:M=UW,S=
V
T
V^T
VT也可以,由于这两种分解都可以,所以产生歧义,后面会讲)
缺点:如果其中存在一个点没有被所有相机看到,那么计算得不到准确值。
总结:这里也是尺度无法确定的问题,M*可以表示成M与一个3x3的可逆矩阵H相乘,由于H不唯一所以会产生物体倾斜的歧义。
其中-8是因为其中有H矩阵的8个未知量是求不出来的。因为不在乎H矩阵的尺度,所以3x3矩阵H只有8个未知量(相当于本身9个未知量,因为不在乎尺度,就全都除以第九个未知量,第九个未知量变成1,所以只有8个未知量了。)
目的:该系统为了得出解必须要2mn>=8m+3n-8,其中m为相机数,n为取点数。
待解决的问题。
首先讲必定会产生歧义,既然求不了真实的解,就把这个歧义利用起来。这里的H是4x4的矩阵,这里的映射是齐次空间的映射(与欧式恢复结构一样)。
为了求出结果需要2mn>=11m+3m-15
困难点:已知信息太少。下面给出两种方法。
重点在第二步,直接用F基础矩阵求出M1,M2 。
由于存在歧义,我们求M1也可以通过矩阵变换转换成求M*,用
H
−
1
H^{-1}
H−1把M1变成
M
1
∗
M_1{^*}
M1∗=[I|0],这是个标准化相机矩阵,这时候
M
2
∗
M_2{^*}
M2∗=[A|b]完全未知,所以要把它求出来。
ppt上的
X
^
\hat{X}{~}
X^ 写错了,应该是
X
∗
X^*
X∗.现在就是为了求出M2*,X*.推导过程可以去看https://www.bilibili.com/video/BV1aU4y1T74j?t=1576.4.经过推导得F=[
b
x
b_x
bx]A
(现已知
x
′
T
F
x
=
0
x^{'T}Fx=0
x′TFx=0 , F=[
b
x
b_x
bx]A)
利用编程把b,A求出来,不管b是多少,只要已知F,并且令
F
T
F^T
FT与一个向量相乘等于零,那个向量就是b。由于
b
T
F
=
0
b^TF=0
bTF=0由前面的基础矩阵关系可知,b就是极几何中的极点。至此求出了
M
2
M_2
M2*
最后利用三角化,求出
X
j
X_j
Xj。
因式分解法的缺点:1.有遮挡不能重建 2.对应点没有选好不能重建
代数法的缺点:一般用于2视图重建,多视图容易累积误差
捆绑调整法核心思想:实际上真实点的投影有误差,
X
j
X_j
Xj的真实投影是
x
1
j
,
x
2
j
,
.
.
.
.
.
x_{1j},x_{2j},.....
x1j,x2j,.....但是用相机投影矩阵M算出来的点与之存在误差,所以重构点与真实点并不重合,为了减小误差,采用最小化重投影误差的方式,让误差在所有平面上的整体最小。
通常用到SFM或者SLAM的最后一步。(接下来讲SFM系统)
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。