Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Media";
Текущий архив: 2004.03.03;
Скачать: [xml.tar.bz2];

Вниз

Расстояние между цветами   Найти похожие ветки 

 
Borealis   (2003-10-23 12:21) [0]

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


 
MBo   (2003-10-23 12:32) [1]

1) допуск по каждой цветовой составляющей - выделить их GetRvalue и т.п.
2) расстояние в цветовом пространстве - так же, как в обычной геометрии - корень из суммы квадратов разностей составляющих (корень можно и не извлекать)


 
Borealis   (2003-10-23 13:01) [2]


> MBo © (23.10.03 12:32) [1]
> 1) допуск по каждой цветовой составляющей - выделить их
> GetRvalue и т.п.
> 2) расстояние в цветовом пространстве - так же, как в обычной
> геометрии - корень из суммы квадратов разностей составляющих
> (корень можно и не извлекать)

Я тоже в первую очередь подумал об этой формуле. А как насчёт коэффициентов? Мне нужно чтобы было близко к человеческому восприятию.
Например преобразование к серому градиенту производится не по формуле:
(GetRValue(RGBColor) + GetGValue(RGBColor) + GetBValue(RGBColor ))/3, как следовало бы ожидать, а по формуле:
0.30 * GetRValue(RGBColor) + 0.59 * GetGValue(RGBColor) + 0.11 * GetBValue(RGBColor )


 
MBo   (2003-10-23 13:09) [3]

>было близко к человеческому восприятию.
возможно, тогда будет лучше сравнивать в HSV или HSL пространстве.
можно и поэкспериментировать с указанными коэффициентами.


 
Borealis   (2003-10-23 13:31) [4]


> MBo © (23.10.03 13:09) [3]
> >было близко к человеческому восприятию.
> возможно, тогда будет лучше сравнивать в HSV или HSL пространстве.
> можно и поэкспериментировать с указанными коэффициентами.

Насчёт HSL это идея. Нужно будет попробовать. А что такое HSV?


 
MBo   (2003-10-23 14:13) [5]

Покопайся на www.efg2.com


 
miek   (2003-10-23 20:18) [6]

Математически точная формула:
D := SQRT ( SQR (R2-R1)+SQR (G2-G1)+SQR (B2-B1))


 
CMPXCHG8   (2003-10-28 22:24) [7]

Как такового расстояния между "цветами" нет, потому что цветовая модель RGB не совсем корректна для отображения.
Допустим описываем чистый цвет Red = RGB(255,0,0) и белый - (255,255,255) - если вести расчет как предложено - то "расстояние" между ними велико, хотя на самом деле яркость Red такая же, как и у чистого белого,отличается только уровень Saturation (смешения) Лучший способ оценки - цветовая модель HSV.
Пиши на hotfix@rambler.ru, я как раз заканчиваю программу для обработки фотографий и накопал довольно прилично.


 
miek   (2003-10-28 23:55) [8]

2CMPXCHB: Пример неверный, но в общем абсолютно правильно. В KOL вообще ближайший цвет выбирается как логической расстояние, т.е. RGB1 XOR RGB2


 
Думкин   (2003-10-29 07:12) [9]


> miek © (28.10.03 23:55) [8]
> 2CMPXCHB: Пример неверный, но в общем абсолютно правильно

Это как? Переведи.


 
cmpxchg8   (2003-10-29 09:43) [10]

2miek - это смотря как понимать


 
Sapersky   (2003-10-29 09:55) [11]

Можно ещё YUV, если нужно сделать сравнение независимым от яркости (сравниваем U и V, Y выбрасываем). Строго математически оно, наверное, некорректно, но преобразование в YUV делается быстрее, чем в HSV (впрочем, если кто-нибудь предложит быструю формулу перевода в HSV...)


 
miek   (2003-10-29 23:45) [12]

2CMPXCHG, Думкин: Поясняю. То, что расстояние между цветами можно и нужно по-разному считать, это верно,
То, что RGB (255,0,0) и (255,255,255) это одно и то же - неверно. Вторая точка ровно втрое ярче. Как цветной монитор работает - представляете?


 
cmpxchg8   (2003-10-30 22:53) [13]

2Sapesky Быстро - даже очень быстро на SSE (asm)
2miek неверно, вывод на монитор и оценка цвета - две разные вещи


 
Asteroid   (2003-10-30 23:43) [14]

> miek © (29.10.03 23:45) [12]
Не-а, не втрое. Восприятие яркости отличается для разных цветов.


 
miek   (2003-10-31 00:04) [15]

Я и говорил не про восприятие, а про физическую яркость. Восприятие вообще вещь субъективная. А так - втрое, именно втрое.
Три точки в триаде (пикселе) освещены тремя электронными пушками, интенсивность складывается.

2Cmpxchg: Автор темы спрашивал про реальный пример из жизни, по этому не надо путать. Ему предстоит на мониторе все показывать, или как кто себе это представляет???


 
cmpxchg8   (2003-10-31 23:18) [16]

2all конкретный ответ:// Не в качестве сентенции или поучения
Речь идет по-видимому об инструменте наподобие Magic Wand
Во первых надобно учесть, что практически все модели цветов нелинейны во всех отношениях.
Оценивать разность цветов надо
1. по тону - наиболее важно
2. по степени смешения
3. по яркости
Приблизительно так:
// Функция вычисления разности углов, поелику значение HUE - евто угол от 0 до 360
abstract function AngleDiff(Angle1,Angle2)
//Нормализуем углы
while Angle1<0 do Inc(Angle1,360);
while Angle1>=360 do Dec(Angle1,360);
while Angle2<0 do Inc(Angle2,360);
while Angle2>=360 do Dec(Angle2,360);
if Angle1>Angle2 then Result:=Angle1-Angle2
else Result:=Angle2-Angle1;
//Нормализуем результат, угол должен быть наименьшим
if Result>180 then Result:=360-Result;

abstract function ColorDiff(Color1,Color2:TRGB)
HSV1,HSV2: THSV;
HSV1:=RGBtoHSV(Color1);
HSV2:=RGBtoHSV(Color2);
Result:=AngleDiff(HSV1.Hue-HSV2.Hue)*
Hyp(HSV1.Sat-HSV2.Sat,
HSV1.Value-HSV2.Value);

Может быть я и ошибаюсь, но приведенный пример я использую в своих разработках, единственно я оптимизировал его по вычислениям и переложил на asm.
Если у Вас есть лучшее решение предложите.
С уважением, всегда признающий себя чайником, CMPXCHG8.
P.S. Определение яркости цветового сигнала по коэфициентам не совсем корректно - эта весчь принята на вооружении в телевидении и енти самые коэффициенты были подобраны методом статистического опроса людей, хотя при конвертировании цветной фотографии в черно-белую иногда даже очень подходят



Страницы: 1 вся ветка

Форум: "Media";
Текущий архив: 2004.03.03;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.49 MB
Время: 0.007 c
3-5947
Санек
2004-02-06 10:40
2004.03.03
FastReport Null поля


1-6131
Gnusik
2004-02-19 19:05
2004.03.03
Создание ярлыка в Win XP


1-6129
Erik
2004-02-19 16:17
2004.03.03
Создание динамической струскуры хранения данных.


6-6179
Den_py
2003-12-27 07:17
2004.03.03
Socket


14-6248
Makhanev A.S.
2004-02-11 22:07
2004.03.03
Помогите плиз...





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский