OpenCV: Fingerabdruck Bild und Vergleich gegen Datenbank

8

Ich habe eine Datenbank mit Bildern. Wenn ich ein neues Bild mache, möchte ich es mit den Bildern in dieser Datenbank vergleichen und bekomme einen Ähnlichkeits-Score (mit OpenCV). So möchte ich erkennen, ob ich ein Bild habe, welches ist sehr ähnlich dem frischen Bild.

Ist es möglich, einen Fingerabdruck / Hash meiner Datenbankbilder zu erstellen und neue dagegen anzulegen?

Ich suche nach einem Code-Snippet oder einer technischen Demo und nicht nach einer kommerziellen Lösung.

Am besten,

Stefan

    
Stefan 26.08.2011, 13:37
quelle

3 Antworten

10

Wie Pual R kommentiert hat, ist dieser "Fingerabdruck / Hash" normalerweise eine Menge von Merkmalsvektoren oder eine Menge von Merkmalsdeskriptoren. Die meisten Merkmalsvektoren, die in der Computer-Bildverarbeitung verwendet werden, sind jedoch für die Suche gegen eine Datenbank normalerweise zu rechenaufwändig. Diese Aufgabe benötigt also eine spezielle Art von Feature-Deskriptoren, da solche Deskriptoren wie SURF und SIFT selbst bei verschiedenen Optimierungen zu viel Zeit zum Suchen benötigen.

Das einzige, was OpenCV für Ihre Aufgabe (Objektkategorisierung) hat, ist die Implementierung von Bag of Visual Words (BOW).

Es kann spezielle Arten von Bildfunktionen berechnen und Vokabeln für visuelle Wörter trainieren. Als Nächstes können Sie dieses Vokabular verwenden, um ähnliche Bilder in Ihrer Datenbank zu finden und den Ähnlichkeitswert zu berechnen.

Hier ist OpenCV-Dokumentation für Beutel mit Wörtern. Auch OpenCV hat ein Beispiel namens bagofwords_classification.cpp . Es ist wirklich groß, aber könnte hilfreich sein.

    
Andrey Kamaev 26.08.2011, 14:44
quelle
2

Content-basierte Bild-Retrieval-Systeme sind immer noch ein Bereich der aktiven Forschung: Ссылка

Zuerst muss klar sein, was in Ihrem Kontext ähnlich ist:

  1. Ähnliche Farbverteilung: Verwenden Sie so etwas wie Farbdeskriptoren für Unterteilungen der Bild, sollten Sie einige ziemlich befriedigende Ergebnisse erhalten.
  2. Ähnliche Objekte: Da der Computer nicht weiß, was ein Objekt ist, werden Sie nicht sehr weit kommen, es sei denn, Sie verfügen über umfangreiches Domänenwissen über das Objekt (oder wenige Objektklassen). Einen guten Überblick über den aktuellen Forschungsstand gibt es hier (Ergebnisse ) und bald hier .

Für das von Ihnen beschriebene Problem gibt es keinen -Algorithmus "für alle Bedürfnisse". Je mehr Sie über die Besonderheiten Ihres Problems berichten können, desto bessere Antworten erhalten Sie. Es ist auch sehr hilfreich, einige repräsentative Bilder (wenn möglich) zu veröffentlichen und das gewünschte Ergebnis zu beschreiben.

Dies wäre eine gute Frage für computer-vision.stackexchange.com , wenn es schon existiert.

    
bjoernz 26.08.2011 15:47
quelle
0

Sie können pHash Algorithm verwenden und phash value in der Datenbank speichern und dann diesen Code verwenden:

%Vor%

Hier kann der "Mismatch" -Wert leicht das Ähnlichkeitsverhältnis zwischen zwei Bildern anzeigen.

pHash-Funktion:

  1. AverageHash
  2. PHASH
  3. MarrHildrethHash
  4. RadialVarianceHash
  5. BlockMeanHash
  6. BlockMeanHash
  7. ColorMomentHash

Diese Funktionen sind gut genug, um Bildähnlichkeiten in jeder Hinsicht zu bewerten.

    
Rajeev Ranjan 04.10.2016 13:16
quelle