14 Stimmen

Wie kann man Ähnlichkeiten in Textur in Bildern abgleichen?

Was sind die Möglichkeiten, die Textur eines Teils eines Bildes zu quantifizieren? Ich versuche, Bereiche in einem Bild zu erkennen, die in ihrer Textur ähnlich sind, sozusagen eine Messung von "wie ähnlich sind sie sich?"

Die Frage lautet also, welche Informationen über das Bild (Kante, Pixelwert, Gradient usw.) als enthaltend seiner Texturinformationen angesehen werden können.

Bitte beachten Sie, dass dies nicht auf Vorlagenabgleich basiert.

Wikipedia hat nicht viele Details darüber gegeben, wie tatsächlich eine der Texturanalysen implementiert werden kann.

32voto

DanielHsH Punkte 4066

Möchten Sie zwei verschiedene Bereiche im Bild finden, die gleich aussehen (gleiche Textur) oder eine Textur in einem Bild mit einer anderen abgleichen? Das zweite ist aufgrund unterschiedlicher Radiometrie schwieriger.

Hier ist ein grundlegendes Schema, wie die Ähnlichkeit von Bereichen gemessen werden kann.

  1. Sie schreiben eine Funktion, die als Eingabe einen Bereich im Bild erhält und einen skalaren Wert berechnet. Wie z.B. durchschnittliche Helligkeit. Dieser Skalar wird als Merkmal bezeichnet.
  2. Sie schreiben weitere solche Funktionen, um etwa 8-30 Merkmale zu erhalten, die zusammen einen Vektor bilden, der Informationen über den Bereich im Bild codiert.
  3. Berechnen Sie diesen Vektor für beide Bereiche, die Sie vergleichen möchten.
  4. Definieren Sie eine Ähnlichkeitsfunktion, die zwei Vektoren annimmt und ausgibt, wie ähnlich sie sind.

Sie müssen sich auf Schritte 2 und 4 konzentrieren.

Schritt 2: Verwenden Sie die folgenden Merkmale: Standardabweichung der Helligkeit, eine Art Eckendetektor, Entropiefilter, Histogramm der Kantenorientierung, Histogramm der FFT-Frequenzen (in x- und y-Richtung). Verwenden Sie Farbinformationen, wenn verfügbar.

Schritt 4: Sie können Kosinusähnlichkeit, Min-Max oder gewichtete Kosinusähnlichkeit verwenden.

Nachdem Sie etwa 4-6 solcher Merkmale und eine Ähnlichkeitsfunktion implementiert haben, beginnen Sie mit Tests. Sehen Sie sich die Ergebnisse an und versuchen Sie zu verstehen, warum oder wo es nicht funktioniert. Fügen Sie dann ein spezifisches Merkmal hinzu, um dieses Thema abzudecken. Zum Beispiel, wenn Sie feststellen, dass eine Textur mit großen Flecken als ähnlich zu einer Textur mit winzigen Flecken angesehen wird, fügen Sie einen morphologischen Filter hinzu, der die Dichte von Objekten mit einer Größe von> 20 Quadratpixel berechnet.

Wiederholen Sie den Prozess des Identifizierens von Problemen und Gestaltens spezifischer Merkmale etwa 5 Mal, und Sie werden sehr gute Ergebnisse erzielen.

0 Stimmen

Danke, das scheint leichter zu sein als alle GLCM-Texturmessungen in OpenCV zu implementieren. Könnten Sie bitte weitere Informationen zum Histogramm der FFT bereitstellen, vielleicht Links? Die anderen sind großartig.

0 Stimmen

Was ist ein "Histogramm der FFT"? Macht es Sinn, ein Histogramm auf Basis der Fourier-Transformation zu erstellen? Vielleicht einfach aus der FT einen Frequenzbereich auswählen, der für den Begriff "Textur" relevant ist, und diesen Bereich als Texturfunktion verwenden

0 Stimmen

Durch sein Histogramm der FFT verstehe ich, dass zunächst die FFT angewendet und dann einige Informationen als Merkmale verwendet werden. Jede Frequenz als Merkmal zu verwenden, liefert zu viele unnötige Informationen. Daher können Sie die folgenden Merkmale auswählen: Verhältnis der Summe der hohen Frequenzen in X-Richtung geteilt durch Y-Richtung, Verhältnis von hohen Frequenzen geteilt durch niedrige Frequenzen (Vorsicht: niemals die Gleichstromfrequenz verwenden), usw.

6voto

Andrey Sboev Punkte 7294

Ich würde vorschlagen, die Wavelet-Analyse zu verwenden. Wavelets sind sowohl in der Zeit als auch in der Frequenz lokalisiert und bieten eine bessere Signalrepräsentation durch Multiskalenanalyse als die FT.

Es gibt ein Papier, das einen wellenlettenbasierten Ansatz zur Texturbeschreibung erklärt. Es gibt auch eine Vergleichsmethode.

Es könnte erforderlich sein, einen Algorithmus leicht zu modifizieren, um Bilder beliebiger Form zu verarbeiten.

0 Stimmen

Im Abschnitt zur Haar-Wavelet-Transformation, was ist gemeint mit "drei Detailbildern (LH, HL und HH)"? Die Wavelet-Ebenen sind in Ordnung, das habe ich bereits programmiert, jedoch habe ich nicht verstanden, was mit den LH, HL und HH Bildern im Kontext der Haar-Wavelet-Transformation gemeint ist. Können Sie dies bitte etwas genauer erläutern?

0 Stimmen

Es sind horizontale, vertikale und diagonale Merkmale des Bildes auf einer bestimmten Ebene L. Sie können eine Erklärung dazu einfach im Internet finden. Zum Beispiel Link ceremade.dauphine.fr/~peyre/numerical-tour/tours/…

2voto

Yoann Nicod Punkte 65

Ein interessanter Ansatz dafür ist die Verwendung der Local Binary Patterns. Hier ist ein grundlegendes Beispiel und einige Erklärungen: http://hanzratech.in/2015/05/30/local-binary-patterns.html

Betrachten Sie diese Methode als eine von vielen verschiedenen Möglichkeiten, Merkmale aus Ihren Bildern zu extrahieren. Sie entspricht dem 2. Schritt von DanielHsH's Methode.

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X