后处理滤波简介

1. Filter 是什么

Filter(滤波器)是 OrbbecSDK v2 提供的后处理模块,用于对传感器输出的原始帧进行处理,常见用途包括:

去除深度图中的噪声和空洞

对深度图进行空间/时序平滑

对图像进行下采样,降低分辨率以减少数据量、提升后续处理性能

将深度流与彩色流进行软件方式对齐

转换帧的像素格式

生成点云数据

注意:Filter 不只针对深度流(Depth),部分 Filter 适用于彩色流(Color)或红外流(IR),使用时请注意各 Filter 的适用流类型。

 

2. 两种使用方式

方式

说明

适用场景

直接创建 Filter

明确指定要使用哪个 Filter,自行设置参数

需要精细控制,定制化场景

推荐 Filter 列表

通过指定 Sensor 获取,SDK 针对该   Sensor 的流类型返回推荐的 Filter 组合,只能处理对应流类型的帧

快速集成,通用场景

提示:不确定设备支持哪种?不确定选哪种?建议先从“推荐 Filter 列表”入手,能快速跑通;需要定制时再使用“直接创建”。

 

3. 全部 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 均为公开类型,无需激活码,直接创建即可使用。


4. 帧处理的两种模式

同步处理(推荐,适合大多数场景)

auto outFrame = filter->process(inFrame);

if(outFrame) {

    // 使用处理后的帧

}

异步处理(适合高帧率或流水线场景)

// 设置回调,处理完成后自动触发

filter->setCallBack([](std::shared_ptr<ob::Frame> outFrame) {

    if(outFrame) {

        // 使用处理后的帧

    }

});

 

// 将帧推入 Filter 的处理队列

filter->pushFrame(inFrame);

注意:`process()` 在某些情况下会返回 `nullptr`,调用后必须判断返回值是否为空再使用。