SIFT的空间金字塔匹配(SPM)然后在C++中输入到SVM

noo*_*ert 5 c++ opencv machine-learning image-processing

我试图使用C++和OpenCV将脑肿瘤的MRI图像分类为良性和恶性.我计划在使用kmeans聚类SIFT描述符后使用词袋(BoW)方法.意思是,我将每个图像表示为直方图,其中包含x轴的整个"代码簿"/字典及其在y轴图像中的出现次数.这些直方图将成为我的SVM(带RBF内核)分类器的输入.

然而,使用BoW的缺点是它忽略了图像中描述符的空间信息.有人建议使用SPM代替.我读到了它并遇到了这个链接,给出了以下步骤:

  1. 计算来自训练集的K个视觉单词,并将所有局部特征映射到其视觉单词.
  2. 对于每个图像,将K个多分辨率坐标直方图初始化为零.每个坐标直方图由L个级别组成,并且每个级别i具有4 ^ i个单元,其均匀地划分当前图像.
  3. 对于该图像中的每个局部特征(假设其可视字ID为k),选取第k个坐标直方图,然后根据局部坐标对该直方图中的每个L对应单元格累计一个计数.特征.L单元是局部特征以L个不同分辨率落入的单元.
  4. 连接K个多分辨率坐标直方图以形成图像的最终"长"直方图.当连接时,第k个直方图由第k个视觉词的概率加权.
  5. 要计算两个图像上的核值,请将"长"直方图的交集的所有单元格相加.

现在,我有以下问题:

  1. 什么是坐标直方图?直方图是否只显示x轴中每个分组的计数?它将如何提供有关点坐标的信息?
  2. 我如何计算第k个视觉词的概率?
  3. 我会得到什么样的"核心价值"?我如何将其用作SVM的输入?如果我理解正确,核心值是在测试阶段使用而不是在训练阶段吗?如果是,那我将如何训练我的SVM?
  4. 或者你认为我不需要为自己的空间信息负担,只需坚持正常的BoW来治疗我的情况(良性和恶性肿瘤)?

有人请帮助这个可怜的小本科生.如果你这样做,你将永远感激我.如果您有任何澄清,请不要犹豫.

Bha*_*rat 4

这是实际论文的链接,http://www.csd.uwo.ca/~olga/Courses/Fall2014/CS9840/Papers/lazebnikcvpr06b.pdf

此处提供 MATLAB 代码http://web.engr.illinois.edu/~slazebni/research/SpatialPyramid.zip

坐标直方图(在您的帖子中提到)只是您计算直方图的图像中的一个子区域。这些幻灯片直观地解释了这一点,http://web.engr.illinois.edu/~slazebni/slides/ima_poster.pdf

这里有多个直方图,一个对应图像中的每个不同区域。概率(或项目数量取决于该子区域中的筛选点)。

我认为您需要按照幻灯片中提到的方式定义金字塔内核。

如果您有足够的训练样本,卷积神经网络可能更适合您的任务。您或许可以看看 Torch 或 Caffe。