Альтернативы дизеринга Флойда – Стейнберга для пиксельных шейдеров - PullRequest
11 голосов
/ 30 октября 2010

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

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

Кстати.Многопроходные алгоритмы допускаются до тех пор, пока не пройдет не более 2 проходов, а загрузка ЦП между этими проходами невелика.

Есть идеи?

РЕДАКТИРОВАТЬ:
Iнужно размывание от 24-битного цвета до 21-битного цвета.
(То есть - мне нужно преобразовать 8 бит / канал в 7 бит / канал.)

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

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

Ответы [ 2 ]

4 голосов
/ 04 ноября 2010

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

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

alt text

2 голосов
/ 07 ноября 2010

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

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

...