1

У меня есть набор из нескольких тысяч изображений, и для каждого изображения я выделил набор дескрипторов функций SIFT (в настоящее время привязан к 200 на изображение).Сравнение дескрипторов функций большого набора изображений

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

До сих пор я пытался использовать FLANN для вычисления 20 ближайших соседних дескрипторов между двумя узлами и затем вычисления среднего расстояния между каждым из согласованных дескрипторов. К сожалению, этот процесс слишком длительный для выполнения.

Можно ли более эффективно сравнивать дескрипторы этих изображений?

+0

Вы можете бинарировать дескрипторы SIFT без большой потери производительности. – Maurits

+0

Если есть возможность переключиться на SURF, вы можете использовать встроенную графическую реализацию OpenCV, включающую в себя извлечение функций и сопоставление грубой силы (я думаю, вам нужно построить его с включенным CUDA CMake флагом). Это было в 40 раз быстрее с моим приложением, и мой GPU был довольно медленным. – gfkri

+1

Вы слышали о модели Bag-of-Words? Я думаю, вы должны использовать его. – zedv

ответ

3

Вы можете придумать, как объединить ваш дескриптор SIFT в виде суммарного визуального слова (BoV) или Vector of Locally Aggregated Descriptor (VLAD). В основном:

1 - вычислить кодовую книгу (K просеять дескрипторы) с K-например посредством

2 - для каждого изображения, извлечь просеять дескрипторы, а затем искать ближайший сосед каждого в кодовую книгу. Следовательно, вычислите гистограмму SIFT изображения в соответствии с кодовой книгой. Это самый простой способ (жесткое кодирование, объединение сумм), но существует альтернатива (и часто дают лучшие результаты для проблем компьютерных видений)

3 - Следовательно, каждое изображение представлено уникальным вектором размера K (гистограмма). Затем вы можете просто вычислить расстояние между изображениями как (например, евклидово) расстояние между этими гистограммами.

+0

также обратите внимание, что это [уже встроено с opencv] (http://docs.opencv.org/modules/features2d/doc/object_categorization.html) (пока вы используете дескрипторы float), и вы можете обучить SVM или аналогичные по результирующим векторам гистограммы, гораздо более эффективные, чем сравнение грубой силы или фланна. – berak

+0

Закончив работу с этим, я попробовал различные методы: от Binarized-SIFT, PCA-SIFT и используя гистограмму из кодовой книги, как вы предложили. Ваш метод был самым быстрым (~ 5000x быстрее, чем мой оригинальный метод, с ~ 1000 дескрипторами на изображение) и имел только очень небольшое снижение результатов, когда некоторые из других сильно пострадали от моих данных. –

Смежные вопросы