Есть спектр видимого света(750-400)nm.Я хочу получить цвет с длиной волны 524nm.Как расчитать компоненты RBG для него?
Чтобы точно и математически строго - никак - это совсем разные модели - цвету с заданной длиной волны можно подобрать смесь базовых цветов, которые будут визуально похожы, но по физической сути это разные явления и потому прямой формулы преобразования не существует. Если же интересует только визуальное сходство, то можешь сам сделать шкалу для преобразования: Красный 620-780 Оранжевый 585-620 Желтый 575-585 Желто-Зеленый 550-575 Зеленый 510-550 Голубой 480-510 Синий 450-480 Фиолетовый 380-450 В середину указанных диапазонов ставишь "чистый" цвет, для которого RGB модель известна, а то что между ними интерполируешь плавным перетеканием цвета между соседними, тогда для любого спектрального цвета сможешь получить его визуальный аналог на основе смеси цветов.
Y_Mur Избыточно, т.к. глаз всеравно не видит все семь цетов. Достаточно сделать тоже самое для трех гармоник: красного, зеленого и синего.
Пиксель монитора состоит из 3х частей:RGB.Когда я в OpenGL даю команду закрасить полигон цветом я указываю три компоненты цвета которые затем подаются на этот пиксель.Как же получаюся оттенки?Где смешиваются цвета?Над самим пикселем?Или оттенки это иллюзия глаза? >>которые будут визуально похожы, но по физической сути это разные явления Если я вижу на экране монитора оттенок значит в мой глаз приходит волна с промежуточной длинной волны,тоесть физически получаем нужную длинну волны >>В середину указанных диапазонов ставишь "чистый" цвет Буду пробывать
KingT > Где смешиваются цвета?Над самим пикселем?Или оттенки это иллюзия глаза? Возьми линзу и посмотри через нее на экран включенного телевизора.
>>Возьми линзу и посмотри через нее на экран включенного телевизора Смотрел.Никаких оттенков там нет.Видно только RGB.А когда смотрим издалека то кажется что есть оттенки. Вот нашел у Хилла апроксимацию надо только функцию подобрать.
KingT Все правильно. CRT моделирует цвет также как его видит глаз - тремя rgb-фонариками на каждый пиксель (на сетчатке у нас пиксели тоже состоят из троек rgb-приемников).
KingT Цвета "смешиваются" в глазе - т.е. это свойство глаза одинаково воспринимать и цвет с определённой длиной волны и "эквивалентную" смесь других цветов. Если этот смешанный цвет подать на призму cпектроскопа то он покажет что монохромный и "смешанный" цвета это совсем разные явления. Кроме того люминофор монитора не обязан генерировать спектрально чистые цвета - т.е. красный, синий, зелёный цвета в составе мониторного пиксела это не ярко выраженные спектральные линии соответствующего цвета, а уже "жуткая каша" из разных длинн волн, которые в совокупности воспринимаются глазом как "достаточно" красный, "достаточно"синий и "достаточно" зелёный Т.е. в итоге RGB это "смесь из смесей". Не понял как это у Хилла красный цвет может быть отрицательным? - это что за модель супер-пупер-RGB? Если задача отобразить цвет на экране монитора то вполне достаточно линейной интерполяции, хотя квадратичная, безье, сплайновая и т.п. бдут смотреться немного лучше. Естественно эту интерполяцию нужно делать покомпонентно - т.е. взять шкалу как в #6, отметить на ней точки R, G, B компонент взятые из соответсвующих цветов, для которых длина волны известна, например из сопоставления #2 и GdiPlusColor.h Код (Text): Blue = 0xFF0000FF, Cyan = 0xFF00FFFF, Green = 0xFF008000, GreenYellow = 0xFFADFF2F, Magenta = 0xFFFF00FF, Orange = 0xFFFFA500, Red = 0xFFFF0000, Yellow = 0xFFFFFF00, YellowGreen = 0xFF9ACD32 ... Затем эти покомпонентные точки соединить либо прямыми линиями, либо сплайнами и т.п. - получится 3 графика похожие на #6, но без непонятных отрицательных цветов. _DEN_ А всего по трём точкам такой график не построишь - нужны известные точки разбросанные по всему диапазону длинн волн, и чем больше тем лучше.
Да и ещё GdiPlusColor.h не следует рассматривать как "физический справочник", -это просто одна из версий сопоставления цветов и их названий (а названия как раз и нужны для сопоставления с длинной волны например яркость green цвета в GdiPlusColor.h занижена до 128, против red яркости 255. Не обязательно эту слепо повторять - в идеале вообще иметь под рукой спектроскоп с набором специальных ламп генерирующих ярко выраженные спектральные линии и поигравшись с компонентами цветов аналогичного названия добиться визуального совпадения цвета в спектроскопе с цветом на мониторе, но такая калибровка будет "точной" только для твоей конкретной связки глаз+монитор, а на другом мониторе или у другого человека будет несколько отличаться потому и не существует "физически узаконенной" формулы преобразования спектра в RGB.
_DEN_ Отчасти ты прав - глаз действительно разделяет цвет на компоненты - я не уверен что в глазу именно RGB, но именно за счёт компонетности зрения глаз и видит монохромный и аналогичный ему смешанный цвета почти одинаково. Но именно почти - в физике существует понятие "чистоты цвета", которое как раз и характеризует отличие цвета с одной длиной волны от "эквивалентного смешанного". Чтобы получить об этом визуальное представление достаточно посмотреть на отражение солнца в дифракционной решётке (вместо неё сгодится любой CD/DVD диск). Цвета радуги которые видны в этом отражении намного насыщеннее и чище (трудно подобрать этим цветам более удачный термин чем чистота), чем цвета воспроизводимые мониторами. Аналогично выглядит цвет луча лазерной указки. Если смотреть на любой источник света через щелевой спектроскоп (не важно призменный или дифракционный), который способен показать крупным планом спектральную линию соответсвующего цвета, то это различие между "чистым" и "обычным" цветом ещё более очевидно, чем на CD диске. А это означает что глаз всё таки кроме компонентного механизма имеет ещё и "датчик чистоты цвета". Не знаю как это физиологически устроено, но что работает это точно - сам в спектроскоп смотрел. KingT Люминофор обычных мониторов имеет обычный линейчато-непрерывный спектр, т.е. светит во всём видимом диапазоне длин волн и на фоне этого непрерывного спектра выделяются отдельные линии повышенной яркости, примерно так: А общее распределение интенсивности свечения разных областей спектра такова, что глаз видит преобладание красного, синего или зелёного цвета в компоненте пикселя. Исключением из этого правила являются только лазерные мониторы, где RGB компоненты формируются лазерной развёрткой и там однокомпонентные цвета действительно монохромны, а шумовой фон из других длинн волн отсутвует и сложения самих базовых цветов из множества других тоже нет. Экспериментальные модели таких телевизоров/мониторов появились давно, а вот серийных образцов до сих пор не видно - думаю дело тут как раз в способности глаза отличать чистый цвет от "нечистого" . Изображение на лазерном мониторе должно отлично подходить для воспроизведения рисованной графики где чистые цвета будут смотреться очень эффектно, но в природе чистые цвета практически не встречаются - не существует ни одного вещества, которое бы при нагреве, электрическом воздействии и т.п. светило бы только одной длиной волны, или выделяло только её при отражении. А потому изображения природы на лазерном мониторе должны сильно "отдавать мультяшностью" и резать глаз своей неестественностью А графики из #6 явно не соответствуют преобразованию спектра в RGB - поскольку фиолетовый (magenta) цвет расположен левее синего и имеет существенную красную составляющую, а на тех графиках там только какой-то жалкий ошмёточек красного.
Y_Mur Так для моделирования, на которое будет смотреть человек, это и не нужно - все равно он не увидит отличий. Y_Mur Если не ошибаюсь, то именно RGB. А "чистый" цвет он хоть и отличается от смесей, но, также если не ошибаюсь, кажется нам "чистым" как раз потому что он имеет хорошую ровную яркость и "удобно" ложится на наши RGB-колбочки. То есть, опять же, если не ошибаюсь, то человек не отличит чистый желтый от смеси чистого красного и чистого зеленого.
_DEN_ Не путай количество компонент и количество контрольных точек для постороения графика - глаз намного более тонкий и чуствительный инструмент чем это может показаться на первый взгляд ) KingT Вот кстати попалась классная статья по теме, там есть и спектры для мониторов (честно говоря я ожидал от них гораздо большей "загрязнённости" базовых цветов и авторы даже ухитрились снять график разложения спектра в RGB экспериментально ) Правда сделано это для лампы накаливания, но всё равно это уже похоже на правду. В идеале будет направить их приспособление на яркое солнце и подобрать выдержку, чтобы графики не зашкаливали, и будет искомое преобразование (с поправкой на свойства, фотоматрицы, но это не столь важно). _DEN_ Как выглядит смесь чистого красного и чистого зелёного ни разу не видел, а вот то что чистые цвета (любая спектральная линия крупным планом) видимые в окуляр спектроскопа заметно отличаются от тех же цветов, запечатлённых на фотографии (их можно посмотреть в той статье), это видел сам причём чем чище цвет ("очистка" достигается настройкой масштаба в спектроскопе) тем это отличие больше. В первом приближении это отличие можно увидеть сопоставляя радугу от сонца отражённого в лазерном диске с теми спектральными фотографиями - но просто отражение в CD, это достаточно грубая и предварительная "очистка" цветов )
Не совсем внимательно посмотрел статью в первый раз - есть у них там солнце - самый спектрально равномерный источник света из общедоступных достаточно удалить из него провал Фраунгофера и можно использовать как фукцию преобразования.
Фотографию нельзя сравнивать с реальным источником - разница будет хотя бы потому что фотография полноценно не передает параметры источника света, и чистота спектра тут не при чем. Попробуй сфотографировать солнце так, чтобы глядя на фотографию человек морщился так, как будто он смотрит на настоящее солнце.
_DEN_ Да глубина цвета у глаза намного больше чем 8бит на компонент у фотоаппаратов и мониторов, но дело не только в этом, а ещё и в том что в самом спектроскопе чистота цвета отличается при грубом и точном масштабировании, трудно словами объяснить как выглядит чистота , но это совершенно точно не "оттенок", а нечто другое и глазом это "нечто" видно )
Кстати когда понятие чистоты цвета объясняли на лекциях, я тоже не особо понял о чём же идёт речь - цвет он и есть цвет, а когда дошло до лабораторных со спектроскопом, то сначала заметил это отличие, полюбовался им поудивлялся откуда же оно берётся, а потом только дошло, что это и есть та самая чистота цвета )