Qualche tempo fa, ho trascorso un po 'di tempo a cercare modi per determinare se due immagini sono identiche per rispondere a this question. Ora mi trovo di fronte a un problema leggermente diverso: ho circa duemila immagini a portata di mano, alcune delle quali hanno lo stesso contenuto, ma sono versioni ridimensionate/ruotate l'una dall'altra (le rotazioni sono sempre da multipli di 90 °), insieme al problema di compressioni e formati di immagine diversi (principalmente jpg, alcuni png, nient'altro). Il ridimensionamento non va oltre 2: 1. Quello che mi piacerebbe fare è eliminare i duplicati pur mantenendo l'istanza di massima qualità. Poiché Java è l'unico linguaggio in cui sono abbastanza esperto, ho bisogno di usare Java.Identifica immagini con lo stesso contenuto in Java
The answers a una domanda diversa offrono molti collegamenti utili, ma non sembra che nessuno di essi possa identificare i duplicati quando ridimensionato/ruotato.
This question along with the answers suggerire prima ridimensionare tutte le immagini a una dimensione molto piccola (diciamo 32 * 32 o 16 * 16), quindi fondamentalmente facendo un po 'di hashing e confronti basati sull'hash. Questo suona abbastanza intelligente per me, le immagini potrebbero essere pre-ordinate prima del confronto, che dopo l'ordinamento sarebbe un problema O (n). Tuttavia, dato che le immagini possono essere ruotate, non sono sicuro di come gestirlo; un'opzione sarebbe quella di passare manualmente a tutte le immagini e decidere una rotazione, dato che ciò che ritraggono ha un chiaro orientamento (l'occhio umano può facilmente decidere in quale direzione dovrebbe essere "su"). Se possibile, vorrei comunque evitarlo.
Esistono metodi/algoritmi stabiliti (i collegamenti menzionano SSIM) per gestire questo tipo di problemi o qualcuno di voi può trovare modi migliori di quelli descritti sopra? Forse qualcuno conosce le librerie per Java che si adattano bene al compito (nelle domande collegate si parla di un wrapper Java per OpenCV, quindi ImageJ, imgsclr)? Qualsiasi aiuto è apprezzato.
Cheers, darò un'occhiata a quelli - sembra solido! –
Dopo aver dato un'occhiata a questo materiale, ti darei un paio di voti in più; più che sufficiente per fare quello che voglio fare! –