Чтобы преобразовать длину волны в цвет RGB
Сначала обратитесь к дополнительному стандартному колориметрическому наблюдателю CIE 1964 диаграмма ( архив )
https://imgur.com/a/JDatZNm
и найдите значения функции соответствия цветов CIE для нужной длины волны.
Например, я хочу получить цвет света 455 нм:
Для нашей желаемой длины волны:
| nm | CIE color matching functions | Chromacity coordinates |
| nm | X | Y | Z | x | y | z |
|-----|----------|----------|---------|---------|---------|---------|
| 455 | 0.342957 | 0.106256 | 1.90070 | 0.14594 | 0.04522 | 0.80884 |
Примечание: Координаты цветности просто рассчитываются из функций соответствия цветов CIE:
x = X / (X+Y+Z)
y = Y / (X+Y+Z)
z = Z / (Z+Y+Z)
Учитывая, что:
X+Y+Z = 0.342257+0.106256+1.90070 = 2.349913
рассчитаем:
x = 0.342257 / 2.349913 = 0.145945
y = 0.106256 / 2.349913 = 0.045217
z = 1.900700 / 2.349913 = 0.808838
Ваш 455 нм свет указан в двух разных цветовых пространствах:
- XYZ: (0,342957, 0,106256, 1,900700)
- xyz: (0,145945, 0,045217, 0,808838)
Мы также можем добавить третье цветовое пространство: xyY
x = x = 0.145945
y = y = 0.045217
Y = y = 0.045217
Теперь у нас есть свет 455 нм, указанный в 3 различных цветовых пространствах:
- XYZ: (0,342957, 0,106256, 1,900700)
- xyz: (0,145945, 0,045217, 0,808838)
- xyY: (0,145945, 0,045217, 0,045217)
Итак, мы преобразовали длину волны чистого монохроматического излучаемого света в цвет XYZ . Теперь мы хотим преобразовать это в RGB.
Как конвертировать XYZ в RGB?
XYZ , xyz и xyY - это абсолютные цветовые пространства, которые описывают цвета с использованием абсолютной физики.
Между тем каждое практическое цветовое пространство, которое используют люди:
зависит от белой точки . Затем цвета описываются как относящиеся к этой белой точке.
Например,
- RGB белый (255,255,255) означает "белый"
- Lab white (100, 0, 0) означает «белый»
- LCH белый (100, 0, 309) означает «белый»
- HSL белый (240, 0, 100) означает "белый"
- HSV белый (240, 0, 100) означает «белый»
Но такого цвета, как белый, не существует. Как вы определяете белый? Цвет солнечного света?
- в какое время суток?
- сколько облачного покрова?
- на какой широте?
- на Земле?
Некоторые люди используют белый цвет своих (ужасно оранжевых) ламп накаливания для обозначения белого. Некоторые люди используют цвет своих флуоресцентных ламп. Не существует абсолютного физического определения белого - белое в наших мозгах.
Итак, мы должны выбрать белый
Мы должны выбрать белого. (На самом деле вам нужно выбрать белый.) И есть из множества белых на выбор:
Я выберу белый для тебя. Тот же самый белый цвет, который использует sRGB:
- D65 - дневное освещение ясного летнего дня в северной Европе
D65 (имеет цвет, близкий к 6504K, но не совсем из-за атмосферы Земли), имеет цвет:
- XYZ_D65: (0.95047, 1.00000, 1.08883)
С его помощью вы можете конвертировать XYZ
в Lab
(или Luv
) - цветпространство одинаково способно выразить все теоретические цвета.И теперь у нас есть 4-е представление цветового пространства нашего 445 нм монохроматического излучения света:
- XYZ: (0.342957, 0.106256, 1.900700)
- xyz: (0,145945, 0,045217, 0,808838)
- xyY: (0,145945, 0,045217, 0,045217)
- Лаборатория: (38,94259, 119.14058, -146.08508) (при условии d65)
Но вы хотите, чтобы RGB
Lab
(и Luv
) были относительными цветовыми пространствамидо немного белая точка.Даже если вы были вынуждены выбрать произвольную белую точку, вы все равно можете представить все возможные цвета.
RGB не такой.С RGB:
- не только цвет относительно некоторой белой точки
- , но также и относительно трех основных цветов: красный, зеленый, синий
Если вы указываете цвет RGB (255, 0, 0), вы говорите, что хотите «просто красный».Но нет определения красного.Нет такой вещи как «красный», «зеленый» или «синий».Радуга непрерывна и не идет со стрелкой, говорящей:
Это красный
И снова это означает, что мы должны выбрать три выбирают три основных цвета.Вы должны выбрать три основных цвета, чтобы сказать, что такое «красный», «зеленый» и «синий».И снова у вас есть много различных определений красного, зеленого и синего цветов:
- CIE 1931
- ROMM RGB
- Adobe Wide Gamut RGB
- DCI-P3
- NTSC (1953)
- Apple RGB
- sRGB
- Японский NTSC
- PAL / SECAM
- Adobe RGB 98
- scRGB
Я выберу для вас.Я выберу эти три цвета:
- Красный : xyY = (0,6400, 0,3300, 0,2126)
- Зеленый: xyY = (0,3000, 0,6000, 0,7152)
- Синий: xyY = (0,1500, 0,0600, 0,0722)
Это были также основные цветавыбранный международным комитетом в 1996 году.
Они создали стандарт, в котором все должны использовать:
- Whitepoint : D65 дневной свет
- Красный : (0,6400, 0,3300, 0,2126)
- Зеленый : (0,3000, 0,6000, 0,7152)
- Синий: (0,1500, 0,0600, 0,0722)
И они назвали этот стандарт sRGB
.
Окончательный толчок
Теперь, когда мы выбрали
- white-point
- три основных цвета
теперь мы можем преобразовать ваш цвет XYZ в RGB:
- RGB = (1.47450, -178.21694, 345.59392)
К сожалению, существуют некоторые проблемы счто значение RGB:
- на вашем мониторе не отображается отрицательное зеленое (-178.21694);это означает, что это цвет вне того, что может отображать ваш монитор.
- ваш монитор не может отображать больше синего, чем 255 (345,59392);только монитор будет таким же синим, как и синий - он не может быть синее.Это означает, что это цвет вне того, что может отображать ваш монитор.
Итак, нам нужно округлить:
- XYZ: (0.342957, 0.106256, 1.900700)
- xyz: (0,145945, 0,045217, 0,808838)
- xyY: (0,145945, 0,045217, 0,045217)
- Лаборатория: (38,94259, 119,14058, -146,08508) (d65)
- RGB: (1, 0, 255) (sRGB)
И теперь у нас есть ближайшее приближение sRGB с длиной волны 455 нм света: