Сравнение 2-х изображений

Статус
В этой теме нельзя размещать новые ответы.

Stewie

Guest
Сравнение 2-х изображений

Можно ли как-нибудь сравнить 2 графических файла при помощи gd?
Не по размеру и весу, а по содержимому.
Такой алгоритм реализован в проге ImageDupeless(http://www.imagedupeless.com), тока она оффлановая.
Как такое с помощью GD сделать, ума не приложу.....
 

Demiurg

Guest
Все очень просто, есть много способов:
1. попросить их сделать екстеншен для php, которым затем воспользоваться.
2. попросить их сделать библиотечку из которой сделать экстеншен для php, которым воспользоваться.
3. Придумать свой алгоритм сравнения и реализовать его на php или другом языку, сделав потом екстеншен.
 

advocat

developer
Stewie
по моему Maxim Matyukhin предложил наверное единственный вариант это сравнивать md5() или sha1() файлов...
 

Falc

Новичок
Насколько я понял надо сравнить не на полное совпадение, а на совпадение при просмотре человеком, т.е. если несколько пикселов будут отличатся, то это будет одно и тоже изображение.

Я предлагаю попиксельно сканировать изображения и сверять цвет, аккамулируя разницу, разделив суммарную разницу на кол-во пикселей получим среднюю разницу, которую потом можно сравнить с некоторым коэффициентом допустимости. Правда такой алгоритм подходит только при равенстве размеров изображений.
 

Найч

Алгоритмик :-)
Originally posted by Falc

Я предлагаю попиксельно сканировать изображения и сверять цвет, аккамулируя разницу, разделив суммарную разницу на кол-во пикселей получим среднюю разницу, которую потом можно сравнить с некоторым коэффициентом допустимости. Правда такой алгоритм подходит только при равенстве размеров изображений.
Как вариант:
1. Читаем цвета(например, построчно) в два массива
2. Приводим массивы к одинаковой длине
3. Сверяем
4. Следующая строка.
 

Demiurg

Guest
Найч
а пожно по поводу пункта 2 попобробнее ?
 

Найч

Алгоритмик :-)
Originally posted by Demiurg
Найч
а пожно по поводу пункта 2 попобробнее ?
Идея схожа на приведение к общему знаменателю.
a[0]=1;
a[1]=2;

b[0]=2;
b[1]=3;
b[2]=2;

После приведения
a[0]=1;
a[1]=1;
a[2]=1;
a[3]=2;
a[4]=2;
a[5]=2;

b[0]=2;
b[1]=2;
b[2]=3;
b[3]=3;
b[4]=2;
b[5]=2;
 

Demiurg

Guest
>Идея схожа на приведение к общему знаменателю.
понятно, вообщем то логично, но самого привеления можно избежать описав алгоритмом сравнения.

И все таки хочется учлышать от автора треда, какое именно сравнение ему нужно.
 

Найч

Алгоритмик :-)
Автор оригинала: Demiurg
понятно, вообщем то логично, но самого привеления можно избежать описав алгоритмом сравнения.
Можно по-подробнее об этом? Отвечав в этот тред, я предполагал, что приведение массивов составляет алгоритм. Если вам известен иной алгоритм сравнения содержимого картинок - буду рад любой информации
 

Demiurg

Guest
алгоритм сравнения двух массивов разной длинны примерно такой:
пусть есть два массива small и big,
err = 0;
for(i = 0 ; i < count(big) ; i++)
{
if(small[floor(count(small)*i/count(big))] != big )
{
err = 1;
break;
}
}

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

Stewie

Guest
Автор оригинала: Falc
Насколько я понял надо сравнить не на полное совпадение, а на совпадение при просмотре человеком, т.е. если несколько пикселов будут отличатся, то это будет одно и тоже изображение.
Да, именно так, и различия могут быть не в несколько пикслов, а в 10-11%
Я предлагаю попиксельно сканировать изображения и сверять цвет, аккамулируя разницу, разделив суммарную разницу на кол-во пикселей получим среднюю разницу, которую потом можно сравнить с некоторым коэффициентом допустимости. Правда такой алгоритм подходит только при равенстве размеров изображений.
А вот изображения, как раз, могут быть разными.
 

Stewie

Guest
Автор оригинала: Demiurg
>Идея схожа на приведение к общему знаменателю.
понятно, вообщем то логично, но самого привеления можно избежать описав алгоритмом сравнения.

И все таки хочется учлышать от автора треда, какое именно сравнение ему нужно.
Вот примеры изображений: http://wallpapernetwork.com/001.jpg и http://wallpapernetwork.com/002.jpg
ImageDupeless говорит, что они различаются на 13%
 

Demiurg

Guest
Stewie
ImageDupeless имеет свой алгоритм сравнения. Какой - никто в этом форуме не знает. Так что все приведенные рассуждения по поводу хеша и выанивании размера являются оффтопиком. Остается только то, что я предложил в самом начале.
 

confguru

ExAdmin
Команда форума
А если делать считать контрольную сумму
их (MD5) и не заморачиваться?
 

Alien

Новичок

vitus

мимо проходил
Originally posted by Stewie
Вот примеры изображений: http://wallpapernetwork.com/001.jpg и http://wallpapernetwork.com/002.jpg
ImageDupeless говорит, что они различаются на 13%
я вот что подумал по этому поводу, что если написать CGI с использованием этой ImageDupeless, чтобы она отдавала те самые %, а потом вопрошать её из пхп по хттп ? - на первый взгляд вроде криво, но однако - фасад :) и пользовать можно не только из пхп ...
---- сорри, не догнал что это программа, а не библиотека, дико извиняюсь чувствую себя негадяем:(
 

Stewie

Guest
Один мой знакомый сказал, что может легко написать такой скрипт на Perl за 60$
Алгоритм выдавать не хочет :(
Может в Imagemagick какая-нють функция особенная есть, которой в GD нету?
 

vitus

мимо проходил
вопрос интересный, посмотри на апи Imagemagic, если есть такая функция, то ты и сам справишься с перлом :), если нету, то 60$ для твоего начальства это ~10 часов твоей работы, за 10 часов на пхп не реализовать никакого приемлемого сравнения для имеджей, такчто если твой знакомый не переоценивает себя, то лучше заказать.
 

valyala

Новичок
Тому, кто напишет реально работающую прогу для сравнения изображений, которая будет работать не хуже пятилетнего ребенка, светит не только Нобелевская премия, но и всемирная известность...
Stewie, эта задача на сегодняшний день алгоритмически неразрешима. Твой знакомый - или непризнанный гений (в чем я сильно сомневаюсь :) ), или обычный шарлатан. Цена такой разработки - не $60, а минимум $100'000'000. Алгоритм, реализованный в программе ImageDupeless, не идет ни в какое сравнение с пятилетним ребенком.
 
Статус
В этой теме нельзя размещать новые ответы.
Сверху