Visual Basic, .NET, ASP, VBScript
 

   
   
     

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

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

 

  Вопрос: Как найти процент идентичности цвета? Добавлено: 23.10.06 19:14  

Автор вопроса:  HACKER
Например:

R1: 50 | R2: 80
G1: 60 | G2: 90
B1: 70 | B2: 100

Как найти процент идентичности цвета?

Ответить

  Ответы Всего ответов: 27  

Номер ответа: 1
Автор ответа:
 Sharp


Лидер форума

ICQ: 216865379 

Вопросов: 106
Ответов: 9979
 Web-сайт: sharpc.livejournal.com
 Профиль | | #1
Добавлено: 23.10.06 21:57
Ну попробуй через расстояние между точками в координатах R;G;B - sqr( (R1-R2)^2 + (B1-B2)^2 + (G1-G2)^2 )

Ответить

Номер ответа: 2
Автор ответа:
 avdey



ICQ: 219571279 

Вопросов: 34
Ответов: 486
 Профиль | | #2 Добавлено: 24.10.06 15:10
((R1-R2)*100)/255=11,76% ???

Ответить

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


 

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

Вопросов: 236
Ответов: 8362
 Профиль | | #3 Добавлено: 24.10.06 21:32
2 Sharp, как я понял это процент разности? И ещё, мне важна в принципе точность вычисления. Ты это как-то сам придумал, вывел итп.. если это где есть в научной литературе?

2 avdey... нето, что-то.. у Sharp'a более правдоподобно.


Ещё есть у кого-то варианты? Sharp'a в принципе устраивает, но мало-ли...

Ответить

Номер ответа: 4
Автор ответа:
 Victor



ICQ: 345743490 

Вопросов: 42
Ответов: 385
 Web-сайт: vt-dbnz.narod.ru
 Профиль | | #4
Добавлено: 25.10.06 20:28
Я пользуюсь abs(r1-r2)+abs(g1-g2)+abs(b1-b2).
Это не очень хороший способ, зато быстрый.
Лучше - что-нибудь типа сравнения по яркости и по оттенку. Например:
'Вычисляем яркости
Lum1=r1+g1+b1
lum2=r2+g2+b2
'сравниваем яркости
dlum=abs(lum1-lum2)

'делаем цвета одинаковой яркости,
'чтобы сравнить их оттенок
'(случай lum=0 не учтен :)
r1=r1*255/lum1
g1=g1*255/lum1
b1=b1*255/lum1

r2=r2*255/lum2
g2=g2*255/lum2
b2=b2*255/lum2

'сравниваем оттенки
dHue=sqr((r1-r2)^2 + (g1-g2)^2 + (b1-b2)^2)

Как из этого составить процентное соотношение - вопрос сложный. В общем, яркость есть более важная характеристика цвета, чем его оттенок. Можно взять к примеру:
Percent=(dLum + dHue)/(255*3)
(Я не уверен, что данная величина никогда не превзойдет 100% :), зато белый от черного отличаенся на 100%)
Чтобы результат был еще более объективным, можно ввести яркость lum не просто суммой, а суммой с весом.
А вообще о цвете есть целая наука :) фотометрия кажется.

Если научно, то рекомендую изучить модели CIE Luv и CIE Lab. Там сравнение цветов определяется именно по формуле корень-из-суммы-квадратов. (сам я в этих моделях не разбираюсь, просто нашел в поиске)

Ответить

Номер ответа: 5
Автор ответа:
 Sharp


Лидер форума

ICQ: 216865379 

Вопросов: 106
Ответов: 9979
 Web-сайт: sharpc.livejournal.com
 Профиль | | #5
Добавлено: 25.10.06 22:34
Ну если считать, что цвета принимают значения от 0 до 1 (а не от 0 до 255), то максимальное расстояние между цветами в моем смысле - sqr(3). Обозначим это через 0% (цвета вообще не похожи). Минимальное - 0, 100%. Ну и составим линейную функцию преобразования из расстояния в проценты.

Ответить

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


 

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

Вопросов: 236
Ответов: 8362
 Профиль | | #6 Добавлено: 26.10.06 00:29
С содной стороны да... вычислять идентичность цвета имеет смысл только у цветов оттенок которых одинаков, в противном случае слегка чушь получается...

типа зеленый от красного отличается на столько-то процентов :)

с другой стороны, и зеленый и красный все тот же набор RGB. А значит теоретически возможно высчитать процентную идентичность.

Вообщем я в некоторой растеряности. В принципе вариант Sharpa устроил, отталкиваться буду от него. Так что спасибо Sharp'у.

Все это дело мне нужно для сравнивания картинки... т.е. сравнивая фотографию например, если где-то призошел сдвиг, затемнение, немного не тот угол.. все это отлично решается с помощью нахождение процентного отношения цвета...

Ещё идея есть наложить сетку, условно разумеется... и в каждой ячейки сетки брать произвольный пиксель для сравнения... это должно значительно ускорить операцию, и незначительно результат.

Ещё вариант, сделать картинку черно-белую (0/1). Возможно тогда ненадо даже процентную идентичность цвета учитывать...

Кто что вообще по этому поводу думает?

Ответить

Номер ответа: 7
Автор ответа:
 avdey



ICQ: 219571279 

Вопросов: 34
Ответов: 486
 Профиль | | #7 Добавлено: 26.10.06 10:53
Fine reader самопальный чтоль делаешь?

Ответить

Номер ответа: 8
Автор ответа:
 Victor



ICQ: 345743490 

Вопросов: 42
Ответов: 385
 Web-сайт: vt-dbnz.narod.ru
 Профиль | | #8
Добавлено: 26.10.06 19:57
http://www.compression.ru/download/articles/video/metrics/diploma.doc
Это какая-то работка по сравнению изображений. Думаю, если статейка не очень подходит, можно изучить список литературы.

Ответить

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


 

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

Вопросов: 236
Ответов: 8362
 Профиль | | #9 Добавлено: 27.10.06 04:38
та не Fine reader, ну просто много кто вопросом задавался подобным, а нормальной релизации с исходниками я так и невидел...

Ответить

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


 

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

Вопросов: 236
Ответов: 8362
 Профиль | | #10 Добавлено: 27.10.06 05:57
аблажались :))

R1 = 255: R2 = 255
G1 = 255: G2 = 255
B1 = 255: B2 = 1

    MsgBox Sqr((R1 - R2) ^ 2 + (B1 - B2) ^ 2 + (G1 - G2) ^ 2)

= 254...:)

Вообщем нужен гений для вывода правельной формулы :)))

Ответить

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


 

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

Вопросов: 236
Ответов: 8362
 Профиль | | #11 Добавлено: 27.10.06 06:03
Abs(R1 - R2) + Abs(G1 - G2) + Abs(B1 - B2)
тоже... но....... просто время чуть чуть утренне, а я ещё не ложился, поэтому меня глючит слегка... Но все же... как п понял подобными формулами какие попало цвет савнивать нельзя? т.е. схожие по оттенку? или просто формулы кривые это?

Ответить

Номер ответа: 12
Автор ответа:
 avdey



ICQ: 219571279 

Вопросов: 34
Ответов: 486
 Профиль | | #12 Добавлено: 27.10.06 12:05
Вообщем нужен гений для вывода правельной формулы :)))

Какой нах гений, 3 литра пива и все само напишется:)))))))))))))))))

Ответить

Номер ответа: 13
Автор ответа:
 Sharp


Лидер форума

ICQ: 216865379 

Вопросов: 106
Ответов: 9979
 Web-сайт: sharpc.livejournal.com
 Профиль | | #13
Добавлено: 27.10.06 18:14
Все же интересно было бы услышать саму задачу.

Ответить

Номер ответа: 14
Автор ответа:
 Victor



ICQ: 345743490 

Вопросов: 42
Ответов: 385
 Web-сайт: vt-dbnz.narod.ru
 Профиль | | #14
Добавлено: 27.10.06 22:22
а как насчет:
percent=sqr(( ((r1-r2)/(r1+r2))^2 + (()/()) + (()/()) )/3)
Чтобы эта формула не ругалась на ноль, можно воткнуть (r1-r2+eps)/(r1+r2+eps), где eps=1E-5 например.

Ответить

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


 

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

Вопросов: 236
Ответов: 8362
 Профиль | | #15 Добавлено: 28.10.06 01:06
Задача такая: Попиксельно сравнить два изображения. НО, если цвета сравнимых пикселей не одинаковы, нужно все же найти процент ихней похожести.

т.е. например,
если color1=color2 then result++
}else{
result = result + процентная_разница(color1,color2)
}

ну а потом умножить ширину на высоту картинки, делить на result... вообщем result подогнать под 0..100%.
Таким макаром собираюсь сравнить 2 изображения на схожесть. Понимаю что таким макаром более мение удачно получится сравнивать фотографии, пейзажи итп.. т.е. не изображения с одноцветными полосочками в разых местах (т.к. разница идентичности цвета в этом случае 0)...

Изображения просто могут быть разных форматов, качества, возможно отличия угла с котрого соткано изображения итп. Думаю такие нюансы получится решить анализирую картинку попиксельно...

В дальнейшем возможно буду "накладывать сетку", но принцип сравнения цветов в ячейке то останется... Также может думаю размыть картинку для стирания четких граней объектов. Думаю тоже это даст положительный результат

Ответить

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

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



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