Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "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.047 c
14-1116589520
Piter
2005-05-20 15:45
2005.06.14
Глюк со SmartFTP


6-1111596524
redlord
2005-03-23 19:48
2005.06.14
не отрабатывает try clientsocket.Open; finally


14-1116850232
boriskb
2005-05-23 16:10
2005.06.14
Ремонт компьютера. Форум :))


3-1115460568
Mr.F
2005-05-07 14:09
2005.06.14
Построение дерева из базы данных


9-1110998907
Alecsey
2005-03-16 21:48
2005.06.14
Трейнеры





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
Английский Французский Немецкий Итальянский Португальский Русский Испанский