Vergleichen von SIFT-Features, die in einer MySQL-Datenbank gespeichert sind

Ich erweitere derzeit eine Bildbibliothek, die zum Kategorisieren von Bildern verwendet wird, und ich möchte doppelte Bilder, transformierte Bilder und Bilder finden, die andere Bilder enthalten oder in anderen Bildern enthalten sind.
Ich habe die SIFT-Implementierung von OpenCV getestet und sie funktioniert sehr gut, wäre aber für mehrere Bilder ziemlich langsam. Um dies zu beschleunigen, dachte ich, ich könnte die Features extrahieren und in einer Datenbank speichern, da dort bereits viele andere bildbezogene Metadaten gespeichert sind.

Was wäre der schnellste Weg, um die Merkmale eines neuen Bildes mit den Merkmalen in der Datenbank zu vergleichen?
ormalerweise wird der euklidische Abstand mit kd-trees, FLANN oder mit dem @ -Zeichen berechne Pyramid Match Kernel dass ich in einem anderen Thread hier auf SO gefunden habe, aber noch nicht viel reingeschaut habe.

Da ich keine Möglichkeit zum effizienten Speichern und Durchsuchen eines kd-Baums in einer Datenbank kenne, werden derzeit nur drei Optionen angezeigt:
* Lassen Sie MySQL den euklidischen Abstand zu jedem Feature in der Datenbank berechnen, obwohl ich mir sicher bin, dass dies für mehr als ein paar Bilder eine unangemessene Zeit in Anspruch nehmen wird.
* Lade den gesamten Datensatz zu Beginn in den Speicher und erstelle den / die kd-Baum (e). Dies wäre wahrscheinlich schnell, aber sehr speicherintensiv. Außerdem müssten alle Daten aus der Datenbank übertragen werden.
* Das Speichern der generierten Bäume in der Datenbank und das Laden aller Bäume wäre die schnellste Methode, würde aber auch viel Verkehr erzeugen, da bei neuen Images die kd-Bäume neu erstellt und an den Server gesendet werden müssten.

Ich verwende die SIFT-Implementierung von OpenCV, bin aber noch nicht ganz fertig damit. Wenn es einen Feature-Extraktor gibt, der für diese Aufgabe besser geeignet (und ungefähr gleich robust) ist, würde ich mich freuen, wenn jemand einen vorschlagen könnte.

Antworten auf die Frage(8)

Ihre Antwort auf die Frage