WikiDer > Заказное дизеринг
Заказное дизеринг это изображение дизеринг алгоритм. Обычно он используется для отображения непрерывного изображения на дисплее меньшего размера. глубина цвета. Например, Майкрософт Виндоус использует его в 16-цветных графических режимах. Для алгоритма характерны заметные штриховки в результате.
Карта пороговых значений
Алгоритм уменьшает количество цветов, применяя пороговую карту M к отображаемым пикселям, в результате чего некоторые пиксели меняют цвет в зависимости от расстояния исходного цвета от доступных записей цвета в уменьшенной палитре.
Карты пороговых значений бывают разных размеров:
Карту можно повернуть или отразить, не влияя на эффективность алгоритма. Эта пороговая карта (для сторон длиной как сила двух) также известен как индексная матрица или же Матрица Байера.[1]
Карты порогов произвольного размера могут быть созданы с помощью простого правила: сначала заполните каждый слот последовательными целыми числами. Затем измените их порядок так, чтобы среднее расстояние между двумя последовательными числами на карте было как можно большим, гарантируя, что таблица «оборачивается» по краям.[нужна цитата] Для карт пороговых значений, размерность которых равна степени двойки, карту можно создать рекурсивно с помощью:
Рекурсивное выражение можно вычислить явно, используя только битовую арифметику:[2]
M (i, j) = bit_reverse (bit_interleave (bitwise_xor (i, j), i)) / n ^ 2
Предварительно рассчитанные карты пороговых значений
Вместо того, чтобы хранить карту как матрицу × целые числа от 0 до В зависимости от конкретного оборудования, используемого для выполнения дизеринга, может быть полезно предварительно рассчитать пороги карты. Для этого можно использовать следующую формулу:
Mpre (i, j) = (Mint (i, j) +1) / n ^ 2
Это генерирует стандартную пороговую матрицу.
для карты 2 × 2:
это создает предварительно рассчитанную карту:
Кроме того, вычитание с 0,5 может быть выполнено и во время предварительной обработки:
Mpre (i, j) = (Mint (i, j) +1) / n ^ 2 - 0,5
создание предварительно рассчитанной карты:
Еще один вариант - вместо этого изменить диапазон значений цвета на диапазон 0— (для ×). Однако обратите внимание, что эта операция должна выполняться один раз для каждого пикселя и, таким образом, должна выполняться только в том случае, если сохранение карты порогов в виде целых чисел (вместо чисел с плавающей запятой) имеет решающее значение.
Алгоритм
Алгоритм упорядоченного дизеринга отображает изображение нормально, но для каждого пикселя он смещает свое значение цвета на соответствующее значение из карты порогов в соответствии с его местоположением, в результате чего значение пикселя квантуется до другого цвета, если оно превышает пороговое значение.
Для большинства целей дизеринга достаточно просто добавить пороговое значение к каждому пикселю или, что эквивалентно, сравнить значение этого пикселя с порогом: если значение пикселя меньше числа в соответствующей ячейке матрицы, построить график этот пиксель черный, в противном случае нарисуйте его белым.
Это немного увеличивает среднюю яркость изображения и предотвращает размытие почти белых пикселей. Это не проблема при использовании палитры серой шкалы (или любой палитры, где относительные цветовые расстояния (почти) постоянны), и это часто даже желательно, поскольку человеческий глаз воспринимает различия в более темных цветах более точно, чем в более светлых. , он дает неверные результаты, особенно при использовании маленькой или произвольной палитры, поэтому следует отдавать предпочтение правильному смещению.
Алгоритм выполняет следующие преобразования для каждого цвета c каждого пикселя:
куда M(я, j) пороговая карта на я-й ряд и j-й столбец, c′ это преобразованный цвет, и р это величина разброса в цветовом пространстве. Предполагая палитру RGB с 23N равномерно выбранные цвета, где каждый цвет (тройка значений красного, зеленого и синего) представлен октет от 0 до 255, обычно выбирают:
Значения, считываемые с карты пороговых значений, предпочтительно должны масштабироваться в том же диапазоне, что и минимальная разница между отдельными цветами в целевой палитре.
Поскольку алгоритм работает с отдельными пикселями и не имеет условных операторов, он очень быстр и подходит для преобразований в реальном времени. Кроме того, поскольку расположение шаблонов дизеринга всегда остается неизменным относительно кадра дисплея, он менее подвержен дрожанию, чем методы распространения ошибок, что делает его пригодным для анимации. Поскольку шаблоны более повторяются, чем метод диффузии ошибок, изображение с упорядоченным дизерингом сжимается лучше. Упорядоченный дизеринг больше подходит для линейной графики, так как он приводит к более прямым линиям и меньшему количеству аномалий.
Размер выбранной карты должен быть равен или больше отношения исходных цветов к целевым. Например, при квантовании изображения с 24 бит на пиксель до 15 бит на пиксель (от 256 цветов на канал до 32 цветов на канал) наименьшая карта, которую можно было бы выбрать, будет 4 × 2 при соотношении 8 (256: 32). Это позволяет выразить каждый отдельный тон входного сигнала с помощью различных паттернов дизеринга.[нужна цитата]
Примечания
- ^ Байер, Брайс (11–13 июня 1973 г.). «Оптимальный способ двухуровневой передачи однотонных изображений» (PDF). Международная конференция IEEE по коммуникациям. 1: 11–15. Архивировано из оригинал (PDF) на 2013-05-12.
- ^ Джоэл Илилуома. «Алгоритм позиционного дизеринга с произвольной палитрой”
Рекомендации
- Заказное дизеринг (Проект курса графики, лаборатория Visgraf, Бразилия)
- Алгоритмы дизеринга (Ли Дэниэл Крокер, Пол Буле и Майк Морра)