所有像素的高效像素着色器总和

发布于 2024-09-04 00:35:14 字数 83 浏览 5 评论 0原文

如何使用 HSLS 像素着色器有效计算图像中所有像素的总和?我对 Pixel Shader 2.0 感兴趣,我可以将其作为 WPF 着色器效果进行调用。

How can I efficiently calculate the sum of all pixels in an image, by using a HSLS pixel shader? I'm interested in Pixel Shader 2.0, that I could invoke as a WPF shader effect.

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(3

何处潇湘 2024-09-11 00:35:14

有一个更简单的解决方案,不使用着色器:将图像加载为纹理,创建 mipmap 链并读回最后一个 mipmap 的值(1x1 像素)。此技巧在游戏中广泛用于计算场景的平均亮度等(以便应用 HDR 色调映射)。如果您重视简单性和效率而不是准确性,那么这是一个很好的技巧。

There is a much simpler solution that doesn't use shaders: load the image as a texture, create a mipmap chain and read back the value of the last mipmap (1x1 pixel). This trick is used in games extensively to calculate, for example, the average brigthness of a scene (in order to apply HDR tonemapping). It's a great trick if you value simplicity and efficiency over accuracy.

压抑⊿情绪 2024-09-11 00:35:14

假设您想要对图像中的 r/g/b 通道值求和(并假设您可以破坏原始像素) - 这是我的部分解决方案:

  1. 每个第 10 个像素将计算 10 个相邻像素的平均颜色并将该平均颜色放在图像上。
  2. 然后在CPU端对每个第10个像素求和
    Pix_Value*10

在这种情况下,与仅在 CPU 端求和像素值相比,我们获得了约 10 倍的加速。

Assuming that you want to sum r/g/b channel values in image (and assuming that you can destroy original pixels) - here is my partial solution:

  1. Each 10th pixel would calculate average color of 10 neighboring pixels and put this averaged color on image.
  2. Then in CPU side sum
    Pix_Value*10

    of each 10th pixel.

In this case we get about 10x speed-up compared to summing pixel values only in CPU side.

诗化ㄋ丶相逢 2024-09-11 00:35:14

WPF 中的效果更适合产生视觉效果。听起来您想将它们用于不同类型的计算,为此您需要将图像结果视为数据,这需要 RenderTargetBitmap ,无论如何这都将在软件中完成。
您可能想看看这些为 GPGPU 设计的项目。

加速器

Brahma

OpenTK 我不知道 OpenCL 的状态OpenTK 中的绑定。 DirectCompute 和 CUDA 等其他技术也可能值得一看。

Effects in WPF are much more suited to producing visual result. It sounds like you want to use them for a different type of calculation, to do this you would need to treat the image result as data this would need RenderTargetBitmap which would be done in software anyway.
You might want to look at these projects designed for GPGPU.

Accelerator

Brahma

OpenTK I dont know the state of the OpenCL bindings in OpenTK. Other technologies such as DirectCompute and CUDA might be worth a look too.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文