цветовой локус xyY выглядит неправильно

Я только что закончил преобразование цвета xyY в RGB. Я использую цветовое пространство sRGB.

Когда я перебираю координаты x и y, я получаю следующий вывод: введите здесь описание изображения

Белая точка (D65) отмечена черным пикселем.

Однако это то, что я должен получить: введите здесь описание изображения

Я изо всех сил старался обрезать гамму (я создал ограничивающие линии, а затем использовал Photoshop для удаления вне этих границ), но очевидно, что белая область слишком велика, красная область слишком мала и многое другое.

Я протестировал несколько разных цветов XYZ и преобразовал их в RGB с помощью моей программы и этого веб-сайта, и они совпали с погрешностью ( <0.1).

Любые идеи о том, что может вызвать эти проблемы?

ИЗМЕНИТЬ

Похоже, мой вывод точно такой же, как Как определить, находится ли цвет xyY в пределах гаммы CIE 1931?.

(если не обрезать)

Это заставляет меня поверить, что, возможно, я не сделал ничего плохого, но до сих пор не объяснено, почему гамма Википедии отличается.


person MCMastery    schedule 22.03.2018    source источник
comment
Не могли бы вы поделиться своим окончательным кодом где-нибудь? мучаюсь с похожим вопросом.   -  person Union find    schedule 19.06.2019
comment
@Learningstatsbyexample не уверен, что смогу найти его сейчас, но моя проблема заключалась в том, что я просто зажимал значения r, g, b до [0,1], но правильный способ - нормализовать его как вектор. Надеюсь, это поможет   -  person MCMastery    schedule 21.06.2019


Ответы (1)


Вы должны показать код, но, вероятно, я могу догадаться.

Цвета трехмерны. С фигурой CIE xy на фигуры наносят всего несколько цветов. Часто это не просто проекции, а более странные поверхности.

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

В субфракционном цвете вы просто умножаете числа (цвета нормируются от 0 до 1). Аддитивный (как вы хотели бы сделать): вы добавляете компоненты, но затем вы нормализуете значение до Y = 1 (возможно, только если Y> 1), а затем дальнейшее масштабирование. Таким образом, вы сохраните оттенок, но цвет не будет обрезан (Примечание: при масштабировании вы должны учитывать разный вес R, G, B в Y).

Ваш случай кажется неправильным: вы добавляете цвет и просто обрезаете R, G или B, чтобы не превышать максимум (1, 100 или 255). А вот это: изменить оттенок, сделать цвет тусклым. (может быть, вы просто сделали вычитание цвета, поэтому умножение, но визуально что-то не так).

person Giacomo Catenazzi    schedule 22.03.2018
comment
Да, я просто зажимаю R, G, B, наверное, тогда что-то не так. Так что я должен изменить оттенок? Использовать HSL? - person MCMastery; 22.03.2018
comment
Нет, вы проверяете, насколько вы ошибаетесь на неправильном канале, и масштабируете также другие каналы (используя вес цвета Y для разных каналов). - person Giacomo Catenazzi; 22.03.2018
comment
Ах, значит, я масштабирую все значения так, чтобы значение, которое выходит за пределы диапазона, больше всего попадало в диапазон? сейчас попробую - person MCMastery; 22.03.2018