Gute Metrik für den qualitativen Vergleich von Bildfeldern


11

Ich versuche, kleine quadratische Flecken in einem Bild "abzugleichen". Auf den ersten Blick erscheint es sinnvoll, einfach einen euklidischen Distanzstilvergleich zweier dieser Arrays durchzuführen, um ein "Ähnlichkeitsmaß" zu erhalten. Dies funktioniert in vielen Fällen einwandfrei (der "beste" Patch (niedrigster Wert) gemäß dieser Metrik ähnelt stark dem Abfrage-Patch). Es gibt jedoch viele Fälle, in denen dies zu einer sehr schlechten Übereinstimmung führt. Nehmen Sie zum Beispiel diese beiden Patch-Paare:

Zwei Flecken einer Mauer, Punktzahl 134 (dies ist die Summe der Komponenten der durchschnittlichen absoluten Pixeldifferenz):

Quell-Patch Ziel-Patch

Ein Stück Mauer, ein Stück Gras, Punktzahl 123!

https://i.stack.imgur.com/d7lBZ.png https://i.stack.imgur.com/d2TBE.png

Für einen Menschen stimmt das Gras "eindeutig" nicht mit dem Ziegel überein, aber diese Metrik sagt etwas anderes aus. Das Problem liegt nur in der lokalen statistischen Variation.

Wenn ich so etwas wie einen Histogrammvergleich verwende, verliere ich alle räumlichen Informationen vollständig - z. B. wenn ein Fleck oben Gras und unten Ziegel ist, würde es genau zu einem Fleck mit Gras unten und Ziegel oben (wieder) passen , ein weiteres "offensichtlich falsches" Spiel).

Gibt es eine Metrik, die diese beiden Ideen irgendwie zu einem vernünftigen Wert kombiniert, der für Paar 1 oben als "ähnlich" bewertet wird, für mein Beispiel eines Patches und seines vertikalen Spiegels jedoch nicht ähnlich ist?

Anregungen sind willkommen!


1
Wenn Sie die Summe der Komponenten nehmen, verlieren Sie alle "räumlichen" Informationen im Farbraum. Bewerten Sie die Komponenten einzeln, indem Sie beispielsweise den euklidischen Abstand auf den beiden Vektoren berechnen?
Geerten

Antworten:


2

Die Grundidee ist: An Farbinformationen ist nichts auszusetzen - sie reichen einfach nicht aus. Am besten kombinieren Sie also mehrere Funktionssätze.

Sie können mehrere Funktionen ausprobieren, um diese Mehrdeutigkeit zu beheben. In Bezug auf den Funktionsumfang können Sie Folgendes verwenden:

  1. Farbe (so etwas wie die dominierende Farbe von MPEG7) ODER Color Historgram
  2. Textur (entweder in Form einer Filterbankantwort) ODER
  3. Kantenhistogramme

Als primären Vergleich möchte ich zunächst zwischen reinem Ziegelfeld und reinem Grasfeld unterscheiden. Farbe ist dabei definitiv das potentiellste Element.

Kombinieren von Funktionen für eine robustere Klassifizierung

Ich würde eine dominante Farbe (verwendet, aber nicht die einzige) oder Schlüsselfarbe verwenden und die Cluster bilden. Sehen Sie, wo die Clusterköpfe liegen;

Wenn sich die Clusterköpfe beide innerhalb der erwarteten Bereiche befinden, ist die Klasse normalerweise leicht zu erkennen. Wenn sie in eine Grauzone fallen, gehört die Klasse dorthin. Wenn es in den grauen Bereich fällt, ist eine weitere Funktion erforderlich.

Sameway, können Sie unabhängig mit klassifizieren Texture Matrix und dann beide die Scores kombinieren , um sicherzustellen , dass die Ergebnisse sinnvoll ist.

Umgang mit räumlichen Problemen

Insbesondere, wenn Sie feststellen, dass die Flecken Teile davon haben können, die zur Hälfte aus Ziegeln und zur Hälfte aus Gras bestehen. Ich denke, Sie brauchen keine zusätzlichen Funktionen oder andere Matrizen mehr. Dies kann auf zwei Arten gehandhabt werden.

1. Behalten Sie mehrere Mitgliedschafts-Patches als verschiedene Klassen bei. Zum Beispiel, abgesehen von birck-onlyKlasse und grass-onlyKlasse, können Sie auch haben half-brick-half-grass-verticalund half-brick-half-grass-horizontalso insgesamt vier Klassen. Dies kann leicht mit der zuvor diskutierten Clustering-Methode klassifiziert werden.

2. Hinzufügen einer mehrskaligen Klassifizierung Wenn sich das Patch beispielsweise in einem grauen Bereich befindet, können Sie das Patch in zwei Teile teilen, dh links gegen rechts. Auf die gleiche Weise können Sie auch oben gegen unten teilen. Jetzt können Sie für diesen "halben Teil" eine identische Klassifizierung anwenden. Im Idealfall sollte das oben aufgeführte Feature es Ihnen ermöglichen, es skalierbar zu machen, um eine Feature-Ähnlichkeit zwischen Vollteilen zu vergleichen (z. B. kann die dominante Farbe unabhängig von der Größe gleich sein), oder Sie müssen möglicherweise die Größe ändern.

Das Hinzufügen weiterer Klassen (wie in Teil 1) oder weiterer Ebenen (wie in Teil 2) ist unkompliziert. Die Obergrenze wird durch zwei Faktoren bestimmt: Entweder erhöht eine zusätzliche Unterteilung keinen Wert mehr für die Klassifizierung, oder übermäßiges Rauschen führt effektiv zu Mehrdeutigkeiten bei der Klassifizierung. Hier hören Sie auf.


2

Zunächst reichen 2 Bilder und 3 Messungen nicht genau aus, um ein statistisches Modell zu ermitteln, mit dem die optimale Vergleichsmetrik definiert werden kann.

Ich denke, Sie könnten anfangen, Texturerkennungspapiere nach Methoden und Hinweisen zu durchsuchen. Es ist ein aktives Feld.

Für das, was es wert ist, habe ich ein paar Tests mit Wahrnehmungs-Hashing-Funktionen (DCT und Random Projection basierend) durchgeführt und einen kleinen Versuch mit dem sogenannten SIFT-Deskriptor durchgeführt. Diese Funktionen können Abstände zwischen und innerhalb der Klasse trennen, obwohl aus 3 Bildern nichts geschlossen werden kann.

Code auf Github .

Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.