Название цвета -> число [?]

Inflict84

Хотелось бы вот чего. Выяснять, есть ли в строке подстроки типа green, pink, и если есть, присвоить какое-нибудь значение величине color.
Так, чтобы
color(green) != color(blue
color(pink) == color(light-red) ≈ color(red)
color(white) ≈ color(off-white) ≈ color(gray) ≈ color(dark-gray но color(white) != color (dark-gray)
Есть ли стандартные решения подобных задач?
Спасибо.

danilov

RGB, только по битикам перемешанные. Маска rgbrgbrgbrgbrgbrgbrgbrgbrgbrgbrgbrgbrgbrgbrgbrgb

karkar

Цвет традиционно представляется тройкой чисел, каждый конкретный цвет - точка в трехмерном пространстве. Ты, фактически, хочешь адекватную скалярную функцию f(x,y,z) (т.е. color(r,g,b но придумать такую функцию, чтобы практически одному и тому же значению не соответствовало бы дофига сильно разных цветов, довольно непросто.
Вот тут много годных картинок и букв с пищей для размышлений:
http://en.wikipedia.org/wiki/HSL_and_HSV
Обычно подобную задачу решают тем, что продолжают цвет представлять тройкой чисел, просто вводят удобную функцию расстояния между двумя цветами. Как именно это делать - зависит от подробностей задачи, от того, какие оттенки считать похожими, а какие разными.

Inflict84

спасибо за идею (я думал насчёт какой-нибудь функции от hsb а есть ли готовые компоненты для парсинга цветов? Наверняка ведь есть. Если есть выбор, то лучше на C#, но в принципе, язык не важен.

Inflict84

> придумать такую функцию, чтобы практически одному и тому же значению не соответствовало бы дофига сильно разных цветов, довольно непросто
Интересующая функция f(color1, color2 принимающая действительные значения (например, на отрезке [0,1] должна просто показывать правдоподобие того, что два значения color1 и color2 были приписаны одному и тому же цвету. Сами значения color могут быть не обязательно действительным — например, тройка чисел вполне сойдёт, если для неё удастся написать подходящую f.

Inflict84

похоже, я понял, как надо сформулировать задачу, и легко нагуглил (по крайней мере, пока мне так кажется). Меня интересовал адекватный способ измерения цветового расстояния, и для этого есть масса решений: например, LAB — это что-то смахивающее на нужное.

Maximilian

есть такой формат - http://ru.wikipedia.org/wiki/FITS
там есть поддержка 64 битных изображений, причём они "черно белые" ( т.е. 8 байт/пиксель и при это только для одного "канала", а каналов может быть сколько множество )
меня в своё время очень порадовало, что в одном файле может храниться несколько цветовых каналов, при чем необязательно RGB ( в моём случае было 4 канала, 3 - соответствующих разным частотам, и 4-й - соответствующий суммарной интенсивности ( не путать с яркостью ) )
Оставить комментарий
Имя или ник:
Комментарий: