ToF
ToF
Supported on:RVC2
ToF 节点将原始的飞行时间传感器数据转换为深度信息,并同时提供基础输出和滤波后的输出。它适用于集成有 ToF 传感器的设备,例如:ToF 深度信息可以直接与空间节点一起使用,例如 SpatialDetectionNetwork 和 SpatialLocationCalculator。有关与立体视觉深度质量的比较,请参阅 ToF 深度精度。如何放置
Python
Python
1pipeline = dai.Pipeline()
2tof = pipeline.create(dai.node.ToF)输入和输出
DepthAI v3 ToF 架构
- ToF 基础解码 将传感器测量值转换为基础信号(
rawDepth、amplitude、intensity、phase)并处理相位解卷等 ToF 特定解码设置。 - 滤波阶段 使用面向 ToF 的滤波预设和运行时滤波器配置生成滤波后的深度输出(
depth)。
ToF 相机上的设置差异
CAM_* 插槽上的单色立体视觉对)。 ToF 相机通常用作 ToF + 彩色摄像头 的设置(两 个功能摄像头源),其中深度信息来自 dai.node.ToF,而不是来自 StereoDepth。通用应用程序中常见的集成陷阱:- 不要将 ToF 传感器视为普通的彩色预览源。
- 不要为仅 ToF 的设备自动创建默认的单色立体视觉流。
- 从
ToF构建深度,仅在需要时(例如,用于对齐/叠加)添加彩色流。
ToF 设置
ToFConfig):- 光学校正:将径向距离转换为深度(Z 图),以便其行为与立体视觉深度使用方式相匹配。
- 去畸变:
depth和amplitude默认进行去畸变。 - 相位解卷:以增加噪声为代价来扩展测量范围。
- 相位抖动时间滤波器:通过组合抖动/非抖动捕获来减少噪声。
- 突发模式:避免解码中的帧重用,通过牺牲输出速率来减少运动伪影。
0(禁用):高达约 1.87 m(80 MHz)1:高达约 3.0 m2:高达约 4.5 m3:高达约 6.0 m4:高达约 7.5 m
ImageFilters 和 ImageFiltersConfig 进行配置。有关基于置信度的清理,请参阅 ToFDepthConfidenceFilterConfig。

快速调优指南:深度图像滤波器
delta 通常以深度单位(通常是毫米)解释,而 alpha 是 [0.0, 1.0] 范围内的混合因子。 将以下所有值视为起点,并根据您的场景进行调整。步骤 1:空白状态
步骤 2:时间滤波器(从这里开始)
TemporalFilterParams,因为它控制随时间变化的动态平滑。delta:用于判断深度变化是显著噪声还是正常变化的阈值。- 从
delta = 15开始。 - 对于较大的物体(例如约 50 毫米的物体高度),使用
delta = 25以便运动快速更新。 - 对于小型物体,将其收紧至
delta = 10。
- 从
alpha:当前帧与历史帧的混合权重。- 较低的
alpha(例如0.1)会产生更平滑的输出,但可能引入延迟/拖尾。 - 较高的
alpha(例如0.4)更新速度更快,但平滑效果较差。
- 较低的
- 重要提示:
delta = 0会使几乎所有变化都变得显著,并很大程度上绕过时间混合。
步骤 3:斑点滤波器
SpeckleFilterParams 来去除单帧中的孤立斑块和类似椒盐噪声的伪影。differenceThreshold(boss 别名:max_diff):用于将相邻像素分组到同一区域的阈值。speckleRange(boss 别名:max_speckle_size):要去除的最大区域大小。- 调整策略:逐渐增加
speckleRange以去除较大的浮动斑块,但要避免删除真实小型对象的数值。
步骤 4:空间滤波器
SpatialFilterParams 在保留边缘的同时平滑对象表面。alpha:平滑强度(较低的值通常平滑效果更好)。delta:边缘保持阈值;较大的深度跳变被视为边缘,不会被混合。holeFillingRadius:使用周围的有效数据填充无效(0)像素。numIterations:更多次的迭代可以以轻微的处理成本优化输出。
步骤 5:中值滤 波器
MedianFilterParams 进行最终的激进清理。- 此节点中支持的模式:
MEDIAN_OFF、KERNEL_3x3、KERNEL_5x5。 - 使用最小的内核来解决噪声问题,以最大程度地减少边缘/细节损失。
调整快速参考
| 滤波器 | 关键参数 | 主要用例 | 权衡 |
|---|---|---|---|
| 时间 | delta, alpha | 平滑随时间变化的噪声 | 平滑度 vs 运动延迟 |
| 斑点 | speckleRange, differenceThreshold | 去除孤立斑块/噪声 | 清洁度 vs 删除小型对象 |
| 空间 | delta, alpha, holeFillingRadius, numIterations | 边缘保持的表面平滑 | 平滑度 vs 处理成本 |
| 中值 | KERNEL_3x3, KERNEL_5x5 | 激进的椒盐噪声清理 | 噪声去除 vs 边缘/细节模糊 |
ImageFilters、ImageFiltersConfig 和 ToFDepthConfidenceFilterConfig。ToF 运动模糊
- 增加传感器 FPS(最高可达 160 FPS),同时考虑更高的系统负载和缩短的曝光时间。
- 禁用相位抖动时间滤波器(噪声更大)。
- 禁用相位解缠(降低最大范围)。
- 在适用时启用突发模式。
最大距离
Math
1c = 299792458.0 # 光速,单位 m/s
2
3MAX_80MHZ_M = c / (80000000 * 2) = 1.873 m
4MAX_100MHZ_M = c / (100000000 * 2) = 1.498 m
5
6MAX_DIST_80MHZ_M = (phaseUnwrappingLevel + 1) * 1.873 + (phaseUnwrapErrorThreshold / 2)
7MAX_DIST_100MHZ_M = (phaseUnwrappingLevel + 1) * 1.498 + (phaseUnwrapErrorThreshold / 2)ToF FPS
用法
Python
Python
1pipeline = dai.Pipeline()
2
3socket = dai.CameraBoardSocket.AUTO
4preset = dai.ImageFiltersPresetMode.TOF_MID_RANGE
5tof = pipeline.create(dai.node.ToF).build(socket, preset)
6
7# 基础和滤波后的输出
8raw_depth_q = tof.rawDepth.createOutputQueue()
9depth_q = tof.depth.createOutputQueue()
10
11# 运行时配置队列(在所选 API 绑定中可用)
12base_cfg_q = tof.tofBaseInputConfig.createInputQueue()
13filters_cfg_q = tof.imageFiltersInputConfig.createInputQueue()示例
参考
class
dai::node::ToF
variable
variable
Subnode< ImageFilters > imageFilters
variable
variable
Output & depth
Filtered depth output
variable
Output & amplitude
Amplitude output
variable
Output & intensity
Intensity output
variable
Output & phase
Phase output
variable
variable
Input & imageFiltersInputConfig
Input config for image filters
variable
variable
ImageFilters & imageFiltersNode
Image filters node
inline function
ToF(const std::shared_ptr< Device > & device)function
~ToF()inline function
void buildInternal()inline function
std::shared_ptr< ToF > build(dai::CameraBoardSocket boardSocket, dai::ImageFiltersPresetMode presetMode, std::optional< float > fps)需要帮助?
请前往 Discussion Forum 获取技术支持或提出您可能有的任何其他问题。