Подтвердить что ты не робот

Обнаружение, если два изображения визуально идентичны

Иногда два файла изображений могут отличаться на уровне файлов, но человек считает их восприимчивыми одинаковыми. Учитывая, что теперь предположим, что у вас есть огромная база данных изображений, и вы хотите знать, будет ли человек думать, что какое-то изображение X присутствует в базе данных или нет. Если все изображения имели проницательный хэш/отпечаток пальца, то можно было бы хэш-изображение X, и было бы просто проверить, находится ли он в базе данных или нет.

Я знаю, что есть исследования вокруг этой проблемы, и существуют некоторые алгоритмы, но есть ли какой-либо инструмент, такой как инструмент командной строки UNIX или библиотека, которую я мог бы использовать для вычисления такого хеша без реализации какого-либо алгоритма с нуля?

edit: соответствующий код от findimagedupes, используя ImageMagick

try $image->Sample("160x160!");
try $image->Modulate(saturation=>-100);
try $image->Blur(radius=>3,sigma=>99);
try $image->Normalize();
try $image->Equalize();
try $image->Sample("16x16");
try $image->Threshold();
try $image->Set(magick=>'mono');
($blob) = $image->ImageToBlob();

edit: Предупреждение! ImageMagick $image object, похоже, содержит информацию о времени создания файла изображения, который был прочитан. Это означает, что blob, который вы получите, будет отличаться даже для одного и того же изображения, если он был получен в другое время. Чтобы убедиться, что отпечаток остается неизменным, используйте $image- > getImageSignature() в качестве последнего шага.

4b9b3361

Ответ 1

findimagedupes довольно хорошо. Например, вы можете запустить "findimagedupes -v отпечатки пальцев", чтобы напечатать "перцептивный хеш", например.

Ответ 2

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

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

Пример MATLAB: Регистрация изображения с использованием нормализованной кросс-корреляции

Википедия называет это " фазовая корреляция", а также описывает , делая его масштабным - и вращение-инвариант:

Этот метод может быть расширен для определения разнесений вращения и масштабирования между двумя изображениями, сначала преобразуя изображения в лог-полярные координаты. Благодаря свойствам преобразования Фурье параметры вращения и масштабирования могут быть определены способом, инвариантным к сдвигу.

Ответ 3

Гистограмма цвета хороша для того же изображения, которое было изменено, изменено и т.д.

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

Ответ 4

Я не знаю алгоритма, лежащего за ним, но Microsoft Live Image Search просто добавил эту возможность. Picasa также имеет возможность идентифицировать лица в изображениях и лица групп, которые выглядят одинаково. В большинстве случаев это тот же человек.

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

Ответ 5

измените размер изображения на 1x1 пиксель... если они точны, есть небольшая вероятность, что они представляют собой одну и ту же картинку... теперь измените размер до изображения 2x2, если все 4 пикселя точны, есть большая вероятность, что они точны... то 3x3, если все 9 пикселей точны... хорошие шансы и т.д. то 4x4, если все 16 пикселей точны,... лучший шанс.

и т.д...

делая это таким образом, вы можете сделать улучшения эффективности... если сетка 1x1 пикселей отключена много, зачем беспокоиться о сетке 2x2? и др.

Ответ 6

Если у вас много изображений, можно использовать цветовую гистограмму, чтобы получить грубую близость изображений, прежде чем выполнять полное сравнение изображений каждого изображения друг с другом (т.е. O (n ^ 2)).

Ответ 7

Вы можете использовать diff, чтобы увидеть, являются ли они ДЕЙСТВИТЕЛЬНО разными. Думаю, он удалит много бесполезного сравнения. Тогда для алгоритма я бы использовал вероятностный подход. Каковы шансы, что они будут выглядеть одинаково. Я основывал это на количестве rgb в каждом пикселе. Вы также можете найти некоторые другие показатели, такие как светимость и тому подобное.

Ответ 8

Существует DPEG, " Диспетчер дублирующих носителей, но его код не открыт. Это очень старый инструмент - я помню, как его использовали в 2003 году.