В настоящее время я расширяю библиотеку изображений, используемую для категоризации изображений, и я хочу найти дубликаты изображений, преобразованные изображения и изображения, которые содержат или содержатся в других изображениях.
Я тестировал реализацию SIFT из OpenCV, и он работает очень хорошо, но будет довольно медленным для нескольких изображений. Слишком ускорив его, я подумал, что могу извлечь функции и сохранить их в базе данных, поскольку там уже проводится множество других метаданных, связанных с изображением.
Каким будет самый быстрый способ сравнить возможности новых изображений с функциями в базе данных?
Обычно выполняется сравнение расчета евклидова расстояния с использованием kd-деревьев, FLANN или с Pyramid Match Kernel, которые я нашел в другом потоке здесь, на SO, но пока не очень заглянули.
Так как я не знаю способа эффективного сохранения и поиска kd-дерева в базе данных, в настоящее время я вижу только три варианта:
* Пусть MySQL вычислит эвклидовое расстояние до каждой функции в базе данных, хотя я уверен, что это займет необоснованное время для более чем нескольких изображений.
* Загрузите весь набор данных в память в начале и создайте kd-tree (s). Вероятно, это будет быстро, но очень интенсивно. Кроме того, все данные необходимо будет перенести из базы данных.
* Сохранение сгенерированных деревьев в базу данных и загрузка всех из них было бы самым быстрым методом, но также генерировать большие объемы трафика, так как с новыми изображениями kd-деревья нужно было бы перестроить и отправить на сервер.
Я использую SIFT-реализацию OpenCV, но я не уверен в этом. Если для этой задачи больше подходит функция экстрактора (и примерно одинаково надежная), я рад, если кто-то может предложить ее.