2011-11-30 10 views
6

Voglio confrontare i descrittori SURF in un'immagine (A), con i descrittori in diverse altre immagini (B, C, D, ..) per trovare l'immagine più simile ad A. I descrittori hanno 64 dimensioni.Confronta i descrittori SURF in un'immagine a un elenco di descrittori in altre immagini

Utilizzando C# e Emgu, la corrispondenza viene eseguita confrontando i descrittori di A in B, poi in C, poi in D e così via. Questo è molto lento quando il numero di immagini supera 10, perché molti descrittori irrilevanti devono essere cercati.

Per accelerare il processo, la strada giusta da seguire (in base agli articoli) sembra essere quella di costruire un kd-tree per i descrittori in (B, C, D, ..) per trovare rapidamente il descrittore in A. L'albero kd è diviso in dimensioni in base al livello. La prima divisione viene decisa dalla 1a dimensione, la seconda divisione dalla 2a dimensione, ecc. Tuttavia, al numero di dimensioni alte per i descrittori (64), il vantaggio dell'uso di un albero KD si riduce.

Quindi la mia domanda è: quale esperienza o conoscenza avete con l'utilizzo di un albero KD/altro metodo per abbinare i descrittori SURF da un'immagine (A) a diverse immagini (B, C, D ..). Cosa funziona bene e non così bene e hai fatto qualcosa di simile?

FLANN sarebbe un'opzione qui, in quanto viene utilizzato da OpenCV, ma non riesco a trovare una versione per C#. Neighboor approssimativamente più vicino sarebbe anche un'opzione per accelerare il kd-tree, ma funziona bene con le immagini corrispondenti?

migliori saluti Morten

risposta

0

Si può provare FLANN su C o C++. Non è troppo complicato.

Tuttavia, sto testando FLANN su C++, ma il tempo di corrispondenza (utilizzando le caratteristiche SURF, FLANN, query su 1.000 immagini) è molto lungo, da 20 secondi a 400 secondi (a seconda del numero di vettori di caratteristiche per immagine).

Problemi correlati