三维重构学习笔记(1):相机标定
本篇主要是理解一些矩阵计算相关的问题,每个问题都用在提出时重点标识,对于相机标定的理解比较有实际意义。
1、三维重构
1.1 宏观理解
先说一说宏观上的理解:三维重构是指“通过二维图片信息获得图片中的物体的三维信息的一种手段”。能够通过二维图片得到物体的三维信息主要还是得益于“图片在获取过程中与真实的世界发生了几何上的转换关系”,结合图片中的点以及那种“几何关系”,我们可以通过反推计算得到物体在真实世界中的三维信息。
1.2 三维重构的方法(SFM: Structure From Motion 简单说明:后续会深入学习)
有很多。这里暂时将关注点放在“机器视觉方面的三维重构”,因为有些三维重构的方法涉及到“深度相机”的使用,而工业检测可能使用普通相机居多。
另外一个限制因素:包工头暂时希望我通过单目相机的不同拍摄角度获得三维信息。
通过近期文献方面的阅读,我主要关注了经典的三维重构方法:SFM。该方法通过“无序图片”进行三维重建,是单目三维重构比较流行的策略。典型的SFM包括两大主要步骤:
-
Correspondences Search(包括:特征提取、匹配、几何验证(相机标定))
-
Incremental Reconstruction(包括:初始化3D模型、图像配准、三角测量、光束平差(Bundle Adjustment))
上述步骤会在进一步学习中详细介绍。
2. 相机标定有关的问题
2.1 前话
阅读文献时发现:
- 相机标定是三维重构中不可或缺的一环。因此我也拜读了最为经典的张氏标定法。
- 特征匹配也是不可或缺的一环。因此我尝试了最为经典的SIFT和SURF特征。
(张氏标定简单理解:通过最少两张图片就可以得到相机的内外参数,其中内参数是相机本身畸变,焦距等会影响图片的生成的参数,外参数主要是相机的坐标与世界坐标的关系,比如旋转和平移。)
2.2 关于标定后的相机参数在三维重构中怎么用
张氏标定法中,有一个令我在意的假设:假设物体在世界坐标系中
z
=
0
z=0
z=0的平面上。
问题一:标定好的相机能否通过反推得到物体的三维空间情况?也就是说通过多张图片对单相机标定之后,是否能够通过单张图片反推得到物体的三维坐标。目前我认为答案为“否”。
标定中的未知数:
相机内参:畸变参数(切向(由于镜片工艺导致的图片与镜头不平行)、径向畸变(远离中心图片出现弯曲))、焦距
f
f
f,相机外参数:旋转矩阵,平移向量。
畸变校正中的未知数:
径向畸变:
x
c
o
r
r
e
c
t
e
d
=
x
(
1
+
k
1
r
2
+
k
2
r
4
+
k
3
r
6
)
,
y
c
o
r
r
e
c
t
e
d
=
y
(
1
+
k
1
r
2
+
k
2
r
4
+
k
3
r
6
)
x_{corrected}=x(1+k_1r^2+k_2r^4+k_3r^6), y_{corrected}=y(1+k_1r^2+k_2r^4+k_3r^6)
xcorrected=x(1+k1r2+k2r4+k3r6),ycorrected=y(1+k1r2+k2r4+k3r6),
x
、
y
x、y
x、y是图像中的畸变后的位置坐标,通过校正得到真实坐标。r是该点距成像中心的距离。
切向畸变:
x
c
o
r
r
e
c
t
e
d
=
x
+
[
2
p
1
y
+
p
2
(
r
2
+
2
x
2
)
,
y
c
o
r
r
e
c
t
e
d
=
y
+
[
2
p
1
x
+
p
2
(
r
2
+
2
y
2
)
x_{corrected}=x+[2p_1y+p_2(r^2+2x^2), y_{corrected}=y+[2p_1x+p_2(r^2+2y^2)
xcorrected=x+[2p1y+p2(r2+2x2),ycorrected=y+[2p1x+p2(r2+2y2),
x
、
y
x、y
x、y是图像中的畸变后的位置坐标,通过校正得到真实坐标。r是该点距成像中心的距离。
已知:相机标定时,假定标定板处在
z
=
0
z=0
z=0的平面上,且最后得到像素与标定板的映射关系为:
[
u
,
v
,
1
]
T
=
H
[
x
w
,
y
w
,
1
]
[u,v,1]^T=H[x_w,y_w,1]
[u,v,1]T=H[xw,yw,1],其中
H
H
H是3*3的单应矩阵,归一化后,有8个未知数。通过四组对应点即可得到
H
H
H的唯一解,若是存在多组匹配点,可以通过最小二乘或者SVD进行求解。
问题二:为什么不能通过4对匹配点直接求单应矩阵?。我觉得是:单应矩阵是相机内外参数的线性组合,得到的匹配点不一定是完全准确的,所以用4组匹配点计算单应矩阵有可能存在较大的误差。如果出现了多组匹配点,各匹配点可以相互约束,从而得到误差更小的单应矩阵。
问题三:为什么要通过多张图片进行相机标定?我觉得:在以三维重构为目标的任务中,相机标定是辅助得到
[
x
w
,
y
w
,
z
w
]
[x_w,y_w,z_w]
[xw,yw,zw]的重要手段。但是很明显,一张图片标定得到的单应矩阵不足以使我们得到
[
x
w
,
y
w
,
z
w
]
[x_w,y_w,z_w]
[xw,yw,zw]。如果分别知道了相机的内外参数,
从这里看我在上一部分的问题:在知道图片上的点之后为什么得不到物体对应的三维点。
A:很明显,该方程只能得到世界坐标中的
[
x
w
,
y
w
]
[x_w,y_w]
[xw,yw],无法直接得到
z
w
z_w
zw。假设相机的内外参矩阵均已知,且相机标定时采用的是张氏标定,通过图片进行三维重建时(考虑最简单的两张图片),若为单目系统,两张图片的内参矩阵一样,外参矩阵有区别。设两张图片为左图和右图
世界坐标到两图对应的相机坐标系满足:
[
x
i
L
,
y
i
L
,
z
i
L
]
T
=
R
L
[
x
i
,
y
i
,
z
i
]
T
+
T
L
[x_i^L,y_i^L,z_i^L]^T=R_L[x_i,y_i,z_i]^T+T_L
[xiL,yiL,ziL]T=RL[xi,yi,zi]T+TL,
[
x
i
R
,
y
i
R
,
z
i
R
]
T
=
R
R
[
x
i
,
y
i
,
z
i
]
T
+
T
R
[x_i^R,y_i^R,z_i^R]^T=R_R[x_i,y_i,z_i]^T+T_R
[xiR,yiR,ziR]T=RR[xi,yi,zi]T+TR.
(三维重构的目的:得到世界坐标系中的值
[
x
i
,
y
i
,
z
i
]
T
[x_i,y_i,z_i]^T
[xi,yi,zi]T)
根据上式,得到任意
[
x
i
L
,
y
i
L
,
z
i
L
]
T
[x_i^L,y_i^L,z_i^L]^T
[xiL,yiL,ziL]T或者
[
x
i
R
,
y
i
R
,
z
i
R
]
T
[x_i^R,y_i^R,z_i^R]^T
[xiR,yiR,ziR]T都可以通过计算直接得到求解方程得到世界坐标
[
x
i
,
y
i
,
z
i
]
T
[x_i,y_i,z_i]^T
[xi,yi,zi]T
所以目标转化为求解
[
x
i
L
,
y
i
L
,
z
i
L
]
T
[x_i^L,y_i^L,z_i^L]^T
[xiL,yiL,ziL]T或者
[
x
i
R
,
y
i
R
,
z
i
R
]
T
[x_i^R,y_i^R,z_i^R]^T
[xiR,yiR,ziR]T
通过相机内参数可以计算得到由
z
i
L
,
z
i
R
z_i^L, z_i^R
ziL,ziR分别表示的
[
x
i
L
,
y
i
L
]
,
[
x
i
R
,
y
i
R
]
[x_i^L,y_i^L],[x_i^R,y_i^R]
[xiL,yiL],[xiR,yiR],结合相机坐标系与世界坐标系的转换可以计算得到
z
i
L
,
z
i
R
z_i^L, z_i^R
ziL,ziR。反推即可得到世界坐标系。
------------------------------------------------------------------------------------------------------------------
关于三维重构更加直观的理解请看 aipiano的博客,参考三维重构部分
将我上面讲的部分说的简单明了。
------------------------------------------------------------------------------------------------------------------
那么相机标定的目标就成了分别计算出:内参矩阵A,旋转矩阵R和平移向量T。
理解步骤:通过图片与标定物体易得单应矩阵
H
H
H,且
H
=
λ
A
[
r
1
,
r
2
,
t
]
H=\lambda A[r_1,r_2,t]
H=λA[r1,r2,t],并且
r
1
,
r
2
r_1,r_2
r1,r2是正交单位向量,所以上式满足约束条件:
h
1
T
A
−
T
A
−
1
h
2
=
0
h_1^TA^{-T}A^{-1}h_2=0
h1TA−TA−1h2=0
h
1
T
A
−
T
A
−
1
h
1
=
h
2
T
A
−
T
A
−
1
h
2
h_1^TA^{-T}A^{-1}h_1=h_2^TA^{-T}A^{-1}h_2
h1TA−TA−1h1=h2TA−TA−1h2
将该约束条件可以最终转化为一个方程组:
B
b
=
0
Bb=0
Bb=0,其中
B
B
B是2 * 6的矩阵,
b
b
b是由
A
A
A转化而来的1*6的向量。
A
A
A中的未知数共有5个,如果不算
γ
\gamma
γ,则A中有四个未知数。而两张图片即可提供包含四个等式的线性方程组。故而可以求出
b
b
b,易得
A
A
A,得到A之后,旋转矩阵,平移矩阵也易得。
问题四:矩阵
A
A
A的自由度为什么是2?
张正友的文章中解释:
H
H
H的自由度为8,旋转矩阵和平移矩阵的自由度分别为3(绕轴旋转以及向那些方向平移是独立的,故
R
,
T
R,T
R,T各有3个自由度),所以只能从内参矩阵中得到两个约束。这个问题总体待定。需要讨论,知道的小伙伴请留言。