![](/img/trans.png)
[英]OpenCV (C++) using SIFT descriptors increases the number of detected features?
[英]How to use SIFT features/descriptors as input for SVM training?
我想使用C ++將腦腫瘤的MRI圖像分為良性和惡性。 我正在使用SIFT功能,接下來我將在培訓SVM分類器之前使用kmeans對它們進行聚類。 我不明白的是為什么需要這樣做? 據我所知,kmeans僅將特征聚類。 它不會改變輸入的大小。
我已經讀過可能的方法是BoW和直方圖。 在直方圖方法中 ,它僅計算每個聚類中的要素數量,對嗎? 我認為這不會提供我對良性和惡性腫瘤進行分類所需的信息,因為它們可能既大又小。 在BoW方法中 ,我不了解此鏈接 。
基本上,我不知道如何使用SIFT功能將其用作SVM的輸入。 我真的必須創建某種字典嗎? 我求求你,請賜教。 非常感謝你!
我對OpenCV或SIFT功能不太熟悉,但這應該足夠通用才能對所有編程語言都有用。 我還將在下面僅介紹BoW方法。
假設我們有N
張圖像。 對於每個圖像i
,我們有F
個特征,每個特征都有D
維。 我們可以將所有功能放入數組feats
,使其看起來像這樣:
[1, 2, ..., D]
[..., ..., ..., D]
[N*F, ..., ..., D]
每行feats
是一個具有D
維的特征,並且我們總共有N*F
特征。
在k均值中,我們采用所有這些特征並將它們分組為k
簇。 因此,每個單個功能都分配給單個群集。 大多數k均值函數通常返回大小為kx D
的矩陣C
,它表示簇的質心。 該矩陣C
是k-means算法的“碼本”或“字典”。 某些人還會返回一個大小為N*F
的向量,該向量顯示每個功能分配給哪個群集(在OpenCv中,此鏈接中的labels
變量表示: http : //www.developerstation.org/2012/01/kmeans- clustering-in-opencv-with-c.html )。
由於我們已經分配了所有特征,因此每個圖像i
都具有F
特征,可以簡單地用它們所屬的簇表示。 例如,如果原始圖像表示為
[1, 2, ..., D]
[..., ..., ..., D]
[F, ..., ..., D]
那么圖像也可以簡單地表示為矢量:
[1] % Assignment of feature 1
[...]
[F] % Assignment of feature F
因此,您可以采用此向量,並形成所表示的群集的直方圖h
。 此直方圖是圖像的特征向量,您以后可以在SVM中使用。
PS:如果您需要任何進一步的說明和/或示例,請告訴我!
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.