请我喜欢用SIFT DESCRIPTOR和SVM对4类图像进行分类。现在,使用SIFT提取器我得到不同大小的关键点例如img1有100个关键点img2有55个关键点....如何使用matlab构建给出固定大小向量的直方图
答案 0 :(得分:8)
在这种情况下,也许密集筛选是一个不错的选择。
主要有两个阶段:
第1阶段:创建一个代码簿。
k
,对这些向量进行编码以创建码本。每个图像将生成一个矩阵 V i (i <= n
和n
是用于创建代码字的图像数量。)大小为{{ 1}},其中128 * m
是从图像中收集的关键点的数量。因此,对于所有m
,K-means的输入是由 V i 的水平串联创建的大矩阵 V 。 K-means的输出是矩阵 C ,大小为i
。第2阶段:计算直方图。
对于数据集中的每个图像,请执行以下操作:
128 * k
的直方图向量h
并将其初始化为零。k
中此索引的相应bin增加1。h
。现在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密集地对描述符进行采样,将规则网格放置在图像的顶部。如果所有图像的大小相同,则每个图像的关键点数量相同。