2012-10-26 16 views
9

Mi chiedo se esiste un algoritmo/libreria/framework preesistente per confrontare due immagini per vedere se una è una versione ridimensionata dell'altro? Il linguaggio di programmazione non ha importanza in questa fase.Trova immagini duplicate di dimensioni diverse

Se non c'è niente là fuori, dovrei scrivere qualcosa. Cosa ho pensato finora:

  • (Costoso) Ridimensiona il più grande al più piccolo e confronta pixel per pixel.

  • Meglio ancora, basta ridimensionare alcune "aree" casuali sull'immagine e confrontare. Se corrispondono, converti di più, ecc ...

  • Rompere l'immagine in un numero di righe e colonne e fare una sorta di calcolo della parità sui valori del colore.

Il problema che vedo con i primi due idee in particolare, è che ci sono diversi modi per ridimensionare una foto, in primo luogo, quindi la matematica probabilmente non funziona lo stesso a tutti. Alcuni ridimensionamenti aggiungono sfocatura, ecc ....

Se qualcuno potesse indicarmi qualche buona letteratura su questo argomento, sarebbe fantastico. Il mio google si presenta per lo più applicazioni shareware che non è quello che voglio.

L'obiettivo è avere questa esecuzione nella parte posteriore di un server web.

+0

Quando selezioni le aree a caso, come puoi scegliere le aree di destinazione da confrontare? – Acorbe

+0

Cerca gli autovettori, hanno avuto successo usando quello per il riconoscimento facciale (eigenfaces) o qualsiasi numero di tecniche di riconoscimento dell'immagine che sono più complicate del campionamento casuale –

+1

Anche http://stackoverflow.com/a/12823054/1633931 –

risposta

2

L'approccio migliore dipende dalle caratteristiche delle immagini che si stanno confrontando, dalla percentuale di probabilità che le immagini sono le stesse e quando sono diverse, di solito sono molto diverse o potrebbero essere minime come una differenza di un singolo pixel?

Se le risposte a quanto sopra è che le immagini che è necessario confrontare saranno completamente casuali quindi andare con la soluzione costosa, o qualche pacchetto disponibile potrebbe essere la soluzione migliore.

Se è che sai che le immagini sono diverse il più delle volte, e che le immagini in genere differiscono molto, e vuoi davvero rollare a mano una soluzione potresti implementare alcuni passaggi iniziali di "confronto rapido" sarebbe meno costoso e ciò consentirebbe di identificare rapidamente molti casi in cui le immagini sono diverse.

Ad esempio, è possibile ridimensionare l'immagine più grande, quindi confrontare pixel per pixel (o calcolare un hash dei valori dei pixel) solo una "linea diagonale" dell'immagine (pixel in alto a sinistra in pixel in basso a destra) e così facendo escludi le immagini diverse e fai solo il confronto più costoso per quelli che superano questo test.

Oppure prendere un numero prestabilito di punti a qualsiasi cosa sia una "buona distribuzione" a seconda del tipo di immagine e fare solo il confronto più costoso per quelli che superano questo test.

Se si conoscono molto le immagini che si confronteranno, hanno caratteristiche conosciute e sono diverse più spesso di quanto non siano le stesse, implementare un "confronto di eliminazione rapida" a buon mercato seguendo le linee di cui sopra potrebbe essere utile .

1

È necessario esaminare l'algoritmo dHash per questo.

Ho scritto una libreria java pura solo per pochi giorni indietro. È possibile alimentarlo con il percorso della directory (include la sottodirectory) ed elencherà le immagini duplicate nell'elenco con il percorso assoluto che si desidera eliminare.In alternativa, puoi usarlo per trovare tutte le immagini uniche in una directory.

Ha utilizzato awt api internamente, quindi non può essere utilizzato per Android. Dal momento che, imageIO ha problemi a leggere un sacco di nuovi tipi di immagini, sto usando un vaso di dodici scimmie che viene usato internamente.

https://github.com/srch07/Duplicate-Image-Finder-API

Vaso con le dipendenze bundle internamente può essere scaricato da, https://github.com/srch07/Duplicate-Image-Finder-API/blob/master/archives/duplicate_image_finder_1.0.jar

l'API può trovare i duplicati tra le immagini di diverse dimensioni troppo.

+0

Sarebbe stato bello conoscere maggiori dettagli sulla domanda OP, la parte della tua API che gestisce questo. Forse una spiegazione generale di come funziona? _L'API può trovare duplicati anche tra immagini di dimensioni diverse._ – RyBolt

Problemi correlati