Queste sono semplicemente idee a cui ho pensato al problema, mai provato ma mi piace pensare a problemi come questo!
Prima di iniziare
Prendi in considerazione la normalizzazione delle immagini, se una è una risoluzione più alta dell'altra, considera l'opzione che una sia una versione compressa dell'altra, quindi ridimensionare la risoluzione potrebbe fornire risultati più accurati.
Valuta la possibilità di scansionare varie aree potenziali dell'immagine che potrebbero rappresentare porzioni ingrandite dell'immagine e varie posizioni e rotazioni. Inizia a diventare complicato se una delle immagini è una versione distorta di un'altra, questi sono il tipo di limitazioni che dovresti identificare e scendere a compromessi.
Matlab è uno strumento eccellente per testare e valutare le immagini.
Test degli algoritmi
Dovresti testare (come minimo) un grande insieme di dati di test analizzati dall'uomo in cui le partite sono note in anticipo. Se ad esempio nei tuoi dati di test hai 1.000 immagini in cui il 5% corrisponde, ora hai un benchmark ragionevolmente affidabile. Un algoritmo che trova il 10% di positivi non è buono come quello che trova il 4% di positivi nei nostri dati di test. Tuttavia, un algoritmo può trovare tutte le corrispondenze, ma ha anche un alto tasso di falsi positivi del 20%, quindi ci sono diversi modi per valutare i tuoi algoritmi.
I dati del test dovrebbero tentare di essere progettati per coprire il maggior numero possibile di dinamiche che ci si aspetterebbe di trovare nel mondo reale.
È importante notare che ogni algoritmo per essere utile deve funzionare meglio delle ipotesi casuali, altrimenti è inutile per noi!
È quindi possibile applicare il software nel mondo reale in modo controllato e iniziare ad analizzare i risultati che produce. Questo è il tipo di progetto software che può continuare all'infinito, ci sono sempre modifiche e miglioramenti che puoi apportare, è importante tenerlo presente quando lo si progetta in quanto è facile cadere nella trappola del progetto senza fine.
Secchi di colore
Con due immagini, scansiona ogni pixel e conta i colori. Ad esempio potresti avere i 'secchi':
white
red
blue
green
black
(Ovviamente avresti una risoluzione più alta dei contatori). Ogni volta che trovi un pixel "rosso", aumenti il contatore rosso. Ogni secchio può essere rappresentativo dello spettro di colori, maggiore è la risoluzione più accurata, ma è necessario sperimentare un tasso di differenza accettabile.
Una volta che hai i tuoi totali, confrontali con i totali per una seconda immagine. Potresti scoprire che ogni immagine ha un'impronta abbastanza unica, abbastanza per identificare le corrispondenze.
Rilevazione dei bordi
Che ne dici di usare Edge Detection .
(fonte: wikimedia.org )
Con due immagini simili il rilevamento dei bordi dovrebbe fornire un footprint unico utilizzabile e abbastanza affidabile.
Scatta entrambe le foto e applica il rilevamento dei bordi. Forse misurare lo spessore medio dei bordi e quindi calcolare la probabilità che l'immagine possa essere ridimensionata e ridimensionare se necessario. Di seguito è riportato un esempio di un filtro Gabor applicato (un tipo di rilevamento dei bordi) in varie rotazioni.
Confronta le immagini pixel per pixel, conta le corrispondenze e le non corrispondenze. Se rientrano in una determinata soglia di errore, hai una corrispondenza. Altrimenti, potresti provare a ridurre la risoluzione fino a un certo punto e vedere se la probabilità di una corrispondenza migliora.
Regioni di interesse
Alcune immagini possono avere segmenti / regioni di interesse distintivi. Queste regioni probabilmente contrastano fortemente con il resto dell'immagine e sono un buon oggetto da cercare nelle altre immagini per trovare corrispondenze. Prendi questa immagine per esempio:
(fonte: meetthegimp.org )
L'operaio edile in blu è una regione di interesse e può essere utilizzato come oggetto di ricerca. Esistono probabilmente diversi modi in cui è possibile estrarre proprietà / dati da questa regione di interesse e utilizzarli per eseguire ricerche nel set di dati.
Se hai più di 2 regioni di interesse, puoi misurare le distanze tra loro. Prendi questo esempio semplificato:
(fonte: per2000.eu )
Abbiamo 3 chiare regioni di interesse. La distanza tra la regione 1 e 2 può essere di 200 pixel, tra 1 e 3 400 pixel e 2 e 3 200 pixel.
Cerca altre immagini per regioni simili di interesse, normalizza i valori della distanza e vedi se hai potenziali corrispondenze. Questa tecnica potrebbe funzionare bene per le immagini ruotate e ridimensionate. Maggiore è il numero di regioni di interesse, la probabilità di una corrispondenza aumenta all'aumentare della misurazione della distanza.
È importante pensare al contesto del set di dati. Se ad esempio il tuo set di dati è arte moderna, le regioni di interesse funzionerebbero abbastanza bene, poiché le regioni di interesse sono state probabilmente progettate per essere una parte fondamentale dell'immagine finale. Se tuttavia hai a che fare con immagini di siti di costruzione, le aree di interesse potrebbero essere interpretate dalla fotocopiatrice illegale come brutte e potrebbero essere ritagliate / modificate liberamente. Tieni a mente le caratteristiche comuni del tuo set di dati e cerca di sfruttare tale conoscenza.
Morphing
Morphing due immagini è il processo di trasformare un'immagine nell'altra attraverso una serie di passaggi:
Nota, questo è diverso dallo sbiadire un'immagine in un'altra!
Esistono molti pacchetti software che possono trasformare le immagini. È tradizionalmente usato come effetto di transizione, due immagini non si trasformano in qualcosa a metà strada di solito, uno estremo si trasforma nell'altro estremo come risultato finale.
Perché questo potrebbe essere utile? A seconda dell'algoritmo di morphing utilizzato, potrebbe esserci una relazione tra somiglianza delle immagini e alcuni parametri dell'algoritmo di morphing.
In un esempio grossolanamente semplificato, un algoritmo potrebbe essere eseguito più velocemente quando ci sono meno modifiche da apportare. Sappiamo quindi che esiste una maggiore probabilità che queste due immagini condividano le proprietà tra loro.
Questa tecnica potrebbe funzionare bene per le immagini copiate ruotate, distorte, inclinate, ingrandite. Ancora una volta questa è solo un'idea che ho avuto, non si basa su alcuna università ricercata per quanto ne sappia (non ho un aspetto difficile però), quindi potrebbe essere molto lavoro per te con risultati limitati / nessun risultato.
Zipping
La risposta di Ow in questa domanda è eccellente, ricordo di aver letto di questo tipo di tecniche che studiano l'IA. È abbastanza efficace nel confrontare i lessici corpus.
Un'ottimizzazione interessante quando si confrontano i corpus è che puoi rimuovere le parole considerate troppo comuni, ad esempio "The", "A", "And" ecc. Queste parole diluiscono il nostro risultato, vogliamo capire quanto sono diversi i due corpus quindi questi possono essere rimossi prima dell'elaborazione. Forse ci sono segnali comuni simili nelle immagini che potrebbero essere rimossi prima della compressione? Potrebbe valere la pena esaminarlo.
Il rapporto di compressione è un modo molto rapido e ragionevolmente efficace per determinare quanto siano simili due serie di dati. Leggere su come funziona la compressione ti darà una buona idea del perché questo potrebbe essere così efficace. Per un algoritmo a rilascio rapido questo sarebbe probabilmente un buon punto di partenza.
Trasparenza
Ancora una volta non sono sicuro di come vengano archiviati i dati sulla trasparenza per determinati tipi di immagini, gif png, ecc., Ma questo sarà estraibile e servirebbe da efficace ritaglio semplificato per confrontarlo con la trasparenza dei set di dati.
Inversione dei segnali
Un'immagine è solo un segnale. Se si riproduce un rumore da un altoparlante e si riproduce il rumore opposto in un altro altoparlante in perfetta sincronia allo stesso volume esatto, si annullano a vicenda.
(fonte: themotorreport.com.au )
Inverti le immagini e aggiungile sull'altra immagine. Ridimensiona ripetutamente / posiziona i loop ripetutamente fino a trovare un'immagine risultante in cui un numero sufficiente di pixel sia bianco (o nero? Mi riferirò ad esso come una tela neutra) per fornirti una corrispondenza positiva o una corrispondenza parziale.
Tuttavia, considera due immagini uguali, tranne per il fatto che a una di esse è applicato un effetto schiarente:
(fonte: mcburrz.com )
Invertire una di esse, quindi aggiungerla all'altra, non si tradurrà in una tela neutra che è ciò a cui miriamo. Tuttavia, confrontando i pixel di entrambe le immagini originali, possiamo sicuramente vedere una chiara relazione tra i due.
Non studio il colore da alcuni anni ormai e non sono sicuro che lo spettro dei colori sia su una scala lineare, ma se hai determinato il fattore medio della differenza di colore tra le due immagini, puoi utilizzare questo valore per normalizzare i dati prima di elaborarli con questa tecnica.
Strutture dati dell'albero
Inizialmente questi non sembrano adattarsi al problema, ma penso che potrebbero funzionare.
Potresti pensare di estrarre determinate proprietà di un'immagine (ad esempio i bin di colore) e generare un albero di huffman o una struttura di dati simile. Potresti riuscire a confrontare due alberi per somiglianza. Ciò non funzionerebbe bene con i dati fotografici, ad esempio con un ampio spettro di colori, ma i cartoni animati o altre immagini con set di colori ridotti potrebbero funzionare.
Questo probabilmente non funzionerebbe, ma è un'idea. La trie datastructure è ottima per conservare i lessici, ad esempio una dizione . È un albero di prefissi. Forse è possibile costruire un'immagine equivalente di un lessico, (di nuovo posso solo pensare ai colori) per costruire un trie. Se riduci, ad esempio, un'immagine 300x300 in quadrati 5x5, quindi decomponi ogni quadrato 5x5 in una sequenza di colori, potresti creare un trie dai dati risultanti. Se un quadrato 2x2 contiene:
FFFFFF|000000|FDFD44|FFFFFF
Abbiamo un codice trie abbastanza unico che estende 24 livelli, aumentando / diminuendo i livelli (IE riducendo / aumentando le dimensioni del nostro sub quadrato) può produrre risultati più accurati.
Il confronto tra alberi di trie dovrebbe essere ragionevolmente facile e potrebbe fornire risultati efficaci.
Più idee
Mi sono imbattuto in un'interessante raccolta di documenti sulla classificazione delle immagini satellitari , delinea:
Le misure di trama considerate sono: matrici di ricorrenza, differenze di livello di grigio, analisi dei toni di trama, caratteristiche derivate dallo spettro di Fourier e filtri di Gabor. Alcune caratteristiche di Fourier e alcuni filtri Gabor sono state ritenute buone scelte, in particolare quando per la classificazione è stata utilizzata una singola banda di frequenza.
Potrebbe valere la pena indagare su tali misurazioni in modo più dettagliato, sebbene alcune di esse potrebbero non essere rilevanti per il tuo set di dati.
Altre cose da considerare
Probabilmente ci sono molti articoli su questo genere di cose, quindi la lettura di alcuni di essi dovrebbe aiutare anche se possono essere molto tecnici. Si tratta di un'area estremamente difficile nel campo dell'informatica, con molte ore di lavoro inutili spese da molte persone che tentano di fare cose simili. Mantenerlo semplice e basarsi su quelle idee sarebbe il modo migliore per andare. Dovrebbe essere una sfida ragionevolmente difficile creare un algoritmo con un tasso di corrispondenza migliore rispetto a quello casuale e iniziare a migliorare su questo inizia davvero a diventare piuttosto difficile da raggiungere.
Ogni metodo dovrebbe probabilmente essere testato e ottimizzato a fondo, se hai qualche informazione sul tipo di immagine che verifichi anche, questo sarebbe utile. Ad esempio gli annunci pubblicitari, molti di essi contengono testo, quindi fare il riconoscimento del testo sarebbe un modo semplice e probabilmente molto affidabile per trovare corrispondenze, specialmente se combinato con altre soluzioni. Come accennato in precedenza, prova a sfruttare le proprietà comuni del tuo set di dati.
Combinare misure e tecniche alternative, ciascuna delle quali può avere un voto ponderato (in base alla loro efficacia) sarebbe un modo per creare un sistema che generi risultati più accurati.
Se impiegando algoritmi multipli, come menzionato all'inizio di questa risposta, si potrebbero trovare tutti gli aspetti positivi ma avere un tasso di falsi positivi del 20%, sarebbe interessante studiare le proprietà / i punti di forza / le debolezze di altri algoritmi come un altro algoritmo potrebbe essere efficace nell'eliminazione dei falsi positivi restituiti da un altro.
Fai attenzione a non cadere nel tentativo di completare il progetto senza fine, buona fortuna!