2010-02-08 14 views
14

Sto pensando di creare un sistema di database per le immagini in cui sono archiviati con firme compatte e quindi abbinato a una "immagine di query" che potrebbe essere una versione ridimensionata, ritagliata, ravvivata, ruotata o ruotata di quella memorizzata. Si noti che non sto parlando di algoritmi di somiglianza delle immagini, ma piuttosto del rilevamento di duplicati. Ciò renderebbe le cose molto più semplici. Il sistema non si preoccuperebbe se due immagini hanno un elefante su di esse, sarebbe solo importante rilevare se le due immagini sono di fatto la stessa immagine.Algoritmi di rilevamento di immagini duplicati?

I confronti degli istogrammi semplicemente non funzionano per le immagini di query ritagliate. L'unico modo percorribile per andare a vedere è il rilevamento di forme/bordi. Le immagini dovrebbero essere in qualche modo discretizzate, ad esempio ogni pixel convertito in scala di grigi a 8 livelli. L'immagine discretizzata conterrà vaste regioni dello stesso colore che potrebbero aiutare a indicare le forme. Queste forme potrebbero quindi essere descritte con coefficienti e la loro posizione relativa potrebbe essere ricordata. Da ciò sarebbero state create firme compatte. Questo processo verrà eseguito su ogni immagine che viene memorizzata e su ogni immagine di query quando un confronto deve essere eseguito. Suona come un algoritmo efficiente e realizzabile? Per illustrare questo concetto:

rimosso collegamento ImageShack morti

So che questa è un'area di ricerca immaturo, ho letto Wikipedia sul tema e vi chiedo di proporre le vostre idee su un tale algoritmo.

+2

Lei dice che non sta parlando di algoritmi di similarità, ma duplicare il rilevamento. Tuttavia, se stai anche parlando di consentire cambiamenti, in particolare il ritaglio, devi inevitabilmente formulare un giudizio sul grado di "somiglianza". –

+0

Senza dubbio ci saranno soglie accettabili quando si effettuano i confronti. Il fatto è che anche un'immagine di query ritagliata e ridimensionata contiene ancora un sottoinsieme delle stesse forme/aree di interesse, posizionate relativamente allo stesso modo, ma rappresentate con una diversa quantità di pixel. –

risposta

1

Check out tineye.com Hanno un buon sistema che sta migliorando sempre. Sono sicuro che puoi trovare documenti di ricerca da loro sull'argomento.

+1

Preferisco piuttosto leggere e riassumere idee diverse qui. Ho visto Tineye prima. –

1

Come convertire this python codes in C indietro?

+0

Il codice che si riferisce si basa sul recupero dell'istogramma. Funzionerebbe bene se l'immagine della query non fosse probabilmente ritagliata. Un'immagine secondaria ritagliata produrrebbe un istogramma completamente diverso rispetto all'intera immagine, pertanto in questo caso non è applicabile. –

1

L'articolo si potrebbe riferire a on Wikipedia on feature detection.

Se si utilizza un processore Intel/AMD, è possibile utilizzare Intel Integrated Performance Primitives per accedere a una libreria di funzioni di elaborazione delle immagini. Oppure, oltre a questo, c'è il progetto OpenCV, un'altra libreria di funzioni di elaborazione delle immagini per te. Il vantaggio di usare una libreria è che puoi provare vari algoritmi, già implementati, per vedere cosa funzionerà per la tua situazione.

+0

Provare diverse funzioni di elaborazione non è il punto. Sarei interessato se hai un'idea particolare, anche molto scarsa per raggiungere l'obiettivo. –

+0

È possibile prelevare i componenti di frequenza dalle immagini di destinazione e di query e eseguire "una sorta di confronto"? Sì, questo è molto scarso, è stato un po '. Fare questo è intensivo di calcolo ;-) –

2

Se si desidera eseguire un modello basato sul rilevamento di funzionalità, è possibile utilizzare lo singular value decomposition delle immagini (probabilmente si dovrà eseguire un SVD per ciascun colore) e utilizzare le prime colonne delle matrici U e V insieme ai corrispondenti valori singolari per giudicare quanto siano simili le immagini.

Molto simile al metodo SVD è uno chiamato principle component analysis che penso sarà più facile da usare per confrontare tra le immagini. Il metodo PCA è abbastanza vicino a prendere solo l'SVD e sbarazzarsi dei valori singolari fattorizzandoli nelle matrici U e V. Se segui il percorso PCA, potresti anche voler esaminare correspondence analysis. A proposito, il metodo PCA era un metodo comune utilizzato nello Netflix Prize per estrarre le funzionalità.

+0

Ho cercato di chiarire che l'immagine della query sarà una variazione dell'originale, non una copia esatta. Devo indagare su SVD. –

+0

Sì, ho modificato la mia soluzione. Ho tirato fuori le informazioni di checksum e ho aggiunto altro al SVD. –

Problemi correlati