Сравнить 2 растровых графических изображения

buster-coder

Новичок
Сравнить 2 растровых графических изображения

Привет всем!
Такой у меня вопрос: нужно предоставить пользователю возможность загрузки изображения на сервер, но нужно проверить, существует ли это изображение уже в базе?
Изображения могут быть разные по размеру и методу сжатия.
Реально ли сравнивать изображения по контенту? как нибудь попиксельно? В какую сторону копать?
 

kost

Новичок
А вы задумывались сколько времени на это уйдет если там будет их штук 100?

А если они разные по размеру, то зачем их сравнивать? Вот, например, я доло мучался, заливал изображение 1600x1200 для общих нужд, а оно мне раз: 160x120 так как какой-то юзер уже залил уменьшенную копию...
 

Krishna

Продался Java
buster-coder
Ну, если они СОВЕРШЕННО одинаковы, то сравнить ИМХО реально и копать надо с торону библиотеки GD и преобразования файловых форматов в образ Image
 

Popoff

popoff.donetsk.ua
хм.. :) У нас на тему поиска изображений по содержимому не одна диссертация написана... :)
 

texrdcom

Новичок
Ребята а не проще сравнивать md5 содержания графического файла - приведя естественно к одному размеру!
Иначе прийдеться сравнивать по пиксельно - учитывая цвет пикселя и так если изображения имеет 1200px * 600 =720000
сравнений - для идеально сравнения :)
 

SiMM

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

Popoff

popoff.donetsk.ua
Юзер
вообще-то у нас диссертации очень редко кто публикует. я, вот, свою опубликую, когда защищу, но исключительно только потому, что у меня есть мой персональный сайт.

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

buster-coder

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

White Rabbit

белый кролик
Даже если это и возможно сделать с двумя изображениями,
то как быть, если, как уже было озвучено, в базе их несколько тысяч?
ИМХО, результат не стоит усилий
 

buster-coder

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

msdn11

Новичок
1)может попробовать сравнивать рандомно пиксели в картинках( при совпадении размеров), и если все совпало, вывести админу картинки которые совпали, и спросить не одинаковы ли они... если он подтвердит, то не грузить.... только при большом к-ве это не выход.

2) идея вытекает из первой. можно при загрузке изображения записать цвет 10 пикселей(например 12*12 и т.д.) в базу, + записать размер.

потом когда юзер постит сравнить размер и эти 10 пикселей(12*12), если полное совпадение, то показать юзеру 2 картинки и спросить нужно ли постить...
 

buster-coder

Новичок
Спасибо, неплохая идея..Я думал просто по размеру сверять и спрашивать админа...авось....))
 

alexwans

Новичок
А если просто сравнить оба файла как строки?

PHP:
$a_file[0]['name'] = 'test_a.jpg';
$a_file[0]['content'] = file_get_contents('./'.$a_file[0]['name']);

$a_file[1]['name'] = 'test_b.jpg';
$a_file[1]['content'] = file_get_contents('./'.$a_file[1]['name']);

if (strcmp($a_file[0]['content'], $a_file[1]['content']) == 0) {
    echo $a_file[0]['name'].' равен '.$a_file[1]['name'];
} else {
    echo 'Файлы не равны';
}
 

SiMM

Новичок
> А если просто сравнить оба файла как строки?
Ещё один. Читайте ТЗ. Как минимум
> Изображения могут быть разные по размеру и методу сжатия.
 

Игорёк

Новичок
Нужно при добавлении каждого изображения вычислять для него набор уникальных параметров (например, соотношение усреднённых яркостей определённых областей - по углам и в центре, то же самое с цветностью). Потом хранить эти данные вместе с изображением. При добавлении новых изображений сравнивать эти параметры с уже существующими. "Подозрительные" изображения можно выдать пользователю и спросить, не являются ли они теми же самыми, которое он хочет добавить.
 

buster-coder

Новичок
Спасибо за ответ....буду пробовать ;) ядумаю сравнение этих данных в проиндексированной таблице займёт не много времени. А как эти параметры выгребать из изображения? ImageMagick?
 
Сверху