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

完整教程:散斑深度相机原理

完整教程:散斑深度相机原理

散斑深度相机是一种主动式光学3D成像技术。它通过向目标物体投射一组随机但固定的红外激光散斑图案,然后借助一个摄像头观察这个图案在物体表面的变形,再利用计算机视觉算法(核心是“立体匹配”)计算出每个点的深度信息。

它的另一个更广为人知的名字是主动立体视觉,或者更具体地说,是基于随机散斑的主动立体视觉。苹果公司最早将其大规模商用在其产品(如 iPhone、iPad)的 Face ID 原深感摄像头系统中,并称之为“结构光”,但实际上它投射的是随机散斑而非编码条纹,科技上属于结构光的一个特殊分支。

核心原理分步详解

1. 架构构成

一个典型的散斑深度相机囊括两个核心组件:

其工作原理可以类比于人类的双眼视觉(立体视觉),但解决了传统双目视觉在弱纹理区域匹配困难的疑问。

2. 工作原理步骤

  • 步骤一:投射固定的随机散斑
    激光器发出的红外激光通过一个特殊的光学元件——衍射光学元件 (DOE)。这个元件许可将一个激光点衍射成成千上万个随机分布、具有高度随机性的微小光点,这些光点集合在一起就形成了所谓的“激光散斑”图案。这个图案是固定不变且已知的,就像是相机自带的“纹理”。

  • 步骤二:捕获变形的散斑图案
    红外摄像头从另一个与激光发射器有一定基线距离(类似于人的两眼间距)的位置,去观察投射到物体表面的散斑图案。由于物体表面有高低起伏,原本平整的散斑图案会因为视角和物体形状的原因而发生“变形”(位移)。

    • 离相机近的物体表面,散斑点的位移小。

    • 离相机远的物体表面,散斑点位移大。

    • 凸起的地方,散斑点会向四周移动。

    • 凹陷的地方,散斑点会向中心聚集。

  • 步骤三:计算视差(核心匹配算法)
    系统将实际捕获到的变形散斑图与一个一个平整的墙面)上就是预先存储的、在参考平面(通常捕获的标准散斑图进行比对。

计算机会为变形图像中的每一个像素点,在标准图像中寻找与之最匹配的散斑模式小块。这个寻找过程就是“立体匹配”。由于散斑图案具有高度的随机性和唯一性,每一个小区域的图案都是独一无二的,因此匹配的准确度和精度非常高,即使在缺乏纹理的白色墙面、纯色物体上也能出色工作。

找到匹配点后,就能计算出该点在两张图像上的位置偏差,这个偏差就是“视差 (Disparity)”

  • 步骤四:三角测距法转换为深度
    一旦知道了视差,结合已知的基线距离(红外发射器和红外摄像头之间的距离)和焦距(摄像头的内部参数),就可以通过经典的三角测距法 (Triangulation) 精确计算出该像素点对应的实际物理深度(Z值)。

公式简化表示为:深度 (Z) ∝ (基线距离 × 焦距) / 视差

对图像中的每一个像素都执行上述计算,最终就能生成一整张深度图 (Depth Map),其中每个像素的值不是颜色,而是它到相机的距离。

技术特点与优劣

优点:

缺点:

与其他深度相机科技对比

技术散斑深度相机 (主动双目)结构光 (编码结构光)飞行时间法 (ToF)
原理主动立体视觉 + 固定散斑纹理主动投射编码图案(如条纹、网格)测量光脉冲的飞行时间
精度高(中近距离)非常高(近距离)中(中远距离)
距离中近 (0.2m - 5m)近 (0.1m - 3m)中远 (0.5m - 10m+)
优点精度高、不受纹理影响精度极高、可非常近抗干扰强、距离远、帧率高
缺点怕强光、距离有限怕强光、距离近、易受干扰分辨率较低、成本高

应用领域

散斑深度相机从视差到深度的转换公式的推导和解释

公式推导准备:理想模型假设

在这个理想模型下,一个空间点 P(X, Y, Z) 在两个相机成像面上的像点 p_left 和 p_right 的y坐标相同,只有x坐标存在差异。这个x坐标的差异就是视差 d。

步骤一:建立坐标系和投影关系

我们以左相机的光心 O_left 为世界坐标系的原点。

  • 空间点 P 的坐标为 (X, Y, Z),其中 Z 就是我们要求的深度。

  • 点 P 在左相机图像上的投影点为 p_left(u_left, v)。

  • 点 P 在右相机图像上的投影点为 p_right(u_right, v)。 (注意y坐标相同)

  • 根据小孔成像模型,投影关系为:
    uleft=fXZ+cxu_{left} = f \frac{X}{Z} + c_xuleft=fZX

http://www.hskmm.com/?act=detail&tid=13228

相关文章:

  • 如何用 Dify 无代码工作流实现 AI 自动化抓取与分析 LinkedIn 招聘数据
  • WSL+共享文件夹搭建zephyr工作环境
  • 如果 Spring Cloud Feign 配置了 OkHttp3 非阻塞 IO(NIO),那么还需要reactor 模型来提高性能吗
  • 数据结构-单链表基础2
  • G1垃圾回收过程
  • Trellix自动化大规模修复开源漏洞,已修补超6万个项目
  • 爆款游戏背后:尚娱如何借助阿里云 Kafka Serverless 轻松驾驭“潮汐流量”?
  • Vben Admin5.0 keepAlive缓存和onActivated未生效
  • 版本速递 | 华为云Versatile智能体平台 新增特性介绍(2025年9月发布)
  • JVM体系结构
  • PE程序常见脱壳方案
  • 基于二值化断裂裂缝的裂缝拼接算法
  • spring ai基于内存RAG尝鲜
  • 想自己做大模型备案的企业看过来【评估测试题+备案源文件】
  • 基于 IOCP 的协程调度器——零基础深入浅出 C++20 协程
  • Gitee PPM风险矩阵:数字化转型中的项目管理预警雷达
  • 同一个灰色,POI取出来却是白色:一次Excel颜色解析的踩坑记录
  • 坤驰科技携国产化MTCA解决方案,亮相大科学装置控制系统研讨会
  • 找出所有项目引用了哪些 NuGet 包、版本号、对应项目路径,并筛选出“同一个包名但版本不同”的情况。
  • PC与基恩士PLC通信的C#实现
  • Excel 表格技能
  • labelme标注后的json文件和原图同步按角度旋转
  • rk3588的ai功能和deepseek
  • EPSON L1300打印机清零教程
  • 「线性代数」矩阵运算与初等变换
  • 移动号码线上复机
  • Uni-App 使用android studio打包最新教程
  • tomcat CPU数量和线程数的关系
  • NASA运货飞船天鹅座再次推迟,航天任务为什么总是“彩排”不断
  • Centos系统切换为光盘本地源