Эффективная сумма пиксельных шейдеров всех пикселей - PullRequest
7 голосов
/ 31 мая 2010

Как эффективно рассчитать сумму всех пикселей на изображении, используя пиксельный шейдер HSLS? Меня интересует Pixel Shader 2.0, который я могу вызвать как эффект шейдера WPF.

Ответы [ 3 ]

6 голосов
/ 15 июля 2010

Существует гораздо более простое решение, в котором не используются шейдеры: загрузите изображение в качестве текстуры, создайте цепочку mipmap и прочитайте значение последнего mipmap (1x1 пиксель). Этот прием широко используется в играх для расчета, например, средней яркости сцены (для применения тонального отображения HDR). Это отличный трюк, если вы цените простоту и эффективность, а не точность.

3 голосов
/ 01 сентября 2010

Предполагая, что вы хотите суммировать значения каналов r / g / b в изображении (и предполагая, что вы можете уничтожить исходные пиксели) - вот мое частичное решение:

  1. Каждый 10-й пиксель будет вычислять среднее значениецвета 10 соседних пикселей и поместите этот усредненный цвет на изображение.
  2. Затем в сторону от суммы процессора
    Pix_Value*10
    каждого 10-го пикселя.

В этом случае мы получаем скорость примерно в 10 разпо сравнению с суммированием значений пикселей только на стороне процессора.

0 голосов
/ 02 июня 2010

Эффекты в WPF гораздо больше подходят для получения визуального результата. Звучит так, как будто вы хотите использовать их для другого типа расчетов, для этого вам нужно будет обработать результат изображения как данные, для этого потребуется RenderTargetBitmap, который в любом случае будет выполнен в программном обеспечении. Возможно, вы захотите взглянуть на эти проекты, разработанные для GPGPU.

Accelerator

Брахма

OpenTK Я не знаю состояния привязок OpenCL в OpenTK. Также стоит взглянуть на другие технологии, такие как DirectCompute и CUDA.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...