我正在尝试为我的数据集中的 N =~ 1300 张图像获取特征向量,我必须实现的特征之一是形状。所以我打算使用 SIFT 描述符。然而,每张图片返回不同数量的关键点,所以我运行
[F,D] = vl_sift(image);
F 的大小为 4 x N
,D 的大小为 128 x N
,其中 N 是检测到的关键点数。
但是,我想获得一个大小为 128 x 1
的矢量,它可以尽可能好地表示图像。我见过聚类和 k-means 之类的东西,但我不知道如何去做。
最基本的思路是求这N个大小为128x1的向量的平均值,然后我就有了一个特征向量。但是取平均值有意义吗?我应该做某种直方图吗?
任何帮助将不胜感激。 谢谢!
最佳答案
这其实是一个很大的研究课题。你是对的,平均所有描述符是没有意义的。有几种方法可以从一组局部描述符中创建单个向量。一大类方法称为“特征袋”或“视觉词袋”。一般的想法是从许多图像(例如使用 k-means)中聚类局部描述符(例如筛选)。然后你拍摄一张特定的图像,找出该图像中的每个描述符属于哪个集群,并创建一个直方图。有不同的聚类方法以及不同的创建和标准化直方图的方法。
一种稍微不同的方法称为“金字塔匹配内核”,这是一种在局部描述符集上训练 SVM 分类器的方法。
所以对于初学者来说,谷歌“功能包”或“视觉词包”。
关于matlab - 如何获得固定大小的SIFT特征向量?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23159828/