Сглаживание и гамма-компенсация - PullRequest
7 голосов
/ 10 февраля 2010

Яркость пикселей на экране компьютера обычно линейно не связана с цифровыми значениями триплета RGB пикселя. Нелинейный отклик ранних ЭЛТ требовал компенсационного нелинейного кодирования, и мы продолжаем использовать такие кодировки сегодня.

Обычно мы создаем изображения на экране компьютера и используем их там, поэтому все работает нормально. Но когда мы антиалиас, нелинейность & ndash; называется гамма & mdash; означает, что мы не можем просто добавить альфа-значение от 0,5 до 50% покрытого пикселя и ожидать, что оно будет выглядеть правильно. Альфа-значение 0,5 составляет всего 0,5 ^ 2,2 = 22% столь же ярко, как альфа-1,0 с типичной гаммой 2,2.

Существует ли какой-либо широко распространенный передовой опыт по сглаживанию гамма-компенсации? У вас есть метод домашних животных, который вы используете изо дня в день? Кто-нибудь видел какие-либо исследования результатов и восприятия человеком качества графического вывода различными методами?

Я думал о выполнении стандартной компенсации X ^ (1 / 2.2), но это довольно интенсивно в вычислительном отношении. Возможно, я смогу сделать это быстрее с помощью таблицы поиска с 256 записями.

Ответы [ 4 ]

2 голосов
/ 01 апреля 2010

Джим Блиннс - Книга «Грязные пиксели» описывает быстрое и хорошее вычисление композитинга с использованием 16-битных математических таблиц и таблиц поиска, чтобы точно вернуться и перейти к линейному цветовому пространству. Этот парень работал над визуализацией НАСА, он знает свои вещи.

2 голосов
/ 05 февраля 2014

Я пытаюсь ответить, хотя в основном для справки, на актуальные вопросы:

Во-первых, есть рекомендации МСЭ (http://www.itu.int/rec/T-REC-H.272-200701-I/en), которые можно применить к программированию (но вы должны знать свои вещи).

В книге Джима Блинна «Нотация, нотация, нотация», глава 9, содержится очень подробный математический анализ и анализ ошибок восприятия, хотя он охватывает только наложение (многие другие графические задачи также затрагиваются).

Обозначение, которое он устанавливает, может также использоваться для определения способа обращения с гаммой или для проверки того, является ли данный способ действия действительно правильным. Очень удобный метод моего питомца (в основном, как я обнаружил его самостоятельно, но позже нашел его книгу).

1 голос
/ 12 февраля 2010

Таблицы поиска довольно часто используются для такой работы. Они маленькие и быстрые.

Но независимо от того, ищите ли вы или какую-то формулу, если конечный результат представляет собой файл изображения, а формат позволяет, лучше сохранить цветовой профиль или хотя бы значение гаммы в файле для последующего просмотра, а не пытаться настроить RGB ценит себя.

Причина: для типичных байтовых каналов R, G, B у вас есть 256 уникальных значений в каждом канале в каждом пикселе. Это почти достаточно хорошо, чтобы хорошо выглядеть человеческим глазом (я бы хотел, чтобы «байт» был определен как девять битов!). Любой вид математики, кроме тривиальной инверсии значений, отображал бы многие в один для некоторых из этих значений. Вывод не будет иметь 256 значений для выбора для каждого пикселя для R, G или B, но гораздо меньше. Это может привести к возникновению контуров, неровностей, цветового шума и других плохих.

Проблемы точности в стороне, если требуется какой-либо приличный уровень качества, все компостирование, микширование, смешивание, коррекция цвета, добавление бликов на поддельных линзах, хроматизация и все остальное должны выполняться в линейном пространстве RGB, где значения R , G и B пропорциональны интенсивности физического света. Образ математики имитирует физический свет математики. Но там, где предельная скорость жизненно важна, есть способы обмануть.

0 голосов
/ 05 февраля 2014

При генерации изображений обычно работает в линейном цветовом пространстве (например, линейном RGB или одном из цветовых пространств CIE), а затем в конце преобразуется в нелинейное пространство RGB. Это преобразование может быть ускорено в аппаратном обеспечении или с помощью справочных таблиц или даже с помощью сложной математики. (См. Ссылки на другие ответы.)

При выполнении альфа-наложения (например, рендеринг этого значка на этот фон) такая точность часто не учитывается в пользу скорости. Результаты вычисляются непосредственно в нелинейном RGB-пространстве, используя параметр альфа в качестве параметра. Это не «правильно», но в большинстве случаев достаточно. Специально для таких вещей, как значки на рабочих столах.

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

Многие графические системы в настоящее время используют sRGB в качестве нелинейного цветового пространства дисплея. Если я правильно помню, sRGB очень похож на гамму 2.2, но есть изменения, внесенные в значения на нижнем уровне.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...