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

标签 matlab image-processing data-mining sift vlfeat

我正在尝试为我的数据集中的 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/

相关文章:

matlab - 在 Matlab 中读取和查看大 tiff

matlab - MATLAB 中的二维加权核密度估计 (KDE)

matlab - 如何在更大的元胞数组中选择每个元胞数组的第二个元素?

algorithm - k 最近邻分类器训练每个类的样本大小

algorithm - 数据挖掘中有哪些不同的模式评估措施?

python - 使用 numpy 计算零空间的有理基

python - 如何更改opencv检测到的刻度的形状

c++ - 使用 reshape 乘以 Mat 矩阵,OpenCV 中的 Mat 类型问题

opencv - 如何通过 findContours 函数求出检测到的物体的长宽?

machine-learning - 树状图使用什么数据结构?