Здравствуйте, WolfHound, Вы писали:
WH>Здравствуйте, Reunion, Вы писали:
R>>Есть голубой1 (170, 196, 200). В палитре есть серый (200, 200, 200) и голубой2 (197, 255, 249).
R>>(170-197)*(170-197)+(196-255)*(196-255)+(200-249)*(200-249) = 6611 R>>(170-200)*(170-200)+(196-200)*(196-200)+(200-200)*(200-200) = 916
R>>голубой1 меняется на серый, а не на голубой2. А мне надо наоборот... WH>Ну знаешь на мой субъективный взгляд голубой1 гораздо ближе к серому чем к голуботму2
А к Васиному — голубой2
И если чтисто математически, то да?
Но ... есть физика — МОЗАЙКА, и задание, это уже совсем другое. Я так понял человек, хочет, чтоб голубой оставался голубым, пусть даже по яркости это не правда...
Поэтому и придумали HLS которая блище к среднестатистическому ощущению цвета человеком.
ГРУБО оцениваем:
H = 90
L = (min + max) / 2
S = max — min
Голубой 1
H 90
L (200 + 170) / 2 = 185
S 30
Cерый
H — вообще не определен
L (200 + 200) / 2 = 200
S 0
Голубой 2
H 90
L (249 + 197) / 2 = 223
S 52
тут и ежу становится понятно, что второй голубой ближе чем серый.
Re[2]: Поиск ближайшего цвета
От:
Аноним
Дата:
24.01.05 17:54
Оценка:
Здравствуйте, Sinclair, Вы писали:
S>Попробуй квадратичную метрику в пространстве HSL.
У данной НЕ линейной метрики (она же HSV, HSB если мне память не изменяет) недостаток заключается в том, что она становится неустойчивой при малом значении L. Вообщем надо быть осторожным. К сожалению нет метрики (кроме разве что интегральной), которая бы могла устроить всех, а все из-за попытки представить интегральную природу света проекциями на 3-4 оси цветового пространства. Совет во-первых почитать про различные цветовые пространства и метрики растояний для этих пространств, а также порыться в гугле по: color reduction, color segmentation, k-means color clustering. Сам работаю над алгоритмом сегментации цветных изображений и редукции цветов — статей много.
Здравствуйте, Reunion, Вы писали:
R>Всем привет!
R>Есть картинка — из нее берется пиксель (x, y). Есть набор цветов. Надо для пикселя (x, y) найти наиболее похожий для глаза цвет из данного набора. R>В интернете я нашел следующую функцию оценки похожести цветов: f = 30 * (rp — ri) * (rp — ri) + 59 * (gp — gi) * (gp — gi) * 11 * (bp — bi) * (bp — bi), где rp, gp и bp — цвет пикселя, ri, gi и bi — цвет из таблицы цветов. НО это бред! Мы ведь не интенсивность должны сравнивать. Точнее, наверное будет сказать, не только интенсивность! R>Народ, подскажите как быть в данной ситуации.
R>Заранее спасибо.
можно представлять цвет RGB как координаты в трехметном пространстве тогда считая расстояние между двумя точками (цветами) где оно меньше там и цвет больше похож.
Здравствуйте, _JoKe_, Вы писали:
_JK>можно представлять цвет RGB как координаты в трехметном пространстве тогда считая расстояние между двумя точками (цветами) где оно меньше там и цвет больше похож.
Именно это человека и не устраивает. Я уже говорил, что нужно искать не минимальное расстояние между двумя точками, а минимальное расстояние между точкой и прямой, соединяющей начало координат и точку исходного цвета. Мысль понятна?
Здравствуйте, Reunion, Вы писали:
R>НО это бред! Мы ведь не интенсивность должны сравнивать. Точнее, наверное будет сказать, не только интенсивность! R>Народ, подскажите как быть в данной ситуации.
Здесь сравнивается не инетенсивность, здесь вычисляется расстояние между цветами в RGB-кубе. Да, именно расстояние, в манхеттенской метрике, причем, с учетом коэффиентов по осям RGB. Декартово расстояние требует вычисления квадратного корня из суммы квадратов (возможно, тоже взвешенных). Здесь все зависит от того, в каком RGB-пространстве мы работаем. Есть физически линейное пространство, и есть перцептуально линейное. В первом считается, что интенсивность пропорциональна R+B+G, следовательно, везде используются Manhattan Distances. Во втором — интенсивность пропопорциональна длине вектора (0,0,0)->(R,G,B), то есть используется Cartesian Distances. Все это мне очень грамотно объяснили в этой ветке: http://www.rsdn.ru/Forum/Message.aspx?mid=695821
Здравствуйте, AcidTheProgrammer, Вы писали:
ATP>Поэтому и придумали HLS которая блище к среднестатистическому ощущению цвета человеком.
ATP>ГРУБО оцениваем: ATP>H = 90 ATP>L = (min + max) / 2 ATP>S = max — min
ATP>Голубой 1 ATP>H 90 ATP>L (200 + 170) / 2 = 185 ATP>S 30
ATP>Cерый ATP>H — вообще не определен ATP>L (200 + 200) / 2 = 200 ATP>S 0
ATP>Голубой 2 ATP>H 90 ATP>L (249 + 197) / 2 = 223 ATP>S 52
ATP>тут и ежу становится понятно, что второй голубой ближе чем серый.
Это больше похоже на правду — по крайней мере в формулах. Сегодня попробую. А пока вот вопрос: какую оценочную функцию брать? И значение "вообще не определен" за что принимать?
Здравствуйте, Reunion, Вы писали:
R>Здравствуйте, AcidTheProgrammer, Вы писали:
ATP>>Поэтому и придумали HLS которая блище к среднестатистическому ощущению цвета человеком.
ATP>>ГРУБО оцениваем: ATP>>H = 90 ATP>>L = (min + max) / 2 ATP>>S = max — min
ATP>>Голубой 1 ATP>>H 90 ATP>>L (200 + 170) / 2 = 185 ATP>>S 30
ATP>>Cерый ATP>>H — вообще не определен ATP>>L (200 + 200) / 2 = 200 ATP>>S 0
ATP>>Голубой 2 ATP>>H 90 ATP>>L (249 + 197) / 2 = 223 ATP>>S 52
ATP>>тут и ежу становится понятно, что второй голубой ближе чем серый.
R>Это больше похоже на правду — по крайней мере в формулах. Сегодня попробую. А пока вот вопрос: какую оценочную функцию брать?
Попробуйте ту же самую...
R>И значение "вообще не определен" за что принимать?
Ну по логике за любое.... тоесть понятьно что абсолютно серый, не отдает ни в красный, ни в желтый, и не вообще не в один из цветов....
Следовательно скорее так;
Если в искомом цвете тоже неопределен H, то искать только среди цветов в таблице, в которых также не определен H
Если определен — то искать среди цветов с опредленным H.
Здравствуйте, Reunion, Вы писали:
R>Надо для пикселя (x, y) найти наиболее похожий для глаза цвет из данного набора.
Посмотрите на алгоритм сжатия JPEG. может оттуда можно взять какие-нить формулы.