使用SIFT功能训练SVM分类器

时间:2013-09-27 10:47:33

标签: svm sift descriptor

请我喜欢用SIFT DESCRIPTOR和SVM对4类图像进行分类。现在,使用SIFT提取器我得到不同大小的关键点例如img1有100个关键点img2有55个关键点....如何使用matlab构建给出固定大小向量的直方图

3 个答案:

答案 0 :(得分:8)

在这种情况下,也许密集筛选是一个不错的选择。

主要有两个阶段:

第1阶段:创建一个代码簿。

  1. 将输入图像划分为一组子图像。
  2. 在每个子图像上应用筛选。每个关键点都有128维特征向量。
  3. 通过简单地将k-means聚类应用于所选的k,对这些向量进行编码以创建码本。每个图像将生成一个矩阵 V i i <= nn是用于创建代码字的图像数量。)大小为{{ 1}},其中128 * m是从图像中收集的关键点的数量。因此,对于所有m,K-means的输入是由 V i 的水平串联创建的大矩阵 V 。 K-means的输出是矩阵 C ,大​​小为i
  4. 第2阶段:计算直方图。

    对于数据集中的每个图像,请执行以下操作:

    1. 创建大小为128 * k的直方图向量h并将其初始化为零。
    2. 在第1阶段的步骤2中进行密集筛选。
    3. 对于每个关键点的向量,在代码簿矩阵 C 中找到它的“最佳匹配”向量的索引(可以是欧几里德距离中的最小值)。
    4. k中此索引的相应bin增加1。
    5. 按L1或L2规范标准化h
    6. 现在h已准备好进行分类。

      另一种可能性是使用Fisher的向量而不是代码簿https://hal.inria.fr/file/index/docid/633013/filename/jegou_aggregate.pdf

答案 1 :(得分:6)

对于不同的图像,您将始终获得不同数量的关键点,但每个描述符点的特征向量的大小保持相同,即128.人们更喜欢使用 矢量量化或K均值聚类 并构建 Bag-of-Words模型直方图。您可以查看this主题。

答案 2 :(得分:1)

使用传统的SIFT方法,每张图像中的关键点数量永远不会相同。实现这一目标的一种方法是使用Dense SIFT密集地对描述符进行采样,将规则网格放置在图像的顶部。如果所有图像的大小相同,则每个图像的关键点数量相同。