Упорядоченное сглаживание — это любой алгоритм сглаживания изображения , который использует предустановленную пороговую карту, наложенную на изображение. Обычно используется для отображения непрерывного изображения на дисплее с меньшей глубиной цвета . Например, Microsoft Windows использует его в 16-цветных графических режимах. Алгоритм характеризуется заметными перекрестными узорами в результате.
Алгоритм уменьшает количество цветов, применяя пороговую карту M к отображаемым пикселям, в результате чего некоторые пиксели меняют цвет в зависимости от расстояния исходного цвета от доступных цветовых записей в сокращенной палитре.
Первые пороговые карты были разработаны вручную, чтобы минимизировать разницу восприятия между изображением в оттенках серого и его двухбитным квантованием для матрицы размером до 4x4. [1]
Оптимальная пороговая матрица — это та, которая для любого возможного квантования цвета имеет минимально возможную текстуру, так что наибольшее впечатление от базовой особенности исходит от квантуемого изображения. Можно доказать, что для матриц, длина стороны которых является степенью двойки, существует оптимальная пороговая матрица. [2] Карту можно вращать или зеркально отображать, не влияя на эффективность алгоритма.
Эта пороговая карта (для сторон с длиной, равной степени двойки ) также известна как матрица Байера или, если не масштабирована, индексная матрица . Для пороговых карт, размеры которых являются степенью двойки, карта может быть сгенерирована рекурсивно с помощью:
где — матрицы из единиц , а — произведение Кронекера .
Хотя предложенная Байером метрика текстуры может быть использована для поиска оптимальных матриц для размеров, не являющихся степенью двойки, такие матрицы встречаются редко, поскольку не существует простой формулы для их нахождения, а относительно небольшие размеры матриц часто дают превосходные практические результаты (особенно в сочетании с другими модификациями алгоритма дизеринга).
Эту функцию можно также выразить, используя только битовую арифметику: [3]
M(i, j) = битовое_обратное(битовое_чередование(побитовое_исключающее_ИЛИ(i, j), i)) / n ^ 2
Вместо того чтобы хранить пороговую карту в виде матрицы целых чисел × от 0 до , в зависимости от конкретного оборудования, используемого для выполнения сглаживания, может быть полезно предварительно вычислить пороговые значения карты в формате с плавающей точкой, а не в традиционном формате целочисленной матрицы, показанном выше.
Для этого можно использовать следующую формулу:
Mpre(i,j) = Mint(i,j) / n^2
Это создает стандартную пороговую матрицу.
для карты 2×2:
это создает предварительно рассчитанную карту:
Кроме того, нормализацию значений для приведения их суммы к среднему значению 0 (как это делается в алгоритме сглаживания, показанном ниже) можно выполнить во время предварительной обработки, вычитая 1 ⁄ 2 наибольшего значения из каждого значения:
Mpre(i,j) = Mint(i,j) / n^2 – 0,5 * maxValue
создание предварительно рассчитанной карты:
Алгоритм упорядоченного сглаживания визуализирует изображение обычным образом, но для каждого пикселя он смещает его значение цвета на соответствующее значение из пороговой карты в соответствии с его местоположением, в результате чего значение пикселя квантуется в другой цвет, если оно превышает пороговое значение.
Для большинства целей сглаживания достаточно просто добавить пороговое значение к каждому пикселю (без выполнения нормализации путем вычитания 1 ⁄ 2 ) или, что эквивалентно, сравнить значение пикселя с порогом: если значение яркости пикселя меньше числа в соответствующей ячейке матрицы, нанести этот пиксель черным, в противном случае нанести его белым. Такое отсутствие нормализации немного увеличивает среднюю яркость изображения и приводит к тому, что почти белые пиксели не подвергаются сглаживанию. Это не является проблемой при использовании палитры оттенков серого (или любой палитры, где относительные цветовые расстояния (почти) постоянны), и часто это даже желательно, поскольку человеческий глаз воспринимает различия в более темных цветах точнее, чем в более светлых, однако это дает неверные результаты, особенно при использовании небольшой или произвольной палитры, поэтому следует отдать предпочтение надлежащей нормализации.
Другими словами, алгоритм выполняет следующее преобразование для каждого цвета c каждого пикселя: где M ( i , j ) — пороговая карта в i -й строке и j -м столбце, c ′ — преобразованный цвет, а r — величина разброса в цветовом пространстве. Предполагая палитру RGB с 2 3 N равномерно разнесенными цветами, где каждый цвет (тройка значений красного, зеленого и синего) представлена октетом от 0 до 255, обычно выбирают . ( 1 ⁄ 2 — снова нормализующий член.)
Поскольку алгоритм работает с отдельными пикселями и не имеет условных операторов, он очень быстр и подходит для преобразований в реальном времени. Кроме того, поскольку расположение шаблонов дизеринга всегда остается неизменным относительно кадра дисплея, он менее подвержен дрожанию, чем методы диффузии ошибок, что делает его пригодным для анимации. Поскольку шаблоны более повторяющиеся, чем метод диффузии ошибок, изображение с упорядоченным дизерингом сжимается лучше. Упорядоченный дизеринг больше подходит для штриховой графики, поскольку он приведет к более прямым линиям и меньшему количеству аномалий.
Значения, считываемые с карты порога, предпочтительно должны масштабироваться в том же диапазоне, что и минимальная разница между отдельными цветами в целевой палитре. Эквивалентно, размер выбранной карты должен быть равен или больше, чем отношение исходных цветов к целевым цветам. Например, при квантовании изображения 24 bpp до 15 bpp (256 цветов на канал до 32 цветов на канал), наименьшая выбранная карта будет 4×2 для соотношения 8 (256:32). Это позволяет выразить каждый отдельный тон входных данных с помощью различных шаблонов дизеринга. [ необходима цитата ]
This section is empty. You can help by adding to it. (July 2021) |
Подход матрицы порогового уровня описывает семейство алгоритмов упорядоченного дизеринга Байера . Также известно несколько других алгоритмов; они обычно включают изменения в матрице порогового уровня, эквивалентные «шуму» в общих описаниях дизеринга.
Полутоновое сглаживание представляет собой форму кластерного сглаживания, создавая вид, похожий на полутоновые узоры, с использованием специально созданной матрицы.
Алгоритм Void and cluster использует предварительно сгенерированный синий шум в качестве матрицы для процесса дизеринга. [4] Матрица синего шума сохраняет хорошее высокочастотное содержимое Байера, но при более равномерном покрытии всех задействованных частот показывает гораздо меньшее количество паттернов. [5]
Метод «пустоты и кластер» получил свое название от процедуры генерации матрицы, где черное изображение со случайно инициализированными белыми пикселями размывается по Гауссу, чтобы найти самые яркие и самые темные части, соответствующие пустотам и кластерам. После нескольких обменов, которые равномерно распределят яркие и темные части, пиксели нумеруются по важности. Для генерации матрицы синего шума требуются значительные вычислительные ресурсы: на современном компьютере матрица 64×64 требует пары секунд при использовании оригинального алгоритма. [6]
Этот алгоритм можно расширить, чтобы сделать анимированные маски дизеринга, которые также учитывают ось времени. Это делается путем запуска алгоритма в трех измерениях и использования ядра, которое является продуктом двумерного гауссовского ядра на плоскости XY и одномерного гауссовского ядра на оси Z. [7]
Имитация отжига может генерировать маски дизеринга, начиная с плоской гистограммы и меняя значения для оптимизации функции потерь. Функция потерь управляет спектральными свойствами маски, позволяя ей создавать синий шум или шумовые паттерны, предназначенные для фильтрации определенными фильтрами. Алгоритм также может быть расширен с течением времени для анимированных масок дизеринга с выбранными временными свойствами. [8]