【机器人-深度估计】双目深度估计原理解析

发布于:2025-06-27 ⋅ 阅读:(13) ⋅ 点赞:(0)

一、基本原理

两个相机拍摄同一场景,形成左图 I L I_L IL 和右图 I R I_R IR,若场景中某点 P P P 在左图和右图的投影点分别为 p L p_L pL p R p_R pR,它们之间的水平距离就是视差 d d d

视差计算公式:

d = x L − x R d = x_L - x_R d=xLxR

深度恢复公式:

Z = f ⋅ B d Z = \frac{f \cdot B}{d} Z=dfB

其中:

  • Z Z Z:深度值
  • f f f:相机焦距
  • B B B:双目基线长度(相机间距)
  • d d d:视差

二、主要处理流程

2.1. 匹配代价(Matching Cost)

(1)常见匹配代价函数
1. 绝对差(SAD,Sum of Absolute Differences)

最简单直接的度量方式,对亮度差进行绝对值计算:

C SAD ( x , y , d ) = ∣ I L ( x , y ) − I R ( x − d , y ) ∣ C_{\text{SAD}}(x, y, d) = |I_L(x, y) - I_R(x - d, y)| CSAD(x,y,d)=IL(x,y)IR(xd,y)

窗口版本:

C SAD ( x , y , d ) = ∑ ( u , v ) ∈ W ∣ I L ( x + u , y + v ) − I R ( x − d + u , y + v ) ∣ C_{\text{SAD}}(x, y, d) = \sum_{(u,v) \in \mathcal{W}} |I_L(x+u, y+v) - I_R(x - d + u, y + v)| CSAD(x,y,d)=(u,v)WIL(x+u,y+v)IR(xd+u,y+v)

优点: 快速、简单
缺点: 对光照变化敏感,窗口大小固定易模糊边界


2. 平方差(SSD,Sum of Squared Differences)

对亮度差平方,加大离群像素的惩罚:

C SSD ( x , y , d ) = ( I L ( x , y ) − I R ( x − d , y ) ) 2 C_{\text{SSD}}(x, y, d) = (I_L(x, y) - I_R(x - d, y))^2 CSSD(x,y,d)=(IL(x,y)IR(xd,y))2

窗口版本:

C SSD ( x , y , d ) = ∑ ( u , v ) ∈ W ( I L ( x + u , y + v ) − I R ( x − d + u , y + v ) ) 2 C_{\text{SSD}}(x, y, d) = \sum_{(u,v) \in \mathcal{W}} (I_L(x+u, y+v) - I_R(x - d + u, y + v))^2 CSSD(x,y,d)=(u,v)W(IL(x+u,y+v)IR(xd+u,y+v))2

优点: 更平滑,惩罚大误差
缺点: 对噪声更敏感,不鲁棒


3. 归一化互相关(NCC,Normalized Cross-Correlation)

考虑局部均值和标准差,抑制光照变化:

C NCC ( x , y , d ) = ∑ ( u , v ) ∈ W ( I L ( u , v ) − μ L ) ( I R ( u − d , v ) − μ R ) σ L ⋅ σ R C_{\text{NCC}}(x, y, d) = \frac{\sum_{(u,v) \in \mathcal{W}} (I_L(u,v) - \mu_L)(I_R(u - d,v) - \mu_R)}{\sigma_L \cdot \sigma_R} CNCC(x,y,d)=σLσR(u,v)W(IL(u,v)μL)(IR(ud,v)μR)

其中:

  • μ L , μ R \mu_L, \mu_R μL,μR 是窗口内左/右图的均值
  • σ L , σ R \sigma_L, \sigma_R σL,σR 是窗口内的标准差

优点: 对亮度变化鲁棒
缺点: 计算复杂,适合浮点图像


4. Census 变换

将图像转换为局部结构描述符,再计算汉明距离(Hamming distance):

  1. 对每个像素构造一个比中心像素大的/小的位图(binary pattern):

    Census ( x , y ) = ⋃ ( u , v ) ∈ W [ I ( x + u , y + v ) < I ( x , y ) ] \text{Census}(x,y) = \bigcup_{(u,v) \in \mathcal{W}} [I(x+u, y+v) < I(x, y)] Census(x,y)=(u,v)W[I(x+u,y+v)<I(x,y)]

  2. 匹配代价为二进制描述符间的汉明距离:

    C Census ( x , y , d ) = Hamming ( C L ( x , y ) , C R ( x − d , y ) ) C_{\text{Census}}(x, y, d) = \text{Hamming}(C_L(x,y), C_R(x-d,y)) CCensus(x,y,d)=Hamming(CL(x,y),CR(xd,y))

优点: 对光照变化极强的鲁棒性
缺点: 描述符计算稍复杂,且损失精度信息


(2)匹配代价函数对比
场景 建议代价函数
计算资源少 SAD / SSD
光照变化明显(室外) Census / Rank
浮点图像 + 精度要求高 NCC
深度学习方法 使用特征卷积构造代价体

2.2. 代价体(Cost Volume)

代价体用于存储每个像素在不同视差假设下的匹配代价。

假设最大视差为 D D D,对于左图中每个像素 ( x , y ) (x, y) (x,y),构建一个代价向量:

C ( x , y , d ) , d ∈ [ 0 , D ] C(x, y, d), \quad d \in [0, D] C(x,y,d),d[0,D]

每个 C ( x , y , d ) C(x, y, d) C(x,y,d) 表示左图 ( x , y ) (x, y) (x,y) 与右图 ( x − d , y ) (x - d, y) (xd,y) 的匹配代价。

2.3. 代价聚合(Cost Aggregation)

从像素级匹配代价到稠密视差图的关键处理步骤,其核心目标是通过整合局部邻域或全局上下文的信息,抑制噪声并增强匹配的准确性。

常见方法:

  • 窗口聚合(Box Filter):简单快速,但容易在物体边界模糊
  • 引导滤波(Guided Filter):保边性强
  • Cross-Based Cost Aggregation:自适应支持区域,提高边界处理能力

2.4. 视差计算(Disparity Computation)

最常见的是WTA策略(Winner Takes All),对每个像素选择代价最小的视差:

d ( x , y ) = arg ⁡ min ⁡ d C ( x , y , d ) d(x, y) = \arg\min_d C(x, y, d) d(x,y)=argdminC(x,y,d)

2.5. 视差优化(Disparity Refinement)

包括:

  • 左右一致性检测(Left-Right Consistency Check)

    • 计算左图→右图 和 右图→左图 的视差,剔除不一致点
  • 空洞填补(Hole Filling)

  • 亚像素插值(Subpixel Enhancement)

  • 中值滤波、双边滤波等图像处理技术提升平滑性和边界精度

2.6. 深度恢复(Depth Recovery)

根据视差和相机参数,使用公式:

Z ( x , y ) = f ⋅ B d ( x , y ) Z(x, y) = \frac{f \cdot B}{d(x, y)} Z(x,y)=d(x,y)fB

即可还原每个像素的深度值。



网站公告

今日签到

点亮在社区的每一天
去签到