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