Путаница в отношении преобразования цветового пространства RGB

Меня смущают некоторые аспекты цветового пространства RGB. Я работаю над инструментом, который помогает преобразовывать цвета в разные цветовые пространства (ориентированные на цифровую графику). Одной из важных функций, которую я хочу реализовать, является преобразование цветов из RGB в CIE-Lab. После прочтения нескольких статей стало очевидно, что сначала мне нужно преобразовать RGB в XYZ, а затем XYZ. в лаб. Существует множество веб-сайтов, на которых упоминается математика, стоящая за этими преобразованиями. В частности, сайт Линдблума. На этом веб-сайте представлены матрицы, которые можно использовать для прямого преобразования между несколькими цветовыми пространствами RGB.

Теперь я запутался, какую матрицу использовать. В контексте цифровой графики/визуализации RGB означает линейный RGB (верно?). Если кто-то предоставит мне значения (r, g, b), я буду использовать одну из этих матриц преобразования и вычислять X, Y, Z. Но мой вопрос: какую матрицу использовать? Мое предположение было «srgb» с «D65» в качестве ссылки на белый, но я не уверен в этом. Любые подсказки относительно того, какую матрицу использовать, когда пользователь предоставляет линейный RGB?

Я знаю, что могу преобразовать sRGB в RGB, применив гамма-преобразование, но я запутался в этих матрицах преобразования.


person Dexter    schedule 30.08.2020    source источник


Ответы (1)


В контексте цифровой графики/визуализации RGB означает линейный RGB (верно?).

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

['ACES2065-1', 'ACEScc', 'ACEScct', 'ACESproxy', 'ACEScg', 'Adobe RGB (1998)', 'Adobe Wide Gamut RGB', 'Apple RGB', 'ALEXA Wide Gamut', 'Best RGB', 'Beta RGB', 'ITU-R BT.470 - 525', 'ITU-R BT.470 - 625', 'ITU-R BT.709', 'ITU-R BT.2020', 'CIE RGB', 'Cinema Gamut', 'ColorMatch RGB', 'DCDM XYZ', 'DCI-P3', 'DCI-P3+', 'Display P3', 'DJI D-Gamut', 'Don RGB 4', 'ECI RGB v2', 'Ekta Space PS 5', 'FilmLight E-Gamut', 'Protune Native', 'Max RGB', 'P3-D65', 'Pal/Secam', 'REDcolor', 'REDcolor2', 'REDcolor3', 'REDcolor4', 'REDWideGamutRGB', 'DRAGONcolor', 'DRAGONcolor2', 'ROMM RGB', 'RIMM RGB', 'ERIMM RGB', 'F-Gamut', 'ProPhoto RGB', 'Russell RGB', 'Sharp RGB', 'SMPTE 240M', 'SMPTE C', 'NTSC (1953)', 'NTSC (1987)', 'S-Gamut', 'S-Gamut3', 'S-Gamut3.Cine', 'Venice S-Gamut3', 'Venice S-Gamut3.Cine', 'sRGB', 'V-Gamut', 'Xtreme RGB']

Каждый из них определяется тремя компонентами:

  • Праймериз
  • Белая точка
  • Передаточные функции

Цитирование стандартного определения ISO 22028-1 аддитивного цветового пространства RGB в полном объеме для справки:

3.3

аддитивное цветовое пространство RGB

колориметрическое цветовое пространство, имеющее три основных цвета (обычно красный, зеленый и синий), так что трехцветные значения CIE XYZ могут быть определены из значений цветового пространства RGB путем формирования взвешенной комбинации трехцветных значений CIE XYZ для отдельных основных цветов, где веса пропорциональны радиометрически линейным значениям цветового пространства для соответствующих основных цветов

Примечание 1 к записи: Простое линейное матричное преобразование 3 × 3 может использоваться для преобразования между трехцветными значениями CIE XYZ и радиометрически линейными значениями цветового пространства для аддитивного цветового пространства RGB.

Примечание 2 к записи: Аддитивные цветовые пространства RGB определяются путем указания значений цветности CIE для набора аддитивных основных цветов RGB и точки белого цветового пространства вместе с функцией передачи компонентов цвета.

Преобразование нормализованной первичной матрицы из RGB в CIE XYZ вычисляется с использованием основных цветов и точки белого. Имея это в виду, чтобы узнать, какую матрицу вам нужно использовать, вам нужно знать, какое цветовое пространство RGB, то есть в каком варианте RGB ваши значения закодированы в первую очередь.

Вот пост, написанный несколько лет назад, в котором объясняются некоторые важные аспекты цветового пространства RGB: https://www.colour-science.org/posts/the-importance-of-terminology.-and-srgb-uncertainty/

person Kel Solaar    schedule 31.08.2020
comment
Просто добавим: с передаточной функцией нам также требуются диапазоны: может быть полный диапазон 8 бит (0-255) или ограниченный диапазон (16-235) и, возможно, количество битов (необязательно, если используется 1,0 или 100). как максимум: количество битов влияет на точность, но не на числовые константы/матрицы преобразования). - person Giacomo Catenazzi; 31.08.2020
comment
Спасибо за объяснение. Тем не менее, я все еще немного смущен. При повседневном использовании непрофессионал не будет знать, над каким цветовым пространством он работает. Так безопасно ли предположить «sRGB»? И будет ли это иметь значение только тогда, когда мы идем в XYZ? Остальные распространенные преобразования, такие как HSL/HEX, не должны быть затронуты этим, верно? - person Dexter; 31.08.2020
comment
Знание того, откуда вы идете, имеет решающее значение для того, чтобы знать, куда вы идете! Поэтому очень важно иметь все характеристики кодирования для ваших данных. sRGB, вероятно, был безопасным предположением несколько лет назад, но ландшафт резко изменился за последние 5 лет с HDR-дисплеем и изобилием цветовых пространств Wide Gamut. Преобразования HSL и HEX обычно не зависят от характеристик кодирования, они ничего не знают о таких вещах, как точка белого. Однако, например, уменьшение некоторого оттенка в данном цветовом пространстве RGB не будет иметь такого же эффекта в другом. - person Kel Solaar; 01.09.2020
comment
На самом деле, даже само умножение ведет себя по-разному в зависимости от спецификации вашего цветового пространства RGB, вот что-то еще очень важное, что я написал несколько лет назад: computergraphics.stackexchange.com/questions/8152/ - person Kel Solaar; 01.09.2020