2015-08-07 1 views
2

Je veux classer les images IRM d'une tumeur cérébrale bénigne et maligne en utilisant C++. J'utilise des fonctionnalités SIFT et le papier que je suis en train de les regrouper en utilisant des kmeans avant d'entraîner le classificateur SVM. Ce que je ne comprends pas, c'est pourquoi est-ce qu'il y a un besoin de faire ça? D'après ce que je sais, les kméens ne font que regrouper les caractéristiques; cela ne change pas la taille de l'entrée.Comment utiliser les fonctionnalités/descripteurs SIFT comme entrée pour la formation SVM?

J'ai lu que les méthodes possibles sont BoW et l'histogramme. Dans l'approche de l'histogramme, il compte juste le nombre de fonctionnalités dans chaque cluster droit? Je ne pense pas que cela fournira l'information dont j'ai besoin pour classer les tumeurs bénignes et malignes parce qu'elles peuvent être à la fois petites et grandes. Dans l'approche BoW, je n'ai pas compris cela link. Fondamentalement, je ne sais pas quoi faire avec mes fonctionnalités SIFT pour l'utiliser comme entrée pour SVM. Est-ce que je dois vraiment créer un dictionnaire quelconque? Je vous en supplie, s'il vous plaît, éclairez-moi. Merci beaucoup!

Répondre

2

Je ne connais pas très bien les fonctionnalités OpenCV ou SIFT, mais cela devrait être assez général pour être utile à tous les langages de programmation. Je ne décrirai également que l'approche BoW ci-dessous.

Supposons que nous avions N images. Pour chaque image i, nous avons F nombre de fonctionnalités, et chaque fonctionnalité avait D dimensions. Nous pouvons mettre toutes les fonctionnalités dans un tableau feats, de sorte qu'il ressemble à ceci:

[1, 2, ..., D] 
[..., ..., ..., D] 
[N*F, ..., ..., D] 

Chaque rangée de feats est une caractéristique, avec D dimensions, et nous avons un total de N*F caractéristiques. En k-means, nous prenons toutes ces fonctionnalités et les regroupons en k clusters. Par conséquent, chaque fonctionnalité est affectée à un seul cluster. La plupart des fonctions k-means renvoient typiquement une matrice C de taille k x D, qui représente les centroïdes des clusters. Cette matrice C est le "dictionnaire" ou "dictionnaire" de l'algorithme k-means. Certains renvoient également un vecteur de taille N*F qui indique le cluster auquel chaque entité est assignée (dans OpenCv, ceci est représenté par la variable labels dans ce lien: http://www.developerstation.org/2012/01/kmeans-clustering-in-opencv-with-c.html).

Puisque nous avons déjà les affectations de toutes les fonctionnalités, chaque image i a des caractéristiques F, qui peuvent être simplement représentées par les groupes auxquels elles appartiennent. Par exemple, si l'image originale était représentée comme

[1, 2, ..., D] 
[..., ..., ..., D] 
[F, ..., ..., D] 

alors l'image peut également être représentée simplement comme un vecteur:

[1] % Assignment of feature 1 
[...] 
[F] % Assignment of feature F 

Par conséquent, vous pouvez prendre ce vecteur et former un histogramme h du grappes qui sont représentées. Cet histogramme est le vecteur de caractéristiques de l'image, que vous pourrez ensuite utiliser dans le SVM.

P.S. Si vous avez besoin de plus de précisions et/ou d'un exemple, faites le moi savoir!

+0

Merci beaucoup! Je le comprends maintenant! J'ai juste quelques autres questions. (1) Tous les vecteurs que je vais regrouper proviendront d'images des deux classes, non? (2) Aussi, à la fin, l'image sera représentée par un histogramme de quelle taille? Est-ce k où chaque élément du vecteur est le nombre d'entités dans cette image appartenant à ce groupe? Ou est-ce F où chaque élément du vecteur est l'entier de la grappe dont cette caractéristique fait partie? Je pense que c'est k, est-ce que je l'ai bien compris? Merci! – noobalert

+2

(1) Les vecteurs/entités que vous regroupez proviennent des deux classes. (2) L'histogramme est de taille «k». L'élément «i» dans l'histogramme est le nombre de fois que le groupe «i» apparaît dans l'image. Je suis content de pouvoir aider: D –

+0

Très bien alors. Une dernière question, je suis désolé. J'ai demandé à mon professeur s'il était bon d'utiliser BoW pour mon cas (étant donné que son inconvénient est qu'il ignore les relations spatiales entre les patchs) ... Mais il a dit non. Qu'est-ce que tu penses? Y a-t-il d'autres approches que je devrais utiliser? – noobalert