当前位置: 首页 > news >正文

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

文章目录

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

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


http://www.xdnf.cn/news/1066987.html

相关文章:

  • 【格与代数系统】示例2
  • 黑马程序员苍穹外卖DAY1
  • 【AI News | 20250623】每日AI进展
  • 基于openfeign拦截器RequestInterceptor实现的微服务之间的夹带转发
  • 支持java8的kafka版本
  • Python csv 模块
  • Spring MVC极简入门:从@Request到Postman的全链路开发
  • python中学物理实验模拟:平抛运动和抛物运动
  • 苹果芯片macOS安装版Homebrew(亲测) ,一键安装node、python、vscode等,比绿色软件还干净、无污染
  • 触摸屏(典型 I2C + Input 子系统设备)从设备树解析到触摸事件上报
  • 深入浅出Node.js后端开发
  • Python基础之函数
  • Python基础(​​FAISS​和​​Chroma​)
  • Redis哨兵模式深度解析与实战部署
  • 如何实现财务自由
  • 操作系统 第九章 部分
  • 飞往大厂梦之算法提升-7
  • 第一节 布局与盒模型-Flex与Grid布局对比
  • Java的SpringAI+Deepseek大模型实战【二】
  • Vue实现选中多张图片一起拖拽功能
  • 华为HN8145V光猫改华为蓝色公版界面,三网通用,xgpon公版光猫
  • [NocoDB] 在局域网中调整Float类型显示精度的部署经验
  • 《哈希表》K倍区间(解题报告)
  • 数组题解——​轮转数组【LeetCode】
  • K8S下http请求在ingress和nginx间无限循环的问题
  • Docker 永久换源步骤
  • 基于ASP4644多通道降压技术在电力监测系统中集成应用与发展前景
  • Maven 之 JUnit 测试体系构建全解析
  • 基于SpringBoot + Vue 的网上拍卖系统
  • leetcode543-二叉树的直径