请我喜欢用 SIFT DESCRIPTOR 和 SVM 将一组图像分类为 4 类。现在,使用 SIFT 提取器,我得到不同大小的关键点,例如 img1 有 100 个关键点 img2 有 55 个关键点....如何使用 matlab 构建给出固定大小向量的直方图
问问题
9612 次
3 回答
8
在这种情况下,也许密集筛分是一个不错的选择。
主要有两个阶段:
第 1 阶段:创建密码本。
- 将输入图像划分为一组子图像。
- 对每个子图像应用筛选。每个关键点将有 128 维的特征向量。
- 通过简单地应用 k-means 聚类和选择的
k
. 每个图像将产生一个大小为 的矩阵V i(i <= n
并且n
是用于创建代码字的图像的数量。)128 * m
,其中m
是从图像中收集的关键点的数量。因此,K-means 的输入是一个大矩阵V ,它由V i的水平串联创建,对于所有i
。K-means 的输出是一个大小为的矩阵C。128 * k
第 2 阶段:计算直方图。
对于数据集中的每个图像,请执行以下操作:
- 创建一个
h
大小的直方图向量k
并将其初始化为零。 - 像第 1 阶段的第 2 步一样应用密集筛分。
- 对于每个关键点的向量,在码本矩阵C中找到它的“最佳匹配”向量的索引(可以是欧几里得距离中的最小值)。
- 将此索引的相应 bin 增加
h
1。 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 回答