C # - Сравнение изображений (быстрый) - PullRequest
2 голосов
/ 10 января 2011

На данный момент у меня есть база данных с более чем 100 000 изображений, они не одинакового размера или чего-то подобного, но я хочу сделать следующее для моей компании:

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

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

Сравнение загруженного изображения со всеми изображениями не должно занимать более 5 минут.базы данных.

Заранее спасибо!

Джулиан

Посмотрите на www.tineye.com , у них есть какой-то алгоритм, который янаходясь в поиске.Думаю, они используют очень сложный, мне просто нужен тот, который делает то же самое, но с меньшей скоростью успеха.

Ответы [ 2 ]

2 голосов
/ 10 января 2011

Я бы сгенерировал очень маленькое (скажем, 1/50 от исходного размера изображения) изображение для каждого сравниваемого изображения и сохранил путь к уменьшенному изображению вместе с оригиналом. размер в базе данных. Я бы оставил миниатюры в виде несжатых bmp для скорости и без потерь (я только что сделал это слово!), Так как они все равно такие маленькие.

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

Если он проходит этот тест, вы можете выполнить полное растровое пиксельное сравнение с исходным изображением.

edit: Я просто хочу упомянуть, что раньше я тоже шел по вероятностному пути. Это работало хорошо, но создание метаданных для изображений заняло вечность, и было много ложных срабатываний. Инстинктивно, я думаю, что вычисление локальных средних для каждого прямоугольника сетки вашего изображения (что и делает уменьшение вашего изображения) даст аналогичные, если не лучшие результаты.

1 голос
/ 01 марта 2011

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

Также, если вы хотите добиться более высокой качественности и использовать цветные изображения - используйте CIE 1994 или CIE 2000 в качестве формулы разницы цветов

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...