Filter(滤波器)是 OrbbecSDK v2 提供的后处理模块,用于对传感器输出的原始帧进行处理,常见用途包括:
• 去除深度图中的噪声和空洞
• 对深度图进行空间/时序平滑
• 对图像进行下采样,降低分辨率以减少数据量、提升后续处理性能
• 将深度流与彩色流进行软件方式对齐
• 转换帧的像素格式
• 生成点云数据
⚠ 注意:Filter 不只针对深度流(Depth),部分 Filter 适用于彩色流(Color)或红外流(IR),使用时请注意各 Filter 的适用流类型。
方式 | 说明 | 适用场景 |
直接创建 Filter | 明确指定要使用哪个 Filter,自行设置参数 | 需要精细控制,定制化场景 |
推荐 Filter 列表 | 通过指定 Sensor 获取,SDK 针对该 Sensor 的流类型返回推荐的 Filter 组合,只能处理对应流类型的帧 | 快速集成,通用场景 |
✅ 提示:不确定设备支持哪种?不确定选哪种?建议先从“推荐 Filter 列表”入手,能快速跑通;需要定制时再使用“直接创建”。
Filter 名称 | 适用流 | 用途简介 | 类型 |
PointCloudFilter | Depth / Depth+Color | 将深度帧转换为 XYZ 点云,或将深度+彩色帧转换为 RGBD 点云(XYZ+RGB) | 变换类 |
Align | Depth + Color | 通过软件方式将深度流与彩色流进行空间对齐 | 变换类 |
FormatConvertFilter | Color / IR | 像素格式转换(如 MJPG→RGB、YUYV→BGR 等) | 变换类 |
DisparityTransform | Depth | 深度图与视差图之间的互相转换 | 变换类 |
SequenceIdFilter | Depth / IR | 按帧序列号筛选,配合 HDR 使用 | 流控类 |
DecimationFilter | Depth / IR / Color | 对图像进行降采样,缩小分辨率 | 采样/阈值类 |
ThresholdFilter | Depth | 将超出指定距离范围的深度值置零 | 采样/阈值类 |
NoiseRemovalFilter | Depth | 去除深度图中的噪声(基础版) | 降噪类 |
FalsePositiveFilter | Depth | 去除深度图中的各种噪声(高级版) | 降噪类 |
SpatialAdvancedFilter | Depth | 边缘保持型空间平滑,效果好 | 空间平滑类 |
SpatialFastFilter | Depth | 快速空间平滑,CPU 占用低 | 空间平滑类 |
SpatialModerateFilter | Depth | 均衡速度与质量的空间平滑 | 空间平滑类 |
HoleFillingFilter | Depth | 填充深度图中的空洞 | 空间平滑类 |
TemporalFilter | Depth | 融合相邻帧数据,时序平滑 | 时序平滑类 |
注意:NoiseRemovalFilter在SDK内部自动调用,仅可控制使能或调节相关参数,不可单独创建。其他所有 Filter 均为公开类型,无需激活码,直接创建即可使用。
同步处理(推荐,适合大多数场景)
auto outFrame = filter->process(inFrame);
if(outFrame) {
// 使用处理后的帧
}
异步处理(适合高帧率或流水线场景)
// 设置回调,处理完成后自动触发
filter->setCallBack([](std::shared_ptr<ob::Frame> outFrame) {
if(outFrame) {
// 使用处理后的帧
}
});
// 将帧推入 Filter 的处理队列
filter->pushFrame(inFrame);
⚠ 注意:`process()` 在某些情况下会返回 `nullptr`,调用后必须判断返回值是否为空再使用。