3

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

4

3 回答 3

8

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

主要有两个阶段:

第 1 阶段:创建密码本。

  1. 将输入图像划分为一组子图像。
  2. 对每个子图像应用筛选。每个关键点将有 128 维的特征向量。
  3. 通过简单地应用 k-means 聚类和选择的k. 每个图像将产生一个大小为 的矩阵V ii <= n并且n是用于创建代码字的图像的数量。)128 * m,其中m是从图像中收集的关键点的数量。因此,K-means 的输入是一个大矩阵V ,它由V i的水平串联创建,对于所有i。K-means 的输出是一个大小为的矩阵C。128 * k

第 2 阶段:计算直方图。

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

  1. 创建一个h大小的直方图向量k并将其初始化为零。
  2. 像第 1 阶段的第 2 步一样应用密集筛分。
  3. 对于每个关键点的向量,在码本矩阵C中找到它的“最佳匹配”向量的索引(可以是欧几里得距离中的最小值)。
  4. 将此索引的相应 bin 增加h1。
  5. h通过 L1 或 L2 范数进行归一化。

现在h可以进行分类了。

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

于 2014-12-17T11:34:09.203 回答
6

对于不同的图像,您总是会得到不同数量的关键点,但每个描述符点的特征向量的大小保持不变,即 128。人们更喜欢使用向量量化或 K-Mean 聚类并构建词袋模型直方图。你可以看看这个线程。

于 2013-12-13T09:50:45.807 回答
1

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

于 2013-10-22T17:41:35.073 回答