Страница: 1 | 2 |
Вопрос: Как найти процент идентичности цвета?
Добавлено: 23.10.06 19:14
Автор вопроса: HACKER
Ответы
Всего ответов: 27
Номер ответа: 16
Автор ответа:
Artyom
Разработчик
Вопросов: 130
Ответов: 6602
Профиль | | #16
Добавлено: 28.10.06 01:27
Да тут, мне кажется, более сложные алгоритмы нужно использовать чем просто процент схожести цвета...
Что за изображения вообще сравниваются? Какая изначальная задача ставится?
Номер ответа: 17
Автор ответа:
Mihalыch
ICQ: 373-509-101
Вопросов: 56
Ответов: 330
Профиль | | #17
Добавлено: 28.10.06 07:07
Пиксель в системе RGB состоит из оттенков трех цветов, т.е. приблизительно по 33,33% на каждый цвет. Значит на каждый оттенок каждого из трех цветов приходится примерно по 33,33 / 255 = 0.1307 %
'первый пиксель
Dim R1 As Long
Dim G1 As Long
Dim B1 As Long
'второй пиксель
Dim R2 As Long
Dim G2 As Long
Dim B2 As Long
'цена каждого оттенка
Const ind = 0.1307
R1 = 50: G1 = 60: B1 = 70
R2 = 80: G2 = 90: B2 = 100
MsgBox 100 - ((Abs((R1 - R2)) * ind) + (Abs((G1 - G2)) * ind) + (Abs((B1 - B2)) * ind))
End Sub
Номер ответа: 18
Автор ответа:
Sharp
Лидер форума
ICQ: 216865379
Вопросов: 106
Ответов: 9979
Web-сайт:
Профиль | | #18
Добавлено: 28.10.06 07:37
Для этой задачи RGB не подойдет.
Номер ответа: 19
Автор ответа:
Morpheus
Вопросов: 224
Ответов: 3777
Web-сайт:
Профиль | | #19
Добавлено: 28.10.06 17:46
Может и пойдёт... просто надо искать процентную разницу по каждому каналу. попробуйте формулу №3 (самую большую) вот отсюдова:
http://lesfiles.h15.ru/images/formulae_diff.jpg
(с)Science Students' Handbook
Номер ответа: 20
Автор ответа:
Victor
ICQ: 345743490
Вопросов: 42
Ответов: 385
Web-сайт:
Профиль | | #20
Добавлено: 28.10.06 22:32
У формулы Morpheus'а есть один недочет.
Формула выглядит так:
(x1-x2)/((x1+x2)/2)
Ноль и 255 отличаются на 200%. Чтобы они отличались на 100%, формулу надо превратить в (x1-x2)/(x1+x2). (эту формулу я уже предлагал в ответе №14)
Чем такая формула отличается от всех остальных?
-тем, что 1 от 0 тоже отличается на 100%, так что такое отличие в одной компоненте сразу даст вклад порядка 33%. По-моему, это плохо. Если например обе остальные компоненты имеют значения 255, то разницы в цвете не будет видно вообще, а по формуле они будут отличаться на 33%.
Так что, вот еще одна формула, которая лишена этого недостатка.
(abs(r1+r2) + abs(g1+g2) + abs(b1+b2))
Опать проблема нулевых цветов. формулу можно исправить:
Similarity = (abs(r1-r2) + abs(g1-g2) + abs(b1-b2) + eps)/ _
(abs(r1+r2) + abs(g1+g2) + abs(b1+b2) + eps)
Номер ответа: 21
Автор ответа:
Morpheus
Вопросов: 224
Ответов: 3777
Web-сайт:
Профиль | | #21
Добавлено: 28.10.06 23:30
да, та формула нужна для физики в основном и иногда для химии
Номер ответа: 22
Автор ответа:
HACKER
Разработчик Offline Client
Вопросов: 236
Ответов: 8362
Профиль | | #22
Добавлено: 29.10.06 00:18
2 Brand Задачу описал перед твоим постом Даже рассказал какие изображения...
2 Victor Т.е. "универсальную" вывести не получится?
Твои формулы дают непонятный результат, в чем это вообще она измеряет?
при
r1 = 255: r2 = 128
g1 = 255: g2 = 128
b1 = 255: b2 = 128
Теор. разница 50%, формула же твоя дает чушь...
Номер ответа: 23
Автор ответа:
Victor
ICQ: 345743490
Вопросов: 42
Ответов: 385
Web-сайт:
Профиль | | #23
Добавлено: 29.10.06 02:12
Мда, забавно. Вообще-то должно было быть в процентах.
Буду подгонять.
Как насчет
 max(r1,r2) + max(g1,g2) + max(b1,b2) + eps)
Номер ответа: 24
Автор ответа:
HACKER
Разработчик Offline Client
Вопросов: 236
Ответов: 8362
Профиль | | #24
Добавлено: 29.10.06 19:38
:\
r1 = 255: r2 = 128
g1 = 255: g2 = 128
b1 = 255: b2 = 128
Similarity = (Abs(r1 - r2) + Abs(g1 - g2) + Abs(b1 - b2) + eps) / _
 Max(r1, r2) + Max(g1, g2) + Max(b1, b2) + eps)
MsgBox Similarity
End Sub
Private Function Max(ByVal a, ByVal b) As Long
If a > b Then
Max = a
ElseIf a <= b Then
Max = b
End If
End Function
Номер ответа: 25
Автор ответа:
Victor
ICQ: 345743490
Вопросов: 42
Ответов: 385
Web-сайт:
Профиль | | #25
Добавлено: 29.10.06 20:46
а почему :\ ?
Дает ответ 0.4980... = 49.8%.
Почему не ровно 50%?
это вполне логично: 128*2 = 256 <> 255
Номер ответа: 26
Автор ответа:
HACKER
Разработчик Offline Client
Вопросов: 236
Ответов: 8362
Профиль | | #26
Добавлено: 29.10.06 22:53
а хм, я баран * 100... ок спасибо!
Номер ответа: 27
Автор ответа:
HACKER
Разработчик Offline Client
Вопросов: 236
Ответов: 8362
Профиль | | #27
Добавлено: 29.10.06 22:53
а хм, я баран * 100... ок спасибо!