Ich brauche eine einfache und schnelle Möglichkeit, zwei Bilder auf Ähnlichkeit zu vergleichen. Das heißt, ich möchte einen hohen Wert erzielen, wenn sie genau dasselbe enthalten, aber möglicherweise einen etwas anderen Hintergrund haben und um einige Pixel verschoben / in der Größe geändert werden können.
(Konkreter, wenn das wichtig ist: Das eine Bild ist ein Symbol und das andere Bild ist ein Teilbereich eines Screenshots, und ich möchte wissen, ob dieser Teilbereich genau das Symbol ist oder nicht.)
Ich habe OpenCV zur Hand, aber ich bin immer noch nicht so daran gewöhnt .
Eine Möglichkeit, über die ich bisher nachgedacht habe: Teilen Sie beide Bilder in 10 x 10 Zellen und vergleichen Sie für jede dieser 100 Zellen das Farbhistogramm. Dann kann ich einen bestimmten Schwellenwert festlegen, und wenn der Wert, den ich erhalte, über diesem Schwellenwert liegt, gehe ich davon aus, dass sie ähnlich sind.
Ich habe es noch nicht ausprobiert, wie gut das funktioniert, aber ich denke, es wäre gut genug. Die Bilder sind bereits ziemlich ähnlich (in meinem Anwendungsfall), so dass ich einen ziemlich hohen Schwellenwert verwenden kann.
Ich denke, es gibt Dutzende anderer möglicher Lösungen dafür, die mehr oder weniger funktionieren würden (da die Aufgabe selbst recht einfach ist, da ich Ähnlichkeit nur erkennen möchte, wenn sie wirklich sehr ähnlich sind). Was würdest du vorschlagen?
Es gibt einige sehr verwandte / ähnliche Fragen zum Abrufen einer Signatur / eines Fingerabdrucks / eines Hash von einem Bild:
- OpenCV / SURF Wie wird aus den Deskriptoren ein Bild-Hash / Fingerabdruck / eine Signatur generiert?
- Bildfingerabdruck zum Vergleich der Ähnlichkeit vieler Bilder
- Nahezu doppelte Bilderkennung
- OpenCV: Fingerabdruckbild und Vergleich mit Datenbank .
- mehr , mehr , mehr , mehr , mehr , mehr , mehr
Außerdem bin ich auf diese Implementierungen gestoßen, die solche Funktionen haben, um einen Fingerabdruck zu erhalten:
- pHash
- imgSeek ( GitHub repo ) (GPL) basierend auf dem Papier Fast Multiresolution Image Querying
- Bildübereinstimmung . Sehr ähnlich zu dem, wonach ich gesucht habe. Ähnlich wie bei pHash, basierend auf einer Bildsignatur für jede Art von Bild, haben Goldberg et al . Verwendet Python und Elasticsearch.
- iqdb
- ImageHash . unterstützt pHash.
- Image Deduplicator (imagededup) . Unterstützt CNN, PHash, DHash, WHash, AHash.
Einige Diskussionen über Wahrnehmungsbild-Hashes: hier
Ein bisschen offtopic: Es gibt viele Methoden, um Audio-Fingerabdrücke zu erstellen. MusicBrainz , ein Webdienst, der eine auf Fingerabdrücken basierende Suche nach Songs ermöglicht, hat einen guten Überblick in seinem Wiki . Sie verwenden jetzt AcoustID . Dies dient zum Finden genauer (oder größtenteils genauer) Übereinstimmungen. Werfen Sie einen Blick auf Echoprint , um ähnliche Übereinstimmungen zu finden (oder wenn Sie nur einige Schnipsel oder ein hohes Rauschen haben) . Eine verwandte SO-Frage ist hier . Es scheint also, dass dies für Audio gelöst ist. Alle diese Lösungen funktionieren recht gut.
Eine etwas allgemeinere Frage zur Fuzzy-Suche im Allgemeinen ist hier . Zum Beispiel gibt es ortsabhängiges Hashing und die Suche nach dem nächsten Nachbarn .