Подтвердить что ты не робот

Как получить длину волны пикселя с помощью RGB?

У меня есть проект, который будет классифицировать цвет пикселя. Является ли он красным, фиолетовым, оранжевым или просто любым цветом в цветовом круге. Я знаю, что более 16 миллионов цветовых комбинаций для пикселей. Но я смог прочитать веб-страницу, в которой говорится о том, что я могу сделать свой проект с использованием длин волн цвета. Пожалуйста, дайте мне формулу для вычисления длины волны с использованием значений RGB. Спасибо!

4b9b3361

Ответ 1

Чистый цвет имеет длину волны (любой светодиод одного цвета будет иметь определенную длину волны). Красный, зеленый и синий имеют диапазон длин волн. Однако, когда вы делаете цвет RGB, вы добавляете эти длины волн вместе, что НЕ даст вам новую длину волны. Глаз не может отличить желтый цвет, состоящий из одной длины волны от добавления красного и зеленого (как работает глаз). Я бы рекомендовал прочитать теорию цвета

http://en.wikipedia.org/wiki/RGB_color_model

Ответ 2

Колодец RGB для монитора отображает 3 независимых уровня красного и синего света, поэтому есть (в основном) 3 разных длины волны, присутствующих в любом пропущенном цвете.

НО Если вы можете преобразовать значение цвета RGB в его эквивалентный HSL, H-часть (Hue) является доминирующим цветом, поскольку длина волны идет , если вы чтобы игнорировать насыщенность (думайте об этом как о белизе).

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

Красный свет составляет примерно 630-740 нм длины волны, Фиолетовый примерно 380-450 нм.

Ответ 3

Разработка длины волны немного сложна, и, как говорил Гоблин, не всегда возможно (другим примером является цвет, полученный путем смешивания равных количеств красного и синего света. Этот фиолетовый не имеет одиночной длины волны).

Но если все, что вы хотите сделать, это определить цвет по имени, то модель HSV будет хорошей. HSV - это оттенок (где цвет вокруг цветового круга), насыщенность (сколько цветов есть, а не оттенок черного/серого/белого) и значение (насколько ярким или темным является пиксель). В этом случае Hue, вероятно, именно то, что вы хотите.

Если вы используете язык .NET, то вам повезло. См. Color.GetHue Method, который выполняет всю вашу работу.

В противном случае см. HSV в Википедии для более подробной информации.

В сущности, если у вас есть R, G и B как плавающие значения от 0.0 до 1.0 (вместо ints от 0 до 255, например), то:

M = max(R, G, B)
m = min(R, G, B)
C = M-m

if M = m then H' is undefined (The pixel is some shade of grey)
if M = R then H' = (G-B)/C mod 6
if M = G then H' = (B-R)/C + 2
if M = B then H' = (R-G)/C + 4

При преобразовании RGB в HSV вы затем умножаете H 'на 60 градусов, но для ваших целей H', вероятно, прекрасен. Он будет плавать от 0 до 6 (почти). 0 - красный (как и 6). 1 - Желтый, при этом значения между 0 и 1 будут затенены между красным и желтым. Таким образом, 0,5 будет оранжевым. Важными ориентирами являются:

0 - Red
1 - Yellow
2 - Green
3 - Cyan
4 - Blue
5 - Purple
6 - Red (again)

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

Ответ 4

http://en.wikipedia.org/wiki/Visible_spectrum

Это возможно. См. Выше. Серый фон, по-видимому, облегчает его. Вы можете получить что-то подобное самостоятельно и даже улучшить его. Но делать это точно будет стоить больших долларов. U понадобится эксперт по колориметрии, калиброванный монитор и среда просмотра (так как доминирующая длина волны вашего пикселя означает только то, что монохроматическая длина волны приближается к вашему откалиброванному монитору в вашей откалиброванной среде просмотра). Все это будет несколько тысяч долларов. Работа, выполненная по вышеуказанной ссылке, показанная на википедии, не кажется такой точной, но, вероятно, это то, что вы хотите.