2015-08-13 20 views
5

Sto cercando di classificare le immagini MRI dei tumori cerebrali in benigni e maligni utilizzando C++ e OpenCV. Sto pianificando di usare il metodo bag-of-words (BoW) dopo aver raggruppato i descrittori SIFT usando i kmea. Significato, rappresenterò ogni immagine come un istogramma con l'intero "codebook"/dizionario per l'asse x e il loro conteggio di occorrenza nell'immagine per l'asse y. Questi istogrammi saranno il mio input per il mio classificatore SVM (con kernel RBF).Corrispondenza spaziale della piramide (SPM) per SIFT quindi input per SVM in C++

Tuttavia, lo svantaggio dell'utilizzo di BoW è che ignora le informazioni spaziali dei descrittori nell'immagine. Qualcuno ha suggerito di utilizzare SPM invece. L'ho letto e mi sono imbattuto this link dando le seguenti operazioni:

  1. Compute K parole visive dal training set e traccio tutte le caratteristiche locali alla sua parola visiva.
  2. Per ogni immagine, inizializzare gli istogrammi delle coordinate multisoluzione K su zero. Ogni istogramma delle coordinate è costituito da livelli L e ogni livello ho 4^i celle che dividono equamente l'immagine corrente.
  3. Per ciascuna caratteristica locale (diciamo che l'ID parola visiva è k) in questa immagine, selezionare l'istogramma delle coordinate k-esime e quindi accumulare un conteggio in ognuna delle celle L corrispondenti in questo istogramma, in base a la coordinata della feature locale. Le celle L sono celle in cui la funzione locale rientra in L risoluzioni differenti.
  4. Concatenare gli istogrammi delle coordinate multisoluzione K per formare un istogramma "lungo" finale dell'immagine. Quando si concatena, l'istogramma k-esimo viene ponderato in base alla probabilità della parola visiva k-esima.
  5. Per calcolare il valore del kernel su due immagini, sommare tutte le celle dell'intersezione dei loro istogrammi "lunghi".

Ora, ho le seguenti domande:

  1. che cosa è un istogramma di coordinate? Non un istogramma mostra solo i conteggi per ciascun raggruppamento nell'asse x? Come fornirà informazioni sulle coordinate di un punto?
  2. Come calcolerei la probabilità della parola visiva k-esima?
  3. Quale sarà l'uso del "valore del kernel" che otterrò? Come lo userò come input per SVM? Se capisco bene, il valore del kernel è usato nella fase di test e non nella fase di addestramento? Se sì, allora come preparerò il mio SVM?
  4. Oppure pensi che non sia necessario caricarmi delle informazioni spaziali e attenermi al normale BoW per la mia situazione (tumori benigni e maligni)?

Qualcuno, per favore, aiuta questo povero piccolo studente. Avrai la mia gratitudine per sempre se lo fai. Se hai dei chiarimenti, non esitare a chiedere.

risposta

4

ecco il link alla carta reale, http://www.csd.uwo.ca/~olga/Courses/Fall2014/CS9840/Papers/lazebnikcvpr06b.pdf

codice MATLAB è fornito qui http://web.engr.illinois.edu/~slazebni/research/SpatialPyramid.zip

Coordinare istogramma (menzionato nel tuo post) è solo un sub-regione nell'immagine in cui si calcola l'istogramma. Queste diapositive lo spiegano visivamente, http://web.engr.illinois.edu/~slazebni/slides/ima_poster.pdf.

Qui sono presenti più istogrammi, uno per ciascuna regione nell'immagine. La probabilità (o il numero di elementi dipende dai punti di selezione in quella sottoregione).

Penso che sia necessario definire il proprio kernel piramidale come indicato nelle diapositive.

Una rete neurale convolutional può essere più adatta per il vostro compito se avete abbastanza campioni di addestramento. Probabilmente puoi dare un'occhiata a Torch o Caffe.