Подтвердить что ты не робот

Альтернативы смешения Floyd-Steinberg для пиксельных шейдеров

Я знаю, что алгоритм Floyd-Steinberg dithering не может быть реализован с помощью пиксельного шейдера, потому что этот алгоритм является строго последовательным. Но, может быть, существует какой-то алгоритм с высокой степенью параллелизма, который по его визуальному выводу аналогичен алгоритму Флойда-Штайнберга?

Итак, вопрос в том, что такое алгоритмы сглаживания, которые подходят для реализации на пиксельных шейдерах (желательно GLSL) и с качеством вывода (очень), аналогичным сглаживанию Флойда-Штайнберга?

BTW. Многопроходные алгоритмы разрешены до тех пор, пока не будет более двух проходов, а накладные расходы процессора между этими проходами будут незначительными.

Любые идеи?

EDIT:
Мне нужно сглаживание с 24-битного цвета до 21-битного цвета.
(Это - мне нужно преобразовать из 8 бит/канал в 7 бит/канал.)

РЕДАКТИРОВАТЬ 2 Возможно, я не очень хорошо объяснил проблему. Поэтому я попытаюсь немного развернуть точную проблему. Проблема в этом - считаем, что у нас есть эта картина:
alt text
И у нас есть над картиной, но обработан с помощью алгоритма сглаживания:
alt text
Теперь это процедура, которая будет проверять ваше сглаживание, хорошо для меня или нет:
1. Загрузите эти фотографии в Photoshop как одно изображение с двумя слоями.
2. Выберите режим смешивания слоев на "Разница".
3. Выполните операцию "Слияние видимых" на слоях, чтобы получить только один слой.
4. Выполнить операцию = > Изображение/Коррекция/Уравнивание

После этого вы должны получить такой образ:
alt text
Как вы видите - средние пиксели, которые были в монотонном красном цвете, вообще не были утеряны. Также сглаживание левого и правого зон изображения немного отличается. Попробуйте восстановить алгоритм сглаживания с таким поведением.

4b9b3361

Ответ 1

Если вы уменьшаете от 8 бит до 7, вы почти не теряете информацию. Вы уверены, что вам даже нужно смять?

Если вам нужно сгладить, добавьте случайный шум, а затем клип, это будет очень полезно для вашего приложения.

Ответ 2

Вы можете использовать упорядоченный сглаживание. Это более грубо выглядящий, чем Флойд-Штайнберг, но нет зависимости между пикселями.

Изменить: Поскольку вы удаляете только один бит, это становится почти тривиальным. Принцип, лежащий в основе упорядоченного сглаживания, заключается в создании шаблона, который смещает порог перехода; в этом случае смещение будет 0 или 1, а шаблон будет 2x2 пикселя. Эти два изменения вместе сделают шаблон намного менее неприятным, чем тот, который содержится в статье в Википедии - вам может понравиться это лучше, чем Флойд-Штайнберг.

Вот некоторый псевдокод:

bias = (X xor Y) and 0x01
value = pixel + bias
if value > 255: value = 255
pixel = value and 0x7e

Изменить 2: Здесь мой результат разницы, насколько я могу это сделать. Не зная, как вы перенаправляете свои 7-битные значения обратно на 8 бит, я не могу сделать лучше.

alt text