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

文章介绍了如何利用双目相机的视差信息计算像素的深度。通过视差和像素坐标,结合相似三角形原理,推导出深度D与视差d1+d2、焦距f和基线长度bs的关系,即D=bs⋅f/(d1+d2)。视差越小,对应的空间点深度越大。计算结果通常以像素为单位,转换为物理长度需知像素尺寸s。
摘要由CSDN通过智能技术生成

背景

双目相机可以通过左右目图像的匹配得到每个像素的视差,即左眼像素 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=ulur, 那么如何求解这个像素的深度呢?下文我们就探究一下这个问题。

可视化理解

在这里插入图片描述

如上图所示,我们要求解的像素深度就是 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=Dfa, 而右眼形成了相似三角形 b D − f = d 2 f \frac{b}{D-f}=\frac{d2}{f} Dfb=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=Dfa+bfd1+d2=Dfbs(d1+d2)d1+d2bs(d1+d2)=fDfd1+d2bs=fDD=d1+d2bsf

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

  • 4
    点赞
  • 13
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值