Если два цвета имеют одинаковую колориметрию CIE, они будут совпадать при одинаковых условиях просмотра. Однако, поскольку цветные изображения обычно изготавливаются для широкого спектра окружений просмотра, необходимо выйти за рамки простого применения системы CIE.
По этой причине Международный консорциум цветов (ICC) определил систему управления цветом (CMS), которая обеспечивает средство для передачи цветовой информации между входами, выхода и отображения. CMS использует профили устройств, которые содержат информацию о цвете, характерную для конкретного устройства. Поставщики, поддерживающие CMS, предоставляют профили, которые характеризуют цветопередачу их устройств, и методы, называемые Color Management Modules (CMM), которые интерпретируют содержимое каждого профиля и выполняют необходимую обработку изображений.
Профили устройств содержат информацию, которую системы управления цветом должны преобразовывать цветовые данные между устройствами. Любое преобразование между цветовыми пространствами является математическим преобразованием из пространства некоторой области в пространство области значений. При преобразованиях на основе профиля пространство домена часто называется исходным пространством, а пространство области значений называется пространством назначения. В модели управления цветом ICC профили используются для представления исходного и целевого пространств.
Для получения дополнительной информации о системах управления цветом перейдите на сайт Международного консорциума цветов, http://www.color.org.
Чтобы считать профиль ICC в рабочую область, используйте iccread
функция. В этом примере функция читается в профиле для цветового пространства, которое описывает цветовые мониторы.
P = iccread('sRGB.icm');
Вы можете использовать iccfind
функция для поиска цветовых профилей ICC в вашей системе или для поиска определенного цветового профиля ICC, описание которого содержит определенную текстовую строку. Чтобы получить имя директории, который является системным репозиторием по умолчанию для профилей ICC, используйте iccroot
.
iccread
возвращает содержимое профиля в структуре P
. Все профили содержат заголовок, таблицу тегов и ряд маркированных элементов. Заголовок содержит общую информацию о профиле, таком как класс устройства, цветовое пространство устройства и размер файла. Маркированные элементы или теги являются конструкциями данных, которые содержат информацию, используемую CMM. Для получения дополнительной информации о содержимом этой структуры смотрите iccread
страница с описанием функции.
Использование iccread
можно прочитать оба форматов профиля ICC версии 2 (ICC.1:2001-04) или версии 4 (ICC.1:2001-12). Подробную информацию об этих спецификациях и их различиях можно найти на веб-сайте ICC, http://www.color.org.
Чтобы экспортировать информацию профиля ICC из рабочей области в файл, используйте iccwrite
функция. Этот пример читает профиль в рабочую область и затем записывает информацию профиля в новый файл.
P = iccread('sRGB.icm'); P_new = iccwrite(P,'my_profile.icm');
iccwrite
возвращает профиль, записанный в файл в P_new
потому что он может отличаться от профиля входа P
. Для примера, iccwrite
обновляет Filename
поле в P
для соответствия имени файла, заданного как второй аргумент.
Когда он создает файл выхода, iccwrite
проверяет валидность структуры входного профиля. При отсутствии обязательных полей iccwrite
возвращает сообщение об ошибке. Для получения дополнительной информации о записи данных профиля ICC в файл, смотрите iccwrite
страница с описанием функции. Чтобы определить, является ли структура допустимым профилем ICC, используйте isicc
функция.
Использование iccwrite
можно экспортировать информацию о профиле в обоих форматах: ICC версии 2 (ICC.1:2001-04) или ICC версии 4 (ICC.1:2001-12). Значение Version
поле в заголовке профиля файла определяет версию формата. Подробную информацию об этих спецификациях и их различиях можно найти на веб-сайте ICC, http://www.color.org.
В этом примере показано, как преобразовать данные о цвете из цветового пространства RGB, используемого монитором, в цветовое пространство CMYK, используемое принтером. Для этого преобразования требуется два профиля: профиль монитора и профиль принтера. Исходным цветовым пространством в этом примере является монитор RGB, а целевым - принтер CMYK:
Импорт данных цветового пространства RGB. Этот пример импортирует цветное изображение RGB в рабочую область.
I_rgb = imread('peppers.png');
Чтение профилей ICC. Считайте исходные и целевые профили в рабочую область. Этот пример использует профиль sRGB в качестве исходного профиля. Профиль sRGB представляет собой стандартное для отрасли цветовое пространство, описывающее цветовой монитор.
inprof = iccread('sRGB.icm');
Для профиля назначения в примере используется профиль, описывающий конкретный цветной принтер. Поставщик принтера предоставляет этот профиль. (Следующий профиль и несколько других полезных профилей могут быть получены как загрузки из www.adobe.com
.)
outprof = iccread('USSheetfedCoated.icc');
Создайте структуру преобразования цвета. Необходимо создать структуру преобразования цвета, чтобы определить преобразование между цветовыми пространствами в профилях. Вы используете makecform
функция для создания структуры, задающая в качестве аргумента строку типа преобразования. Этот пример создает структуру преобразования цвета, которая задает преобразование из цветовых данных RGB в цветовые данные CMYK. Преобразование цветового пространства может включать промежуточное преобразование в независимое от устройства цветовое пространство, называемое Profile Connection Space (PCS), но это прозрачно для пользователя.
C = makecform('icc',inprof,outprof);
Выполните преобразование. Вы используете applycform
функция для выполнения преобразования, задающая в качестве аргументов цветовые данные, которые вы хотите преобразовать, и структуру преобразования цвета, которая определяет преобразование. Функция возвращает преобразованные данные.
I_cmyk = applycform(I_rgb,C);
Запишите преобразованные данные в файл. Для экспорта данных CMYK используйте imwrite
функция, задающая формат как TIFF. Если формат TIFF, а данные являются массивом m на n на 4, imwrite
записывает данные CMYK в файл.
imwrite(I_cmyk,'pep_cmyk.tif','tif')
Чтобы проверить, что данные CMYK были записаны в файл, используйте imfinfo
получить информацию о файле и посмотреть на PhotometricInterpretation
поле.
info = imfinfo('pep_cmyk.tif');
info.PhotometricInterpretation
ans = 'CMYK'
Для большинства устройств область значений воспроизводимых цветов намного меньше, чем область значений цветов, представленных PCS. Именно по этой причине четыре намерения визуализации (или методы отображения гаммы) заданы в формате профиля. Каждый имеет отдельные эстетические и цветовой точности компромиссы.
При создании структуры преобразования цвета на основе профиля можно задать цель визуализации для источника, а также целевых профилей. Для получения дополнительной информации смотрите makecform
справочная информация.