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