首页 > 解决方案 > 解压缩图像时多像素操作的高效设计

问题描述

我维护了一个图像编解码器,该编解码器需要使用不同数量的简单像素操作对图像进行后处理:例如,增益、颜色变换、缩放、截断。一些操作在单个通道上工作,而其他操作(颜色变换)一次在三个通道上工作。

当图像被解码时,它以平面格式存储,每个通道一个缓冲区。

我想用 c++ 设计一个高效的框架,可以应用指定的一系列像素操作。由于这是内部循环,我需要它高效——像素操作应该是内联的,并且分支最少。

最简单的方法是拥有一个包含 20 个操作数的固定数组,并将该数组与实际操作数一起传递给后处理方法。有人可以提出更聪明的方法吗?

编辑:为了提高效率,这将是一个块操作,我确实计划使用 SIMD 来加速。因此,对于每个像素,我想使用 SIMD 指令有效地执行可配置的像素操作序列。

标签: c++templatesgraphicspixel

解决方案


我不建议在像素级别执行管道,这将非常低效(并且不适用于某些操作),对整个图像执行此操作。

正如您所建议的,将操作序列和相关参数编码为列表并编写一个简单的执行引擎来调用所需的函数是一件容易的事。

可能您的一些操作是就地完成的,而其他一些操作需要额外的缓冲区。您将需要添加合适的缓冲区管理。没有什么不可逾越的。


推荐阅读