Эффективная сумма пиксельного шейдера всех пикселей

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

7
задан luvieere 31 May 2010 в 19:56
поделиться

3 ответа

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

Accelerator

Brahma

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

-1
ответ дан 7 December 2019 в 05:18
поделиться

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

6
ответ дан 7 December 2019 в 05:18
поделиться

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

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

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

3
ответ дан 7 December 2019 в 05:18
поделиться
Другие вопросы по тегам:

Похожие вопросы: