python

Объект, камера, монитор – что происходит с цветом?

  • вторник, 22 февраля 2022 г. в 00:39:05
https://habr.com/ru/post/652653/
  • Python
  • Обработка изображений
  • Софт
  • Фототехника


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

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

Всегда правильно можно прочесть обозначение цвета в какой-либо системе его измерения. Таких систем множество. Все они создавались для определённых целей, имеют свои особенности. Цвет в них имеет несколько характеристик. Если прочесть цвет в системе sRGB, получим три числа, например rgb(23, 129, 242). Это обозначение цифрового цвета.

Но эта система не может передать цвет реальной материальной поверхности. Если применить аппаратные средства (колориметры, компараторы, спектрофотометры и пр.) можно получить для одной и той же поверхности различные значения цвета зависящие от освещения, и в различных цветовых системах.

Одна из распространённых цветовых моделей HSV (англ. Hue, Saturation, Value — тоннасыщенностьзначение) или HSB (англ. Hue, Saturation, Brightness — тоннасыщенностьяркость).

H (Hue) – Цветовой тон в диапазоне 0 – 360° или 0 – 100, или 0 – 1.

S (Saturation) – насыщенность в диапазоне 0 – 100, или 0 – 1.

V (Value) или B (Brightness) – значение цвета или яркость в диапазоне 0 – 100 или 0 – 1.

Есть ещё HSL, где последний параметр светлота (это не яркость).

Эти цветовые модели предназначены для описания реальных цветов.

Об этих и других цветовых моделях в интернете есть множество статей.

Наша задача состоит в том, чтобы понять, как цифровой фотоаппарат передаёт цвет монитору, а тот нашим глазам. Как понять, правильно ли они справляются со своей задачей? Какие на пути передачи цвета возникают проблемы? Останется ли чистый красный цвет чистым красным после съёмки?

Один из самых простых путей для решения нашей задачи сфотографировать тест с экрана монитора и сравнить цвета теста на исходном экране с цветами после фотографирования и повторного воспроизведения на экране.

Задача на первый взгляд простая.

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

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

Тем не менее, если фотоаппарат сдвигает координаты чистого цвета относительно координат чистого цвета монитора, то сложно получить реалистично насыщенные цвета на фотографии.

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

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

Для точного измерения цифрового цвета можно применять разнообразные пипетки для снятия цвета. Но мы для ускорения и повышения надёжности результата применим утилиту Camera написанную мной на Python 3 и Qt5. Кто-то иногда ругает этот язык, но я как не программист могу на нём реализовывать свои идеи, что называется, малой кровью.

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

Файлы программы находятся здесь с исходниками.

Главное тестовое изображение 1.png.
Главное тестовое изображение 1.png.

На изображении достаточно точно переданы цвета и монохромная шкала. Числа в нижней части это значение яркости в HSV.

Это изображение открывается при запуске программы. Его следует сфотографировать. Можно фотографировать прямо в окне программы, а можно открыв файл отдельно. Важно, чтобы в кадре было по возможности меньше искажений, а тёмные поля заполняли кадр. Изображение должно быть в формате JPG, который дают все цифровые камеры. Имя файла сделайте простым. В качестве примера такого файла в папке с прграммой файл 1b.JPG, имя которого по умолчанию вписано в поле ввода. Положите свой файл в папку с программой. В поле ввода внесите имя файла полученного с цифровой камеры.

Если нажать кнопку <Показать кадр>, то вы увидите, что ваш кадр занял место исходного теста. Изображение слегка размыто. Это размытие программа делает намеренно, чтобы сгладить возможные артефакты в кадре после съёмки.

Если нажать кнопку <Показать кадр>
Если нажать кнопку <Показать кадр>

На тестовых полях расположились точки измерения цвета. Если некоторые из них «уплыли» и не очень хорошо лежат в тестовом поле, всю сетку точек можно сдвинуть по вертикали и по горизонтали посредством ввода значений в поля Поправка X и Поправка Y. После этого следует снова нажать <Показать кадр>, чтобы применить сдвиг.

Цвета на этом изображении похожи, но не совпадают с оригиналом. Спектральная чувствительность сенсоров матрицы фотоаппарата не совпадает со спектром излучения пикселей матрицы экрана. Чистые "мониторные" цвета преобразуются в составные. Нажмём кнопку <Показать тест>.

Графики теста
Графики теста

На этих графиках:

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

Сплошная тёмная линия это тонопередача фотокамерой серой шкалы.

Сплошная жёлтая линия это линия почти идеальной тонопередачи для монитора.

В нижней части графика три цветные линии это отличие передаваемого камерой основного "мониторного" цвета от оригинала в градусах HSV.

Оригинальный красный по этой шкале имеет H=0. На графике видно, отличие цвета от нуля на 5 - 10 градусов по всей длине, а в начале даже на 20 градусов. Отклонение красного цвета камеры направлено в сторону пожелтения.

Синий основной цвет имеет H=241 градус. На графике этот уровень для синего цвета совмещён с нулевой линией. Отклонения мало заметны.

Зелёный основной цвет H=119 градусов. Этот уровень также совмещён с нулевой линией. Отклонение зелёного цвета камеры направлено в сторону пожелтения.

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

Идеальный график теста
Идеальный график теста

Введите в поле ввода имя теста 1.png и выведите тест этого тестового изображения (в качестве кадра показ невозможен). Это не достижимый идеал.

Вполне возможно что в вашем тесте кривые передачи цвета в области 10 – 30 % получат большой разброс. Это значит, что ваш монитор плохо передаёт тёмные тона. Нужна калибровка. Иногда эти кривые выглядят даже лучше, чем на приведённых рисунках. Значит у вас всё хорошо, не считая самой разности передачи чистых цветов камерой и монитором.

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

Описанная программа не предназначена для калибровки монитора. Это скорее пособие для углублённого понимания процесса цветопередачи в цепочке камера-компьютер-монитор. Тем не менее некоторая информация о качестве калибровки в графиках содержится.