machine-learning - SIFT特征和图像分类?

标签 machine-learning computer-vision classification svm sift

我是图像处理新手,我想提取图像特征以进行一些分类。我在理解管道时遇到问题。

据我了解,我有一张图像,并对它们运行 SIFT 算法。这为我提供了每个图像的一组描述符,数量各不相同,固定长度为 128。

然后我继续对它们进行聚类,因为不可能对不同数量的特征应用算法。为此,我将所有图像的所有描述符堆叠起来,并使用所需的簇数运行 k 均值算法。我得到的是 k 个长度为 128 的特征。

这就是我感到困惑的地方,所以我现在有了这些新的描述符,我该如何处理它们?我不明白如果它们代表所有图像,如何将它们插入分类器?每个图像是否应该有自己单独的特征来输入分类器?

我确信我不理解这个概念,但是有人可以澄清一下我得到 k*128 大小的矩阵后会发生什么吗?例如,SVM 分类器输入什么内容以及如何输入?这个 k 表示结果如何足以训练分类器?

谢谢!

编辑:我可能混淆了关键点和描述符,对不起,图像处理新手!

最佳答案

您应该研究被称为“视觉词袋”的图像分类/图像检索方法 - 它非常相关。一袋视觉词是一个固定长度的特征向量v,它总结了图像中特征的出现情况。这利用了所谓的密码本(也称为字典,来自文本检索的历史使用),在您的情况下,它是根据您的 K-means 聚类构建的。要使给定图像的v,最简单的方法是分配v[j]最接近第j个簇质心的SIFT描述符的比例。这意味着V的长度为K,因此它与图像中检测到的SIFT特征的数量无关。

具体来说,假设您已经完成了 K = 100 的聚类。让我们使用 ci 来表示第 i 个聚类中心。对于 SIFT,这将是一个大小为 128 的向量。现在,对于给定的输入图像,您可以创建此向量 v,其大小为 100 并用零初始化。然后,您从图像中提取特征及其相应的描述符。假设有 N 个描述符,我们将它们称为 d0、d2、...、d(N-1),其中 dj 是第 j 个描述符。对于每个dj,您计算它与聚类中心c0、c2、...c<之间的向量距离/强>99。然后,获取到 dj 距离最近的簇索引 k,并递增:v[k]+=1。请注意,这个过程可以很好地并行化,特别是在 GPU 上。此外,使用所谓的“近似最近邻”来替换该过程可以更快,例如使用FLANN图书馆。

关于machine-learning - SIFT特征和图像分类?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48324002/

相关文章:

python - 将自定义标签添加到 pytorch 数据加载器/数据集不适用于自定义数据集

algorithm - 加权K最近邻的正确实现

machine-learning - 罕见事件检测

opencv - 如何在openCV中使用Caffe框架加载CNN训练模型来测试(预测/分类)新图像?

opencv - 为摄影测量应用程序创建目标

machine-learning - 解释神经网络输出

computer-vision - 基本矩阵 : Pure Rotation

python - 神经网络的准确性非常差

python - 机器学习: Getting error in Confusion Matrix

python - 如何在 Sklearn 中使用自定义距离度量