Форум: "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.006 c