目录
1 理想双目视觉系统
如图1所示为理想双目视觉系统:两像机成像面共面行对齐,极点处于无限远处——像点 ( x 0 , y 0 ) \left( x_0,y_0 \right) (x
0
,y
0
)对应的极线为 y = y 0 y=y_0 y=y
0
。
关于极点、极线方面的内容可以参考之前的博客:计算机视觉系列教程1-4:对极几何基本原理图解
取定左相机坐标系为标准系,由相似关系,物点在左成像面的坐标为
[ L x L y ] = [ f X Z f Y Z ] \left[ \right] =\left[ \right]
[
L
x
L
y
]=[
f
Z
X
f
Z
Y
]
设双目系统的间距为 b x b_x b
x
,则双目系统相机位姿关系为
L R T = [ 1 − b x 1 0 1 0 1 ] _{L}^{R}\boldsymbol{T}=\left[ \right]
L
R
T=
⎣
⎢
⎢
⎡
1
1
1
−b
x
0
0
1
⎦
⎥
⎥
⎤
因此物点在右相机坐标系下为 R X = L R T L X = [ X − b x Y Z ] T ^R\!\!\:\boldsymbol{X}=_{L}^{R}\boldsymbol{T}\!\:^L\!\!\:\!\!\:\boldsymbol{X}=\left[ \right] ^T
R
X=
L
R
T
L
X=[
X−b
x
Y
Z
]
T
,同样由相似原理得
[ R x R y ] = [ f X − b x Z f Y Z ] \left[ \right] =\left[ \right]
[
R
x
R
y
]=[
f
Z
X−b
x
f
Z
Y
]
由于行对齐,因此同一物点在两成像面上形成立体视差
d = L x − R x = f b x Z d=^L\!\!\:x-^R\!\!\:x=f\frac{b_x}{Z}
d=
L
x−
R
x=f
Z
b
x
所谓立体视差就是同一个物点在两个相机成像面上相点之差。
从而可以从成像面坐标还原三维坐标,并转换为像素尺度:
[ X Y Z ] = [ L x b x d L y b x d f b x d ] = [ ( L u − L c u ) b x d u ( L v − L c v ) b x d u f u b x d u ] \left[ \right] =\left[ \right] =\left[ \right]
⎣
⎡
X
Y
Z
⎦
⎤
=
⎣
⎡
L
x
d
b
x
L
y
d
b
x
f
d
b
x
⎦
⎤
=
⎣
⎢
⎡
(
L
u−
L
c
u
)
d
u
b
x
(
L
v−
L
c
v
)
d
u
b
x
f
u
d
u
b
x
⎦
⎥
⎤
其中 Z Z Z即为图像深度信息。将上述方程改写为线性形式:
[ X Y Z 1 ] = [ 1 0 0 − L c u 0 1 0 − L c v 0 0 0 f u 0 0 1 b x R c u − L c u b x ] [ L u L v d u 1 ] ⇔ L X = Q L u \left[ \right] =\left[ \right] \left[ \right] \Leftrightarrow { ^L\!\boldsymbol{X}=\boldsymbol{Q}^L\!\!\:\boldsymbol{u}}
⎣
⎢
⎢
⎡
X
Y
Z
1
⎦
⎥
⎥
⎤
=
⎣
⎢
⎢
⎡
1
0
0
0
0
1
0
0
0
0
0
b
x
1
−
L
c
u
−
L
c
v
f
u
b
x
R
c
u
−
L
c
u
⎦
⎥
⎥
⎤
⎣
⎢
⎢
⎡
L
u
L
v
d
u
1
⎦
⎥
⎥
⎤
⇔
L
X=Q
L
u
其中 Q Q Q称为重投影矩阵, R c u − L c u b x \frac{^R\!\!\:c_u-^L\!\!\:c_u}{b_x}
b
x
R
c
u
−
L
c
u
表征了两成像平面中心的像素偏差。
2 立体校正
实际应用时并不能直接使用上面的模型,因为没有任何硬件可以真正达到理想双目系统的条件,如图2所示。
将实际双目系统变换为理想双目系统的过程称为立体校正,下面详细阐述Bouguet立体校正算法,其核心原理是通过像素平面透视变换,使左右图像重投影误差最小,使双目系统最接近理想状态。
定义左右两相机间的变换关系为
L R T = [ R t 0 1 ] _{\boldsymbol{L}}^{\boldsymbol{R}}\boldsymbol{T}=\left[ \right]
L
R
T=[
R
0
t
1
]
通过旋转矩阵 R R R先将右相机坐标系旋转到与左相机坐标系平行,如图3所示。
此时双目系统平行但不共面,需要构造一个校准矩阵 R r e c t R_{rect} R
rect
将两相机坐标系旋转到同一成像面上,实现共面行对齐校正,如图4所示。
设 R r e c t = [ r 1 T r 2 T r 3 T ] T \boldsymbol{R}_{rect}=\left[ \right] ^T R
rect
=[
r
1
T
r
2
T
r
3
T
]
T
,其构造过程如下:
① r 1 r_1 r
1
是旋转后坐标系的 x ′ x' x
′
相对于原坐标系三个轴的方向余弦,为保证旋转后两成像面共面,需要将原坐标系 x x x轴旋转至基线 − t -t −t方向,即
r 1 = − t ∥ t ∥ \boldsymbol{r}_1=\frac{-\boldsymbol{t}}{\left\| \boldsymbol{t} \right\|}
r
1
=
∥t∥
−t
② r 2 r_2 r
2
、 r 3 r_3 r
3
事实上可以任意给出,只需满足右手系方向即可。一般地,取
{ r 2 = − t × [ 0 0 1 ] T ∥ − t × [ 0 0 1 ] T ∥ r 3 = r 1 × r 2
⎩
⎨
⎧
r
2
=
∥
∥
−t×[
0
0
1
]
T
∥
∥
−t×[
0
0
1
]
T
r
3
=r
1
×r
2
使 y ′ y' y
′
垂直于原光轴方向。
综合上述步骤得到
{ R L = R r e c t R R = R r e c t R T
{
R
L
=R
rect
R
R
=R
rect
R
T
接下来进行像素平面的映射。在不考虑畸变的条件下,相机坐标系未旋转时有 u = K x \boldsymbol{u}=\boldsymbol{Kx} u=Kx,旋转后则为 u ′ = K x ′ = K R x \boldsymbol{u}'=\boldsymbol{Kx}'=\boldsymbol{KRx} u
′
=Kx
′
=KRx,因此旋转前后像素坐标的关系为
u ′ = K R K − 1 u = H u { \boldsymbol{u}'=\boldsymbol{KRK}^{-1}\boldsymbol{u}=\boldsymbol{Hu}}
u
′
=KRK
−1
u=Hu
像素立体校正后,即可使用理想双目系统模型进行场景几何的估计。
总结Bouguet立体校正算法流程:
(1) 基于相机几何信息 R R R、 t t t 构造 R L R_L R
L
、 R R R_R R
R
;
(2) 基于旋转前后像素坐标关系得到单应性矩阵 H L = K R L K − 1 \boldsymbol{H}_L=\boldsymbol{KR}_L\boldsymbol{K}^{-1} H
L
=KR
L
K
−1
、 H R = K R R K − 1 \boldsymbol{H}_R=\boldsymbol{KR}_R\boldsymbol{K}^{-1} H
R
=KR
R
K
−1
;
(3) 归一化齐次坐标。映射后 u ′ = [ u v w ] \boldsymbol{u}'=\left[ \right] u
′
=[
u
v
w
],需归一化为 u ′ = [ u / w v / w 1 ] \boldsymbol{u}'=\left[ \right] u
′
=[
u/w
v/w
1
]。
关于单应性矩阵方面的知识可以参考计算机视觉系列教程1-2:单应性矩阵估计
3 实例
🚀 计算机视觉基础教程说明
章号 内容
0 色彩空间与数字成像
1 计算机几何基础
2 图像增强、滤波、金字塔
3 图像特征提取
4 图像特征描述
5 图像特征匹配
6 立体视觉
7 项目实战
🔥 更多精彩专栏:
《机器人原理与技术》
《计算机视觉教程》
《机器学习》
《嵌入式系统》
《数值优化方法》
…