文章目录
第六章 三维视觉
6.1三维视觉方法及其关键技术
三维视觉技术中的光学测量方法主要是主动测量法和被动测测量法,以下是分类关系:
6.1.1.主动测量方法介绍
主动测量方法的基本思想是利用特定的人为控制光源对于目标进行照射,根据物体表面的反射特性以及光学特性来获取目标的三维信息。这样的方法是具有较高的测距精度,抗干扰能力和实时性,具有代表性的测距方法是结构光法,飞行时间法和三角测距法。
6.1.1.1.结构光法
结构光测量是将预先确定的光图案投射于物体上,然后通透过分析图案如何失真变形而取得深度信息。根据投影光束形态的不同,结构光法又可分为光点式结构光法、光条式结构光法和光面式结构光法等
6.1.1.2.飞行时间法法
飞行时间法是将脉冲激光信号投射到物体表面,反射信号沿几乎相同路径反向传至接收器,利用发射和接收脉冲激光信号的时间差计算距离。
6.1.1.3.三角测距法
三角测距法是基于光学三角原理,根据光源、物体和检测器三者之间的几何成像关系来确定空间物体各点的三维坐标。在实际测量过程中它常用激光作为光源,用CCD相机作为检测器。
6.1.2.被动测量方法介绍
被动测距技术不需要人为地设置辐射源,只利用场景在自然光照下的二维图像来重建景物的三维信息,具有适应力强,实现手段灵活,成本低的优点,但是算法的复杂度较高。被动测距按照是使用传感器的数量可以分为单目视觉,双目立体视觉和多目视觉三大类。
6.1.2.1.单目视觉
单目视觉是指仅利用一台摄像机拍摄一张相片来进行测量。因仅需要一台相机,所以该方法的优点是结构简单、相机标定容易,同时还避免了立体视觉的小视场问题和匹配困难问题。
6.1.2.2.双目视觉
双目视觉的基本原理是通过两台摄像机从两个视点观察同一景物,以获取在不同视角下的感知图像,然后通过三角测量原理计算图像像素间的位置偏差来获取景物的三维信息,这一过程与人类视觉感知过程是类似的。
6.1.2.3.多目视觉
多目视觉是对双目视觉系统的一种拓展,主要采用多台摄像机设置于多个视点,或者由一个摄像机从多个视点观测三维景物的立体视觉。
6.2坐标系分类
为了确定点在空间中的位置,需要定义坐标系,在三维视觉中常常涉及四个坐标系:世界坐标系,摄像机坐标系,图像坐标系,像素坐标系,如下图所示:
∙
\bullet
∙Ow-Xw,Yw,Zw为世界坐标系。
∙
\bullet
∙Oc-Xc,Yc,Zc为相机坐标系。
∙
\bullet
∙o-x,y为图像坐标系。
∙
\bullet
∙u-v是像素坐标系。
∙
\bullet
∙p(x,y)-图像坐标系下一点,对应的像素坐标为(u,v)。
∙
\bullet
∙f是相机焦距,等于Oc到o的距离。
6.3.三维仿射变换
6.3.1.坐标系变换–平移
图像的平移变换就是将图像所有的像素坐标分别加上指定的水平偏移量和垂直偏移量。例如点 (x,y,z,1) 向x,y,z轴分别移动a,b,c单位长度后变成 (x+a,y+b,z+c,1) 。写成矩阵相乘的方式即为:
[
x
+
a
y
+
b
z
+
c
1
]
=
[
1
0
0
a
0
1
0
b
0
0
1
c
0
0
0
1
]
[
x
y
z
1
]
\begin{bmatrix}x+a\\y+b\\z+c\\1\end{bmatrix}=\begin{bmatrix}1&0&0&a\\0&1&0&b\\0&0&1&c\\0&0&0&1\end{bmatrix}\begin{bmatrix}x\\y\\z\\1\end{bmatrix}
x+ay+bz+c1
=
100001000010abc1
xyz1
6.3.2.坐标系变换–缩放
3D缩放矩阵能够对每一个坐标采用不同的比例系数,当沿着x,y,z轴分别缩放a,b,c倍时,相应的公式表示为:
[
x
′
y
′
z
′
1
]
=
[
a
0
0
0
0
b
0
0
0
0
c
0
0
0
0
1
]
[
x
y
z
1
]
\begin{bmatrix}x^{\prime}\\y^{\prime}\\z^{\prime}\\1\end{bmatrix}=\begin{bmatrix}a&0&0&0\\0&b&0&0\\0&0&c&0\\0&0&0&1\end{bmatrix}\begin{bmatrix}x\\y\\z\\1\end{bmatrix}
x′y′z′1
=
a0000b0000c00001
xyz1
6.3.3.坐标系变换–旋转
如下为绕x轴旋转示意图, 在左图中, A点沿着x轴旋转一定角度变成
A
′
{A}^{'}
A′, 记旋转的角度为θ,则绕xyz轴旋转的计算方法如下所示:
∙
\bullet
∙如果绕x轴旋转:
{
x
′
=
x
y
′
=
y
cos
θ
−
z
sin
θ
z
′
=
y
sin
θ
+
z
cos
θ
[
x
′
y
′
z
′
1
]
=
[
1
0
0
0
0
cos
θ
−
sin
θ
0
0
sin
θ
cos
θ
0
0
0
0
1
]
[
x
y
z
1
]
\begin{cases}x'=x\\y'=y\cos\theta-z\sin\theta\\z'=y\sin\theta+z\cos\theta\end{cases}\quad\begin{bmatrix}x'\\y'\\z'\\1\end{bmatrix}=\begin{bmatrix}1&0&0&0\\0&\cos\theta&-\sin\theta&0\\0&\sin\theta&\cos\theta&0\\0&0&0&1\end{bmatrix}\begin{bmatrix}x\\y\\z\\1\end{bmatrix}
⎩
⎨
⎧x′=xy′=ycosθ−zsinθz′=ysinθ+zcosθ
x′y′z′1
=
10000cosθsinθ00−sinθcosθ00001
xyz1
∙
\bullet
∙如果绕y轴旋转:
{
y
′
=
y
x
′
=
x
cos
θ
+
z
sin
θ
z
′
=
−
x
sin
θ
+
z
cos
θ
[
x
′
y
′
z
′
1
]
=
[
cos
θ
0
sin
θ
0
0
1
0
0
−
sin
θ
0
cos
θ
0
0
0
0
1
]
[
x
y
z
1
]
\begin{aligned} &\begin{cases}y′=y\\x′=x\cos\theta+z\sin\theta\\z′=−x\sin\theta+z\cos\theta&\end{cases} \\ &\begin{bmatrix}x^{\prime}\\y^{\prime}\\z^{\prime}\\1\end{bmatrix}=\begin{bmatrix}\cos\theta&0&\sin\theta&0\\0&1&0&0\\-\sin\theta&0&\cos\theta&0\\0&0&0&1\end{bmatrix}\begin{bmatrix}x\\y\\z\\1\end{bmatrix} \end{aligned}
⎩
⎨
⎧y′=yx′=xcosθ+zsinθz′=−xsinθ+zcosθ
x′y′z′1
=
cosθ0−sinθ00100sinθ0cosθ00001
xyz1
∙
\bullet
∙如果绕z轴旋转:
{
z
′
=
z
y
′
=
y
cos
θ
+
x
sin
θ
x
′
=
−
y
sin
θ
+
x
cos
θ
[
x
′
y
′
z
′
1
]
=
[
cos
θ
−
sin
θ
0
0
sin
θ
cos
θ
0
0
0
0
1
0
0
0
0
1
]
[
x
y
z
z
1
]
\begin{gathered} \begin{cases}z'=z\\y'=y\cos\theta+x\sin\theta\\x'=-y\sin\theta+x\cos\theta\end{cases} \\ \begin{bmatrix}x^\prime\\y^\prime\\z^\prime\\1\end{bmatrix}=\begin{bmatrix}\cos\theta&-\sin\theta&0&0\\\sin\theta&\cos\theta&0&0\\0&0&1&0\\0&0&0&1\end{bmatrix}\begin{bmatrix}x\\y\\z\\z\\1\end{bmatrix} \end{gathered}
⎩
⎨
⎧z′=zy′=ycosθ+xsinθx′=−ysinθ+xcosθ
x′y′z′1
=
cosθsinθ00−sinθcosθ0000100001
xyzz1
6.4.双目视觉标定原理
如下图所示,人类用双眼观察时,两眼看到的物体有一定的左右偏差而这个偏差就是感知物体的深度距离的关键,称之为视差。
进行相机标定的目的就是为了获得相机的内外参数以及畸变系数。1.求双目相机内外参数和畸变系数
基于四个坐标系可以从数学的角度用矩阵相乘的形式实现世界坐标系到像素坐标系的转换,如下所示:
Z
ϵ
[
u
v
1
]
=
[
f
d
x
0
u
0
0
0
f
d
y
v
0
0
0
0
1
0
]
[
R
Υ
0
1
]
[
X
w
Y
w
Z
w
1
]
=
[
f
s
0
u
0
0
0
f
y
ν
0
0
0
0
1
0
]
[
R
T
0
1
0
1
]
[
X
w
Y
w
Z
w
1
]
=
M
v
M
2
[
X
w
Y
w
Z
w
1
]
=
M
[
X
w
Y
w
Z
w
1
]
Z_{\epsilon}\begin{bmatrix}u\\v\\1\end{bmatrix}=\begin{bmatrix}\dfrac{f}{dx}&0&u_0&0\\0&\dfrac{f}{dy}&v_0&0\\0&0&1&0\end{bmatrix}\begin{bmatrix}R&\Upsilon\\0&1\end{bmatrix}\begin{bmatrix}X_w\\Y_w\\Z_w\\1\end{bmatrix}=\begin{bmatrix}f_s&0&u_0&0\\0&f_y&\nu_0&0\\0&0&1&0\end{bmatrix}\begin{bmatrix}R&\mathrm{T}\\0&1\\0&1\end{bmatrix}\begin{bmatrix}X_w\\Y_w\\Z_w\\1\end{bmatrix}=M_vM_2\begin{bmatrix}X_w\\Y_w\\Z_w\\1\end{bmatrix}=M\begin{bmatrix}X_w\\Y_w\\Z_w\\1\end{bmatrix}
Zϵ
uv1
=
dxf000dyf0u0v01000
[R0Υ1]
XwYwZw1
=
fs000fy0u0ν01000
R00T11
XwYwZw1
=MvM2
XwYwZw1
=M
XwYwZw1
将径向畸变用泰勒展开,可以表示为:
δ
u
′
=
u
(
k
1
r
2
+
k
2
r
4
+
k
3
r
6
)
δ
v
r
=
ν
(
k
1
r
2
+
k
2
r
4
+
k
3
r
6
)
\begin{gathered} \delta_{u}^{\prime} =u\left(k_{1}r^{2}+k_{2}r^{4}+k_{3}r^{6}\right) \\ \delta_{v}^{r} =\nu\Big(k_{1}r^{2}+k_{2}r^{4}+k_{3}r^{6}\Big) \end{gathered}
δu′=u(k1r2+k2r4+k3r6)δvr=ν(k1r2+k2r4+k3r6)
式中k1,k2,k3为相机径向畸变系数,r为像素点到中心点之间的距离。
切向畸变模型可以表示为:
δ
u
t
=
(
p
2
(
r
2
+
2
u
2
)
+
2
p
1
u
v
)
(
1
+
p
3
r
2
+
p
4
r
4
+
.
.
.
)
δ
ν
t
=
(
p
1
(
r
2
+
2
ν
2
)
+
2
p
2
u
v
)
(
1
+
p
3
r
2
+
p
4
r
4
+
.
.
.
)
\begin{gathered} \delta_{u}^{t}= \left(p_{2}\left(r^{2}+2u^{2}\right)+2p_{1}uv\right)\left(1+p_{3}r^{2}+p_{4}r^{4}+...\right) \\ \delta_{\nu}^{t}= \left(p_{1}\left(r^{2}+2\nu^{2}\right)+2p_{2}uv\right)\left(1+p_{3}r^{2}+p_{4}r^{4}+...\right) \end{gathered}
δut=(p2(r2+2u2)+2p1uv)(1+p3r2+p4r4+...)δνt=(p1(r2+2ν2)+2p2uv)(1+p3r2+p4r4+...)
式中p1,p2为相机切向畸变系数。
相机发生畸变变形之后的像素坐标为:
u
d
=
u
+
δ
u
r
+
δ
u
t
v
d
=
v
+
δ
v
r
+
δ
v
t
\begin{aligned}u_d&=u+\delta_u^r+\delta_u^t\\v_d&=v+\delta_v^r+\delta_v^t\end{aligned}
udvd=u+δur+δut=v+δvr+δvt
真实世界中的点对应的像素坐标是(u,v),而使用相机拍摄到的点的坐标为(
u
d
u_{d}
ud,
v
e
v_{e}
ve)为了矫正相机的径向畸变和切向畸变,需通过相机标定求解k1,k2,k3,p1和p2这5个畸变参数,然后利用畸变系数对图像进行校正。
6.5.结构光技术的分类
结构光大致可以分为三种:点结构光,线结构光和编码结构光。
∙
\bullet
∙点结构光使用半导体激光器投射光照至被测物体,并由相机拍摄光点。利用三角测量法,该光点的深度信息由光点在成像面上的位置反映。
∙
\bullet
∙线结构光法原理与点结构光法相近。不同的是,其光源发出的光线经由被测物体反射后会变成一条激光带,根据CCD相机拍摄的激光带的位置信息可以获得被测物体的截面轮廓。
∙
\bullet
∙编码结构光在基于线结构光的基础上,对多个条纹进行编码,编码的方式主要有时间编码、空间编码和直接编码,如下图所示:
6.6.时间编码技术原理
时间编码技术可将不同编码的图像按照时序先后投射到物体表面,得到相应的编码序列,再将编码序列组合起来进行解码,从而得到物体的深度信息。
如下图,时序编码结构光即为在一定时间范围内,通过投影器向被测空间投射一系列明暗不同的结构光,每次投影都通过相机进行成像。假设共有n张影像,并设被阴影覆盖的部分编码值为1,未被覆盖的部分编码值为0。此时,每个像素都对应唯一一个长度为n的二进制编码,双目影像搜索匹配像素的问题就变成了查找具有相同编码值的像素。如果双目图像已经进行了极线校正,那么所投影的结构光只需要在x方向上不具有重复性即可。
如下图中,红框内的像素的编码为0110,转化为十进制则为5。此时,只需要在右图相同行上检索编码值为5的像素即可。
上图编码方式称为二进制码(binary code),每段区域不断的进行二分下去直至投影的编码宽度等于相机的像素宽度即可。对于宽度为1024的图像,最少需要10张影像来进行编码。