Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Как приближённо оценить совпадение двух 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]

некорректно. Визуально - людям? Каким?
Задачу бы обрисовать точнее.


Наверх

Титульная страница Поиск, карта сайта Написать письмо