Форум: "Media";
Текущий архив: 2005.06.14;
Скачать: [xml.tar.bz2];
ВнизКак приближённо оценить совпадение двух RGB- цветов ? Найти похожие ветки
← →
_micha (2005-02-14 13:33) [0]Помогите с алгоритмом:
Даны два цвета в формате RGB. Как расчитать критерий, по которому их можно сравнивать ? Чтобы результат сравнения алгоритмом был близок к визуальному сравнению этих цветов.
Если сравнивать просто составляющие между собой - получается коряво.
Заранее спасибо.
← →
Думкин © (2005-02-14 13:36) [1]некорректно. Визуально - людям? Каким?
Задачу бы обрисовать точнее.
← →
_micha (2005-02-14 13:41) [2]> некорректно. Визуально - людям? Каким?
> Задачу бы обрисовать точнее.
Нужно распознать часть картинки по выбранному пользователем цвету. По какому критерию выбирать пикселы ? Можно вывести из RGB какой-то коэффициент (одно число), позволяющий проводить сравнение ?
← →
Virgo_Style © (2005-02-14 14:30) [3]Если представить, что компоненты цвета R,G,B - это координаты в пространстве, то расстояние между ними, как известно, равно корню из суммы квадратов разностей.
В свое время я этим пользовался, когда отображал 24-битный цвет в 256-цветной палитре. Получалось...
← →
WondeRu © (2005-02-14 15:56) [4]Virgo_Style © (14.02.05 14:30) [3]
угу
2_micha
http://delphimaster.net/view/8-1104687975/ смотри 10-й пост
← →
wicked © (2005-02-14 16:55) [5]как вариант - человеческое зрение больше внимания на яркость обращает.... посему найти яркость, а потом расстояние между уже 4-х мерными векторами... можно с весовыми коэффициентами - на яркость дать 2, на цветовые компоненты - по 1...
← →
Asteroid © (2005-02-15 00:50) [6]> wicked © (14.02.05 16:55) [5]
Тогда уж лучше в другую цветовуюсистему перейти, например, в HSV. У нее как раз есть V - яркость и H, S - тон и насыщенность.
← →
XProger © (2005-02-15 01:53) [7]abs(R1 + G1 + B1 - R2 - G2 - B2) < k
k - аля коэфицент схожести :)
← →
Strech (2005-02-15 03:37) [8]>XProger
ага, и красный цвет (255, 0, 0) стал равен синему (0, 0, 255) и зеленому (0, 255, 0).
← →
WondeRu © (2005-02-15 11:01) [9]XProger © (15.02.05 1:53) [7]
abs(R1 + G1 + B1 - R2 - G2 - B2) < k
k - аля коэфицент схожести :)
улыбка до ушей :)))
← →
BillyJeans (2005-02-23 14:59) [10]XProger © (15.02.05 01:53) [7]
abs(R1 + G1 + B1 - R2 - G2 - B2) < k
k - аля коэфицент схожести :)
для ч/б картинки может быть...
← →
Anton_K © (2005-02-23 15:22) [11]Abs(r1-r2)+Abs(g1-g2)+Abs(b1-b2)
← →
XProger © (2005-02-23 17:28) [12]Чтот я просчитался ;)
if (abs(R1 - R2) < k) and
(abs(G1 - G2) < k) and
(abs(B1 - B2) < k) then ...
← →
Virgo_Style © (2005-02-23 20:05) [13]XProger © (23.02.05 17:28) [12]
then что? :o)
Ведь должно быть Result:=самый_похожий_цвет;
а не Result:=этот_похож;
← →
XProger © (2005-02-25 02:41) [14]ну запихни в цикл и проверяй цвета в картинке, а k пусть будет динамическим и меняться к максимальной разнице... хотя это только теоретически. 8)
← →
uny © (2005-02-25 08:28) [15]можно упрощённое -
из R,G,B найти минимальное, это типа яркость(упрощение)
вычесть эту "яркость" из R,G,B. один из R,G,B обязательно станет нулём. вычислим отношение двух оставшихся из R,G,B причём что бы ошибки не было -
если остались только R,G, и R=0, то отношение = R/G, если же оба не нулевые, то безразницы что на что делить.
в итоге получаем:
1. яркость
2. цвет:
* название и где находится - красно-синий или синезелёный зелёнокрасный, смотря какие две остались(ну или чистые цвета)
* сколько какого цвета в этом цвете содержится - хоть в процентах, ведь вычислили отношение.
3. цветность = на сколько нужно умножить отношение оставшихся цветов, что бы получить их опять) например 100 и 200 - отношение = 0.5, а цветность = 200
если так цвет точек строить в цикле - прибавляя содержание одного цвета и убавляя другого, то получается визуально плавный переход. при одинаковой яркости.
если без упрощения, то принцип - одни цвета глазу кажутся светлее, чем другие. формула простая - достаточно создать спектр, и фотошопом его перевести в чернобелый цвет, посмотреть что вышло.
← →
Virgo_Style © (2005-02-25 09:02) [16]
> одни цвета глазу кажутся светлее, чем другие. формула простая
Для ТВ, насколько знаю, такая:
Gray := Round((0.30 * GetRValue(RGBColor)) +
(0.59 * GetGValue(RGBColor)) +
(0.11 * GetBValue(RGBColor )));
← →
AlterEgo of WondeRu © (2005-02-27 21:29) [17]Virgo_Style © (25.02.05 9:02) [16]
это не Gray, это формула яркости!
← →
Virgo_Style © (2005-02-28 08:33) [18]
> это не Gray, это формула яркости!
Ну пусть будет GrayValue, по аналогии с GetRValue и прочими... Это так принципиально?..
← →
WondeRu © (2005-02-28 11:04) [19]Virgo_Style © (28.02.05 8:33) [18]
совсем нет) эта формула используется для преобразования цветной картинки в черно-белую, но понимать, что Вы считаете яркость, а не "серость" все-таки нужно... так что пишите лучше не GrayValue, а BrightValue ;)
← →
Virgo_Style © (2005-02-28 11:34) [20]
> WondeRu © (28.02.05 11:04) [19]
Ну забыл я это слово! Простите дурака ;)
Страницы: 1 вся ветка
Форум: "Media";
Текущий архив: 2005.06.14;
Скачать: [xml.tar.bz2];
Память: 0.49 MB
Время: 0.04 c