七、立体标定与立体校正

这篇博文中,让玉米和大家一起了解一下,张氏标定是怎样过渡到立体标定的?在这里主要以双目立体视觉进行分析。对于双目立体视觉,我们有两个摄像头。它们就像人的一双眼睛一样,从不同的方向看世界。两只眼睛中的图像的视差,让我们对世界有了三维的认识。

那么,想要知道视差,首先应该知道双目视觉系统中两个摄像头之间的相对位置关系。我们可以通过同时对两个摄像头进行标定,分别得到二者相对同一坐标系的旋转矩阵和平移矩阵。获得这两个矩阵的过程,就是立体标定的过程。也即是:从张氏标定走向立体标定!

两摄像头之间的旋转矩阵和平移矩阵可以由下式求出:

其中,R为两摄像头间的旋转矩阵,T为两摄像头间的平移矩阵。Rr为右摄像头经过张氏标定得到的相对标定物的旋转矩阵,Tr为右摄像头通过张氏标定得到的相对标定物的平移向量。Rl为左摄像头经过张氏标定得到的相对相同标定物的旋转矩阵,Tl为左摄像头经过张氏标定得到的相对相同标定物的平移向量。

两个式子是可以通过数学代换推导来的。但玉米觉得对这样有明显物理意义并且空间过程简单的计算式。物理上的空间想象,比纯代数代换,要生动的多。并且有利于大家揣摩整个物理过程。

在玉米眼里,这两个式子是这样的:

对于R,首先用T把左摄像机坐标系平移到右摄像机坐标系上(即两坐标系远点重合)。然后在同一参考系下的两个旋转矩阵相乘,表示世界坐标先向右旋转到Rr ,再向左旋转Rl。那么两次旋转后得到的旋转,就是有摄像机旋转到左摄像机所需的旋转矩阵R。

对于T,那就更容易理解了,先用R对左坐标系旋转一下,把左右两摄像机调成平行,然后直接平移向量相减,即得到。两摄像机之间的平移向量T。

上面求得的R和T就是立体标定得到的参数了。

那么运用的立体标定所得的参数了,下一步我们该做什么呢?答案是:立体校正。

在介绍立体校正的具体方法之前,让我们来看一下,为什么要进行立体校正?

因为当两个图像平面是完全共面行对准时,计算立体视差是最简单的。但是,在现实的双目立体视觉系统中,是不存在完全的共面行对准的两个摄像机图像平面的。所以我们要进行立体校正。立体校正的目的就是,把实际中非共面行对准的两幅图像,校正成共面行对准。如下面示意图所示。(共面行对准是指:两摄像机图像平面在同一平面上,且同一点投影到两个摄像机图像平面时,应该在两个像素坐标系的同一行)

有了上述铺垫,下面让玉米给大家陈述一下基于立体标定所获参数的立体校正的数学原理,或者说是几何原理。但玉米在这里,主要和大家分享一下,如此校正的物理意义。

立体校正应该分两步走:

         1、 将两个图像平面拉回同一平面。

这一步,该怎么做呢?玉米相信,经过这么多铺垫,大家应该早就心里有数了。这一步很简单。可以这样:两个平面在方向上            之间不是相差一个旋转矩阵R吗,那么我们让两个相机个旋转一半,但需注意二者的旋转,应该是反向的。如下式所示:

上面的这个公式是玉米根据物理意义自己总结的。rl 、rr 分别代表左摄像机和右摄像机为达到共面所需的旋转矩阵。rl、rr程度             相同,但旋转方向相反。左右相机分别经历了这样的旋转之后,二者就已经共面了。大家应该明白了吧?

          2、 旋转图像使得同行对准

玉米在这里先为大家展示一个,校正成功的图吧。

大家可以像小学时候写看图说话作文一样,观察一下图中校正前和校正后左右两摄像机的图像到底发生了什么本质的变                化。

玉米的答案是:左右两图分别绕光轴作了旋转,旋转过后两摄像机的主点连线平行像素坐标的行线。

玉米的答案也是自己对行对准的理解,比较通俗。这与很多书上用极几何术语描述的有些不同,大家可以思考一下,玉米           说的有没有道理。

好,既然已经明确了,要达到行对准,图像所需发生的变化。那么就让我们用数学表达式来表达它们吧。

玉米画了一个简单的示意图,画的丑大家不要见笑。

红色的线表示的是校正后的行线,其是左右对准的。大家可以看到,从原图像的行线转到校正后图像的行线,左图像转动了α,右图像转动了θ。那么怎样来确定两个旋转角度呢?

大家可以回忆一下,我们在本系列博文中的第二篇中讲述刚体变换时,把旋转矩阵按不同轴分解的方法。可以看做是沿光轴旋转,旋转目的是与主点连线平行。先以左图像为例:

那么我们设旋转矩阵为R h ,

则Rh可以表示为以归一化T(平移向量):e1为旋转的指针,则随之e2为e1与光轴的叉积,e3为e2与e1的叉积:

大家可以进一步算一下:

我们发现,其实行对准就是绕e3方向,转了α。同样的,对右图就是转了θ。

通过上面的推导,我们就把立体标定与立体校正中的数学思想理清楚了。其实,立体匹配是有很多种方法的,玉米在里只是介绍了立体校正的基本原理。其他方法中,有一些可以不依赖标定参数,如果大家想要对立体校正进行深入研究,大家可以搜索一些经典论文进行深入学习。如:A. Fusiello, E. Trucco, and A. Verri.写的 Acompact algorithm for rectification of stereo pairs.等等

截止目前对于三维重建的所有准备工作,都已完成。几何框架也仅剩下最后一步:立体成像。(因为本系列博文只介绍双目视觉的几何架构,所以跳过匹配不谈)玉米在下一篇博文中将与大家分享一下,几何脉络的最终果实:立体成像。这也是我们对于双目视觉几何框架推导和理解的最终目标。

玉米才疏学浅,文中如有纰漏,请大家批评指正!

(七)立体标定与立体校正 【计算机视觉学习笔记--双目视觉几何框架系列】相关推荐

  1. 图像坐标:我想和世界坐标谈谈(A) 【计算机视觉学习笔记--双目视觉几何框架系列】

    玉米竭力用轻松具体的描述来讲述双目三维重建中的一些数学问题.希望这样的方式让大家以一个轻松的心态阅读玉米的<计算机视觉学习笔记>双目视觉数学架构系列博客.这个系列博客旨在捋顺一下已标定的双 ...

  2. 张正友标定法 【计算机视觉学习笔记--双目视觉几何框架系列】

    三.致敬"张正友标定" 此处"张正友标定"又称"张氏标定",是指张正友教授于1998年提出的单平面棋盘格的摄像机标定方法.张氏标定法已经作为 ...

  3. 【物联网学习笔记——人人学IoT系列】一、初识物联网

    目录 1. 物联网初探 1.1 物联网(Internet of Things)早期概念定义 1.2 物联网概念发展历程 1.3 发展历史时期划分 1.3.1 概念期 1.3.2 发展期 1.3.3 成 ...

  4. Java学习笔记-Day64 Spring 框架(二)

    Java学习笔记-Day64 Spring 框架(二) 一.控制反转IOC和依赖注入DI 1.控制反转IOC 2.依赖注入DI 3.Spring IOC容器 3.1.简介 3.2.实现容器 3.2.获 ...

  5. java mvc框架代码_JAVA技术学习笔记:SpringMVC框架(内附入门程序开发代码)

    原标题:JAVA技术学习笔记:SpringMVC框架(内附入门程序开发代码) JavaEE体系结构包括四层,从上到下分别是应用层.Web层.业务层.持久层.Struts和SpringMVC是Web层的 ...

  6. Hadoop学习笔记—18.Sqoop框架学习

    Hadoop学习笔记-18.Sqoop框架学习 一.Sqoop基础:连接关系型数据库与Hadoop的桥梁 1.1 Sqoop的基本概念 Hadoop正成为企业用于大数据分析的最热门选择,但想将你的数据 ...

  7. Hadoop学习笔记—15.HBase框架学习(基础知识篇)

    Hadoop学习笔记-15.HBase框架学习(基础知识篇) HBase是Apache Hadoop的数据库,能够对大型数据提供随机.实时的读写访问.HBase的目标是存储并处理大型的数据.HBase ...

  8. 设计模式学习笔记——原型(Prototype)框架

    设计模式学习笔记--原型(Prototype)框架 @(设计模式)[设计模式, 原型模式, prototype] 设计模式学习笔记原型Prototype框架 基本介绍 原型案例 类图 实现代码 Pro ...

  9. 前端学习笔记:Bootstrap框架入门

    前端学习笔记:Bootstrap框架入门 一.Bootstrap概述 1.基本信息 ​Bootstrap,来自 Twitter,是目前很受欢迎的前端框架.Bootstrap 是基于 HTML.CSS. ...

最新文章

  1. 信息安全研究之数据安全专题
  2. 2月第二周.COM增近12万 ×××域名.XXX减122个
  3. mxnet可视化模型中间层feature map输出
  4. 1.9 函数-C++编程模块
  5. 软切换、硬切换,垂直切换、水平切换
  6. matlab中的myerr,Error in 'MPC1/S-Function' while executing MATLAB S-function 'MY_MPCCon...
  7. 【亲测】超级外链SEO工具源码,可发9600条优质外链
  8. 几款好用又强力的数据恢复软件推荐
  9. 学习基于springboot的java分布式中间件-Redis(3) redis之缓存穿透等典型问题
  10. 第一章课后习题源代码(笔记自用)
  11. 交换机测试丢包软件,交换机丢包问题定位
  12. Dummy Sample
  13. 遥控汽车的编程c语言,智能小车循迹、避障、红外遥控C语言代码.docx
  14. C语言 crc32校验算法原理,CRC循环冗余校验的实现原理
  15. 零距离接触阿里云时序时空数据库TSDB
  16. JVM学习 -- JVM 性能调优监控工具 jps、jstack、jmap、jhat、jstat、hprof 使用详解
  17. H5点击图片保存本地
  18. 深入理解CSS margin折叠
  19. 操作系统真象还原——3.完善MBR
  20. 分享3个一键抠图的免费方法,无需额外下载任何软件

热门文章

  1. 【Win10 应用开发】自定义应用标题栏
  2. WebDAV方式访问Exchange 2003收件箱程序
  3. sqlserver中在建立与服务器的连接时出错
  4. phpweb2.0 开发实战 ----- 配置虚拟主机
  5. (一)Windows环境下汇编编程读书笔记
  6. MySQL create table语法中的key与index的区别
  7. 关于数字证书理解的简单整理以及12306站点证书简单分析
  8. kettle插入更新流程
  9. Python 购物车
  10. ASP站点无法访问怎么办