Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2005.06.14;
Скачать: CL | DM;

Вниз

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

Текущий архив: 2005.06.14;
Скачать: CL | DM;

Наверх




Память: 0.51 MB
Время: 0.054 c
4-1114248673
Max-F
2005-04-23 13:31
2005.06.14
Определение пути текущей папки


1-1117471717
Karlson
2005-05-30 20:48
2005.06.14
Значение параметра Sender в ComboBoxChange(Sender: TObject)


8-1109687099
B-boy Dimo-N
2005-03-01 17:24
2005.06.14
Как вместо простого фона обычного окна сделать картинку ?


4-1113930130
Studentik
2005-04-19 21:02
2005.06.14
Создание одноэкземплярного приложения с осложнением...


14-1116843504
Mr.F
2005-05-23 14:18
2005.06.14
Кто сможет?