0

我想要的(基本上)与“对图像的所有像素求和”相同。然而,着色器似乎无法实现这一点(我认为这就是我要问的原因;-)):

我想传递图像+一个参数“treeshold”并检查图像的每个像素是否该像素(R,G,B)在阈值(R+/-,G+/-,B+/-)中。

IS IN 操作没问题,没什么复杂的。

问题是我需要在图像中完成此操作的所有像素(计数)的总和。

使用着色器的想法是尽量减少这种计算,因为在 CPU 中非常昂贵(此外,我们必须多次重复这种计算)。

一个想法是,如果像素未达到,则将向量 (0,0,0) 作为输出,如果像素达到,则将 (1,0,0) 作为输出,然后在软件中对所有第一个通道求和。

即使这比仅使用软件更快,我们仍然在旅行一个 NXM 图像作为总和。

另一种方法(不太准确)是对(例如)10 个相邻像素执行此操作(如果“我是邻居”则省略计算)。然后我们只会对每个 10 个位置的数组求和。我们使速度提高了 10 倍,但是,我们仍然有 O(N*M)。

另外,我相信我们可以使用这样的东西,但我很不明白如何在像素弯曲 器中使用它所有像素的高效像素着色器总和

在此先感谢您提供任何其他解决方案。

4

1 回答 1

0

您可能需要考虑分而治之的方法,多次运行过滤器。

一种可能性是编写一个过滤器,从[(coord.x * 10.0), (coord.y * 10.0)]

每次通过,此过滤器都会将您关心的区域减少到 1/10。

因此,Flash 中可能的最大图像尺寸为 8192 像素,您必须运行此过滤器四次才能在左上角像素中获得答案。

您可以通过多种方式对其进行优化。首先是第一次之后的每次运行,您可以将前一个输出图像的左上角十分之一传递给它,因此每次运行只需处理1%的像素;第二个是您可以传入包含图像宽度和高度 1/10 的 Float2 参数,并让您的代码跳过求和,如果 coord.x 或 coord.y 不在此范围内,则只需将输出像素设置为 0。

通过这些优化,您的第一遍将读取每个像素;第二个将读取 1% 的像素;第三个读数为 0.01%;最终读数为 0.0001%。因此,第一次之后的所有通过都不应该给您的处理时间增加太多。

这一切都假设您正在使用校验和算法,该算法可以将答案压缩为单个像素,并且零不会影响结果。按位异或是理想的,但 PB 中不存在按位运算符。:(

于 2014-09-08T23:09:34.370 回答