目录

  • 背景
  • 可视化理解
  • 推导

背景

双目相机可以通过左右目图像的匹配得到每个像素的视差,即左眼像素 u l , v u_l, v ul​,v 能找到右眼图像中的匹配像素 u r , v u_r, v ur​,v, 注意经过极线校正后的双目相机,左眼和右眼互相匹配的像素有相同的纵轴坐标(纵轴坐标都是 v v v)。假设我们知道左眼某个像素的视差 d = ∣ u l − u r ∣ d=\vert u_l - u_r\vert d=∣ul​−ur​∣, 那么如何求解这个像素的深度呢?下文我们就探究一下这个问题。

可视化理解

如上图所示,我们要求解的像素深度就是 D D D 表示的是空间点到基线(baseline)的距离。而两个像素之间的视差呢,可以理解为 d 1 + d 2 d_1+d_2 d1​+d2​。

推导

我们首先规定,以上的变量的单位都是(像素)。则我们可以看出来左眼形成了相似三角形,并且有 d 1 f = a D − f \frac{d_1}{f}=\frac{a}{D-f} fd1​​=D−fa​, 而右眼形成了相似三角形 b D − f = d 2 f \frac{b}{D-f}=\frac{d2}{f} D−fb​=fd2​。
因此我们可以得到
d 1 + d 2 f = a + b D − f d 1 + d 2 f = b s − ( d 1 + d 2 ) D − f b s − ( d 1 + d 2 ) d 1 + d 2 = D − f f b s d 1 + d 2 = D f D = b s ⋅ f d 1 + d 2 \begin{aligned} &\frac{d_1+d_2}{f} = \frac{a+b}{D-f} \\ &\frac{d_1+d_2}{f} = \frac{bs - (d_1+d_2)}{D-f} \\ &\frac{bs - (d_1+d_2)}{d_1+d_2} = \frac{D-f}{f} \\ &\frac{bs}{d_1+d_2} = \frac{D}{f}\\ &D = \frac{bs\cdot f}{d_1+d_2} \end{aligned} ​fd1​+d2​​=D−fa+b​fd1​+d2​​=D−fbs−(d1​+d2​)​d1​+d2​bs−(d1​+d2​)​=fD−f​d1​+d2​bs​=fD​D=d1​+d2​bs⋅f​​

因此我们可以得到深度和视差的关系,其中 d 1 + d 2 d_1+d_2 d1​+d2​就是视差。以上得到的关系都是以像素为单位,如果要切换到物理世界的长度单位,需要知道每个像素的长度 s s s, 将得到的像素深度 D D D 乘上 s s s即可。另外从上述公式我们可以看出来,视差越小,深度越大,也符合我们的直觉。

【算法思考】双目视差求像素深度公式理解相关推荐

  1. 【数据结构】求二叉树深度的算法

    要求二叉树的深度,方法是先求出左子树的深度,再求出右子树的深度,二叉树的深度就是左子树的深度和右子树的深度中的最大值加1. 自然而然想到用后根遍历的思想实现 主要步骤如下: 若二叉树为空,则返回0值, ...

  2. 求二叉树深度算法(深度优先、广度优先)

    求二叉树深度的算法 求二叉树深度 方法一:深度优先的遍历方式 方法二:广度优先的遍历方式 总结 求二叉树深度 注:本文中二叉树通过二叉链表构建. 节点类型定义如下: struct node{char ...

  3. 双目相机--双目视差与深度距离关系推导详解

    相机成像的模型如下图所示: P为空间中的点,P1和P2是点P在左右像平面上的成像点,f是焦距,OR和OT是左右相机的光心.由下图可见左右两个相机的光轴是平行的.XR和XT是两个成像点在左右两个像面上距 ...

  4. 通过cv2输出左右眼视差图, 然后根据视差图输出深度边沿

    视差图是神经网络里的x--feature,分左右眼 计算过程是先将左眼(或右眼)图片作为主视图(基准),然后用另外一眼图片缓慢的水平划过主视图, 这时候会有部分区域重合,相当于人看东西的时候双目同时注 ...

  5. DROID-SLAM: 用于单目双目RGBD相机的深度视觉SLAM

    作者丨Clark@知乎 来源丨https://zhuanlan.zhihu.com/p/479534098 编辑丨3D视觉工坊 论文信息 @article{teed2021droid,title={D ...

  6. 双目相机计算稠密深度点云(一)

    双目相机计算稠密深度点云 1.双目立体匹配原理 1.1 图像矫正 1.2 视差计算 2.elas_ros 包运行 3.KITTI数据集运行 3.1 kitti数据集转换为rosbag 3.2 运行KI ...

  7. 分水岭算法java,OpenCV 学习笔记 04 深度估计与分割——GrabCut算法与分水岭算法...

    1 使用普通摄像头进行深度估计 1.1 深度估计原理 这里会用到几何学中的极几何(Epipolar Geometry),它属于立体视觉(stereo vision)几何学,立体视觉是计算机视觉的一个分 ...

  8. 100天搞定机器学习|day37 无公式理解反向传播算法之精髓

     100天搞定机器学习(Day1-34) 100天搞定机器学习|Day35 深度学习之神经网络的结构 100天搞定机器学习|Day36 深度学习之梯度下降算法 本篇为100天搞定机器学习之第37天,亦 ...

  9. [双目视差] 立体匹配步骤详解

    文章目录 立体匹配步骤详解 Step1 匹配代价计算 Step2 代价聚合 Step3 视差计算 Step4 视差优化 立体匹配步骤详解 Step1 匹配代价计算 匹配代价计算的目的是衡量待匹配像素与 ...

最新文章

  1. FlowVisor入门教程
  2. A Java Runtime Environment (JRE) or Java Development Kit (JDK)
  3. python注释以符号什么开始_python注释以什么符号开始
  4. linux中的httpd源码安装方法
  5. Boost.Signals2 的初学者你好世界示例
  6. 牛客小白月赛17-记录(附题解)
  7. RDS关系型数据库服务
  8. IntelliJ IDEA使用技巧(二)——添加jar包
  9. DX11版引擎即将发布 陈飞舟谈背后故事
  10. ios safari 描述文件 跳转到_iOS系统在线下载安装ipa文件,以及跳转描述文件信任证书的实现...
  11. 20200415 计算机的基础之host配置
  12. Java 自定义Excel数据排序
  13. 文本摘要——综述报告
  14. C语言基础知识 ---------- 指针(pointer)、结构(structure)、字串(Char)
  15. Win32 IME 编程心得【转】
  16. 在Js和Java自动生成账号的方法
  17. 【微信开发第一章】SpringBoot实现微信公众号创建菜单,同步菜单功能
  18. 运维自我提升:怎样做好企业 IT 运维工作
  19. Task4 论文种类分类
  20. php 什么是占位符,php中的占位符

热门文章

  1. 常见的AT指令错误码
  2. python在vsc制作动态二维码_用VScode愉快的写python代码
  3. Hyper-V网络设置实现宿主机.虚拟机之间互联互通
  4. 电击手表设计#开源#
  5. 阿兰·麦席森·图灵 介绍
  6. 腾讯回应微信读书侵害用户信息;苹果称今年新iPhone将推迟数周发布;Julia 1.6.0 发布| 极客头条
  7. Solr In Action 中文版 第一章(四、五)
  8. 蜻蜓直播社交软件之蜻蜓s前端文件目录详解-开源系统蜻蜓s系统
  9. 湖南省永州市谷歌高清卫星地图下载
  10. python数据分析-常用数据分析库之Pandas(下)