解压缩图像时多像素操作的高效设计

问题描述

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

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

我想在c ++中设计一个有效的框架,该框架可以应用一系列指定的像素操作。由于这是内部循环,因此我需要使其高效-像素操作应该以最少的分支内联。

最简单的方法是有一个固定的数组(例如20个操作数),然后将带有实际操作数的该数组传递给后处理方法。有人可以建议一种更聪明的方法吗?

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

解决方法

我不建议在像素级别执行流水线,因为这样做效率极低(并且不适用于某些操作),请对整个图像执行。

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

您的某些操作可能是就地完成的,而其他一些则需要额外的缓冲区。您将需要添加适当的缓冲区管理。没有 无法克服的。