Поделиться через


Алгоритмы создания преобразования WCS

Создание преобразований

 

Последовательное выполнение преобразования

 

Создание оптимизированных преобразований

 

ICCProfileFromWCSProfile

 

Черное сохранение и черное поколение

 

Проверка Gamut

Создание преобразований

Чтобы правильно объяснить, как работают преобразования цветов, полезно объяснить полный путь обработки с помощью ICM 2.0 и внутренних элементов CTE. Функция CreateColorTransformW ICM 2.0 создает преобразование цвета, которое приложения могут использовать для управления цветами. Эта функция создает контекст цвета из входных данных LOGCOLORSPACE и намерений. Намерения сопоставляются с базовым алгоритмом сопоставления гаммы ICC. Затем функция вызывает функцию ICM 2.0 CreateMultiProfileTransform для согласованной обработки цветов. Функция CreateColorTransform обычно копирует данные в внутреннюю оптимизированную структуру преобразования.

Функция CreateMultiProfileTransform ICM 2.0 принимает массив профилей и массив намерений или отдельный профиль связи устройства и создает преобразование цвета, которое приложения могут использовать для выполнения сопоставления цветов. Он обрабатывает эти профили ввода и намерения для создания моделей устройств, моделей внешнего вида цвета, описания границ гаммы и моделей сопоставления гамм. Вот как это сделать:

  • Модели устройств инициализированы непосредственно из профилей DM. Существует одна модель устройства, созданная для каждого профиля в вызове CreateMultiProfileTransform.
  • Модели внешнего вида цвета инициализированы непосредственно из профилей CAM. Существует один профиль CAM для каждого профиля в вызове CreateMultiProfileTransform. Однако один и тот же профиль CAM можно указать для нескольких профилей.
  • Описания границ gamut инициализированы из объекта модели устройства и объекта CAM. В вызове CreateMultiProfileTransform существует одно описание границы гаммы для каждого профиля.
  • Модели сопоставления gamut инициализированы из двух границ гаммы и намерения. Необходимо создать модель сопоставления гамм между каждой парой моделей устройств, созданных из вызова CreateMultiProfileTransform. Обратите внимание, что это означает, что вы используете одну модель карты гаммы, чем модель устройства. Так как число намерений соответствует количеству моделей устройств, существует также несколько намерений, чем требуется. Первое намерение в списке пропущено. Вы описываете список моделей устройств и намерений, создавая модели сопоставления гамм. Выберите первые и второй модели устройств и второе намерение, а затем инициализировать первую модель сопоставления гамм. Выберите второй и третий модели устройств и третье намерение, а затем инициализировать вторую модель сопоставления гамм. Продолжайте таким образом, пока не создайте все модели сопоставления гамм.

После правильной обработки профилей и создания и инициализации всех промежуточных объектов можно создать преобразование CITE с помощью следующего вызова. PDestCAM и pDestDM — это те, которые связаны с последним профилем в вызове CreateMultiProfileTransform.

HRESULT CreateCITEColorTransform(
 __inout     IDeviceModel          *pSourceDM,
 __inout     IColorAppearanceModel *pSourceCAM,
 __in        GamutMapArray         *pGamutMapArray,
 __inout     IColorAppearanceModel *pDestCAM,
 __inout     IDeviceModel          *pDestDM,
             EColorTransformMode    eTransformMode,
 __deref_out IColorTransform      **ppCTS
 );

Поддержка подключаемых модулей

Одна из проблем, связанных с настройкой списка преобразований, заключается в проверке доступности необходимого подключаемого модуля. Следующий параметр модели предоставляет эту политику для управления этим поведением. Управление этим списком преобразований — это метод в внутренней оптимизированной структуре преобразования, но каждый метод модели предоставляет указатель на себя и собственный набор значений параметров.

Режим должен быть одним из следующих.

  • TfmRobust: если профиль измерения указывает предпочтительный подключаемый модуль и подключаемый модуль недоступен, новая система CTE будет использовать базовый подключаемый модуль. Если подключаемый модуль недоступен, преобразование сообщит об ошибке.
  • TfmStrict: если ColorContext указывает предпочтительный подключаемый модуль, подключаемый модуль должен быть доступен. Если не найдено предпочтительного подключаемого модуля, будет использоваться базовый подключаемый модуль. Если подключаемый модуль недоступен, преобразование сообщит об ошибке.
  • TfmBaseline: в AddMeasurementStep можно использовать только базовые подключаемые модули. Если ColorContext указывает предпочтительный подключаемый модуль, подключаемый модуль будет игнорироваться. Если базовый подключаемый модуль недоступен, преобразование сообщит об ошибке.

Преобразование выполнения

Функция Перевода цветов ICM 2.0 преобразует массив цветов из исходного цветового пространства в целевое цветовое пространство в соответствии с преобразованием цвета. Эта функция внутренне проверяет массив кэшированных цветов, чтобы обеспечить немедленное сопоставление часто преобразованных цветов. Это преобразование поддерживает 8-разрядные массивы байтов канала и 32-разрядные массивы с плавающей запятой канала. Все остальные форматы будут преобразованы перед передачей в новый CTE.

Функция API TranslateBitmapBits ICM 2.0 преобразует цвета растрового изображения с определенным форматом для создания другого растрового изображения в запрошенном формате. Эта функция внутренне проверяет массив кэшированных цветов, чтобы обеспечить немедленное сопоставление часто преобразованных цветов. Чтобы избежать слишком большого количества путей кода, поддержки и тестирования сложности, в преобразовании и интерполяции фактически поддерживаются только ограниченное количество форматов растровых изображений. Эта функция должна преобразовываться в собственные форматы входящих и исходящих растровых изображений в собственные поддерживаемые форматы для обработки. Это преобразование поддерживает только 8-разрядные растровые карты канала и 32-разрядные растровые карты с плавающей запятой канала. Все остальные форматы будут преобразованы перед передачей в новый CTE.

 

Последовательное выполнение преобразования

Если параметр dwFlags имеет SEQUENTIAL_TRANSFORM битовое значение при вызове функций ICM CreateColorTransformW или CreateMultiProfileTransform , то шаги преобразования выполняются последовательно. Это означает, что код выполняет шаги по каждой модели устройства, цветовой модели и модели сопоставления гамм по отдельности, как указано в вызове CreateColorTransform или CreateMultiProfileTransform . Это может быть полезно для отладки модулей подключаемых модулей, но это гораздо медленнее, чем выполнение с помощью оптимизированного преобразования. Поэтому выполнение в последовательном режиме не рекомендуется для производственного программного обеспечения. Кроме того, могут быть незначительные различия в результатах, полученных в последовательном режиме и в оптимизированном режиме. Это связано с вариациями, представленными при объединениях функций.

Создание оптимизированных преобразований

Оптимизированное преобразование — это многомерная таблица подстановки. Таблица может обрабатываться многомерным механизмом интерполяции, например интерполяцией тетрахеральной, которая применяет входные цвета к преобразованию. В следующем разделе описывается создание оптимизированных таблиц подстановки. В разделе после этого описывается интерполяция в оптимизированных таблицах подстановки.

Разреженные таблицы подстановки

Обычные принтеры имеют чернила CMYK. Чтобы расширить гамму, один из способов заключается в добавлении новых чернил в систему. Чернила обычно добавляются являются цветами, которые чернила CMYK имеют трудности при воспроизведении. Распространенные варианты : оранжевый, зеленый, красный, синий и т. д. Чтобы увеличить "видимое разрешение", чернила с различными оттенками можно использовать, например, свет цин, световую магену и т. д. В действительности устройство принтера имеет более четырех каналов.

Хотя принтеры являются выходными устройствами, они также выполняют преобразование цвета из пространства устройства в другое цветовое пространство. В случае принтера CMYK это будет преобразование из CMYK в XYZ или "вперед модель" принтера. Объединяя модель пересылки с другими преобразованиями, можно эмулировать печать CMYK на другом устройстве. Например, принтер CMYK для монитора RGB позволит сделать механизм проверки правописания, который эмулирует печать этого принтера CMYK на мониторе. Аналогичным образом, это же также относится к принтерам hi-fi. Преобразование CMYKOG в RGB позволяет выполнять проверку правописания принтера CMYKOG на мониторе.

Стандартный подход к реализации такого преобразования цветов — использование единого LUT. Например, в профиле ICC для принтера CMYKOG спецификация ICC запрашивает тег A2B1, который хранит единую выборку LUT, представляющую единообразную выборку в пространстве устройства CMYKOG передней модели, которая переходит от CMYKOG к пространству подключения профиля ICC (CIELAB или CIEXYZ). Профиль связи устройства ICC позволяет напрямую преобразовывать пространство устройства CMYKOG в любое цветовое пространство, включая пространство устройства, также в виде образца LUT в пространстве CMYKOG. Выборка никогда не выполняется с 256 уровнями (битовая глубина 8) из-за огромных результирующего LUT, за исключением случаев монохромных устройств (1 канал). Вместо этого используется выборка с более низкой глубиной; некоторые типичные варианты: 9 (битовая глубина 3), 17 (битовая глубина 4), 33 (битовая глубина 5). При количестве уровней менее 256 в каждом канале LUT используется в сочетании с алгоритмом интерполяции для получения результата, если уровень находится между двумя выборками уровней.

Хотя универсальный LUT концептуально прост в реализации, и интерполяция по единому LUT, как правило, эффективна, размер LUT увеличивается экспоненциально с измерением входных данных. На самом деле, если число шагов, используемых в едином LUT, и n — это число каналов в исходном цветовом пространстве, то число узлов в LUT — это переменная для числа узлов в LUT.. Очевидно, что количество узлов быстро требует так много хранилища в памяти, что даже самые высокоуровневые вычислительные системы испытывают трудности в обработке спроса. Для устройств с шестью или восемью каналами для реализации профиля устройства требуется несколько шагов в LUT, иногда даже до пяти шагов в таблице A2B1, чтобы сохранить профиль в мегабайтах вместо гигабайтов. Очевидно, что использование меньшего количества шагов увеличивает ошибку интерполяции, так как в настоящее время меньше выборок. Так как LUT должен быть единообразным, точность по всему цветовой пространству снижается даже в тех регионах пространства, где значительное различие цвета может быть вызвано небольшим изменением значения устройства.

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

Хотя единообразный образец LUT прост и эффективен для интерполяции, он накладывает огромные требования к памяти по мере увеличения измерения. В действительности, в то время как устройство может иметь шесть или восемь каналов, они редко используются одновременно. В большинстве случаев входной цвет для преобразования цвета имеет только несколько "активных" цветов и поэтому находится в нижнем пространстве цветов. Это также означает, что интерполяция может быть более эффективно выполнена в этом нижнем измерении, так как интерполяция быстрее, когда измерение меньше.

Таким образом, подход заключается в стратификации всего пространства устройства в подпространствах различных измерений. И поскольку более низкие измерения (те, которые объединяют три или четыре цвета) более важны, стратифицируя пространство, вы также можете применить различные частоты выборки; т. е. другое количество шагов для частей; увеличение частоты выборки для более низких измерений, уменьшая их для более высоких измерений.

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

Основные стандартные блоки — это LUT различных входных измерений и размеров, а не один универсальный LUT с входным измерением n. Чтобы быть более точным,LUT является прямоугольной решеткой, наложенной на куб единицы; то есть все координаты устройства нормализуются в диапазоне [0, 1]). Значение , если является входным измерением луфта (обратите внимание, что не должно быть равно n, хотя значение V меньше или равно n), то она состоит из одномерных сетк выборки:

Самп i: отображает одномерную сетку выборки.

где все xjs должны лежать в диапазоне [0, 1], отображается надстрочный d(i ). Число шагов для выборки i-канала , которое должно быть не менее 1, и показывает spuperscript из X (подстрочный) d(i). Должно быть 1. С другой стороны, отображается надстрочный X (подстрочный 1). Не требуется иметь значение 0.

Будут определены только следующие два особых случая LUT.

Закрытый LUT: это LUT с дополнительным требованием, что для каждого Samp*i*, отображается надстрочный X (подстрочный 1) равен 0. И отображается надстрочный d(i) больше или равно 2. Однородная закрытая LUT — это закрытый LUT, имеющий тот же суперстрочный d(i). Для каждого канала узлы равномерно размещаются в диапазоне от 0 до 1.

Open LUT: Это LUT с дополнительным требованием, что для каждого Samp i, SHows надстрочный X (подстрочный 1) больше 0. Это нормально, чтобы отображать надстрочный d(i) равный 1.

Цель состоит в том, чтобы стратифицировать куб единицы [0, 1] n в коллекцию закрытых LUT и открыть LUTs, чтобы вся коллекция охватывала куб единицы. Концептуально проще упорядочить эти "страты LUT" по их измерениям, чтобы на верхнем уровне:

Показывает верхний уровень для организации слоев L U T по их измерениям.

Где отображается подстрочный код sigma k. — это коллекция стратов k -dimensional. Обратите внимание, что измерение слоев начинается с 3 вместо 0; то есть точки, так как интерполяция трехцветных сочетаний может обрабатываться без слишком большого объема памяти.

Описание страта LUT

В этой реализации:

  1. Отображает подстрочный код sigma 3. состоит из закрытых LUT с тремя входными данными, один из всех возможных сочетаний трех цветов, выбранных из n цветов.

  2. Отображает подстрочный код sigma 4. состоит из одного закрытого LUT для сочетания CMYK (или первых четырех цветов), вместе с Шоу (n более 4) минус 1. Открытые LUTs для всех остальных четырехцветных сочетаний. Вывергая комбинацию CMYK, вы признаете, что это важное сочетание.

  3. Для показаний k, равных 5, ..., n. , показывает подстрочный знак sigma k. Состоит из шоу (n над k). открытые LUTs, по одному для каждого возможного сочетания к цветов из общего числа n цветов.

Осталось указать размеры LUT. Ключевое различие между открытыми и закрытыми LUT заключается в том, что открытые LUT не перекрываются, а закрытые LUT могут перекрываться на лицах границ. Тот факт, что одномерная выборка в открытом LUT не содержит 0, по сути означает, что открытый LUT отсутствует половина лиц границ, следовательно, имя "открыто". Если два LUT не перекрываются, можно использовать другое количество шагов или расположений узлов в каждом канале. То же самое не верно, если два LUT перекрываются. В этом случае, если количество шагов или расположений узлов отличается, точка, расположенная на пересечении двух LUT, получит другое значение интерполяции в зависимости от того, какой LUT используется в интерполяции. Простое решение этой проблемы заключается в использовании единой выборки с одинаковым количеством шагов всякий раз, когда два LUT перекрываются. Другими словами:

Все закрытые LUTs (все три цвета LUT и CMYK LUT в этой реализации) должны быть универсальными и иметь одинаковое количество шагов, которые обозначаются d.

Следующие два алгоритма можно использовать для определения количества шагов для закрытых LUT и количества шагов для открытых LUT.

Алгоритм #1

Этот алгоритм не требует внешних входных данных.

Все закрытые LUT будут унифицированы с числом шагов.

Все открытые LUTs измерения k будут иметь одинаковое количество шагов показывает d(k) в каждом входном канале, а узлы равным пространством; т. е. для каждого из них отображается значение 1, 2, ..., k.

Samp i: показывает алгоритм samp i.

Наконец, укажите d и d (k ) в следующей таблице 1. Три режима, "подтверждение", "обычный" и "лучший" являются параметрами качества ICM 2.0. В этой реализации режим проверки имеет наименьший объем памяти, а лучший режим — самый большой объем памяти.

Для реализации этого алгоритма необходимо вызвать следующий алгоритм #2. Пользователи могут указать собственные расположения выборки, используя таблицы в качестве руководства.

Алгоритм #2

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

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

Все закрытые LUT будут унифицированы с числом шагов, как описано в алгоритме #1. Значения d предоставляются в таблице 1.

(a) Единый закрытый LUT

Режим проверки Обычный режим Лучший режим
d 9 17 33

 

(b) Open LUT

Измерение входных данных Режим проверки Обычный режим Лучший режим
4 5 7 9
5 2 3 3
6 2 3 3
7 2 2 2
8 или более 2 2 2

 

Таблица 1. Размеры LUT, используемые в алгоритме

Каждый открытый LUT может иметь разное количество шагов в каждом входном канале, а расположения выборки не должны быть равными. Для заданного открытого страта LUT существует связанное цветовое сочетание, например , показывает подстрок C 1, ..., подстрок C. , где подстрочные знаки C i. являются отдельными целыми числами от 1 до n. Они являются индексами каналов, соответствующими "активным" цветам в этом страте.

ШАГ 1. Отфильтруйте входной массив значений устройств, которые не содержатся в этом страте. Значение устройства показывает X подстрок 1, подстрок X 2, ..., подстрок X n. содержится в страте, если и только если отображает набор значений для канала. И все остальные каналы равны 0. Если отфильтрованный набор содержит записи N , позвольте

Показывает уравнение для использования, если отфильтрованный набор содержит записи N.

Для каждого из них отображается значение 1, 2, ..., k. итерации следующих шагов 2-5:

ШАГ 2. Если отображается подстрочный подстрок (k) равный 1. Samp i имеет только 1 точку, которая должна быть 1,0. Перейдите к следующему i. В противном случае перейдите к шагу 3.

ШАГ 3. Сортировка отфильтрованные примеры в порядке возрастания в канале

ШАГ 4. Определение предварительной сетки выборки с помощью узлов

Показывает узлы, используемые для определения

Где отображается j равно 1, 2, ..., подстрочный подстрок (k).

ШАГ 5. Регулярное создание предварительной сетки для обеспечения соответствия строгой монотонности, а также кончается 1.0. Так как массив уже отсортирован, узлы в предварительной сетке уже монотонны. Однако смежные узлы могут быть идентичными. Это можно исправить, удалив идентичные узлы при необходимости. Наконец, после этой процедуры, если конечная точка меньше 1.0, замените ее на 1.0.

Обратите внимание, что ШАГ 5 является причиной того, что страт LUT может иметь другое количество шагов в каждом канале. После нормализации количество шагов в канале может быть меньше, чем подстрочный подстрок d (k).

Интерполяция

Вы можете создать стратификацию куба единицы, открыв страты LUT и закрытые страты LUT. Чтобы выполнить интерполяцию с помощью этой "разреженной структуры LUT", выполните следующие действия. Предположим, что заданное значение входного устройства показывает (подстрок X 1, подстрок X 2, ..., подстрок X n).

ШАГ 1. Определите количество "активных" каналов. Это число ненулевых каналов. Это определяет измерение страты k для поиска содержащего страта. Точнее, измерение страты равно 3, если число активных каналов меньше или равно 3. В противном случае измерение страты совпадает с количеством активных каналов.

ШАГ 2. В разделе Выполните поиск содержащего стратум. Значение устройства содержится в открытой страте, если все каналы, соответствующие стратуму, имеют ненулевое значение, а все остальные каналы равны нулю. Значение устройства содержится в закрытом страте, если каждый канал, не представленный стратом, равен нулю. Если не найдено стратум, возникает ошибка. Отмена и сбой отчета. Если найдена содержащая стратум, перейдите к следующему шагу.

ШАГ 3. Если содержащий страт закрыт, интерполяция внутри страта может выполняться любым известным алгоритмом интерполяции. В этой реализации выбор алгоритма — интерполяция тетрахедральной. Если содержащий страт открыт, и значение устройства находится строго в пределах страта, то есть,

Показывает подстрок X, превышающий или равный... первый узел в i-м канале

где я является индексом канала для страта, а затем стандартный алгоритм интерполяции, например интерполяция тетрахедра, работает.

Если отображается подстрок X меньше... первый узел в i-м канале для некоторых i, то значение устройства попадает в "разрыв" между стратом и нижними размерными подпространствами. Этот MOI не связан с алгоритмом интерполяции, поэтому любой алгоритм интерполяции можно использовать для интерполяции в рамках этого "пробела", хотя предпочтительный алгоритм является следующим трансфинитом интерполяции.

Архитектура модуля интерполяции показана на двух частях рис. 1.

Схема, показывающая часть архитектуры модуля интерполяции.

Схема, показывающая две части архитектуры модуля интерполяции.

Рис. 1. Архитектура модуля Интерполяции

Как описано ранее, этот алгоритм может достичь достаточно плотной выборки в регионах пространства устройства, содержащих важное сочетание цветов, при этом минимизируя общий размер LUT, необходимых. В следующей таблице показано сравнение количества узлов, необходимых для разреженной реализации LUT (с использованием алгоритма #1 и нормального режима) и соответствующей универсальной реализации LUT.

Количество входных каналов Разреженный LUT Унифицированный LUT
5 142498 1419857
6 217582 24137567
7 347444 410338673
8 559618 6975757441

 

Интерполяция в кубе единицы

Основным шагом в случае прямоугольной сетки является интерполяция в заключающей ячейке. Для входной точки можно легко определить заключенную ячейку. В прямоугольной сетке указывается выходное значение каждой вершины (угловые точки) заключающей ячейки. Они также являются единственными условиями границы (БК), которые интерполятор должен удовлетворять: интерполятор должен пройти через все эти точки. Обратите внимание, что эти условия границы находятся на "дискретных" точках, в этом случае 2n угловых точек ячейки, где n является измерением цветового пространства.

Перед переходом на нее рекомендуется формализировать концепцию условий границы. Для любого подмножества S границы заключающей ячейки (куба единицы в n измерениях) условие границы для S — это спецификация функции BC: S → Rm, где m — выходное измерение. Другими словами, интерполяция, которая может быть обозначена Interp: [0,1]n→ Rm, требуется для удовлетворения: Interp(x) = BC(x) для всех x в S.

В стандартном сценарии интерполяции в кубе единицы S — это набор дискретных точек, которые являются 2n вершинами куба.

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

(a) Точка vn =(1,1,...,1) является специальной и допускается только дискретное условие границы. Другими словами, не могут быть наложены условия непрерывной границы для n границы лиц xi=1 (i=1,...,n).

(b) Для каждой оставшейся n границы лиц xi=0 (i=1,...,n) условие границы может быть наложено на все лицо, при условии совместимости, что если два лица пересекаются, условия границы на лицах должны согласиться на пересечение.

(c) Любые вершины, не содержащиеся в лицах с условием границы, будут иметь отдельное (дискретное) условие границы.

Можно ссылаться на дискретное условие границы как конечные данные, а условие непрерывной границы — трансфинитные данные при обсуждении интерполяции по конечным и трансфинитным данным.

Во-первых, просмотрите стандартную интерполяцию тетрахедральных (например, используемую в патенте Сакамото), которая помогает задать нотации для данной конкретной формулировки проблемы. Известно, что куб единицы [0,1]n может быть разделен на n! tetrahedra, параметризованный набором переметов на n символах. В частности, каждая такая тетрахедрона определяется неравенством

Показывает формулу для неравенства тетрахедронов.

где σ:{1,2,..,n}→{1,2,...,n} — это перемещение символов 1, 2, ..., т. е. это биджективное сопоставление набора n-символов. Например, если n = 3 и σ = (3, 2, 1), то есть σ(1)=3, σ(2)=2, σ(3)=1, то соответствующий тетрахедрон определяется z≥y≥x, где общее нотация x, y, z используется для x1, x2, x3. Обратите внимание, что эти тетрахедроны не связаны друг с другом. Для интерполяции точки, входящие на общее лицо двух отдельных тетрахедронов, будут иметь то же значение интерполяции независимо от того, какой тетрахедрон используется в интерполяции. Тем не менее, в стандартном сценарии интерполяции по конечным точкам для заданной входной точки (x1, ..., xn), сначала определите, в какой тетрахедрон он лежит или эквивалентно, соответствующая перемутация σ, то интерполятор тетрахедрал определяется как

Показывает уравнение, определяющее интерполяцию тетрахедрала.

Где показано уравнение для стандартных базовых векторов. для i=1, ..., n и e1, ..., en — это стандартные векторы основы. Прежде чем перейти к обобщению, обратите внимание, что v0, v1, ..., vn являются вершинами тетрахедрона, а также показаны барицентрические координаты. Это ".

В общем случае BCs на лицах границ можно использовать концепцию барицентрической проекции. Как и раньше, для заданной входной точки (x1, ..., xn), сначала определите, в каком тетрахедроне она лежит или эквивалентно, соответствующая перемутация σ. Затем выполните ряд барицентрических проекций, как показано ниже. Первая проекция показывает подстрок BProj 1 (x ). Отправляет точку на плоскость, показывающую разностную подстроку X (1) равно 0. Если только не указано значение X равно V подстроку n. В этом случае она не изменяется. Точное определение карты BProj определяется следующим образом:

Показывает уравнение для точного определения карты BProj.

с формулой для подстрока P k. и k = 1, 2, ..., n.

В случае показывает, что X равен подстроку V n. Можно остановить, так как bc определен в vn по предположению (a). В данном случае показывает, что X не равен подстроку V n. Ясно, что показан подстрок BProj 1 (X). Имеет σ(1)th компонент аннихилирован. Другими словами, она находится на одном из граней. Либо это лицо, на котором определяется BC, в этом случае можно остановить или выполнить другую барицентрическую проекцию Показывает подстрок BProj 2 (X). Где показан X' равно BProj подстрок 1 (X). И если отображается подстрок Bproj 1 (X).) находится на лице, на котором определен bc, можно остановиться; в противном случае выполните еще одну проекцию, где показан подстрок BProj 3 (X'). Так как каждая проекция аннихилирует один компонент, эффективное измерение уменьшается, поэтому вы знаете, что процесс должен в конечном итоге остановиться. В худшем случае вы выполняете n проекций до измерения 0, то есть вершины куба, в соответствии с предположением (c), вы знаете, что BC будет определен.

Предположим, что проекции K были выполнены, с

Показывает уравнение, используемое при условии, что проекция K была выполнена.

x(0)= x, входная точка и BC определяются в x(k). Затем разверните проекции, определив ряд выходных векторов:

Показывает уравнения для ряда выходных векторов.

где отображается уравнение для надстрочного индекса Y (K). И вы, наконец, получите ответ.

Показывает интерп(x) равным y надстрочный (0).

Пример работы

Схема, показывающая пример интерполяции с кубом единицы.

Рис. 2. Пример работы

Рассмотрим ситуацию, показанную на рис. 2, где n = 3, m = 1, и у вас есть следующие BCs:

(a) Четыре дискретных BCs на вершинах

(0, 0, 1): β001

(0, 1, 1): β011

(1, 0, 1): β101

(1, 1, 1): β111

(b) Непрерывный BC на лице x3=0: F(x1, x2)

Вычисления #1: входная точка x = (0.8, 0.5, 0.2). Заключенная тетрахедрона связана с перемутацией <1, 2, 3>.

1-ая проекция: показывает уравнение для первой проекции.

Это уже на лице x3=0, поэтому вы можете остановиться. Обратная подстановка затем дает

Показывает ответ для первой проекции. это ответ.

Вычисление #2: входная точка x = (0.2, 0.5, 0.8). Заключенная тетрахедрона связана с перемутацией <3, 2, 1>.

1-й проекции: показывает уравнение для первой проекции вычислений 2.

2-й проекции: показывает уравнение для второй проекции вычислений 2.

3-й проекции: показывает уравнение для третьей проекции вычисления 2. Которая находится на лице x3=0. Обратная подстановка затем дает

Показывает первые два уравнения для обратной подстановки.

Показывает третье уравнение для обратной замены. Это окончательный ответ.

Приложения

(a) Последовательная интерполяция Тетрахедрала

Схема, показывающая последовательную интерполяцию тетрахедрала.

Рис. 3. Последовательная интерполяция тетрахедра

См. рисунок 3. Чтобы интерполировать между двумя плоскостями, на которых были введены несовместимые сетки, рассмотрите ячейку, заключенную в заданный пункт P, показанный на рисунке. Вершины ячейки берутся непосредственно из сетки в верхней плоскости. Вершины в нижней части лица несовместимы с сеткой в нижней плоскости, поэтому все лицо рассматривается как наличие BC со значениями, полученными интерполяцией сетки в нижней плоскости. Затем ясно, что эта настройка удовлетворяет предположениям (a), (b) и (c) выше, и вы можете применить алгоритм интерполяции.

Также ясно, что алгоритм сократил измерение проблемы интерполяции на 1, поскольку результатом является линейное сочетание значений вершин в верхней сетке и интерполяция в нижней плоскости, которая имеет меньше 1. Если аналогичная конфигурация плоскости сэндвичей существует в нижней плоскости, можно применить процедуру в этом плоскости, еще больше сократить измерение на 1. Эта процедура может продолжаться до тех пор, пока не достигнет измерения 0. Этот каскад проекций и интерполяций можно назвать "Последовательная интерполяция Тетрахедрала".

(b) Интерполяция пробелов

Схема, показывющая интерполяцию пробелов.

Рис. 4. Интерполяция пробелов

Это сетка, наложенная на куб, сидящий строго внутри положительного квадранта. В самом кубе есть сетка, и каждая плоскость координат имеет сетки, которые не обязательно совместимы. "Разрыв" между кубом и плоскостями координат имеет перекрестный раздел, который является "L-фигурным" и не подходит для стандартных методов. Однако с помощью метода, введенного здесь, вы можете легко ввести ячейки, которые охватывают этот разрыв. На рисунке 4 показан один из них. Сетки на плоскостях координат поддерживают интерполяцию, которая обеспечивает необходимые BCs для всех нижних лиц ячейки, с одной оставшейся вершиной, bc которой предоставляется нижним углом куба.

Окончательное примечание о реализации

В фактическом приложении "куб единицы", который является основным параметром алгоритма, извлекается из более крупных блокировок, а значения на вершинах могут потребовать дорогостоящих вычислений. С другой стороны, также ясно, что интерполяция тетрахедрала требует только значений в вершинах тетрахедрона, который является подмножеством всех вершин куба единицы. Поэтому более эффективно реализовать то, что можно назвать "отложенной оценкой". В реализации программного обеспечения предыдущего алгоритма обычно используется подпрограмма, которая принимает куб единиц и значения в вершинах в качестве входных данных. Отложенная оценка означает, что вместо передачи значений на вершинах необходимые сведения для оценки значений вершин передаются без фактического выполнения оценки. Внутри подпрограммы фактическое вычисление этих значений будет осуществляться только для тех вершин, которые относятся к заключающей тетрахедрон, после определения заключенного тетрахедрона.

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

В случае, когда преобразование создается с помощью исходного устройства, моделироваемого как виртуального RGB-устройства, возможно, что исходные значения цвета могут быть отрицательными или больше unity (1.0). При этом исходное устройство называется высоким динамическим диапазоном (HDR). Для этого дела следует учитывать особое внимание.

В случае преобразований HDR минимальные и максимальные значения для каждого цветного канала можно определить из границы гаммы устройства. С помощью этих значений применяется простое масштабирование для каждого канала цветовой параметров, чтобы значения цветового элемента, равные минимальному цвету, преобразовылись в 0,0, а цветные значения равны максимальному цветоцвету, преобразуются в 1,0 с линейным масштабированием значений между 0,0 и 1,0.

ICCProfileFromWCSProfile

Поскольку основной целью этой функции является поддержка версий Windows до Vista, необходимо создать профили 2.2 ICC, как определено в спецификации ICC.1:1998-09. В некоторых случаях (см. следующую таблицу "Сопоставление базовых устройств с классом профиля ICC"), можно создать матрицу или профиль НА основе TRC из профиля WCS. В других случаях профиль ICC состоит из LUT. В следующем процессе описывается создание LUT AToB и BToA. Конечно, профили ICC также имеют другие поля. Некоторые данные можно получить из профиля WCS. Для других данных необходимо разработать интеллектуальные значения по умолчанию. Авторские права будут назначены корпорации Майкрософт; так как это технология Майкрософт, используемая для создания LUT.

Эта конструкция должна работать для всех типов моделей устройств, включая подключаемые модули. Если подключаемый модуль имеет связанную базовую модель устройства, можно определить базовый тип устройства.

Сложная часть создания профиля ICC создает таблицы подстановки AToB и BToA. Эти таблицы сопоставляют пространство устройства, например RGB или CMYK, и пространство подключения профиля (PCS), которое является вариантом CIELAB. Это принципиально то же самое, что и процесс управления цветами, используемый в преобразовании CITE для сопоставления между пространством устройства и пространством устройства. Однако для преобразования необходимо иметь следующие сведения.

  1. Ссылки на условия просмотра для PCS.

  2. Справочник по гаммам PCS.

  3. Модель устройства, которая преобразует значения PCS и цветометрию.

Профиль WCS и связанный с ним CAM предоставляются в качестве параметров. Существует две базовые модели устройств, которые преобразуются между цветовой метрией и кодировкой PCS. Причина, по которой вам нужно два, объясняется ниже.

  1. Условия просмотра ссылок для PCS можно получить из спецификации формата профиля ICC. Сведения, предоставленные в спецификации формата профиля ICC, достаточно для вычисления всех данных, необходимых для инициализации CAM, используемого CMS. Для согласованности и гибкости эти сведения хранятся в цветовом профиле WCS.

  2. Вы также можете использовать профиль WCS для хранения примеров, определяющих эталонную гамму PCS. Система управления цветом CITE (CMS) имеет два способа создания границ гаммы. Один из них — образец полного пространства устройства и использование модели устройства для создания значений измерений. Второй метод — использовать измеряемые образцы из профиля для создания границы эталонной гаммы. Поскольку гамма ПКС ICC слишком велика, чтобы сделать полезный эталонный гамм, первый метод неуместен. Но второй метод — гибкий подход на основе профилей. Чтобы переопределить эталонную диаграмму PCS, можно изменить данные измерения в профиле устройства PCS.

  3. ICC PCS — это моделирование идеального устройства. Создав модель PCS как реальное устройство, вы можете воспользоваться процессом управления цветами, используемым в Smart CMM. Создание модели устройства из цветовой метрии в кодировку PCS просто. Вы просто сопоставляете истинные значения цветовой метрики и закодированные значения PCS. Так как интерфейс CMS для моделей устройств поддерживает только значения XYZ, может потребоваться сопоставить между XYZ и LAB. Это хорошо известное преобразование. Эта модель описана в документе 2.2.02 "Базовые модели устройств" в разделах 7.9 и 7.10.

Возможно, потребуется выполнить некоторое сопоставление гаммы, если гамма устройства больше гаммы пк. Базовые ГММ можно использовать для этой цели. Обратите внимание, что в созданном профиле ICC есть таблицы подстановки для намерений относительной цветовой метрики, перцептуальной и насыщенности, хотя все они могут указывать на один и тот же LUT внутри.

Схема, показывающая создание T o B L U T.

Рис. 5. Создание AToB LUT

Этот процесс показан на рис. 5. Во-первых, модель устройства инициализируется из данных в профиле интеллектуального анализа данных. Затем создайте границу гаммы устройства следующим образом. Выборка данных из модели устройства выполняется через модель устройства для получения данных цветовой метрики. Данные цветовой метрики выполняются через CAM для создания данных внешнего вида. Данные внешнего вида используются для создания границы гаммы устройства.

Затем используйте данные из эталонного профиля измерения PCS для создания границы гаммы для PCS.

Используйте две границы гаммы, только что созданные для инициализации GMM. Затем используйте модель устройства, GMM и модель устройства PCS для создания преобразования. Выполните выборку пространства устройства с помощью преобразования, чтобы создать AToB LUT.

Схема, показывающая создание T o B L U T с помощью выборки пространства P C S.

Рис. 6. Создание BToA LUT

Рис. 6 иллюстрирует создание BToA LUT. Это почти идентично созданию AToB LUT с ролями исходного и целевого обмена. Кроме того, для создания LUT необходимо пример полного гамма PCS.

Обратите внимание, что, поскольку CAM (CIECAM02 в WCS) участвует в процессе, хроматическая адаптация между медиа-белой точкой и белой точкой PCS (под мандатом ICC быть D50) действует прозрачно cam.

Виртуальные RGB-устройства HDR

Особое внимание следует учитывать при создании профилей для виртуальных RGB-устройств HDR; То есть устройства, для которых цветовые значения могут быть меньше 0,0 или больше 1,0. В поколении ATOB LUT создается более крупный набор входных LUT.1D. Цветные значения масштабируются и смещаются до диапазона 0 .. 1 с использованием минимальных и максимальных цветовых значений в профиле WCS.

Так как цветовое пространство для устройств HDR вряд ли будет полностью заполнено, специальная поддержка предоставляется в 3-D LUT для тега, а также. Чтобы обрабатывать цвета в разреженном регионе, цвета перекодируются таким образом, чтобы экстраполяция превышает 0.0 и 1.0, можно добиться. Используемый диапазон — -1 .. +4.

Из-за изменения масштабирования, примененного для 3-D LUT, создается набор 1D выходных LUT для сопоставления результата с диапазоном 0 .. 1.

Несколько компьютеров

В МТП было установлено, что один PCS не был достаточно гибким для удовлетворения всех предполагаемых целей использования CMS. В версии 4 спецификации профиля ICC уточнил, что на самом деле существует два кодировки PCS. Используется для намерений цветовой метрики; другой используется для цептуального намерения. (Для намерения насыщенности не указана функция PCS. МУС оставил эту часть неоднозначной.) Цветовая метрика PCS имеет минимальное и максимальное значение света, но диапазон значений хрома и оттенка примерно ± 127. Этот PCS выглядит как прямоугольная призма. Как упоминалось ранее, объем перцептивных ПКS напоминает гамму принтера inkjet.

Два КОМПЬЮТЕРА ICC также имеют две разные цифровые кодировки. В перцептивных ПКS значение нуля представляет собой светность нуля. В цветовой метрике PCS значение нуля представляет минимальную светность PCS, которая больше нуля. Эту проблему можно решить, имея другую модель устройства для каждой кодировки PCS.

Сопоставление гаммов

Чтобы создать LUT AToB в профиле ICC, необходимо сопоставить устройство с соответствующим пространством PCS. Чтобы создать LUT BToA, вы сопоставляете его с пространством PCS с устройством. Сопоставление LUT AToB довольно похоже на то, что используется в CMS на основе измерений. Для перцептивных ПКS сопоставить правдоподобную гамму устройства с границой гаммы PCS, используя вырезку или сжатие для любых устаревших цветов. Для намерений цветовой метрики может потребоваться обрезать свет, но хрома и оттенка значения все будут соответствовать цветовой метрике PCS.

Сопоставление для LUT BToA немного отличается. Намерения цветовой метрики по-прежнему просты; Вы просто закрепите значения PCS на устройстве. Но в МУС требуется, чтобы все возможные значения PCS сопоставлялись с некоторыми значениями устройства, а не только теми, которые в эталонной гамме перцептивных PCS. Таким образом, необходимо убедиться, что GMM может обрабатывать исходные цвета, которые находятся за пределами эталонной гаммы. Это можно обрабатывать путем вырезки этих цветов на границу гаммы устройства.

Сопоставление базового устройства с классом профилей ICC

Базовый тип устройства Класс профиля ICC Замечание
Устройство записи RGB Устройство ввода (scnr) PCS — CIELAB. AToB0Tag — это устройство для PCS с относительным намерением цветовой метрики.
CRT, LCD-монитор Отображение устройства ("mntr") PCS — CIEXYZ. Ознакомьтесь со следующими сведениями о преобразовании модели.
RGB Projector Цветовое пространство ("spac") PCS — CIELAB.
Принтер RGB и CMYK Выходное устройство ("prtr") PCS — CIELAB.
Виртуальное устройство RGB (вариант, отличный от HDR) Отображение устройства ("mntr") PCS — CIEXYZ.
Виртуальное устройство RGB (вариант HDR) Цветовое пространство ("spac") PCS — CIELAB.

 

Преобразование профилей мониторов не включает создание LUT, а вместо этого состоит в создании матрицы или модели TRC. Модель, используемая в ICC, немного отличается от модели, используемой в моделировании WCS CRT или LCD, в том, что термин "черной коррекции" отсутствует. Конкретно

Модель WCS: показывает модель W C S.

Модель ICC: показывает модель I C.

Преобразование модели WCS в модель ICC выполняется следующим образом.

Определите новые кривые:

Показывает матрицу для определения новых кривых.

Это не кривые воспроизведения тонов, потому что они не сопоставляют 1 с 1 на 1. Нормализация будет достигнута. Окончательные определения модели ICC:

Показывает окончательные определения модели I C.

Отображает окончательную матрицу для модели I C.

Для виртуальных устройств, отличных от HDR RGB, вы также создаете профиль display ICC для повышения эффективности пространства. В этом случае матрица tristimulus M ICC может быть получена непосредственно из первичных объектов профиля WCS без преобразования приведенной выше модели. Одно окончательное, но важное, обратите внимание, что эта матрица тристимулу должна быть хроматично адаптирована к D50, чтобы соответствовать спецификации ICC PCS. Другими словами, записи в каждой строке матрицы, закодированные в профиле ICC, должны быть суммированы соответственно до 96,42, 100 и 82,49. В текущей реализации хроматическая адаптация выполняется CAT02, которая также является преобразованием хроматической адаптации, используемой в CAM02.

Черное сохранение и черное поколение

Реализация черной сохранения связана вместе с созданием черного канала на устройствах, поддерживающих черный канал. Для этого собираются сведения о каждом цвете источника, чтобы разрешить моделям устройств, поддерживающим черный канал, чтобы определить, как лучше задать черный канал на выходных данных. Хотя сохранение черного цвета имеет отношение к преобразованиям цвета, которые преобразуются между одним устройством черного канала в другое, черное поколение реализуется для всех преобразований, связанных с конечным устройством черного канала.

Сведения о черном канале записываются в структуру данных с именем BlackInformation. Структура BlackInformation содержит логическое значение, указывающее, содержит ли цвет только черный цвет и числовое значение, указывающее степень "чернота" называется черным весом. Для исходных устройств, поддерживающих черный канал, черный вес является процентом черного цвета в исходном цвете. Для исходных устройств, не содержащих черный канал, черный вес вычисляется с помощью других цветов и значения внешнего вида. Значение, называемое "чистота цвета", вычисляется путем принятия разницы между максимальным значением цвета и минимальным значением цвета, разделенным максимальным значением цвета. Значение, называемое "относительным светом", вычисляется путем принятия разницы между светлостью цвета и минимальной светлостью для целевого устройства, разделенным на разницу между минимальной и максимальной легкостью для целевого устройства. Если исходное устройство является аддитивным устройством (монитором или проектором), черный вес определяется как 1,0 минус чистота цвета, умноженная на относительную светлость. Например, если исходное устройство является RGB-монитором, максимальное значение и минимальное значение R, G и B для каждого цвета вычисляется, а черный вес определяется формулой:

BW = (1.0 – max(R,G,B) – min(R,G,B)) / max(R, G, B)) * относительная светность

Если исходное устройство поддерживает подтрактивную цветовую краску, например принтер CMY, перед использованием в предыдущей формуле отдельные цвета должны быть "дополнены" (вычитаются из 1.0). Таким образом, для принтера CMY R = 1,0 – C, G = 1,0 – M и B = 1,0 – Y.

Черная информация для каждого цвета, обработанного преобразованием цвета, определяется во время процесса преобразования цветов. Сведения, доступные только для черного цвета, определяются только в том случае, если задано сохранение черного цвета. Черный вес всегда определяется, поддерживает ли модель целевого устройства черный цвет. Черная информация передается в целевую модель устройства с помощью метода ColorimetricToDeviceColorsWithBlack , который использует результирующий LUT.

Обратите внимание, что из-за оптимизации преобразования цвета указанный выше процесс происходит только во время создания оптимизированного преобразования LUT, а не во время выполнения метода TranslateColors.

Оптимизация преобразований с более чем тремя исходными каналами

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

Size = количество шагов на источник канала \ устройство(Число\ каналов\ in\ source\ device) x число каналов в выходном устройстве

Как видно, размер таблицы увеличивается экспоненциально в зависимости от количества каналов на исходном устройстве. Многие исходные устройства поддерживают три цветовых канала, например Red, Green и Blue. Однако если исходное устройство поддерживает четыре канала, например CMYK, размер таблицы и время, необходимое для создания таблицы, увеличивается на коэффициент количества шагов. В CMS на основе измерений, где преобразования создаются "на лету", на этот раз может быть неприемлемым.

Чтобы сократить время, необходимое для создания таблицы преобразования цветов, можно воспользоваться двумя фактами. Во-первых, в то время как исходное устройство может поддерживать более трех цветовых каналов, промежуточное независимое от устройства цветовое пространство (CIECAM02 Ja C b C ) имеет только три цветовых канала. Во-вторых, наиболее трудоемкая часть обработки — это не моделирование устройства (преобразование из координат цвета устройства в значения тристимулуса), а сопоставление гаммы. С помощью этих фактов можно создать предварительную таблицу преобразования цветов, которая преобразует цвета в независимом от устройства цветовом пространстве с помощью шагов сопоставления гаммы и, наконец, с помощью модели цвета выходного устройства. Построение этой таблицы состоит из трех измерений. Затем мы создадим таблицу преобразования цвета в четыре окончательных значения, преобразовав исходные сочетания цветов в промежуточное пространство, независимое от устройства, а затем, используя предварительную таблицу преобразования цветов цвета, завершите преобразование в выходное пространство устройства. Таким образом, вы сокращаете количество вычислений (количество шагов в таблице подстановки) число\ каналов , вычисляемых для сопоставления диаграмм, до количества шагов в промежуточной таблице ₃ вычисления сопоставления гамм. Несмотря на то, что необходимо выполнить несколько шагов в таблице подстановки \ каналов вычислений моделирования устройств и трехмерных подстановок таблиц, это все еще гораздо быстрее, чем исходный расчет.

Предыдущий процесс будет работать хорошо, если нет необходимости передавать информацию между исходной моделью устройства и любым другим компонентом в преобразовании цвета. Однако если выходное устройство и исходное устройство поддерживают черный цвет, а исходный черный цветной цвет используется при определении выходного черного цвета, процесс не сможет правильно общаться с исходной черной информацией. Альтернативный процесс заключается в создании предварительной таблицы преобразования цветов, которая преобразует цвета в независимом от устройства цветовом пространстве только с помощью шагов сопоставления гаммы. Затем создайте четыре окончательных таблицы преобразования цветов с помощью следующих шагов: a) преобразуйте исходные сочетания цветов в промежуточное пространство, независимое от устройства, б) выполните шаги сопоставления гаммы путем интерполяции в предварительной таблице цветов, а не применения фактических процессов сопоставления гамм и c) используйте полученные значения из шагов сопоставления гаммы и любые исходные данные черного канала для вычисления цветоводов выходных устройств с помощью модели выходного устройства. Этот процесс также можно использовать при передаче информации между моделями исходного и выходного устройства, даже если не существует черного канала; Например, если два модуля реализованы с архитектурой подключаемого модуля, позволяющей обмен данными между модулями.

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

CheckGamut

ICM вызывает CreateTransform и CreateMultiProfileTransform , принимает слово значений флага, одно из которых является ENABLE_GAMUT_CHECKING. Если этот флаг задан, CITE должен создать преобразование по-другому. Начальные шаги одинаковы: исходные и целевые ЦС должны быть инициализированы, а затем инициализировать дескрипторы границы исходной и целевой гаммы. Независимо от указанного намерения, необходимо использовать CheckGamut GMM. CheckGamut GMM следует инициализировать с помощью моделей устройств источника и назначения и дескрипторов границы. Однако преобразование должно создать усеченное преобразование, состоящее из исходной модели устройства, исходного CAM, всех промежуточных GMM и CheckGamut GMM. Это гарантирует, что значения delta J, delta C и delta h, выходные данные CheckGamut CMM становятся окончательными результирующей величиной.

Значение CheckGamut ясно, если в преобразовании есть только два профиля устройства. Если существует более двух профилей устройств и более двух GMM, checkGamut сообщает, преобразуются ли цвета с помощью первой модели устройства и все, кроме последнего GMM, попадают в гамму целевого устройства.

основные понятия управления цветами

схемы и алгоритмы цветовой системы Windows