У меня есть приложение, в котором мне нужно взять среднюю интенсивность изображения примерно для 1 миллиона изображений. Это «ощущается» как работа для фрагментного шейдера графического процессора, но фрагментные шейдеры предназначены для попиксельных локальных вычислений, а усреднение изображения - это глобальная операция.
Один из подходов, который я рассмотрел, - это загрузка изображения в текстуру, применение блочного размытия 2x2, загрузка результата обратно в текстуру N / 2 x N / 2 и повторение до тех пор, пока результат не станет 1x1. Однако для этого потребуется log n приложений шейдера.
Есть ли способ сделать это за один проход? Или мне просто сломаться и использовать CUDA / OpenCL?