Визуально проверьте наличие дубликатов и поврежденных изображений в PHP или Python - PullRequest
1 голос
/ 22 марта 2012

Я надеюсь найти здесь помощь в обработке изображений.

Я не знаком с Python, хотя я с PHP. Хотя я слышал, что Python «лучше» для сравнения изображений, изменения размера и т. Д.

Теперь я ищу программу, которая будет сравнивать изображение с базой данных MySQL. для того, чтобы найти похожие изображения. Если сходство выше определенной суммы (в процентах?), Оно будет помечено как возможный дубликат.

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

Я просмотрел StackOverflow, но нашел ответы только за 2008/2009, и я подумал, что, возможно, к настоящему моменту существует более эффективный или более эффективный способ ведения дел.

Спасибо, что нашли время, чтобы прочитать это, и если вы случайно ответите на мою проблему, заранее спасибо. :)

редактировать: Я заметил, как eyeBuy SDK «объединяет информацию об обнаружении краев, цвете, интенсивности и контрастности в одну строку». Будет ли это хорошим решением для обнаружения дублирующихся изображений?

Ответы [ 2 ]

1 голос
/ 22 марта 2012

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

Однако, если у вас есть разные изображения, размер которых вы немного изменили или изменили, упомянутый скрипт Artjom Kurapov очень поможет вам в качестве отправной точки. Если ваша база данных также содержит дубликатов , я бы сначала сравнил MD5 , прежде чем пытаться что-либо еще.

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

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

0 голосов
/ 22 марта 2012

Как уже говорилось выше, алгоритм, который может работать с разными перспективами, будет очень сложным.Это центр многих (академических) исследований.

Для простого начала вы можете взглянуть на Python phash .

Простой алгоритм на основе DCT, который разумно устойчив к шуму и масштабу, будет выполнять следующие действия:

  1. Преобразование изображения в оттенки серого
  2. Сокращение изображения до размера миниатюрыскажем, [32x32]
  3. Запустить двумерное дискретное косинусное преобразование
  4. Держите верхний левый [8 x 8], наиболее значимые низкочастотные составляющие
  5. Бинаризуйте блок нана знак компонентов
  6. Результат - 64-битный хеш

И вариант на эту тему будет

  1. Преобразовать изображение в оттенки серого
  2. При желании изменить размер до предопределенного размера.
  3. Разделить изображение на фиксированное количество блоков
  4. Определить глобальное среднее
  5. Определить локальное среднее для каждого блока
  6. Для хэша запишите 1 или 0 на блок в ожидании, если локальное среднее было больше или меньше глобального среднего.
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...