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

文章目录

    • 一、基本原理
    • 二、主要处理流程
      • [2.1. 匹配代价(Matching Cost)](#2.1. 匹配代价(Matching Cost))
        • (1)常见匹配代价函数
          • [1. 绝对差(SAD,Sum of Absolute Differences)](#1. 绝对差(SAD,Sum of Absolute Differences))
          • [2. 平方差(SSD,Sum of Squared Differences)](#2. 平方差(SSD,Sum of Squared Differences))
          • [3. 归一化互相关(NCC,Normalized Cross-Correlation)](#3. 归一化互相关(NCC,Normalized Cross-Correlation))
          • [4. Census 变换](#4. Census 变换)
        • (2)匹配代价函数对比
      • [2.2. 代价体(Cost Volume)](#2.2. 代价体(Cost Volume))
      • [2.3. 代价聚合(Cost Aggregation)](#2.3. 代价聚合(Cost Aggregation))
      • [2.4. 视差计算(Disparity Computation)](#2.4. 视差计算(Disparity Computation))
      • [2.5. 视差优化(Disparity Refinement)](#2.5. 视差优化(Disparity Refinement))
      • [2.6. 深度恢复(Depth Recovery)](#2.6. 深度恢复(Depth Recovery))

一、基本原理

两个相机拍摄同一场景,形成左图 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=xL−xR

深度恢复公式:

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

其中:

  • 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(x−d,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)∈W∑∣IL(x+u,y+v)−IR(x−d+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(x−d,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(x−d+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(u−d,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(x−d,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) (x−d,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)f⋅B

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


相关推荐
兔子不吃草~5 小时前
鱼眼相机模型
数码相机
北岛三生11 小时前
Camera tuning flow相机调试流程
图像处理·数码相机·测试工具·模块测试
南山二毛11 小时前
机器人控制器开发(传感器层——奥比大白相机适配)
数码相机·机器人
格林威13 小时前
棱镜的技术加持:线扫相机如何同时拍RGB和SWIR?
人工智能·深度学习·数码相机·yolo·计算机视觉
北岛三生16 小时前
光学概念-相机模组(Camera Module)以及成像原理
图像处理·数码相机·模块测试
房开民1 天前
使用海康机器人相机SDK实现基本参数配置(C语言示例)
c语言·数码相机·机器人
南山二毛1 天前
机器人控制器开发(导航算法——导航栈关联坐标系)
人工智能·架构·机器人
猫头虎1 天前
2025最新超详细FreeRTOS入门教程:第一章 FreeRTOS移植到STM32
stm32·单片机·嵌入式硬件·机器人·硬件架构·freertos·嵌入式实时数据库
xwz小王子1 天前
Nature Machine Intelligence 基于强化学习的磁性微型机器人自主三维位置控制
机器人·微型机器人
IoT砖家涂拉拉1 天前
从“找新家”到“走向全球”,布尔云携手涂鸦智能开启机器人新冒险
人工智能·机器人·ai助手·ai智能体·ai机器人