Ich benötige einen Algorithmus, der bestimmen kann, ob zwei Bilder "ähnlich" sind und ähnliche Muster in Bezug auf Farbe, Helligkeit, Form usw. erkennen. Möglicherweise benötige ich einige Hinweise darauf, welche Parameter das menschliche Gehirn verwendet, um Bilder zu "kategorisieren". ..
Ich habe mir hausdorffbasiertes Matching angesehen, aber das scheint hauptsächlich für das Matching transformierter Objekte und Formmuster zu sein.
algorithm
math
image-comparison
Kitsune
quelle
quelle
Antworten:
Ich habe etwas Ähnliches getan, indem ich Bilder mithilfe der Wavelet-Transformation in Signaturen zerlegt habe .
Mein Ansatz war es, die signifikantesten n Koeffizienten aus jedem transformierten Kanal auszuwählen und deren Position aufzuzeichnen. Dies erfolgte durch Sortieren der Liste der Tupel (Leistung, Ort) nach abs (Leistung). Ähnliche Bilder haben Ähnlichkeiten, da sie an denselben Stellen signifikante Koeffizienten aufweisen.
Ich fand es am besten, das Bild in das YUV-Format umzuwandeln, wodurch Sie effektiv Ähnlichkeiten in Form (Y-Kanal) und Farbe (UV-Kanäle) gewichten können.
Sie finden meine Implementierung des oben genannten in mactorii , an dem ich leider nicht so viel gearbeitet habe, wie ich sollte :-)
Eine andere Methode, die einige meiner Freunde mit überraschend guten Ergebnissen angewendet haben, besteht darin, die Größe Ihres Bildes einfach auf die Größe eines 4x4-Pixels und eines Speichers zu ändern, die Ihre Signatur sind. Wie ähnlich 2 Bilder sind, kann beispielsweise durch Berechnen des Manhattan-Abstands zwischen den 2 Bildern unter Verwendung entsprechender Pixel bewertet werden. Ich habe nicht die Details, wie sie die Größenänderung durchgeführt haben, daher müssen Sie möglicherweise mit den verschiedenen für diese Aufgabe verfügbaren Algorithmen spielen, um einen geeigneten zu finden.
quelle
pHash könnte Sie interessieren.
quelle
Ich habe SIFT verwendet , um dasselbe Objekt in verschiedenen Bildern erneut zu erkennen. Es ist wirklich mächtig, aber ziemlich komplex und könnte übertrieben sein. Wenn die Bilder ziemlich ähnlich sein sollen, können einige einfache Parameter, die auf dem Unterschied zwischen den beiden Bildern basieren, Ihnen einiges sagen. Einige Hinweise:
quelle
Mein Labor musste auch dieses Problem lösen, und wir verwendeten Tensorflow. Hier ist eine vollständige App- Implementierung zur Visualisierung der Bildähnlichkeit.
Auf dieser Seite finden Sie ein Tutorial zum Vektorisieren von Bildern für die Ähnlichkeitsberechnung . Hier ist der Python (den vollständigen Workflow finden Sie im Beitrag):
quelle
Sie könnten Perceptual Image Diff verwenden
Es ist ein Befehlszeilenprogramm, das zwei Bilder mithilfe einer Wahrnehmungsmetrik vergleicht. Das heißt, es wird ein Rechenmodell des menschlichen visuellen Systems verwendet, um zu bestimmen, ob zwei Bilder visuell unterschiedlich sind, sodass geringfügige Änderungen der Pixel ignoriert werden. Darüber hinaus wird die Anzahl der Fehlalarme drastisch reduziert, die durch Unterschiede bei der Zufallszahlengenerierung, dem Betriebssystem oder der Maschinenarchitektur verursacht werden.
quelle
Es ist ein schwieriges Problem! Es hängt davon ab, wie genau Sie sein müssen, und davon, mit welcher Art von Bildern Sie arbeiten. Sie können Histogramme verwenden, um Farben zu vergleichen, aber dies berücksichtigt offensichtlich nicht die räumliche Verteilung dieser Farben innerhalb der Bilder (dh der Formen). Die Kantenerkennung, gefolgt von einer Art Segmentierung (dh Auswahl der Formen), kann ein Muster für den Abgleich mit einem anderen Bild liefern. Sie können Coocurence-Matrizen verwenden, um Texturen zu vergleichen, indem Sie die Bilder als Matrizen von Pixelwerten betrachten und diese Matrizen vergleichen. Es gibt einige gute Bücher über Bildanpassung und Bildverarbeitung - Eine Suche bei Amazon wird einige finden.
Hoffe das hilft!
quelle
Einige Bilderkennungssoftwarelösungen basieren eigentlich nicht nur auf Algorithmen, sondern verwenden stattdessen das neuronale Netzwerkkonzept . Schauen Sie sich http://en.wikipedia.org/wiki/Artificial_neural_network und NeuronDotNet an, das auch interessante Beispiele enthält: http://neurondotnet.freehostia.com/index.html
quelle
Es gibt verwandte Forschungen unter Verwendung von Kohonen-Neuronalen Netzen / selbstorganisierenden Karten
Beide akademischeren Systeme (Google für PicSOM) oder weniger akademische
( http://www.generation5.org/content/2004/aiSomPic.asp , (möglicherweise nicht für alle Arbeit enviroments)) Präsentationen existieren.
quelle
Die Berechnung der Summe der Quadrate der Differenzen der Pixelfarbwerte einer drastisch verkleinerten Version (z. B. 6 x 6 Pixel) funktioniert gut. Identische Bilder ergeben 0, ähnliche Bilder ergeben kleine Zahlen, unterschiedliche Bilder ergeben große.
Die Idee der anderen oben genannten Leute, in YUV einzudringen, klingt zunächst faszinierend - während meine Idee großartig funktioniert, möchte ich, dass meine Bilder als "anders" berechnet werden, damit sie ein korrektes Ergebnis liefern - selbst aus der Sicht eines farbenblinden Beobachters.
quelle
Das klingt nach einem Sehproblem. Vielleicht möchten Sie sich mit Adaptive Boosting sowie dem Burns Line Extraction-Algorithmus befassen. Die Konzepte in diesen beiden sollten bei der Lösung dieses Problems helfen. Die Kantenerkennung ist ein noch einfacherer Einstieg, wenn Sie mit Vision-Algorithmen noch nicht vertraut sind, da hier die Grundlagen erläutert werden.
Soweit Parameter für die Kategorisierung:
quelle
Abhängig davon, wie viele genaue Ergebnisse Sie benötigen, können Sie die Bilder einfach in nxn Pixelblöcke aufteilen und analysieren. Wenn Sie im ersten Block unterschiedliche Ergebnisse erhalten, können Sie die Verarbeitung nicht beenden, was zu einigen Leistungsverbesserungen führt.
Zur Analyse der Quadrate können Sie beispielsweise die Summe der Farbwerte erhalten.
quelle
Ich fand diesen Artikel sehr hilfreich, um zu erklären, wie es funktioniert:
http://www.hackerfactor.com/blog/index.php?/archives/432-Looks-Like-It.html
quelle
Sie könnten eine Art Blockanpassungs-Bewegungsschätzung zwischen den beiden Bildern durchführen und die Gesamtsumme der Residuen und Bewegungsvektorkosten messen (ähnlich wie bei einem Video-Encoder). Dies würde die Bewegung kompensieren; Führen Sie für Bonuspunkte eine Schätzung der affinen Transformationsbewegung durch (gleicht Zooms und Dehnungen und ähnliches aus). Sie können auch überlappende Blöcke oder optischen Fluss ausführen.
quelle
In einem ersten Durchgang können Sie versuchen, Farbhistogramme zu verwenden. Sie müssen jedoch Ihre Problemdomäne wirklich eingrenzen. Generische Bildanpassung ist ein sehr schwieriges Problem.
quelle
Entschuldigung für die späte Teilnahme an der Diskussion.
Wir können sogar die ORB-Methode verwenden, um ähnliche Merkmalspunkte zwischen zwei Bildern zu erkennen. Der folgende Link gibt eine direkte Implementierung von ORB in Python
http://scikit-image.org/docs/dev/auto_examples/plot_orb.html
Sogar openCV hat eine direkte Implementierung von ORB. Wenn Sie weitere Informationen haben, folgen Sie dem unten angegebenen Forschungsartikel.
https://www.researchgate.net/publication/292157133_Image_Matching_Using_SIFT_SURF_BRIEF_and_ORB_Performance_Comparison_for_Distorted_Images
quelle
Im anderen Thread gibt es einige gute Antworten dazu, aber ich frage mich, ob etwas mit einer Spektralanalyse funktionieren würde. Zerlegen Sie das Bild in Phasen- und Amplitudeninformationen und vergleichen Sie diese. Dies kann einige Probleme mit Zuschneiden, Transformation und Intensitätsunterschieden vermeiden. Jedenfalls spekuliere ich nur, da dies ein interessantes Problem zu sein scheint. Wenn Sie http://scholar.google.com durchsucht haben , könnten Sie sicher mehrere Artikel dazu finden.
quelle