Алгоритмы создания преобразования WCS
Последовательное выполнение преобразования
Создание оптимизированных преобразований
Черное сохранение и черное поколение
Создание преобразований
Чтобы правильно объяснить, как работают цветовые преобразования, полезно объяснить полный путь обработки с помощью ICM 2.0 и внутренних элементов CTE. Функция CreateColorTransformW ICM 2.0 создает преобразование цвета, которое приложения могут использовать для управления цветом. Эта функция создает контекст цвета на основе входных данных LOGCOLORSPACE и намерений. Намерения сопоставляются с базовым алгоритмом сопоставления гаммы ICC. Затем функция вызывает функцию ICM 2.0 CreateMultiProfileTransform для согласованной обработки цвета. Функция CreateColorTransform обычно копирует данные во внутреннюю оптимизированную структуру преобразования.
Функция CreateMultiProfileTransform ICM 2.0 принимает массив профилей и массив намерений или один профиль связи устройства и создает преобразование цвета, которое приложения могут использовать для сопоставления цветов. Он обрабатывает эти входные профили и намерения для создания моделей устройств, моделей цветового оформления, описания границ гаммы и моделей сопоставления гамм. Вот как это делается.
- Модели устройств инициализируются непосредственно из профилей DM. Существует одна модель устройства, созданная для каждого профиля в вызове CreateMultiProfileTransform.
- Модели оформления цветов инициализируются непосредственно из профилей CAM. В вызове CreateMultiProfileTransform для каждого профиля имеется один профиль CAM. Однако один и тот же профиль CAM можно указать для нескольких профилей.
- Описания границ гаммы инициализируются из объекта модели устройства и объекта CAM. Существует одно описание границы гаммы для каждого профиля в вызове CreateMultiProfileTransform.
- Модели сопоставления гаммы инициализируются из двух границ гаммы и намерения. Необходимо создать модель сопоставления гаммы между каждой парой моделей устройств, созданных при вызове Метода 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 указывает предпочтительный подключаемый модуль, подключаемый модуль будет игнорироваться. Если базовый подключаемый модуль недоступен, преобразование сообщит об ошибке.
Выполнение преобразования
Функция TranslateColors API ICM 2.0 преобразует массив цветов из исходного цветового пространства в целевое цветовое пространство, как определено преобразованием цвета. Эта функция внутренне проверяет массив кэшированных цветов, чтобы обеспечить немедленное сопоставление часто преобразованных цветов. Это преобразование поддерживает 8-разрядные массивы байтов канала и 32-разрядные массивы с плавающей точкой канала. Все остальные форматы будут преобразованы перед передачей в новый CTE.
Функция TranslateBitmapBitbits API 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 увеличивается экспоненциально с измерением входных данных. На самом деле, если d — количество шагов, используемых в едином LUT, а n — количество каналов в исходном цветовом пространстве, то число узлов в LUT равно . Очевидно, что количество узлов быстро требует столь большого объема памяти, что даже ведущие вычислительные системы испытывают трудности с обработкой спроса. Для устройств с шестью или восемью каналами реализация профиля устройства ICC требует использования нескольких шагов в LUT, иногда даже до пяти шагов в таблице A2B1, чтобы сохранить профиль в мегабайтах, а не в гигабайтах. Очевидно, что использование меньшего количества шагов приводит к увеличению ошибки интерполяции, так как в настоящее время выборок меньше. Так как LUT должен быть однородным, точность во всем цветовом пространстве снижается даже в тех областях пространства, где значительная разница в цветах может быть вызвана небольшим изменением значения устройства.
На устройствах с более чем четырьмя раскрасками некоторые подпространства всего пространства устройства более важны, чем другие. Например, в пространстве CMYKOG голубой и зеленый чернил редко используются вместе, так как их оттенки в значительной степени перекрываются друг с другом. Аналогичным образом, желтые и оранжевые чернилы в значительной степени перекрываются друг с другом. Равномерное сокращение количества шагов можно рассматривать как общее снижение качества по всему цветовому пространству, что является то, что вы можете себе позволить для невероятных сочетаний пера, но не для вероятных или важных комбинаций.
Хотя однородная выборка LUT проста и эффективна для интерполяции, она предъявляет огромные требования к памяти по мере увеличения измерения. На самом деле, хотя устройство может иметь шесть или восемь каналов, они редко используются одновременно. В большинстве случаев входной цвет в преобразование цвета имеет только несколько "активных" цветов и поэтому находится в более низкомерном цветовом пространстве. Это также означает, что интерполяция может быть выполнена более эффективно в этом пространстве нижнего измерения, так как интерполяция выполняется быстрее, когда измерение меньше.
Таким образом, подход состоит в том, чтобы разделить все пространство устройства на подпространства различных размеров. И поскольку более низкие измерения (те, которые объединяют три или четыре красящих веществ) более важны, расслояв пространство, вы также можете применить различные частоты выборки; т. е. количество шагов, отличающееся от частей; увеличение частоты выборки для более низких измерений, сокращение их для более высоких измерений.
Чтобы исправить нотации, n — это количество каналов в исходном цветовом пространстве преобразования цвета, которое требуется выполнить выборку. Вы также можете ссылаться на n как на входное измерение и , если не указано иное.
Основными стандартными блоками являются LUT различных входных размеров и размеров, а не один однородный LUT с измерением ввода n. Точнее,LUT — это прямоугольная решетка, наложенная на куб единицы; то есть все координаты устройства нормализуются до диапазона [0, 1]). Если является входным измерением lut (обратите внимание, что не должно быть равно n, хотя требуется), то он состоит из одномерных сетки выборки ν:
Samp i:
где все xjs должны находиться в диапазоне [0, 1], — количество шагов для выборки i-го канала, которое должно быть не менее 1, а Должно быть равно 1. С другой стороны, Не обязательно иметь значение 0.
Будут определены только следующие два особых случая LUT.
Закрытый LUT. Это LUT с дополнительным требованием, которое для каждого Samp*i* , а . Универсальный закрытый LUT — это закрытый LUT, имеющий один и тот же для каждого канала, а узлы равномерно разделены между 0 и 1.
Open LUT: это LUT с дополнительным требованием, что для каждого Samp i, . Это нормально, если .
Цель состоит в том, чтобы разделить куб единиц [0, 1] n на коллекцию закрытых LUT и открытых LUT таким образом, чтобы вся коллекция охватывала куб единиц. Концептуально проще упорядочить эти "глухие страты" по их размерам, чтобы на верхнем уровне:
где — это "коллекция страт k-размерности". Обратите внимание, что измерение слоев начинается с 3, а не от 0; то есть точки, так как интерполяция трехцветных сочетаний может обрабатываться без слишком большого объема памяти.
Описание страты LUT
В этой реализации:
состоит из закрытых LUT с тремя входными данными, по одному из каждого возможного сочетания трех красящих веществ, выбранных из n раскрасок.
состоит из одного закрытого LUT для сочетания CMYK (или первых четырех красящих веществ), а также открытые LUT для всех остальных четырехцветных сочетаний. Выгружая комбинацию CMYK, вы признаете, что это важное сочетание.
Для , состоит из open LUT, по одному для каждого возможного сочетания выбора цветов k из общего числа цветов n.
Осталось указать размеры LUT. Основное различие между открытыми и закрытыми LUT заключается в том, что открытые LUT не перекрываются, а закрытые LUT могут перекрываться на границах. Тот факт, что одномерная выборка в открытом LUT не содержит 0, по существу означает, что в открытой LUT отсутствует половина границы граней, отсюда и название "открытый". Если два LUT не перекрываются, можно использовать разное количество шагов или расположений узлов в каждом канале. То же самое не соответствует действительности, если два LUT перекрываются. В этом случае, если количество шагов или расположение узла отличаются, точка, расположенная на пересечении двух LUT, будет получать разное значение интерполяции в зависимости от того, какой LUT используется в интерполяции. Простое решение этой проблемы — использовать единую выборку с одинаковым количеством шагов при каждом перекрытии двух LUT. Другими словами:
Все закрытые LUT (все трехцветные LUT и CMYK LUT в этой реализации) должны быть однородными и иметь одинаковое количество шагов, обозначаемых d.
Следующие два алгоритма можно использовать для определения количества шагов d для закрытых LUT и количества шагов для открытых LUT.
Алгоритм 1
Этот алгоритм не требует внешних входных данных.
Все закрытые LUT будут однородными с числом шагов.
Все открытые LUT измерения k будут иметь одинаковое количество шагов в каждом входном канале, и узлы имеют одинаковое пространство; то есть для каждого .
Samp i:
Наконец, укажите d и d (k ) в следующей таблице 1. Три режима: "доказательство", "нормальный" и "лучший" — это параметры качества ICM 2.0. В этой реализации режим проверки имеет наименьший объем памяти, а лучший режим — самый большой объем памяти.
Чтобы реализовать этот алгоритм, необходимо вызвать следующий алгоритм No 2. Пользователи могут указать собственные расположения выборки, используя таблицы в качестве руководства.
Алгоритм 2
Этот алгоритм требует внешних входных данных в виде списка "важных" расположений выборки, но он более адаптивн и может сэкономить место в памяти.
Обязательные входные данные — это массив значений устройств, предоставленных пользователем. Эти значения устройства указывают, какая область цветового пространства устройства важна; то есть, какой регион следует больше выборки.
Все закрытые LUT будут одинаковыми с числом шагов, как описано в алгоритме 1. Значения для d приведены в таблице 1.
a) Универсальное закрытое LUT
Режим проверки | Нормальный режим | Лучший режим | |
---|---|---|---|
D | 9 | 17 | 33 |
(b) Открыть 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 существует связанное сочетание цветов, например , где s — это отдельные целые числа от 1 до n. Они являются индексами каналов, соответствующими "активным" раскраскам в этой страте.
Шаг 1. Отфильтруйте входной массив значений устройств, которые не содержатся в этой страте. Значение устройства содержится в страте, если и только в том случае, если А все остальные каналы равны 0. Если отфильтрованный набор содержит N записей, пусть
Для каждого , выполните итерацию следующих шагов 2–5:
Шаг 2. Если , Samp i имеет только 1 балл, который должен иметь значение 1,0. Перейдите к следующему i. В противном случае перейдите к шагу 3.
ШАГ 3. Отсортируйте отфильтрованные примеры в порядке возрастания в
Шаг 4. Определение "предварительной" сетки выборки с помощью узлов
где
Шаг 5. Упорядочение предварительной сетки, чтобы убедиться, что она соответствует строгой монотонности и заканчивается на 1.0. Так как массив уже отсортирован, узлы в предварительной сетке уже являются монотонными несоздающимися. Однако смежные узлы могут быть идентичными. Это можно исправить, удалив идентичные узлы, если это необходимо. Наконец, после этой процедуры, если конечная точка меньше 1,0, замените ее на 1.0.
Обратите внимание, что шаг 5 является причиной того, что слои LUT могут иметь разное количество шагов в каждом канале. После регуляризации количество шагов в канале может быть меньше, чем
Интерполяция
Вы можете построить стратификацию куба единиц путем открытия толст LUT и закрытых слоев LUT. Чтобы выполнить интерполяцию с помощью этой "разреженной структуры LUT", выполните следующие действия. Предположим, что заданное значение входного устройства
Шаг 1. Определение количества "активных" каналов. Это число ненулевых каналов. Это определяет измерение слоев k для поиска содержащего страта. Точнее, измерение слоев равно 3, если число активных каналов В противном случае измерение страты совпадает с числом активных каналов.
Шаг 2. В разделе найдите содержащий слой. Значение устройства содержится в открытом слое, если все каналы, соответствующие страте, имеют ненулевое значение, а все остальные каналы равны нулю. Значение устройства содержится в закрытом слое, если каждый канал, не представленный слоем, равен нулю. Если содержащий слой не найден, возникает ошибка. Отмена и сбой отчета. Если найден содержащий слой, перейдите к следующему шагу.
ШАГ 3. Если содержащий слой закрыт, интерполяцию внутри страты можно выполнить с помощью любого известного алгоритма интерполяции. В этой реализации выбор алгоритма — тетраэдральная интерполяция. Если содержащий слой открыт, а значение устройства находится строго внутри страты, то есть
первый узел в i-м канале
где i — индекс канала для страты, то работает стандартный алгоритм интерполяции, например тетраэдральная интерполяция.
Если для некоторых i узла в i-м канале, то значение устройства попадает в "разрыв" между стратом и подпространствами нижнего измерения. Этот MOI не касается алгоритма интерполяции как такового, поэтому для интерполяции в пределах этого "разрыва" можно использовать любой алгоритм интерполяции, хотя предпочтительным алгоритмом является следующая трансфинитная интерполяция.
Архитектура модуля интерполяции показана в двух частях рис. 1.
Рис. 1. Архитектура модуля intepolation
Как было сказано ранее, этот алгоритм способен обеспечить достаточно плотную выборку в областях пространства устройства, содержащих важное сочетание красителей, при этом сводя к минимуму общий размер необходимых LUT. В следующей таблице показано сравнение количества узлов, необходимых для реализации разреженного LUT (с использованием алгоритма 1 и нормального режима) и соответствующей универсальной реализации LUT.
Количество входных каналов | Разреженный лут | Унифицированный лут |
---|---|---|
5 | 142498 | 1419857 |
6 | 217582 | 24137567 |
7 | 347444 | 410338673 |
8 | 559618 | 6975757441 |
Интерполяция в кубе единиц
Основным шагом в случае прямоугольной сетки является интерполяция внутри включающей ячейки. Для точки ввода можно легко определить включающую ячейку. В прямоугольной сетке указывается выходное значение в каждой вершине (угловых точках) включающей ячейки. Они также являются единственными граничными условиями (BCs), которым должен соответствовать интерполянт: интерполянт должен пройти через все эти точки. Обратите внимание, что эти граничные условия находятся в "дискретных" точках, в данном случае это 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) невозможно навязать непрерывные граничные условия.
(б) Для каждой оставшейся n грани границы xi=0 (i=1,...,n) условие границы может быть наложено на все лицо с условием совместимости, что если пересекаются две грани, условия границ на гранях должны согласовываться на пересечении.
(c) Все вершины, не содержащиеся в гранях с условием границы, будут иметь отдельное (дискретное) пограничное условие.
Дискретное условие границы можно ссылаться как на конечные данные, а непрерывное условие границы — как на трансфинитные данные при обсуждении интерполяции конечных и трансфинитных данных.
Во-первых, изучите стандартную тетраэдральную интерполяцию (например, используемую в патенте Сакамото), которая помогает задать нотации для конкретной формулировки проблемы. Известно, что куб единиц [0,1]n можно разделить на n! tetrahedra, параметризованный набором перестановок для n символов. В частности, каждый такой тетраэдр определяется неравенством
где σ:{1,2,..,n}→{1,2,...,n} — это перестановка "символов" 1, 2, ..., n, то есть биджективное сопоставление набора 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 — это вершины тетраэдра, а — это "барицентрические координаты".
Для общего случая баз данных на гранях границ можно использовать концепцию барицентрической проекции. Как и раньше, для заданной входной точки (x1, ..., xn) сначала определите, в каком тетраэдре он находится, или эквивалентно соответствующая перестановка σ. Затем выполните ряд барицентрических проекций, как показано ниже. Первая проекция Отправляет точку в плоскость Если только В этом случае она не изменяется. Точное определение карты BProj определяется следующим образом:
с и k = 1, 2, ..., n.
В случае Можно остановить, так как bc определен в vn путем допущения (a). В случае Ясно, что в компонент σ(1) уничтожен. Другими словами, он находится на одной из границ. Либо он находится на грани, на которой определен BC, в этом случае можно остановиться, либо выполнить другую барицентрическую проекцию где А если на лице, на котором определен bc, можно остановиться; В противном случае выполните еще одну проекцию . Поскольку каждая проекция уничтожает один компонент, эффективное измерение уменьшается, поэтому вы знаете, что процесс в конечном итоге должен остановиться. В худшем случае вы выполняете n проекций вплоть до измерения 0, то есть вершины куба, которые в соответствии с Допущением (c) будут определены в .
Предполагается, что были выполнены проекции K, с
x(0)= x, входная точка и BC определяется в x(k). Затем распакуйте проекции, определив последовательность выходных векторов:
где И вы, наконец, получите ответ
Пример
Рис. 2. Пример работы
Рассмотрим ситуацию, показанную на рис. 2, где n = 3, m = 1, и у вас есть следующие контроллеры домена:
(a) Четыре дискретных контроллера домена на вершинах
(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-я проекция:
Вторая проекция:
3-я проекция: , которая находится на грани x3=0. Обратная подстановка, а затем дает
, которая является окончательным ответом.
Приложения
а) Последовательная тетраэдральная интерполяция
Рис. 3. Последовательная тетраэдральная интерполяция
См. рисунок 3. Для интерполяции между двумя плоскостями, на которые наложены несовместимые сетки, рассмотрим ячейку, включающую заданную точку P, показанную на рисунке. "Верхние" вершины ячейки поступают непосредственно из сетки в верхней плоскости. Вершины в нижней грани несовместимы с сеткой в нижней плоскости, поэтому вся грань рассматривается как имеющая BC со значениями, полученными путем интерполяции на сетке в нижней плоскости. Затем становится ясно, что эта настройка удовлетворяет приведенным выше предположениям (a), (b) и (c), и вы можете применить алгоритм интерполяции.
Ясно также, что алгоритм сократил измерение задачи интерполяции на 1, так как результатом является линейное сочетание значений на вершинах верхней сетки и интерполяция в нижней плоскости, которая имеет размер менее 1. Если аналогичная конфигурация плоскости сэндвичей существует в нижней плоскости, можно применить процедуру в этой плоскости, еще больше уменьшив размерность на 1. Эта процедура может продолжаться до тех пор, пока вы не достигнете измерения 0. Этот каскад проекций и интерполяций можно назвать "Последовательной тетраэдральной интерполяцией".
b) Интерполяция пробелов
Рис. 4. Интерполяция пробелов
Это сетка, наложенная на куб, сидящий строго внутри положительного квадранта. Сам куб имеет сетку, а каждая плоскость координат имеет сетки, которые не обязательно совместимы. "Разрыв" между кубом и плоскостями координат имеет поперечное сечение, которое является "L-образным" и не поддается стандартным методам. Тем не менее, с помощью метода, введенного здесь, вы можете легко ввести ячейки, которые покрывают этот разрыв. На рисунке 4 показан один из них. Сетки на плоскостях координат поддерживают интерполяцию, которая обеспечивает необходимые контроллеры домена для всех нижних граней ячейки, с одной оставшейся вершиной, BC которой обеспечивается нижним углом куба.
Заключительная заметка о реализации
В реальном приложении "куб единиц", который является базовым параметром алгоритма, извлекается из более крупных решеток, и значения на вершинах могут потребовать дорогостоящих вычислений. С другой стороны, ясно, что интерполяция тетраэдров требует только значений на вершинах тетраэдра, который является подмножеством всех вершин куба единицы. Поэтому эффективнее реализовать то, что можно назвать "отложенной оценкой". В программной реализации предыдущего алгоритма обычно используется подпрограмма, которая принимает куб единиц и значения на его вершинах в качестве входных данных. Отложенная оценка означает, что вместо передачи значений в вершинах передается необходимая информация для оценки значений вершин, фактически не выполняя оценку. Внутри подпрограммы фактическое вычисление этих значений будет осуществляться только для тех вершин, которые относятся к включающей тетраэдр, после определения включающего тетраэдра.
Таблица подстановки для использования с виртуальными устройствами-источниками RGB с высоким динамическим диапазоном
В случае, когда преобразование создается с помощью исходного устройства, смоделированного как виртуальное устройство RGB, возможно, значения исходного цвета могут быть отрицательными или больше unity (1.0). В этом случае исходное устройство называется имеющим высокий динамический диапазон (HDR). В этом случае необходимо учитывать особое внимание.
В случае преобразования HDR минимальное и максимальное значения для каждого канала цвета можно определить на основе границы гаммы устройства. При использовании этих значений применяется простое масштабирование для каждого канала красок, чтобы значения цветов, равные минимальному цвету, преобразовылись в 0,0, а значения цветов, равные максимальному цвету, — в 1,0, с линейным масштабированием значений между для линейного сопоставления в диапазоне от 0,0 до 1,0.
ICCProfileFromWCSProfile
Поскольку main целью этой функции является поддержка версий Windows до Vista, необходимо создать профили ICC версии 2.2, как определено в спецификации ICC.1:1998-09. В некоторых случаях (см. таблицу "Сопоставление классов профилей между базовыми устройствами и ICC") можно создать матрицу или профиль ICC на основе TRC из профиля WCS. В других случаях профиль ICC состоит из LUT. В следующем процессе описывается создание AToB и BToA LUT. Конечно, профили ICC также имеют другие поля. Некоторые данные могут быть получены из профиля WCS. Для других данных необходимо разработать интеллектуальные значения по умолчанию. Авторские права будут назначены корпорации Майкрософт; так как для создания LUT используется технология Майкрософт.
Эта конструкция должна работать для всех типов моделей устройств, включая подключаемые модули. Если подключаемый модуль имеет связанную базовую модель устройства, можно определить тип базового устройства.
Сложной частью создания профиля ICC является создание таблиц подстановки AToB и BToA. Эти таблицы сопоставляют пространство устройства, например RGB или CMYK, и пространство подключения профиля (PCS), которое является вариантом CIELAB. Это по сути то же самое, что и процесс управления цветом, используемый в преобразовании CITE для сопоставления пространства устройства с пространством устройства. Однако для преобразования необходимо иметь следующие сведения.
Справочные условия просмотра для PCS.
Эталонная гамма PCS.
Модель устройства, которая преобразует значения PCS в цветоиметрию.
Профиль WCS и связанный с ним CAM предоставляются в качестве параметров. Существует две базовые модели устройств, которые преобразуются между цветоиметрией и кодировкой PCS. Причина, по которой вам нужны два, описана ниже.
Справочные условия просмотра для PCS можно получить из спецификации формата профиля ICC. Информации, предоставленной в спецификации формата профиля ICC, достаточно для вычисления всех данных, необходимых для инициализации CAM, используемого CMS. Для обеспечения согласованности и гибкости эти сведения хранятся в цветовом профиле WCS.
Вы также можете использовать профиль WCS для хранения примеров, определяющих эталонную гамму PCS. Система управления цветом CITE (CMS) имеет два способа создания границ гаммы. Одним из них является выборка всего пространства устройства и использование модели устройства для создания значений измерения. Второй метод — использование измеряемых выборок из профиля для создания границы ссылочной гаммы. Поскольку гамма PCS ICC слишком велика, чтобы создать полезную эталонную гамму, первый метод неуместен. Но второй метод — гибкий, основанный на профилях подход. Чтобы переопределить эталонную гамму PCS, можно изменить данные измерений в профиле устройства PCS.
ICC PCS — это моделирование идеального устройства. Создав модель PCS в качестве реального устройства, вы можете воспользоваться преимуществами процесса управления цветом, используемого в Smart CMM. Создать модель устройства от цветовой метрики до кодировки PCS очень просто. Вы просто сопоставляете истинные значения колориметрики с значениями в кодировке PCS. Так как интерфейс CMS для моделей устройств поддерживает только значения XYZ, вам также может потребоваться сопоставить XYZ и LAB. Это хорошо известное преобразование. Эта модель описана в документе 2.2.02 "Базовые модели устройств" в разделах 7.9 и 7.10.
Возможно, потребуется выполнить некоторое сопоставление гаммы, если гамма устройства больше, чем гамма PCS. Для этой цели можно использовать базовые ГММ. Обратите внимание, что правильно созданный профиль ICC содержит таблицы подстановки для относительных намерений Colorimetric, Perceptual и Saturation, хотя все они могут указывать на один и тот же LUT внутри.
Рис. 5. Создание LUT AToB
Этот процесс показан на рис. 5. Во-первых, модель устройства инициализируется из данных в профиле DM. Затем создайте границу гаммы устройства следующим образом. Выборка данных из модели устройства выполняется через модель устройства для получения колориметрических данных. Данные колориметрики выполняются через CAM для создания данных внешнего вида. Данные внешнего вида используются для создания границы гаммы устройства.
Затем используйте данные из эталонного профиля измерения PCS, чтобы создать границу гаммы для PCS.
Используйте две только что созданные границы гаммы для инициализации GMM. Затем используйте модель устройства, GMM и модель устройства PCS, чтобы создать преобразование. Выполните выборку пространства устройства с помощью преобразования , чтобы создать LUT AToB.
Рис. 6. Создание LUT BToA
На рисунке 6 показано создание LUT BToA. Это почти идентично созданию LUT AToB с ролями источника и назначения. Кроме того, для создания LUT необходимо использовать полную гамму PCS.
Обратите внимание, что поскольку cam (CIECAM02 в WCS) участвует в этом процессе, хроматическая адаптация между медиа-белой точкой и белой точкой PCS (которая должна быть D50) прозрачно осуществляется CAM.
Виртуальные RGB-устройства HDR
При создании профилей для виртуальных RGB-устройств HDR необходимо учитывать особое внимание; то есть устройства, для которых значения цветов могут быть меньше 0,0 или больше 1,0. При создании LUT ATOB создается более крупный набор 1D-входных LUT. Значения цвета масштабируются и смещаются в диапазоне 0 .. 1, используя минимальное и максимальное значения цветов в профиле WCS.
Так как пространство цветов для устройств HDR, скорее всего, не будет заполнено полностью, в трехмерном LUT для тега также предоставляется специальная поддержка. Чтобы обрабатывать цвета в малонаселенной области, раскраски перекодируются так, чтобы можно было достичь экстраполяций за пределами 0,0 и 1,0. Используемый диапазон — -1 . +4.
Из-за изменения масштабирования, примененного для 3-D LUT, создается набор 1D выходных LUT, чтобы сопоставить результат обратно с диапазоном 0 .. 1.
Несколько компьютеров
МУС установил, что один PCS не является достаточно гибким для удовлетворения всех предполагаемых целей использования CMS. В версии 4 спецификации профиля ICC уточнил, что на самом деле существует две кодировки PCS. Один используется для колориметрических намерений; другой используется для перцептивного намерения. (Для намерения Saturation не указано PCS. МУС оставил эту часть неоднозначной.) Для колориметрических PCS задана минимальная и максимальная освещенность, но значения хрома и оттенка варьируются примерно до ± 127. Этот PCS выглядит как прямоугольная призма. Как упоминалось ранее, объем перцептивных компьютеров напоминает гамму струйного принтера.
Два КОМПЬЮТЕРА ICC также имеют две разные цифровые кодировки. В перцептивных PCS значение, равное нулю, представляет собой легкость, равную нулю. В колориметрических PCS значение, равное нулю, представляет минимальную легкость PCS, которая больше нуля. Эту проблему можно решить с помощью разных моделей устройств для каждой кодировки PCS.
Сопоставление гаммы
Чтобы создать AToB LUT в профиле ICC, необходимо сопоставить область устройства с соответствующим пространством PCS. Чтобы создать LUT BToA, необходимо сопоставить пространство PCS с областью устройства. Сопоставление для AToB LUT очень похоже на сопоставление, используемое в CMS на основе измерений. Для компьютеров с восприятием сопоставьте правдоподобную гамму устройства с границой гаммы восприятия PCS, используя обрезку или сжатие для любых цветов вне гаммы. Для колориметрических намерений может потребоваться обрезать легкость, но значения хрома и оттенка будут соответствовать цветовой гамме PCS.
Сопоставление для LUT BToA немного отличается. Колориметрические намерения по-прежнему просты; вы просто закрепите значения PCS в гамме устройства. Но ICC требует, чтобы все возможные значения PCS сопоставлялись с некоторыми значениями устройства, а не только в эталонной гамме перцептивных PCS. Таким образом, необходимо убедиться, что ГММ могут обрабатывать исходные цвета, которые находятся за пределами гаммы ссылок. Это можно сделать, обрезав эти цвета до границы гаммы устройства.
Сопоставление базовых классов устройств и профилей ICC
Базовый тип устройства | Класс профиля ICC | Комментарий |
---|---|---|
Устройство захвата RGB | Устройство ввода (scnr) | PCS — это CIELAB. AToB0Tag — это устройство на ПК с относительным намерением colorimetric. |
CRT, ЖК-монитор | Устройство отображения ("mntr") | PCS — ЭТО CIEXYZ. См. следующие сведения о преобразовании модели. |
Проектор RGB | Цветовое пространство ("spac") | PCS — это CIELAB. |
Принтер RGB и CMYK | Устройство вывода (prtr) | PCS — это CIELAB. |
Виртуальное устройство RGB (не HDR) | Устройство отображения ("mntr") | PCS — ЭТО CIEXYZ. |
Виртуальное устройство RGB (hdr) | Цветовое пространство ("spac") | PCS — это CIELAB. |
Преобразование профилей мониторов не включает создание LUT, а состоит из построения матрицы или модели TRC. Модель, используемая в ICC, немного отличается от модели WCS CRT или ЖК-моделей тем, что отсутствует термин "черная коррекция". В частности:
Модель WCS:
Модель ICC:
Преобразование модели WCS в модель ICC выполняется следующим образом.
Определите новые кривые:
Это не кривые воспроизведения тона, так как они не сопоставляют 1 к 1. Нормализация позволит достичь этого. Окончательные определения модели ICC:
Для виртуальных устройств, не относящихся к HDR RGB, вы также создаете профиль дисплея ICC для повышения эффективности пространства. В этом случае матрицу tristimulus M ICC можно получить непосредственно из первичных объектов профиля WCS без указанного выше преобразования модели. Наконец, важно отметить, что эта матрица tristimulus должна быть хроматически адаптирована к 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 = Количество шагов на источник канала \ устройство(Число\ каналов\ в\ источник\ устройство) x число каналов на устройстве вывода
Как видите, размер таблицы увеличивается экспоненциально в зависимости от количества каналов на исходном устройстве. Многие исходные устройства поддерживают три цветовых канала, например Красный, Зеленый и Синий. Однако если исходное устройство поддерживает четыре канала, например CMYK, размер таблицы и время, необходимое для создания таблицы, увеличиваются в разы от количества шагов. В CMS на основе измерений, где преобразования создаются "на лету", этот раз вполне может быть неприемлемым.
Чтобы сократить время, необходимое для создания таблицы преобразования цветов, можно воспользоваться двумя фактами. Во-первых, в то время как исходное устройство может поддерживать более трех цветовых каналов, промежуточное аппаратно-независимое цветовое пространство (CIECAM02 Ja C b C ) имеет только три цветовых канала. Во-вторых, наиболее трудоемкой частью обработки является не моделирование устройства (преобразование цветовых координат устройства в значения tristimulus), а сопоставление гаммы. Используя эти факты, вы можете создать предварительную таблицу преобразования цветов, которая преобразует цвета в независимом от устройства цветовом пространстве с помощью этапов сопоставления гаммы и, наконец, через цветовую модель выходного устройства. Эта таблица имеет размерность 3. Затем мы создадим окончательную таблицу преобразования цвета измерения четыре путем преобразования исходных цветов в промежуточное пространство, независимое от устройства, а затем, используя предварительную таблицу преобразования цветов, завершим преобразование в цветовое пространство выходного устройства. Таким образом, вы сократите вычисления (количество шагов в таблице подстановки) число\ каналов вычислений сопоставления гаммы до числа шагов в промежуточной таблице ₃ вычислений сопоставления гаммы. Несмотря на то, что вам нужно выполнить ряд шагов в (таблице подстановки) число каналов\ вычислений моделирования устройств и трехмерных подстановок таблиц, это все равно гораздо быстрее, чем исходное вычисление.
Предыдущий процесс будет работать хорошо при условии, что нет необходимости передавать информацию между исходной моделью устройства и любым другим компонентом в преобразовании цвета. Однако если выходное устройство и исходное устройство поддерживают черный цвет, а черный цвет источника используется при определении выходного черного цвета, процесс не сможет должным образом передать информацию об исходном черном цвете. Альтернативным процессом является создание предварительной таблицы преобразования цветов, которая преобразует цвета в независимом от устройства цветовом пространстве только с помощью шагов сопоставления гаммы. Затем создайте окончательную таблицу преобразования цвета измерения четыре, выполнив следующие действия: а) преобразуйте сочетания исходных цветов в промежуточное аппаратно-независимое от устройства пространство, б) выполните действия по сопоставлению гаммы путем интерполяции в предварительной таблице цветов вместо применения фактических процессов сопоставления гаммы; в) использовать полученные значения из шагов сопоставления гаммы и любые сведения о черном канале источника для вычисления цветов устройств вывода с помощью модели устройства вывода. Этот процесс также можно использовать при передаче информации между исходной и выходной моделями устройства, даже если нет черного канала; например, если эти два модуля реализуются с помощью подключаемой архитектуры, которая позволяет осуществлять обмен данными между модулями.
Предыдущие два процесса можно использовать для эффективного увеличения времени, необходимого для создания таблицы преобразования четырехмерных цветов.
CheckGamut
Вызовы ICM CreateTransform и CreateMultiProfileTransform принимают слово значений флагов, одним из которых является ENABLE_GAMUT_CHECKING. Если этот флаг установлен, CITE должен создать преобразование по-другому. Начальные шаги одинаковы: необходимо инициализировать исходные и конечные ЦС, а затем инициализировать дескрипторы границ исходной и целевой гаммы. Независимо от указанного намерения, необходимо использовать CheckGamut GMM. CheckGamut GMM следует инициализировать с помощью моделей исходного и целевого устройств и дескрипторов границ гаммы. Однако затем преобразование должно создать усеченное преобразование, включающее модель исходного устройства, исходный CAM, все промежуточные ГММ и CheckGamut GMM. Это гарантирует, что значения delta J, delta C и delta h, выходные checkGamut CMM становятся окончательными результирующие значения.
Значение CheckGamut ясно, если в преобразовании есть только два профиля устройства. Если имеется более двух профилей устройств и более двух GMM, Функция CheckGamut сообщает, попадают ли цвета, преобразованные с помощью первой модели устройства и всех, кроме последнего GMM, в гамму целевого устройства.
Связанные темы