Ho bisogno di un modo semplice e veloce per confrontare due immagini per similarità. Cioè Voglio ottenere un valore elevato se contengono esattamente la stessa cosa ma potrebbero avere uno sfondo leggermente diverso e potrebbero essere spostati/ridimensionati di alcuni pixel.Metodo semplice e veloce per confrontare le immagini per similarità
(più concreto, se quello che conta: Quella immagine è un'icona e l'altra immagine è una sottozona di uno screenshot e voglio sapere se quella sottozona è esattamente l'icona oppure no.)
ho OpenCV a portata di mano ma non sono ancora così abituato.
Una possibilità ho pensato finora: dividere entrambe le immagini in 10x10 celle e per ciascuna di quelle 100 celle, confrontare l'istogramma di colore. Quindi posso impostare un valore soglia composto e se il valore che ottengo è superiore a tale soglia, presumo che siano simili.
Non ho ancora provato quanto bene funzioni, ma immagino che sarebbe abbastanza buono. Le immagini sono già molto simili (nel mio caso d'uso), quindi posso usare un valore di soglia piuttosto alto.
Immagino che ci siano dozzine di altre possibili soluzioni per questo che funzionerebbero più o meno (dato che il compito in sé è piuttosto semplice in quanto voglio solo rilevare la somiglianza se sono davvero molto simili). Che cosa suggeriresti?
Ci sono alcuni molto legati/domande simili su come ottenere una firma/impronta digitale/hash da un'immagine:
- OpenCV/SURF How to generate a image hash/fingerprint/signature out of the descriptors?
- Image fingerprint to compare similarity of many images
- Near-Duplicate Image Detection
- OpenCV: Fingerprint Image and Compare Against Database.
- more, more, more, more, more, more, more
Inoltre, sono incappato in queste implementazioni che hanno tali funzioni avere un'impronta digitale:
- pHash
- imgSeek (GitHub repo) (GPL) sulla base del documento Fast Multiresolution Image Querying
- image-match. Molto simile a quello che stavo cercando. Simile al pHash, basato su An image signature for any kind of image, Goldberg et al. Utilizza Python ed Elasticsearch.
- iqdb
- ImageHash. supporta pHash.
Alcune discussioni su hash immagine percettivi: here
Un po 'offtopic: Esiste molti metodi per creare impronte digitali audio. MusicBrainz, un servizio Web che fornisce la ricerca basata sulle impronte digitali per le canzoni, ha un good overview in their wiki.Stanno usando AcoustID adesso. Questo è per trovare corrispondenze esatte (o per lo più esatte). Per trovare corrispondenze simili (o se hai solo alcuni frammenti o rumore elevato), dai uno sguardo allo Echoprint. Una domanda SO correlata è here. Quindi sembra che questo sia risolto per l'audio. Tutte queste soluzioni funzionano abbastanza bene.
Una domanda un po 'più generica sulla ricerca fuzzy in generale è here. Per esempio. c'è locality-sensitive hashing e nearest neighbor search.
Forse l'impronta digitale delle immagini potrebbe essere d'aiuto? http: // StackOverflow.it/questions/596262/image-fingerprint-to-compare-similarity-of-many-images – GWW
La metrica di Wasserstein, conosciuta anche come Earth Mover's Distance (EMD), è qualcosa che la gente sembra non sapere, ma darebbe più o meno quello che vuoi qui. – mmgp
possibile duplicato di [confronto immagine - algoritmo veloce] (http://stackoverflow.com/questions/843972/image-comparison-fast-algorithm) – sashoalm