Я реализовал метод смешивания изображений для бесшовного смешивания, используя простой C++. Теперь я хочу преобразовать этот код для GPU (используя шейдеры OpenGL ES 2 для мобильных устройств). По сути, этот метод создает гауссовы и лапласовские пирамиды для каждого изображения, которые затем комбинируются от низкого разрешения к верхнему (см. также статью «Пирамида Лапласа как компактный код изображения» Берта и др., 1983).
Моя проблема в том, что уровни лапласовской пирамиды могут иметь отрицательные значения, но мои устройства не поддерживают текстуры типа float или integer (например, с использованием расширения ORB_texture_float).
Я уже искал статьи, посвященные пирамидам на основе графических процессоров, но не нашел ничего действительно полезного.
- Как я могу эффективно реализовать такую пирамиду для графического процессора?
- Можно ли рассчитать уровень пирамиды Гаусса/Лапласа без повторения предыдущих уровней?
С уважением,
РЕДАКТИРОВАТЬ Кажется, что нет "хорошего" способа полностью вычислить лапласовские пирамиды на графическом процессоре, за исключением использования двух проходов (один для знаков, один для значений), которые не поддерживают ни знаковые типы (для экземпляр ARB_texture_float) или типы больше байта, когда диапазон данных изображения находится между [0..255]. Моя лапласианская пирамида отлично работает на графических процессорах с расширением ARB_texture_float, но без расширения (и некоторых настроек для сжатия диапазона) пирамида становится «неправильной» из-за сжатия диапазона.