0

我在我的项目中使用 GPUImage,我需要一种有效的方法来获取列总和。天真的方式显然是检索原始数据并添加每一列的值。有人可以为此提出更快的方法吗?

4

1 回答 1

1

一种方法是使用我对 GPUImageAverageColor 类采取的方法(如本答案中所述),而不是在每一步减少每个帧的总大小,只对图像的一个维度执行此操作。

平均滤色器通过在 X 和 Y 上降低四倍来确定整个图像的平均颜色,每一步平均 16 个像素为一个。如果在单个方向上操作,您应该能够使用硬件插值在单个方向上每步减少 18 倍,并具有良好的性能。您的最后一步可能需要在小得多的图像上进行基于 CPU 的快速迭代,或者需要调整此着色器的版本,将列中的最后几个像素拉到该列的最终结果像素中。

您注意到我在这里一直在谈论平均,因为任何 OpenGL ES 操作的输出值都需要以颜色表示,每个通道只有 0-255 范围。总和很容易溢出,但您可以使用平均值作为总和的近似值,动态范围更有限。

如果您只关心一个颜色通道,您可以将更大的值编码到 RGBA 通道中,并以这种方式保持 32 位和。

除了我上面描述的之外,您可以在 Accelerate 框架的帮助下查看执行此总和。虽然可能不如基于着色器的减少那么快,但它可能足以满足您的需求。

于 2012-10-12T18:16:11.330 回答