Visual Basic, .NET, ASP, VBScript
 

   
   
     

Форум - Общий форум

Страница: 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 %
Private Sub Command1_Click()
    'первый пиксель
    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-сайт: sharpc.livejournal.com
 Профиль | | #18
Добавлено: 28.10.06 07:37
Для этой задачи RGB не подойдет.

Ответить

Номер ответа: 19
Автор ответа:
 Morpheus



Вопросов: 224
Ответов: 3777
 Web-сайт: xury.zx6.ru
 Профиль | | #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-сайт: vt-dbnz.narod.ru
 Профиль | | #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%.

Так что, вот еще одна формула, которая лишена этого недостатка.
Similarity=(abs(r1-r2) + abs(g1-g2) + abs(b1-b2))/ _
(abs(r1+r2) + abs(g1+g2) + abs(b1+b2))

Опать проблема нулевых цветов. формулу можно исправить:
eps = 1E-5
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-сайт: xury.zx6.ru
 Профиль | | #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-сайт: vt-dbnz.narod.ru
 Профиль | | #23
Добавлено: 29.10.06 02:12
Мда, забавно. Вообще-то должно было быть в процентах.
Буду подгонять.
Как насчет
Similarity = (abs(r1-r2) + abs(g1-g2) + abs(b1-b2) + eps)/ _
             ;(max(r1,r2) + max(g1,g2) + max(b1,b2) + eps)

Ответить

Номер ответа: 24
Автор ответа:
 HACKER


 

Разработчик Offline Client

Вопросов: 236
Ответов: 8362
 Профиль | | #24 Добавлено: 29.10.06 19:38
:\

Private Sub Form_Load()
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-сайт: vt-dbnz.narod.ru
 Профиль | | #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... ок спасибо!

Ответить

Страница: 1 | 2 |

Поиск по форуму



© Copyright 2002-2011 VBNet.RU | Пишите нам