Я знаю, что алгоритм Floyd-Steinberg dithering не может быть реализован с помощью пиксельного шейдера, потому что этот алгоритм является строго последовательным. Но, может быть, существует какой-то алгоритм с высокой степенью параллелизма, который по его визуальному выводу аналогичен алгоритму Флойда-Штайнберга?
Итак, вопрос в том, что такое алгоритмы сглаживания, которые подходят для реализации на пиксельных шейдерах (желательно GLSL) и с качеством вывода (очень), аналогичным сглаживанию Флойда-Штайнберга?
BTW. Многопроходные алгоритмы разрешены до тех пор, пока не будет более двух проходов, а накладные расходы процессора между этими проходами будут незначительными.
Любые идеи?
EDIT:
Мне нужно сглаживание с 24-битного цвета до 21-битного цвета.
(Это - мне нужно преобразовать из 8 бит/канал в 7 бит/канал.)
РЕДАКТИРОВАТЬ 2
Возможно, я не очень хорошо объяснил проблему. Поэтому я попытаюсь немного развернуть точную проблему.
Проблема в этом - считаем, что у нас есть эта картина:
И у нас есть над картиной, но обработан с помощью алгоритма сглаживания:
Теперь это процедура, которая будет проверять ваше сглаживание, хорошо для меня или нет:
1. Загрузите эти фотографии в Photoshop как одно изображение с двумя слоями.
2. Выберите режим смешивания слоев на "Разница".
3. Выполните операцию "Слияние видимых" на слоях, чтобы получить только один слой.
4. Выполнить операцию = > Изображение/Коррекция/Уравнивание
После этого вы должны получить такой образ:
Как вы видите - средние пиксели, которые были в монотонном красном цвете, вообще не были утеряны.
Также сглаживание левого и правого зон изображения немного отличается. Попробуйте восстановить алгоритм сглаживания с таким поведением.