lock&_lock Ответов: 2

Есть ли преобразование RGB в XYZ и определение значения цвета ?


Я работаю с OpenGL и C. У меня есть вход RGB в openGL, и мне нужно выполнить вычисления в цветовом пространстве CIE XYZ. Поэтому я делаю преобразование, следуя этим правилам преобразования цвета.
|X|   |0.412453 0.357580 0.180423 | |R|   
|Y| = |0.212671 0.715160 0.072169 |.|G|   
|Z|   |0.019334 0.119193 0.950227 | |B|

Теперь, что я имею значение в 3D-пространстве XYZ в цветовое пространство, я хочу, чтобы преобразовать его в 2Д пространстве диаграмма цветности МКО. Поэтому я нормализовал XYZ в плоскость xy.
x = X/(X+Y+Z)   
y = Y/(X+Y+Z) 

Есть ли в любом случае, что я могу нарисовать эту диаграмму цветности CIE и построить точки с помощью openGL ? Я не могу найти никакой информации, связанной с этим.

Что я уже пробовал:

Сделайте преобразование RGB-CIE XYZ и преобразуйте его в 2D плоскость диаграммы цветности xy.

0x01AA

Таким образом, вы знаете, как вычислить XYZ из sRGB, и вы знаете, как вычислить xy из XYZ. Является ли ваша последняя задача показать эти значения "xy" в плоскости "xy" с помощью OpenGL?

Кстати: это для математики, но я предполагаю, что вы уже все это знаете:www.brucelindbloom[^]

2 Ответов

Рейтинг:
2

0x01AA

Я не совсем понимаю в чем именно заключается ваша проблема,
а) OpenGL?
б) расчеты?

Из вашего вопроса я вижу, что вы узнали, как перейти из пространства 3D - XYZ в пространство xy(Y).

В любом случае:
Здесь вы найдете набор из формул преобразования из спектра на XYZ в особенности, цветового пространства sRGB и т. д. и наоборот (конечно искл. 3D назад к спектру):
www.brucelindbloom.com[^]

Вот хорошая статья о CP С также большим количеством справочной информации:
Цветовые темы для программистов[^]

Надеюсь, это поможет.


[Редактировать]
Объяснение того, как вычислить(показать) "подкову лошади" в плоскости xy, слишком много, чтобы объяснить это здесь ;)


lock&_lock

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

Я точно знаю значение копунктальной точки (где сходятся все линии), но я все еще не знаю, как указать это значение, так как копунктальная точка находится не в координате xy, а в значении длины волны. Есть ли какой-нибудь способ, которым я могу сделать это в opengl и C ? Я хочу посмотреть, был ли мой расчет правильным или нет, я подумал, что было бы лучше всего, если бы я мог просто нарисовать график. А сейчас я прочитаю вашу рекомендацию, спасибо. Дайте мне знать, если у вас есть дальнейшие советы.

0x01AA

Добро пожаловать. Не могли бы вы объяснить мне, что именно вы понимаете под "линией замешательства"? Термин "линия путаницы" в данный момент меня немного смущает ;)

И еще одно: я думаю, что для первой 2D-графики я бы использовал что-то более простое, например OpenGL, если только вы уже не знакомы с OpenGL.

0x01AA

Или это, может быть, "только" вопрос, как найти, например, 440 Нм в плоскости xy (что не тривиально, но возможно ответить)?

lock&_lock

привет, 400 Нм будет 0,16 и 0,009. Я хотел нарисовать его с помощью openGL и C, я хочу знать, правильно это или нет. Как я уже сказал в предыдущем комментарии, я нашел учебник в phyton, но я не знаком с phyton. Было бы прекрасно, если бы я мог сделать это с помощью C. Кроме того, к сожалению, я использую glut и OpenGL, а не modernOpenGL. Интересно, возможно ли это? спасибо снова.

0x01AA

Цитата "400Нм было бы 0,16 и 0,009":
Вы используете 2° или 10° наблюдателя?

0x01AA

Мой вышеприведенный вопрос мы можем обсудить, возможно, позже.

Для меня это все еще выглядит так, что вы знаете, как вычислить все точки, но вы не знаете, как показать их в Graphics. Это правда?
Если да, то какую именно среду разработки вы используете (visual studio, .....)? Это помогло бы гораздо больше ответить на вопрос, как показать графику.

lock&_lock

- Привет, спасибо. Да, я не знаю, как нарисовать график в OpenGL с помощью C. Кроме того, я работаю в терминале Mac, используя OpenCV и OpenGL. Что касается Excel, то на данный момент мне просто нужно проверить, но я боюсь, что в конечном итоге мне все равно придется запускать и показывать цветной график в режиме реального времени, если мне нужно будет экспортировать координаты и импортировать их в Excel все время, это будет так неэффективно. Кроме того, все это время вся эта информация, которую я получил, я читал из кучи различных источников, интернета, газет, блогов и т. д. Так что я просто как бы улаживаю все вместе, если у вас есть достойная рекомендация для чтения, я был бы очень признателен, так как вы также знакомы с этой темой.

0x01AA

А если графика нужна только для того, чтобы перепроверить расчеты, то можно, возможно, воспользоваться помощью excel. Что я имею в виду: вы сохраняете свои координаты x/y в файл или гораздо проще копируете серию в буфер обмена, чтобы вставить их в excel и создать там графику.

lock&_lock

Также линия путаницы-это серия линий, где все цвета вдоль одной линии будут восприниматься как один и тот же цвет для дальтоников (путать их), таким образом, линия путаницы.

0x01AA

Хорошо, спасибо вам за это, это ново для меня. Я в основном занимаюсь промышленной колориметрией. Но это обстоятельство мне нужно расследовать, еще раз спасибо.

Рейтинг:
2

Richard MacCutchan

Видеть sRGB - Википедия[^].


lock&_lock

Привет, спасибо, на самом деле я действительно читал, прежде чем опубликовать здесь. Скорее всего, либо это не самая легкая вещь для меня, чтобы понять, или это не там. В нем ничего не говорится ни о спектре на линии, ни о преобразовании в плоскость xy. Так что да, не самый полезный ответ для меня.

Richard MacCutchan

Ну, это не вопрос программирования, на который мы можем ответить за вас. Вам нужно будет провести исследование для себя, чтобы найти самый простой алгоритм для использования.

0x01AA

Это вопрос программирования. OP действительно знает, как вычислять значения, но, похоже, не может показать их в графике OpenGL...

Richard MacCutchan

Нет, он пытается понять, как преобразовать один набор значений (3D) в другой набор (2D). Пока он не знает формулу для этого преобразования, мало что можно сделать в терминах программирования.

0x01AA

Это 3D в 2D он объяснил совершенно правильно:
x = X/(X+Y+Z)
y = Y/(X+Y+Z)
Это колориметрия (моя ежедневная работа), и он хорошо знает эту часть ;)

lock&_lock

Привет, О... вы знакомы с колориметрией, слава богу. да, вы правы. Я пытаюсь нормализовать CIE XYZ в плоскость xy.
Я хочу рисовать линия замешательства, вот так

Я точно знаю значение копунктальной точки(где сходятся все линии), есть ли какой-нибудь способ сделать это в opengl и C ? Я подумал, что если смогу визуализировать, то смогу проверить, верен ли мой график или нет. к сожалению, я не знаком с ModernOpenGL и все это время использовал glut и old opengl. Я нашел учебник с phyton, но я не могу рисковать, используя слишком много языков программирования только для одного проекта. Что посоветуете ?

lock&_lock

Привет, спасибо ! Я наконец-то смог обернуть мою сторону. Я уточню свой вопрос.