【算法思考】双目视差求像素深度公式理解
目录
- 背景
- 可视化理解
- 推导
背景
双目相机可以通过左右目图像的匹配得到每个像素的视差,即左眼像素 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+bfd1+d2=D−fbs−(d1+d2)d1+d2bs−(d1+d2)=fD−fd1+d2bs=fDD=d1+d2bs⋅f
因此我们可以得到深度和视差的关系,其中 d 1 + d 2 d_1+d_2 d1+d2就是视差。以上得到的关系都是以像素为单位,如果要切换到物理世界的长度单位,需要知道每个像素的长度 s s s, 将得到的像素深度 D D D 乘上 s s s即可。另外从上述公式我们可以看出来,视差越小,深度越大,也符合我们的直觉。
【算法思考】双目视差求像素深度公式理解相关推荐
- 【数据结构】求二叉树深度的算法
要求二叉树的深度,方法是先求出左子树的深度,再求出右子树的深度,二叉树的深度就是左子树的深度和右子树的深度中的最大值加1. 自然而然想到用后根遍历的思想实现 主要步骤如下: 若二叉树为空,则返回0值, ...
- 求二叉树深度算法(深度优先、广度优先)
求二叉树深度的算法 求二叉树深度 方法一:深度优先的遍历方式 方法二:广度优先的遍历方式 总结 求二叉树深度 注:本文中二叉树通过二叉链表构建. 节点类型定义如下: struct node{char ...
- 双目相机--双目视差与深度距离关系推导详解
相机成像的模型如下图所示: P为空间中的点,P1和P2是点P在左右像平面上的成像点,f是焦距,OR和OT是左右相机的光心.由下图可见左右两个相机的光轴是平行的.XR和XT是两个成像点在左右两个像面上距 ...
- 通过cv2输出左右眼视差图, 然后根据视差图输出深度边沿
视差图是神经网络里的x--feature,分左右眼 计算过程是先将左眼(或右眼)图片作为主视图(基准),然后用另外一眼图片缓慢的水平划过主视图, 这时候会有部分区域重合,相当于人看东西的时候双目同时注 ...
- DROID-SLAM: 用于单目双目RGBD相机的深度视觉SLAM
作者丨Clark@知乎 来源丨https://zhuanlan.zhihu.com/p/479534098 编辑丨3D视觉工坊 论文信息 @article{teed2021droid,title={D ...
- 双目相机计算稠密深度点云(一)
双目相机计算稠密深度点云 1.双目立体匹配原理 1.1 图像矫正 1.2 视差计算 2.elas_ros 包运行 3.KITTI数据集运行 3.1 kitti数据集转换为rosbag 3.2 运行KI ...
- 分水岭算法java,OpenCV 学习笔记 04 深度估计与分割——GrabCut算法与分水岭算法...
1 使用普通摄像头进行深度估计 1.1 深度估计原理 这里会用到几何学中的极几何(Epipolar Geometry),它属于立体视觉(stereo vision)几何学,立体视觉是计算机视觉的一个分 ...
- 100天搞定机器学习|day37 无公式理解反向传播算法之精髓
100天搞定机器学习(Day1-34) 100天搞定机器学习|Day35 深度学习之神经网络的结构 100天搞定机器学习|Day36 深度学习之梯度下降算法 本篇为100天搞定机器学习之第37天,亦 ...
- [双目视差] 立体匹配步骤详解
文章目录 立体匹配步骤详解 Step1 匹配代价计算 Step2 代价聚合 Step3 视差计算 Step4 视差优化 立体匹配步骤详解 Step1 匹配代价计算 匹配代价计算的目的是衡量待匹配像素与 ...
最新文章
- FlowVisor入门教程
- A Java Runtime Environment (JRE) or Java Development Kit (JDK)
- python注释以符号什么开始_python注释以什么符号开始
- linux中的httpd源码安装方法
- Boost.Signals2 的初学者你好世界示例
- 牛客小白月赛17-记录(附题解)
- RDS关系型数据库服务
- IntelliJ IDEA使用技巧(二)——添加jar包
- DX11版引擎即将发布 陈飞舟谈背后故事
- ios safari 描述文件 跳转到_iOS系统在线下载安装ipa文件,以及跳转描述文件信任证书的实现...
- 20200415 计算机的基础之host配置
- Java 自定义Excel数据排序
- 文本摘要——综述报告
- C语言基础知识 ---------- 指针(pointer)、结构(structure)、字串(Char)
- Win32 IME 编程心得【转】
- 在Js和Java自动生成账号的方法
- 【微信开发第一章】SpringBoot实现微信公众号创建菜单,同步菜单功能
- 运维自我提升:怎样做好企业 IT 运维工作
- Task4 论文种类分类
- php 什么是占位符,php中的占位符
热门文章
- 常见的AT指令错误码
- python在vsc制作动态二维码_用VScode愉快的写python代码
- Hyper-V网络设置实现宿主机.虚拟机之间互联互通
- 电击手表设计#开源#
- 阿兰·麦席森·图灵 介绍
- 腾讯回应微信读书侵害用户信息;苹果称今年新iPhone将推迟数周发布;Julia 1.6.0 发布| 极客头条
- Solr In Action 中文版 第一章(四、五)
- 蜻蜓直播社交软件之蜻蜓s前端文件目录详解-开源系统蜻蜓s系统
- 湖南省永州市谷歌高清卫星地图下载
- python数据分析-常用数据分析库之Pandas(下)