如何获得固定大小的SIFT特征向量?

jef*_*eff 8 matlab image-processing data-mining sift vlfeat

我试图在我的数据集中获得N = ~1300个图像的特征向量,我必须实现的一个特征是形状.所以我计划使用SIFT描述符.但是,每个图像返回不同数量的关键点,所以我运行

[F,D] = vl_sift(image);
Run Code Online (Sandbox Code Playgroud)

F的大小4 x N和D的大小128 x N,其中N是检测到的关键点的数量.

但是,我想获得一个128 x 1可以尽可能好地表示图像的单个矢量大小.我已经看过像聚类和k-means这样的东西,但我不知道怎么做.

最基本的想法是获得大小为128x1的这N个向量的平均值,然后我有一个特征向量.但取平均值有意义吗?我应该做某种直方图吗?

任何帮助将不胜感激.谢谢 !

Dim*_*ima 7

这实际上是一个很大的研究问题.你是对的,平均所有描述符都没有意义.有几种方法可以从一组局部描述符中创建单个向量.一大类方法被称为"特征包"或"视觉词包".一般的想法是从许多图像聚类局部描述符(例如筛选)(例如使用k均值).然后,您拍摄特定图像,找出该图像中每个描述符所属的聚类,并创建直方图.有不同的方法来进行聚类以及创建和标准化直方图的不同方法.

一种稍微不同的方法称为"金字塔匹配内核",它是一种在局部描述符集上训练SVM分类器的方法.

所以对于初学者谷歌"包的功能"或"视觉词袋".

  • 如果你*打算做*Bag of Words,那么你真的应该读一下这个.因为BoW不能为每个图像使用一个128d特征.它适用于每个图像的许多功能,然后*每个*转换为"单词",这将为每个图像产生1000+稀疏矢量. (2认同)