目录

  • 1 理想双目视觉系统
  • 2 立体校正
  • 3 实例

1 理想双目视觉系统

图1

如图1所示为理想双目视觉系统:两像机成像面共面行对齐,极点处于无限远处——像点(x0,y0)\left( x_0,y_0 \right)(x0​,y0​)对应的极线为y=y0y=y_0y=y0​。

关于极点、极线方面的内容可以参考之前的博客:计算机视觉系列教程1-4:对极几何基本原理图解

取定左相机坐标系为标准系,由相似关系,物点在左成像面的坐标为
[L⁣ ⁣ xL⁣ ⁣  ⁣ y]=[fXZfYZ]\left[ \begin{array}{c} ^L\!\!\:x\\ ^L\!\!\:\!\:y\\\end{array} \right] =\left[ \begin{array}{c} f\frac{X}{Z}\\ f\frac{Y}{Z}\\\end{array} \right][LxLy​]=[fZX​fZY​​]

设双目系统的间距为bxb_xbx​,则双目系统相机位姿关系为
LRT=[1−bx10101]_{L}^{R}\boldsymbol{T}=\left[ \begin{matrix} 1& & & -b_x\\ & 1& & 0\\ & & 1& 0\\ & & & 1\\\end{matrix} \right]LR​T=⎣⎢⎢⎡​1​1​1​−bx​001​⎦⎥⎥⎤​

因此物点在右相机坐标系下为R⁣ ⁣ X=LRT⁣L⁣ ⁣  ⁣ ⁣ X=[X−bxYZ]T^R\!\!\:\boldsymbol{X}=_{L}^{R}\boldsymbol{T}\!\:^L\!\!\:\!\!\:\boldsymbol{X}=\left[ \begin{matrix} X-b_x& Y& Z\\\end{matrix} \right] ^TRX=LR​TLX=[X−bx​​Y​Z​]T,同样由相似原理得
[R⁣ ⁣ xR⁣ ⁣  ⁣ y]=[fX−bxZfYZ]\left[ \begin{array}{c} ^R\!\!\:x\\ ^R\!\!\:\!\:y\\\end{array} \right] =\left[ \begin{array}{c} f\frac{X-b_x}{Z}\\ f\frac{Y}{Z}\\\end{array} \right][RxRy​]=[fZX−bx​​fZY​​]

由于行对齐,因此同一物点在两成像面上形成立体视差
d=L⁣ ⁣ x−R⁣ ⁣ x=fbxZd=^L\!\!\:x-^R\!\!\:x=f\frac{b_x}{Z}d=Lx−Rx=fZbx​​

所谓立体视差就是同一个物点在两个相机成像面上相点之差。

从而可以从成像面坐标还原三维坐标,并转换为像素尺度:
[XYZ]=[L⁣ ⁣ xbxdL⁣ ⁣ ybxdfbxd]=[(L⁣ ⁣ u−L⁣ ⁣ cu)bxdu(L⁣ ⁣ v−L⁣ ⁣ cv)bxdufubxdu]\left[ \begin{array}{c} X\\ Y\\ Z\\\end{array} \right] =\left[ \begin{array}{c} ^L\!\!\:x\frac{b_x}{d}\\ ^L\!\!\:y\frac{b_x}{d}\\ f\frac{b_x}{d}\\\end{array} \right] =\left[ \begin{array}{c} \left( ^L\!\!\:u-^L\!\!\:c_u \right) \frac{b_x}{d_u}\\ \left( ^L\!\!\:v-^L\!\!\:c_v \right) \frac{b_x}{d_u}\\ f_u\frac{b_x}{d_u}\\\end{array} \right]⎣⎡​XYZ​⎦⎤​=⎣⎡​Lxdbx​​Lydbx​​fdbx​​​⎦⎤​=⎣⎢⎡​(Lu−Lcu​)du​bx​​(Lv−Lcv​)du​bx​​fu​du​bx​​​⎦⎥⎤​

其中ZZZ即为图像深度信息。将上述方程改写为线性形式:
[XYZ1]=[100−L⁣ ⁣ cu010−L⁣ ⁣ cv000fu001bxR⁣ ⁣ cu−L⁣ ⁣ cubx][L⁣ ⁣ uL⁣ ⁣ vdu1]⇔L⁣X=QL⁣ ⁣ u\left[ \begin{array}{c} X\\ Y\\ Z\\ 1\\\end{array} \right] =\left[ \begin{matrix} 1& 0& 0& -^L\!\!\:c_u\\ 0& 1& 0& -^L\!\!\:c_v\\ 0& 0& 0& f_u\\ 0& 0& \frac{1}{b_x}& \frac{^R\!\!\:c_u-^L\!\!\:c_u}{b_x}\\\end{matrix} \right] \left[ \begin{array}{c} ^L\!\!\:u\\ ^L\!\!\:v\\ d_u\\ 1\\\end{array} \right] \Leftrightarrow { ^L\!\boldsymbol{X}=\boldsymbol{Q}^L\!\!\:\boldsymbol{u}}⎣⎢⎢⎡​XYZ1​⎦⎥⎥⎤​=⎣⎢⎢⎡​1000​0100​000bx​1​​−Lcu​−Lcv​fu​bx​Rcu​−Lcu​​​⎦⎥⎥⎤​⎣⎢⎢⎡​LuLvdu​1​⎦⎥⎥⎤​⇔LX=QLu

其中QQQ称为重投影矩阵,R⁣ ⁣ cu−L⁣ ⁣ cubx\frac{^R\!\!\:c_u-^L\!\!\:c_u}{b_x}bx​Rcu​−Lcu​​表征了两成像平面中心的像素偏差。

2 立体校正

实际应用时并不能直接使用上面的模型,因为没有任何硬件可以真正达到理想双目系统的条件,如图2所示。

图2 实际双目系统

将实际双目系统变换为理想双目系统的过程称为立体校正,下面详细阐述Bouguet立体校正算法,其核心原理是通过像素平面透视变换,使左右图像重投影误差最小,使双目系统最接近理想状态。

定义左右两相机间的变换关系为
LRT=[Rt01]_{\boldsymbol{L}}^{\boldsymbol{R}}\boldsymbol{T}=\left[ \begin{matrix} \boldsymbol{R}& \boldsymbol{t}\\ 0& 1\\\end{matrix} \right]LR​T=[R0​t1​]

通过旋转矩阵RRR先将右相机坐标系旋转到与左相机坐标系平行,如图3所示。

图3

此时双目系统平行但不共面,需要构造一个校准矩阵RrectR_{rect}Rrect​将两相机坐标系旋转到同一成像面上,实现共面行对齐校正,如图4所示。

图4 两相机坐标系共同旋转至共面行对齐

设Rrect=[r1Tr2Tr3T]T\boldsymbol{R}_{rect}=\left[ \begin{matrix} \boldsymbol{r}_{1}^{T}& \boldsymbol{r}_{2}^{T}& \boldsymbol{r}_{3}^{T}\\\end{matrix} \right] ^TRrect​=[r1T​​r2T​​r3T​​]T,其构造过程如下:

① r1r_1r1​是旋转后坐标系的x′x'x′相对于原坐标系三个轴的方向余弦,为保证旋转后两成像面共面,需要将原坐标系xxx轴旋转至基线−t-t−t方向,即
r1=−t∥t∥\boldsymbol{r}_1=\frac{-\boldsymbol{t}}{\left\| \boldsymbol{t} \right\|}r1​=∥t∥−t​

② r2r_2r2​、r3r_3r3​事实上可以任意给出,只需满足右手系方向即可。一般地,取

{r2=−t×[001]T∥−t×[001]T∥r3=r1×r2\begin{cases} \boldsymbol{r}_2=\frac{-\boldsymbol{t}\times \left[ \begin{matrix} 0& 0& 1\\\end{matrix} \right] ^T}{\left\| -\boldsymbol{t}\times \left[ \begin{matrix} 0& 0& 1\\\end{matrix} \right] ^T \right\|}\\ \boldsymbol{r}_3=\boldsymbol{r}_1\times \boldsymbol{r}_2\\\end{cases}⎩⎨⎧​r2​=∥∥​−t×[0​0​1​]T∥∥​−t×[0​0​1​]T​r3​=r1​×r2​​

使y′y'y′垂直于原光轴方向。

综合上述步骤得到
{RL=RrectRR=RrectRT\begin{cases} \boldsymbol{R}_L=\boldsymbol{R}_{rect}\\ \boldsymbol{R}_R=\boldsymbol{R}_{rect}\boldsymbol{R}^T\\\end{cases}{RL​=Rrect​RR​=Rrect​RT​

接下来进行像素平面的映射。在不考虑畸变的条件下,相机坐标系未旋转时有u=Kx\boldsymbol{u}=\boldsymbol{Kx}u=Kx,旋转后则为u′=Kx′=KRx\boldsymbol{u}'=\boldsymbol{Kx}'=\boldsymbol{KRx}u′=Kx′=KRx,因此旋转前后像素坐标的关系为
u′=KRK−1u=Hu{ \boldsymbol{u}'=\boldsymbol{KRK}^{-1}\boldsymbol{u}=\boldsymbol{Hu}}u′=KRK−1u=Hu

像素立体校正后,即可使用理想双目系统模型进行场景几何的估计。

总结Bouguet立体校正算法流程:

(1) 基于相机几何信息RRR、ttt 构造RLR_LRL​、RRR_RRR​;
(2) 基于旋转前后像素坐标关系得到单应性矩阵HL=KRLK−1\boldsymbol{H}_L=\boldsymbol{KR}_L\boldsymbol{K}^{-1}HL​=KRL​K−1、HR=KRRK−1\boldsymbol{H}_R=\boldsymbol{KR}_R\boldsymbol{K}^{-1}HR​=KRR​K−1;
(3) 归一化齐次坐标。映射后u′=[uvw]\boldsymbol{u}'=\left[ \begin{matrix} u& v& w\\\end{matrix} \right]u′=[u​v​w​],需归一化为u′=[u/wv/w1]\boldsymbol{u}'=\left[ \begin{matrix} u/w& v/w& 1\\\end{matrix} \right]u′=[u/w​v/w​1​]。

关于单应性矩阵方面的知识可以参考计算机视觉系列教程1-2:单应性矩阵估计

3 实例


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

  1. Debian 7.1.0 安装教程图解(——Debian系统轻量级快速安装法)

    Debian 7.1.0 安装教程图解(--Debian系统轻量级快速安装法) 目录 一.Debian 7.1.0最新安装光盘二.安装系统教程图解 三.DebianLNMP更多相关使用系列文章 一.D ...

  2. 深度学习与计算机视觉教程(4) | 神经网络与反向传播(CV通关指南·完结)

    作者:韩信子@ShowMeAI 教程地址:https://www.showmeai.tech/tutorials/37 本文地址:https://www.showmeai.tech/article-d ...

  3. 双目视觉系统的原理和设计

    点击上方"小白学视觉",选择加"星标"或"置顶" 重磅干货,第一时间送达 双目立体视觉是机器视觉的一种重要形式,它是基于视差原理并由多幅图像 ...

  4. linux的系统架构,(转载)图解Linux系统的系统架构

    我以下图为基础,说明Linux的架构(architecture).(该图参考<Advanced Programming in Unix Environment>) 最内层是硬件,最外层是用 ...

  5. 深度学习与计算机视觉教程(11) | 循环神经网络及视觉应用(CV通关指南·完结)

    作者:韩信子@ShowMeAI 教程地址:https://www.showmeai.tech/tutorials/37 本文地址:https://www.showmeai.tech/article-d ...

  6. Windows 7安装教程(详细图解)——思齐博客

    Windows 7安装教程(详细图解) 发表于 2013-02-13 由 思齐 早前向大家介绍了Windows XP的安装教程,今天思齐再来介绍一下Windows 7的安装教程,Windows 7在安 ...

  7. 深度学习与计算机视觉教程:斯坦福CS231n · 全套笔记解读

    作者:韩信子@ShowMeAI 教程地址:https://www.showmeai.tech/tutorials/37 本文地址:https://www.showmeai.tech/article-d ...

  8. 深度学习与计算机视觉教程(10) | 轻量化CNN架构 (SqueezeNet,ShuffleNet,MobileNet等)(CV通关指南·完结)

    作者:韩信子@ShowMeAI 教程地址:https://www.showmeai.tech/tutorials/37 本文地址:https://www.showmeai.tech/article-d ...

  9. 深度学习与计算机视觉教程(3) | 损失函数与最优化(CV通关指南·完结)

    作者:韩信子@ShowMeAI 教程地址:https://www.showmeai.tech/tutorials/37 本文地址:https://www.showmeai.tech/article-d ...

  10. Beaglebone Black教程BeagleBone Black安装最新系统映像

    Beaglebone Black教程BeagleBone Black安装最新系统映像 BeagleBone Black安装最新系统映像 Beaglebone Black虽然已经预装了Debian操作系 ...

最新文章

  1. qt vs 不出来dos窗口_VS嵌入QT后,建立QT工程后printf和cout无效,无法产生控制台应用程序窗口,需设置工程属性...
  2. 读书笔记_C#入门经典(第5版)第六章_函数
  3. 干货分享:插画家Anmi的创作技巧与练习方法
  4. 作者:靳小龙,中国科学院计算技术研究所副研究员,博士生导师。
  5. CentOS7升级openssh8.0及升级后无法root登陆处理
  6. Java面试之线程池详细
  7. 《华为美》歌曲洗脑惹争议 华为回应:不知情、未参与 感谢厚爱
  8. micropython是什么意思_MicroPython到底是啥-百度经验
  9. 《IP多播网络的设计与部署(第1卷)》——2.1 多播地址
  10. 大型网站的特点及优化方向是什么
  11. echarts 多图联动
  12. 向日葵android客户端,向日葵安卓3.1客户端教程
  13. matlab安装c盘吗,matlab的安装步骤(附winC盘“用户”文件夹下账户名的更改方法).doc...
  14. 免编程让你零基础制作App
  15. 烧录器DediWare General使用方法
  16. 微信小程序中发送网络请求
  17. 大数据周会-本周学习内容总结04
  18. php 不重复邀请码,PHP生成不重复的短邀请码函数
  19. 听录——热带雨林中的昆虫
  20. picsart下载_PicsArt下载

热门文章

  1. Python各类常用库整理
  2. ubuntu 安装sougou 输入法
  3. python网络爬虫框架内容_Python网络爬虫-Scrapy框架
  4. Linux中JAVA服务器内存占用高(分析解决方法)
  5. 计算机控制系统中的Z变换
  6. 服务器Linux系统下常见的软件包有哪些
  7. 计算机汇编语言教程pdf,汇编语言实践教程.pdf
  8. matlab dll 通达信,通达信DLL插件实战篇,怎样制作我们想要的函数
  9. UE4 使用蓝图进行编辑器扩展
  10. [ubuntu][原创]ubuntu18.04安装rabbitvcs正确方法