Vergleiche (ähnliche) Bilder mit Python / PIL

8

Ich versuche die Ähnlichkeit (lies: Levenshtein distance ) von zwei Bildern mit Python 2.6 und PIL zu berechnen.

Ich plane uns e die python-levenshtein Bibliothek zum schnellen Vergleich.

Hauptfrage:

Was ist eine gute Strategie zum Vergleichen von Bildern? Meine Idee ist etwas wie:

  • In RGB konvertieren (transparent - & gt; weiß) (oder vielleicht in monochrom konvertieren?)
  • Vergrößern Sie den kleineren auf die Größe des größeren
  • Konvertiere jeden Kanal (= der einzige Kanal, wenn er in monochrom konvertiert wurde) in eine Sequenz (Gegenstandswert = Farbwert des Pixels)
  • Berechnen Sie die Levenshtein-Distanz zwischen den beiden Sequenzen

Natürlich werden Fälle wie gespiegelte Bilder, beschnittene Bilder usw. nicht behandelt. Für einen grundlegenden Vergleich sollte dies jedoch nützlich sein.

Gibt es irgendwo eine bessere Strategie?

BEARBEITEN: Aaron H hat recht, was die Geschwindigkeit angeht. Die Berechnung von Levelshtein dauert für Bilder, die um einige hundert Pixel größer als ein paar Hundert sind, ewig. Allerdings ist der Unterschied zwischen den Ergebnissen nach dem Herunterskalieren auf 100x100 und 200x200 in meinem Beispiel weniger als 1%, so dass es sinnvoll sein könnte, eine maximale Bildgröße von ~ 100px oder so einzurichten ...

BEARBEITEN: Danke PreludeAndFugue, nach dieser Frage habe ich gesucht.

By the way, Levenshtein Abstand kann optimiert werden, wie es scheint, aber es gibt mir einige wirklich schlechte Ergebnisse, vielleicht wegen der vielen redundanten Elemente in den Hintergründen. Ich muss mir andere Algorithmen ansehen.

EIDT: Die mittlere quadratische Abweichung und das Signal-Rausch-Verhältnis scheinen zwei weitere Optionen zu sein, die nicht sehr schwer zu implementieren sind und scheinbar nicht sehr CPU-teuer sind. Es scheint jedoch, dass ich eine Art Kontextanalyse für die Erkennung von Formen usw. brauche.

Wie auch immer, danke für alle Links und auch für die Richtung auf NumPy / SciPy.

    
Attila O. 08.04.2010, 21:53
quelle

2 Antworten

2

Sie können sich die stsci Bibliothek ansehen, die zum Vergleichen und Analysieren von Bildern verwendet wird. Es sollte Ihnen geben, was Sie wollen, aber vielleicht ein wenig übertrieben.

Wenn Sie es einfach halten möchten, können Sie zunächst die Anzahl der Farben und die Auflösung verringern und dann die Entfernung berechnen.

    
Wolph 08.04.2010, 23:01
quelle
5

Sehen Sie sich imgSeek an:

  

imgSeek ist eine Sammlung freier Open-Source-visueller Ähnlichkeit   Projekte. Die Suchanfrage (Bild, nach der Sie suchen) kann ausgedrückt werden   Entweder als grobe Skizze, gemalt vom Benutzer oder als ein anderes Bild   Versorgung (oder ein Bild in Ihrer Sammlung). Der Suchalgorithmus macht   Verwendung der Multiresolution-Wavelet-Zerlegung der Abfrage und der Datenbank   Bilder.

    
Udi 27.10.2011 06:03
quelle