亲爱的同学们,我们的世界是3D世界,我们的双眼能够观测三维信息,帮助我们感知距离,导航避障,从而翱翔于天地之间。而当今世界是智能化的世界,我们的科学家们探索各种机器智能技术,让机器能够拥有人类的三维感知能力,并希望在速度和精度上超越人类,比如自动驾驶导航中的定位导航,无人机的自动避障,测量仪中的三维扫描等,都是高智机器智能技术在3D视觉上的具体实现。

立体视觉是三维重建领域的重要方向,它模拟人眼结构用双相机模拟双目,以透视投影、三角测量为基础,通过逻辑复杂的同名点搜索算法,恢复场景中的三维信息。它的应用十分之广泛,自动驾驶、导航避障、文物重建、人脸识别等诸多高科技应用都有它关键的身影。

本课程将带大家由浅入深的了解立体视觉的理论与实践知识。我们会从坐标系讲到相机标定,从被动式立体讲到主动式立体,甚至可能从深度恢复讲到网格构建与处理,感兴趣的同学们,来和我一起探索立体视觉的魅力吧!

本课程是电子资源,所以行文并不会有太多条条框框的约束,但会以逻辑清晰、浅显易懂为目标,水平有限,若有不足之处,还请不吝赐教!
个人微信:EthanYs6,加我申请进技术交流群 StereoV3D,一起技术畅聊。
CSDN搜索 :Ethan Li 李迎松,查看网页版课程
随课代码,将上传至github上,地址:StereoV3DCode:https://github.com/ethan-li-coding/StereoV3DCode

前两篇博主介绍了两种单相机标定方法,有同学一定会有所疑惑,本系列明明是立体视觉,为什么要介绍单相机标定而不是双相机标定呢?原因很简单,那就是单相机标定是双相机标定的基础,具体来说,双相机标定正是先分别完成两个单相机的标定,再进行整体标定的。且听我娓娓道来~

文章目录

  • 双视立体
  • 双相机标定
  • 算法部分
  • 总结
  • 作业

双视立体

有一个常识性认知,即立体视觉一般而言是指双相机组成的立体系统,就像人眼一样。当两个相机拍摄的视图之间存在重叠区,它们便形成了基本的双视立体。

双视图通过极线校正和立体匹配,可以通过三角关系得到三维点,

但这一切实现的前提:

  1. 要准确的知道双相机之间的位置关系,即其中一个相机对于另一个相机的旋转 R R R和平移 t t t,即相机的外参数
  2. 要准确的知道双相机内部的设备参数,比如像主点 ( x 0 , y 0 ) (x_0,y_0) (x0​,y0​)、焦距 f f f、畸变参数等,即相机的内参数

关于内外参数的介绍,请看前篇:立体视觉入门指南(1):坐标系与相机参数

双相机标定

一般情况下,我们所见到的最多的双视立体,由两个不同的相机固定在刚性的结构上,构成稳定的双目立体系统。在使用过程中,相机之间不会有明显的相互移动,稳定的双视结构可以在任意时刻完成单帧深度信息的获取。下图为一些示例:

前面我们说到,单相机可以得到相机内参矩阵 K K K、外参矩阵 R , t R,t R,t,而双相机标定相比单相机标定来说

  1. 多了一个相对外参,即右相机相对于左相机的旋转矩阵 R R R 和平移向量 t t t。
  2. 少了两个绝对外参,即单相机自身标定出来的外参矩阵不再需要了,即只保留1得到的相对外参,称之为立体视觉系统的外参。(实际上单相机标定一般也不需要绝对外参,只是作为标定的输出自然产出,在双相机标定中,绝对外参可以作为中间变量计算相对外参)

我们在文章开头说到,双相机标定是基于单相机标定做的,我想聪明的同学已经想到了一部分思路,首先我们采用同样的拍摄方法采集标定标定图案,大部分操作方式和注意点都是一样的,详见立体视觉入门指南(3):相机标定之张式标定法【超详细值得收藏】

不同的地方在于:

  1. 每一次拍摄时,要注意两个相机的重叠区是否足够,一般超过1/2的图像区域就可以了,当然越大越好,在一些偏的较大的角度下,可以牺牲一定的重叠度。
  2. 注意两个相机尽量保持在统一的距离下采集,这样是为了保证两个视图的尺度和清晰度一致,减小不一致带来的误差。

示意图:

算法部分

图像采集后,进入算法部分,如前所述,第一步我们对两个相机单独做单相机标定,得到两个相机各自的内参矩阵K、绝对外参 R , t R,t R,t(即每次采集时相机相对于标定板的外参),和畸变系数 d d d(这里的 d d d是所有畸变系数的集合)
1. 对两个相机单独做单相机标定,得到两个相机各自的内参矩阵K、绝对外参 R , t R,t R,t,和畸变系数 d d d

然后有的同学可能想到了,根据每次采集的绝对外参,即可以计算出相对外参,但是显然我们会生成N个相对外参(N是采集的像对数量,也就是采集位置数),取哪一个好呢?取均值?还是取中值?

有经验的同学会发现,这两种都不太可靠,首先取均值就对显著性异常值毫无鲁棒性,只要某一对的绝对外参求错了,均值就影响很大;其次取中值由于只取某一对,又没有利用到多次测量的误差平均特性。

所以比较可靠的做法是,计算每次采集的相对外参,并取中值作为初值,再基于最小化重投影误差,非线性迭代优化得到最优解。在此方案下,相机的内参可以做为固定值,未知数为N组左相机的绝对外参 ( R i , t i ) , i = 1 , . . n (R_i,t_i),i=1,..n (Ri​,ti​),i=1,..n、1组右相对相对于左相机的相对外参 R ′ , t ′ R',t' R′,t′。最小重投影误差方程和单相机标定一样,只是右相机的绝对外参通过左相机的绝对外参和相对外参计算得到。

2. 计算每次采集的相对外参,并取中值作为初值,再基于最小化重投影误差,非线性迭代优化得到最优解

由于第二次迭代优化时,相机内参是固定的,外参个数也减少了且有较为准确的初值,所以迭代会相对更容易收敛且更精确。

总结

立体视觉通过立体匹配计算深度的前提:

  1. 要准确的知道相机之间的位置关系,即其中一个相机对于另一个相机的旋转 R R R和平移 t t t,即相机的外参数
  2. 要准确的知道相机内部的设备参数,比如像主点 ( x 0 , y 0 ) (x_0,y_0) (x0​,y0​)、焦距 f f f、畸变参数等,即相机的内参数

双相机标定相比单相机标定来说:

  1. 多了一个相对外参,即右相机相对于左相机的旋转矩阵 R R R 和平移向量 t t t。
  2. 少了两个绝对外参,即单相机自身标定出来的外参矩阵不再需要了,即只保留1得到的相对外参,称之为立体视觉系统的外参。

双相机图像采集的相比单相机图像采集不同的地方在于:

  1. 每一次拍摄时,要注意两个相机的重叠区是否足够,一般超过1/2的图像区域就可以了,当然越大越好,在一些偏的较大的角度下,可以牺牲一定的重叠度。
  2. 注意两个相机尽量保持在统一的距离下采集,这样是为了保证两个视图的尺度和清晰度一致,减小不一致带来的误差。

双相机标定算法步骤:

  1. 对两个相机单独做单相机标定,得到两个相机各自的内参矩阵K、绝对外参 R , t R,t R,t,和畸变系数 d d d
  2. 计算每次采集的相对外参,并取中值作为初值,再基于最小化重投影误差,非线性迭代优化得到最优解

所以你

作业

这里为大家准备了一些练习题,可以通过实践加深理解:

1 通过opencv开源库提供的接口完成双相机标定。
2 更高阶的是,你能够自己不依赖opencv库写一套双相机标定算法吗?或者只使用opencv来检测角点坐标,其他步骤自己来实现。

参考答案地址:https://github.com/ethan-li-coding/StereoV3DCode [不好意思放了,代码其实很久没更新了,但是你相信我有一天会更的对吗?]

立体视觉入门指南(5):双相机标定【再不收藏我收费了~】相关推荐

  1. 立体视觉入门指南:相机标定之Zhang式标定法

    作者丨李迎松@知乎 来源丨https://zhuanlan.zhihu.com/p/378819083 编辑丨3D视觉工坊 亲爱的同学们,我们的世界是3D世界,我们的双眼能够观测三维信息,帮助我们感知 ...

  2. 立体视觉入门指南(4):相机标定之DLT直接线性变换【建议收藏】

    亲爱的同学们,我们的世界是3D世界,我们的双眼能够观测三维信息,帮助我们感知距离,导航避障,从而翱翔于天地之间.而当今世界是智能化的世界,我们的科学家们探索各种机器智能技术,让机器能够拥有人类的三维感 ...

  3. 立体视觉入门指南(3):相机标定之张式标定法【超详细值得收藏】

    亲爱的同学们,我们的世界是3D世界,我们的双眼能够观测三维信息,帮助我们感知距离,导航避障,从而翱翔于天地之间.而当今世界是智能化的世界,我们的科学家们探索各种机器智能技术,让机器能够拥有人类的三维感 ...

  4. 立体视觉入门指南(1):坐标系与相机参数

    亲爱的同学们,我们的世界是3D世界,我们的双眼能够观测三维信息,帮助我们感知距离,导航避障,从而翱翔于天地之间.而当今世界是智能化的世界,我们的科学家们探索各种机器智能技术,让机器能够拥有人类的三维感 ...

  5. 立体视觉入门指南:对级约束与Fusiello法极线校正

    作者丨李迎松@知乎 来源丨https://zhuanlan.zhihu.com/p/466758105 编辑丨3D视觉工坊 亲爱的同学们,我们的世界是3D世界,我们的双眼能够观测三维信息,帮助我们感知 ...

  6. 立体视觉入门指南(6):对级约束与Fusiello法极线校正

    亲爱的同学们,我们的世界是3D世界,我们的双眼能够观测三维信息,帮助我们感知距离,导航避障,从而翱翔于天地之间.而当今世界是智能化的世界,我们的科学家们探索各种机器智能技术,让机器能够拥有人类的三维感 ...

  7. 立体视觉入门指南(7):立体匹配

    关于立体匹配,我之前写了很多博客,重复去写就没有必要,学习的朋友请阅读如下链接. 本文我们随便聊聊立体匹配的方法论和弱纹理恢复问题. 文章目录 立体匹配系列 0 1 SGM系列 2 PatchMatc ...

  8. 相机标定和双目相机标定标定原理推导及效果展示

    文章目录 前言 一.相机标定 1.相机的四个坐标系 2.相机的畸变 二.张正友标定法 1.求解内参矩阵与外参矩阵的积 2.求解内参矩阵 3.求解外参矩阵 4.标定相机的畸变参数 5.双目标定 6.极线 ...

  9. opencv相机标定模块解析

    第一部分,opencv 3.0 以后的接口: 主要解释的函数有: 1.单相机标定 ①. Rodrigues 罗德里格斯变换 ②.projectPoints 计算世界坐标系中的点在相机相平面的投影点. ...

最新文章

  1. 特别推荐:RHCE考试经验
  2. Spark 源码分析 -- RDD
  3. 7.10.7740.16
  4. 提高代码质量 CheckStyle FindBugs PMD
  5. ORA-00054 资源正忙,但指定以NOWAIT 方式获取资源,或者超时失效
  6. 设置ComboBox控件的边框颜色.
  7. Redis分布式锁抽丝剥茧
  8. .NET Core实战项目之CMS 第六章 入门篇-Vue的快速入门及其使用
  9. 计算机系答辩麻烦,计算机专业的你,答辩时有多卑微?
  10. spring boot定时任务解析
  11. 怎样配置VSS2005中文版服务器和客户端
  12. XJOI 9864 金字塔
  13. centos7 安装最新rabbitmq,并设置开机自启
  14. .Net core----使用容联云短信推送
  15. 创业公司的抗争,共享单车的合并
  16. 如何在个人信用报告中添加“本人声明”?
  17. 细究Android开发代码中心化所带来的问题
  18. 最详细的Android图片压缩攻略
  19. eap协议 c语言,CCNP无线技术知识点-EAP和EAPOL协议报文详解
  20. 【压缩感知合集3】压缩感知的背景与意义

热门文章

  1. 图像像素到字符的转换--python实现
  2. Python网络爬虫免费学
  3. 深入浅出Android开发!零基础如何成为高级Android开发,成功拿下大厂offer
  4. Go工具之generate
  5. 整理:C#中Expression表达式的妙用
  6. 上海几个医院入职体检费用及报告出来的时间
  7. 深富策略:指数联袂深蹲调整 科技成长逆势领涨!
  8. 进阶题66 字符串统计
  9. Cesium 1.91 更新日志 - MSAA 与原生 Promise 来了
  10. HTML常见字体符号