В информатике и цифровой графике понятие цветовая модель — это формальная система, которая описывает способ представления цвета с помощью чисел. Часто под термином "цвет" понимают не только ощущение, но и его числовое кодирование: например, три числа в RGB (Red, Green, Blue) либо четыре числа в CMYK. Важно различать цветовую модель и цветовое пространство: модель задаёт способ кодирования (набор компонент и их смысл), тогда как пространство — это конкретная интерпретация модели с привязкой к физическому или визуальному диапазону (например, sRGB, Adobe RGB, ProPhoto). В учебной практике от этого зависит, как мы конвертируем цвета между устройствами и как корректно отображаем или печатаем изображения.
Начнём с самых распространённых моделей. RGB — аддитивная модель, используемая для мониторных и электронных носителей. Каждый цвет задаётся тремя компонентами: R, G, B. Если все компоненты равны нулю — получаем чёрный, если максимально — белый. Для представления на компьютере обычно применяется 8-битный канал, то есть диапазон 0–255 для каждой компоненты (итого 24-битный цвет = 16 777 216 оттенков). Пример: шестнадцатеричный код #FF7F00 означает R=255, G=127, B=0. Чтобы перейти к нормированным значениям для вычислений делим на 255: R=1.0, G≈0.498, B=0.0.
Рассмотрим шаги перевода цвета из RGB в HSV (Hue, Saturation, Value), что часто полезно при выборе оттенка или при алгоритмах обработки изображения. Шаги: 1) нормируем R,G,B в диапазон [0,1]; 2) находим max = max(R,G,B) и min = min(R,G,B); 3) delta = max - min; 4) вычисляем яркость V = max; 5) насыщенность S = 0 если max = 0, иначе S = delta / max; 6) определяем оттенок H по правилу: если delta = 0 → H = 0 (нейтральный), если max = R → H = 60 * ((G - B) / delta mod 6), если max = G → H = 60 * ((B - R) / delta + 2), если max = B → H = 60 * ((R - G) / delta + 4). Пример с #FF7F00: R=1, G≈0.498, B=0 → max=1, min=0, delta=1 → V=1, S=1, H≈60*(0.498/1)=29.88°, то есть тёплый оранжевый.
Для печати применяется CMYK — субтрактивная модель, где цвета формируются путём вычитания отражённого света с помощью красок: Cyan, Magenta, Yellow и Key (Black). Алгоритм перевода RGB → CMYK (при нормированных R,G,B в [0,1]) часто формулируется как: K = 1 - max(R,G,B); далее C = (1 - R - K) / (1 - K) (если 1-K ≠ 0), аналогично для M и Y. Пример: для R=1, G≈0.498, B=0 получаем K = 0, C = 0, M ≈ 0.502, Y = 1. На практике печать требует калибровки и цветовой профилизации: одно и то же CMYK-значение на разных принтерах даст различный визуальный результат из‑за отличного цветового охвата (gamut) и типовых красок.
Важная тема — гамма-коррекция и линейность. Сенсоры и экраны не работают линейно: значение пикселя в формате sRGB уже «искажено» для учёта восприятия яркости глазом. При обработке изображений (например, при смешивании цветов, фильтрах, подсчёте освещённости) нужно сначала перевести sRGB в линейное пространство, применив обратную sRGB‑функцию передачи (приблизительно степенная функция с показателем ~2.2, фактическая — кусочно-линейная/степенная). Общие шаги: 1) нормировать канал s = S/255; 2) если s ≤ 0.04045 → лин = s / 12.92, иначе лин = ((s + 0.055) / 1.055) ^ 2.4; 3) выполнять линейные операции; 4) преобразовать обратно с обратной функцией, прежде чем отобразить. Это предотвращает ошибки, когда напрямую усреднять нелинейные значения искажает яркость.
Ещё одна важная модель — CIE XYZ и связанное с ней пространство Lab, основанные на человеческом зрении. Это абстрактные модели цветности, приближённые к работе сетчатки и восприятию. Пространство Lab (L* — светлота, a* и b* — цветовая двухкомпонентная плоскость) широко используется для задач, где важна «перцептуальная» разница между цветами: в Lab одинаковые числовые расстояния ближе соответствуют одинаковой заметной разнице цветов для человеческого глаза. Конвертация RGB → Lab проходит через промежуточный шаг RGB → XYZ с учётом эталонного освещения (illuminant), например D65, а затем нелинейными преобразованиями в L*, a*, b*.
Понятие глубина цвета (bit depth) определяет точность представления каждой компонентной величины. Типичные значения: 8 бит/канал (24-битный цвет без альфы), 16 бит/канал (48-битный) и 32-битный с плавающей точкой для HDR. Глубина влияет на количество доступных оттенков и на видимые артефакты при градиентах (полосы). Для уменьшения размера изображений используется индексирование цветов (палитры) — 256 цветов или меньше — где исходный цвет заменяется индексом в таблице цветов: экономично, но ограничено по качеству. Для визуального улучшения при малой палитре применяют дизеринг — распределение ошибки к соседним пикселям (алгоритм Флойда‑Стейнберга и др.).
В компьютерных системах для хранения и передачи цвета часто используются форматы: шестнадцатеричные строки (#RRGGBB), упаковка в 32-битное целое (например 0xRRGGBBAA), и представления с нормированными плавающими числами. Пример перевода: код #FF7F00 → R=0xFF=255, G=0x7F=127, B=0x00=0. Нормализуем: r=255/255=1.0, g=127/255≈0.498, b=0. Конвертация обратно: r*255 округляем до целого и форматируем двухсимвольной hex-строкой. Для хранения с прозрачностью часто используется альфа-канал (A), где 0 — полностью прозрачный, 1 (или 255) — полностью непрозрачный. Формула смешивания (альфа-блендинг): Cout = Alpha_s * Cs + (1 - Alpha_s) * Cd, где s — исходный (source), d — фон (destination). Для корректного смешивания важно выполнять операцию в линейном пространстве — после гамма-декодирования.
Ещё один важный аспект — профили цвета ICC и цветовой менеджмент. Профиль ICC описывает тракт преобразования между устройственным пространством (например, конкретный монитор или принтер) и независимым пространством (обычно CIE XYZ). Шаги использования профиля: 1) определить профиль исходного файла (или встраивать его); 2) конвертировать цвета в промежуточное PCS (Profile Connection Space, обычно XYZ); 3) конвертировать в профиль целевого устройства; 4) при необходимости применять рендеринг-подход (perceptual, relative colorimetric и т. п.). Это позволяет минимизировать несоответствие цвета между устройствами.
Практические советы и типичные ошибки. Во-первых, всегда проверяйте, в каком цветовом пространстве задано изображение: sRGB — стандарт для веба, но многие камеры и профессиональные графические приложения используют Adobe RGB или ProPhoto. Во-вторых, при математических операциях (смешивание, освещение) переводите цвет в линейное пространство. В-третьих, если работаете с печатью — переводите в CMYK и учитывайте профиль принтера; простая формула RGB→CMYK без учёта профиля может привести к неожиданно тусклым или не темным цветам. В-четвёртых, если нужно сравнивать цвета с учётом восприятия — используйте Lab и вычисляйте ΔE (разницу цветов).
Ниже приведён краткий свод терминов и алгоритмических шагов, которые пригодятся в решениях задач и при разработке приложений (список для повторения):
В завершение: понимание цветовой модели и способов представления цвета — обязательная часть компетенций программиста, дизайнера или инженера, работающего с изображениями. Это не только теория, но и практические навыки — корректная конвертация между моделями, учёт гаммы, правильное смешивание с альфой и использование ICC‑профилей позволяют получать ожидаемый визуальный результат на разных устройствах. Развивая эти навыки, вы научитесь не только расчетам и кодированию, но и понимать, почему один и тот же цвет на экране и в печати может выглядеть по-разному — и как это исправить.