Альтернативы смешивания Флойда-Штейнберга для пиксельного шейдера

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

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

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

какие идеи ?

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

EDIT 2 Возможно, я не очень хорошо объяснил проблему. Поэтому я попытаюсь немного расширить проблему. Проблема это-рассмотрим у нас такую картину:
alt text
и у нас есть выше изображение, но обрабатывается с алгоритмом dithering:
alt text
теперь это процедура, которая проверит ваше колебание хорошо для меня или нет:
1. Загрузите эти фотографии в Photoshop как одно изображение с 2 слоями.
2. Выберите режим наложения слоев в "Difference".
3. Выполните операцию "слияние видимых" слоев, чтобы получить только один слой.
4. Выполнять операции>= Изображение / Корректировки / Выравнивание

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

2 ответов


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

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


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

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

вот какой-то псевдокод:

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

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

alt text