2010-10-30 4 views
10

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

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

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

Любые идеи?

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

EDIT 2 Может быть, я не объяснил проблему очень хорошо. Поэтому я попытаюсь немного развернуть точную проблему. Проблема заключается в следующем - считайте мы имеем такую ​​картину:
alt text
И мы имеем над картиной, но обрабатываются сглаживание алгоритма:
alt text
Теперь это процедура, которая проверит ваше Смешение хорошо для меня или нет:
1. Загрузите эти фотографии в Photoshop как одно изображение с двумя слоями.
2. Выберите режим смешивания слоев на «Разница».
3. Выполните операцию «Слияние видимых» на слоях, чтобы получить только один слой.
4. Выполните операцию => Image/Adjustments/Уравнять

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

+0

У меня возникли проблемы с пониманием вашего результата. Разностное изображение подразумевает, что вывод Floyd-Steinberg содержит компоненты со значениями 0 и 255, но это не имеет смысла с 7 битами; он должен быть 0 и 254, или 1 и 255. Если вы не используете четные цвета от 0 до 126 и нечетные от 129-255? –

+0

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

+0

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

ответ

2

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

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

+0

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

3

Вы можете использовать ordered 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

+0

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

+0

@ 0x69, я признался в ответе, что выход грубый. Можете ли вы рассказать нам, какую битовую глубину вы создаете, и какую палитру вы используете, если таковая имеется? –

+0

См. Мое редактирование ... –

Смежные вопросы