Как правильно визуализировать видимый спектр с равномерной интенсивностью?

8

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

текущее изображение я мог генерировать

Здесь фон не идеально черный, чтобы можно было внести отрицательный вклад от функций подбора цвета:

функции согласования цветов

Но проблема в том, что изображение, кажется, имеет провал в интенсивности где-то около 490 нм. Я предполагаю, что это связано с суммой трех функций, имеющих минимум там. Посмотрите сумму, построенную в зависимости от длины волны:

сумма трех функций сопоставления цветов

Итак, мой вопрос сейчас: как я могу исправить интенсивность изображения? Существует ли какой-либо стандарт для учета спектральной чувствительности при преобразовании длины волны в представление RGB / XYZ?

Руслан
источник
Здесь я нашел некоторую информацию по этому вопросу
Майкл Вайзенфельд
Посмотрите на эту ветку, в частности, ответ Грега Уорда позже в постах. Я думаю, что это связано с вашим вопросом. radiance-online.org:447/pipermail/radiance-general/2015-June/...
али
@ali, ты имеешь в виду, что это связано с моим глупым добавлением невзвешенных значений RGB? Я уже нашел эту ошибку и отразил ее в своем ответе.
Руслан

Ответы:

3

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

На самом деле это неправильный способ суммирования этих функций: модель sRGB указывает, что для получения светимости необходимо взвешивать компоненты RGB с соответствующими весами. Тогда, что неудивительно, светимость станет равной Y-компоненте XYZ-представления.

проблема в том, что изображение, кажется, имеет провал в интенсивности где-то около 490 нм

Я действительно могу видеть провал не только около 490 нм, но и меньший около 570 нм.

Во всяком случае, я думаю, что нашел причину для этого. Прежде всего, давайте нанесем ненасыщенные цвета, используемые при рендеринге, на диаграмму цветности:

диаграмма цветности с ненасыщенным спектром внутри

Пунктирный треугольник - это гамма sRGB, а острие, образованное двумя нижними линиями зеленой кривой, соответствует белой (серой) точке D65. Обратите внимание, что от белой точки есть три «шишки», соответствующие фиолетовому, голубовато-зеленому и красному. Или, что имеется большой провал в насыщении в направлении 490 нм и умеренное уменьшение в направлении около 570 нм. Давайте охарактеризуем это графически, изобразив норму отличия отрисованных точек от белой точки:

график меры насыщенности

Это именно то , что я воспринимаю визуально на изображении с точки зрения насыщенности и, таким образом, смешивания с фоном.

Вы можете спросить, откуда взялась эта странная форма? И ответ - из спектрального локуса в полном пространстве XYZ. См. Следующий рисунок: синяя кривая - это спектральный локус, а оранжевая - его проекция на плоскость, перпендикулярную вектору {1,1,1}.

спектральный локус в пространстве XYZ

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

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

Руслан
источник