Страница: 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-сайт:
Профиль | | #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-сайт:
Профиль | | #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-сайт:
Профиль | | #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-сайт:
Профиль | | #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-сайт:
Профиль | | #13
Добавлено: 27.10.06 18:14
Все же интересно было бы услышать саму задачу.
Номер ответа: 14
Автор ответа:
Victor
ICQ: 345743490
Вопросов: 42
Ответов: 385
Web-сайт:
Профиль | | #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)...
Изображения просто могут быть разных форматов, качества, возможно отличия угла с котрого соткано изображения итп. Думаю такие нюансы получится решить анализирую картинку попиксельно...
В дальнейшем возможно буду "накладывать сетку", но принцип сравнения цветов в ячейке то останется... Также может думаю размыть картинку для стирания четких граней объектов. Думаю тоже это даст положительный результат