2011-12-27 12 views
49

Ho passato un po 'di tempo a cercare una libreria che mi permettesse di confrontare le immagini tra loro in Java.Libreria Java per confrontare la somiglianza delle immagini

Non ho trovato nulla di utile, forse la mia competenza di GoogleSearch non è abbastanza alta, quindi ho pensato di chiederti ragazzi se potessi indicarmi dove trovare qualcosa del genere.

Fondamentalmente quello che voglio fare è confrontare due immagini tra loro e ottenere un valore di quanto i due sono simili. Come una percentuale o giù di lì.

spero che voi ragazzi avete qualcosa che posso usare, non saprei come scrivere una cosa del genere me ...

PS: non necessariamente deve essere in Java, che è solo l'ambiente la mia app sarà in esecuzione.

+0

Che tipo di somiglianza che si desidera confrontare? Le immagini hanno le stesse dimensioni o potrebbero essere ridimensionate/ruotate/ritagliate? – dbf

+1

Voglio solo sapere se le due immagini sono le stesse (da un POV umana) –

+0

Ho recentemente scoperto un lib impressionante chiamato Rainbow4j, sviluppato e utilizzato dai ragazzi quadro Galeno. È in grado di confrontare immagini basate su pixel diff, colori diff ecc, con molta configurabilità. – kaqqao

risposta

28

Si potrebbe dare un'occhiata a due risposte su SO stesso: this one is about image comparison itself, offering links to stuff in C++ (se ho letto correttamente) mentre this one offers links to broader approaches, one being in C.

Suggerirei di iniziare con il secondo collegamento poiché ci sono collegamenti su quella discussione che porteranno al codice di implementazione di alcune tecniche rilevanti che potreste essere in grado di "tradurre" in Java da soli.

Questa è la cosa migliore che le mie competenze di google possano fare, niente Java - scusa. Spero sia un buon punto di partenza!

MODIFICA: Here's someone with your problem who wrote his own comparison class in Java. Tuttavia non ho letto il codice sorgente. Dichiara espressamente che non è riuscito a trovare le librerie Java per questo scopo, quindi è per questo che l'ha scritto lui stesso.

Oh, e questo question on SO has probably the best links su questo, tutto per quanto riguarda le librerie Java di elaborazione delle immagini. Speriamo che ce n'è uno tra quelli in grado di confrontare le immagini per somiglianza.

Ok, ultima modifica: The Java Image Processing Cookbook mostra un'implementazione Java di un algoritmo di base per determinare la differenza tra due immagini. Ha anche una e-mail per contattare il ragazzo che lo ha scritto e una serie di riferimenti. Nessuna libreria però.

EDIT dopo aver letto il tuo commento alla tua domanda: A meno che non hai già controllato tutti i collegamenti di cui sopra, dal momento che ciò che si desidera sembra essere verificare se due immagini sono uguali, vorrei suggerire di iniziare con l'Immagine Java Processing Cookbook (dal momento che ha un'implementazione di un algoritmo in Java per verificare la presenza di immagini uguali) e l'ultimo collegamento a una domanda SO. Inoltre, check PerceptualImageDiff e il codice sorgente di quel progetto (C++); sembra davvero elegante: apparentemente dovrebbe verificare se due immagini sembrano uguali al sistema visivo umano.

+0

Ho analizzato le risorse, in particolare l'articolo con la semplice implementazione è stato davvero utile. –

+0

dang .. 404 non trovato per il link libro di cucina – tObi

+0

@tobi L'archivio [http://archive.org] ha ancora una versione; aggiornando il mio post. –

8

Appena fuori dalla mia testa, OpenCV è una grande libreria di elaborazione delle immagini, ma potrebbe essere eccessivo se si desidera solo confrontare le immagini. Se questo è il caso, andrei con ImageJ.

Qualcuno ha già chiesto come farlo utilizzando OpenCV here.

Vorrei usare C++ per questo, ma se è necessario utilizzare Java, c'è un progetto che ha creato un wrapper Java per OpenCV, here.

7

Ho usato la classe in this link per confrontare due immagini di prodotto ei risultati erano fantastici.Non è molto difficile da implementare solo per il confronto di due immagini, è sufficiente eliminare le righe di JAI e Swing e così via. Ridimensiona le immagini a 300x300 e restituisce un valore di differenza come "1234". Il valore della differenza massima è vicino a "11041", è indicato nel collegamento. Facendo una divisione, puoi semplicemente ottenere la percentuale. Se interessato, posso postare il codice modificato qui più tardi.

I risultati sono stati fresco, ma ho ancora ricevuto "foto digitali", rilevati per essere simile a "foto TV". Quindi, ho utilizzato ImageJ per rilevare i bordi nella foto. Utilizzando l'operazione di rilevamento dei bordi, ImageJ converte l'immagine in un'immagine greyform rilevata sul bordo. Poi ho inserito le due immagini rilevate sul bordo nello stesso comparatore e moltiplicato i due valori. I risultati sono diventati ancora più accurati.

Getting the edge-detected form of the images

Problemi correlati