计算机视觉教程6-1:图解双目视觉系统与立体校正原理

简介: 计算机视觉教程6-1:图解双目视觉系统与立体校正原理

1 理想双目视觉系统


image.png如图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所示。


image.png

将实际双目系统变换为理想双目系统的过程称为立体校正,下面详细阐述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所示。


image.png

此时双目系统平行但不共面,需要构造一个校准矩阵 R r e c t R_{rect} R

rect


将两相机坐标系旋转到同一成像面上,实现共面行对齐校正,如图4所示。


image.png

设 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 实例


image.png

🚀 计算机视觉基础教程说明


章号                                    内容

 0                              色彩空间与数字成像

 1                              计算机几何基础

 2                              图像增强、滤波、金字塔

 3                              图像特征提取

 4                              图像特征描述

 5                              图像特征匹配

 6                              立体视觉

 7                              项目实战


🔥 更多精彩专栏:


《机器人原理与技术》

《计算机视觉教程》

《机器学习》

《嵌入式系统》

《数值优化方法》


目录
相关文章
|
2月前
|
机器学习/深度学习 监控 算法
基于计算机视觉(opencv)的运动计数(运动辅助)系统-源码+注释+报告
基于计算机视觉(opencv)的运动计数(运动辅助)系统-源码+注释+报告
60 3
|
4月前
|
数据采集 机器学习/深度学习 PyTorch
PyTorch 与计算机视觉:实现端到端的图像识别系统
【8月更文第29天】计算机视觉是人工智能领域的重要分支之一,其应用广泛,从自动驾驶汽车到医学影像分析等。本文将介绍如何使用 PyTorch 构建和训练一个端到端的图像分类器,并涵盖数据预处理、模型训练、评估以及模型部署等多个方面。
94 1
|
21天前
|
机器学习/深度学习 人工智能 TensorFlow
探索深度学习与计算机视觉的融合:构建高效图像识别系统
探索深度学习与计算机视觉的融合:构建高效图像识别系统
35 0
|
3月前
|
机器学习/深度学习 人工智能 测试技术
AI计算机视觉笔记二十五:ResNet50训练部署教程
该项目旨在训练ResNet50模型并将其部署到RK3568开发板上。首先介绍了ResNet50网络,该网络由何恺明等人于2015年提出,解决了传统卷积神经网络中的退化问题。项目使用车辆分类数据集进行训练,并提供了数据集下载链接。环境搭建部分详细描述了虚拟环境的创建和所需库的安装。训练过程中,通过`train.py`脚本进行了15轮训练,并可视化了训练和测试结果。最后,项目提供了将模型转换为ONNX和PT格式的方法,以便在RK3568上部署。
|
3月前
|
人工智能 监控 安全
AI计算机视觉笔记十三:危险区域识别系统
本文介绍了如何在 IPC 监控视频中实现区域入侵检测,通过 YOLOv5 和 ByteTrack 实现人物检测与多目标跟踪。系统能在检测到人员进入预设的危险区域时发出警报,保障安全。主要步骤包括:1)使用 YOLOv5 识别人物;2)使用 ByteTrack 进行多目标跟踪;3)利用射线法判断物体是否进入禁区内。项目基于 Python 开发,使用海思、君正、RK 等摄像头模组,代码已在 RV1126 上验证,计划移植至 RK3568 平台。项目结构清晰,包含模型训练、跟踪算法及图形化界面展示等功能。
|
7月前
|
机器学习/深度学习 人工智能 算法
如何建立计算机视觉驱动的汽车损伤检测系统-------杂记
如何建立计算机视觉驱动的汽车损伤检测系统-------杂记
122 0
|
7月前
|
机器学习/深度学习 人工智能 监控
计算机视觉技术的基本原理与应用
计算机视觉技术的基本原理与应用
|
7月前
|
机器学习/深度学习 算法 计算机视觉
详细介绍CNN卷积层的原理、结构和应用,并探讨其在图像处理和计算机视觉任务中的重要性
详细介绍CNN卷积层的原理、结构和应用,并探讨其在图像处理和计算机视觉任务中的重要性
508 0
详细介绍CNN卷积层的原理、结构和应用,并探讨其在图像处理和计算机视觉任务中的重要性
|
传感器 Web App开发 机器学习/深度学习
计算机视觉教程0-3:为何拍照会有死亡视角?详解相机矩阵与畸变
计算机视觉教程0-3:为何拍照会有死亡视角?详解相机矩阵与畸变
719 0
计算机视觉教程0-3:为何拍照会有死亡视角?详解相机矩阵与畸变
|
机器学习/深度学习 存储 编解码
计算机视觉的基本原理
计算机视觉的基本原理
313 0

热门文章

最新文章