Optimization 所有像素的像素弯曲计算结果

Optimization 所有像素的像素弯曲计算结果,optimization,image-processing,pixel-shader,pixel-bender,Optimization,Image Processing,Pixel Shader,Pixel Bender,我想要的是(基本上)与“一幅图像的所有像素总和”相同。 然而,这似乎不能通过着色器实现(我想这就是为什么我要问;-): 我想传递image+a参数“treeshold”,并检查图像的每个像素(R,G,B)是否在treshold(R+/-,G+/-,B+/-)中 机器运转正常,没什么复杂的 问题是,我需要在图像中完成此操作的所有像素(计数)的总和 使用着色器的想法是最小化此计算,因为在CPU中非常昂贵(此外,我们必须多次重复此计算) 一个想法是,如果像素未达到,则将向量(0,0,0)作为输出,如果

我想要的是(基本上)与“一幅图像的所有像素总和”相同。 然而,这似乎不能通过着色器实现(我想这就是为什么我要问;-):

我想传递image+a参数“treeshold”,并检查图像的每个像素(R,G,B)是否在treshold(R+/-,G+/-,B+/-)中

机器运转正常,没什么复杂的

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

使用着色器的想法是最小化此计算,因为在CPU中非常昂贵(此外,我们必须多次重复此计算)

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

即使这比只使用软件更快,我们仍然在使用NXM图像来求和

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

此外,我相信我们可以使用这样的东西,但我很不明白如何在像素弯曲使用这个


预先感谢任何其他解决方案。

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

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

每通过一次,这个过滤器将把你关心的面积减少到十分之一

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

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

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


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

使用计算着色器更容易做到这一点,您可以对图像块进行操作,然后使用原子组合结果。您的目标是什么平台/硬件?您好,我不明白您的答案。我们正在使用Flash(pxiel bender),Flas对像素弯曲器有几个重要的限制,特别是除了“if”和“else”之外,你没有循环或任何其他控制结构,如果我们有,我可以用一个简单的for和askinf来计算“nearest”像素。谢谢。