Границы видимой гаммы в цветовом пространстве CIE
Я хотел бы знать, существует ли какой-либо математический способ определения границ видимого спектра / гаммы в цветовом пространстве CIE (например, Lab, XYZ). Заранее спасибо!
1 ответ
Ммм... это, кажется, не очень хорошая формулировка правильного вопроса.
Как указывал боскарол, граница человеческой гаммы определяется "color matching functions"
что вы решите использовать, которые относятся к типу "standard observer"
вам нужно, т.е. 2° (1931, often used)
или же 10° (1964, a bit rare)
или что-то новое, как cvrl.org proposed 2006 observers (2° or 10°)
Чтобы получить очки в CIE xy 1931 chromaticity diagram
что вы положили в своем сообщении, вы должны применить преобразование XYZ to Yxy
к 3 функциям сопоставления цветов x_bar, y_bar and z_bar
что вы найдете в данных CMF наблюдателя стандарта, например. здесь: http://www.cvrl.org/ затем проверьте CMFs
и выберите один файл для загрузки.
Координаты spectrum locus
(пределы гаммы человеческого наблюдателя), для каждой длины волны, xy
координаты, которые вы получите от XYZ to Yxy
преобразование, которое идет, например, в Python 2.7:
def XYZ_to_Yxy(X,Y,Z):
"""for each wavelength of the CMFs, you will replace X, Y, Z by x_bar, y_bar, z_bar here..."""
x = X/(X+Y+Z)
y = Y/(X+Y+Z)
return Y,x,y
РЕДАКТИРОВАТЬ Я забыл упомянуть, что spectrum locus
является только кривой частью предела. Прямая линия внизу называется "line of purples"
и чтобы получить его координаты XY на диаграмме, вы можете просто провести прямую линию между точкой, которая соответствует 380 nm
(сине-фиолетовый) и тот, для 730 nm
(крайний красный).
Недостаток этой техники в том, что она только даст вам пределы chromaticity
(2D), в то время как реальное устройство или так гамма должна быть в 3D
Чтобы решить эту проблему более сложно, есть некоторые алгоритмы, доступные для построения гаммы в CIE L*a*b* color space
например, которые описаны где-то на этом сайте:
http://www.brucelindbloom.com/index.html?LabGamutDisplayHelp.html
удачи!