SIFT特征和图像分类?

Posted

技术标签:

【中文标题】SIFT特征和图像分类?【英文标题】:SIFT features and classification of images? 【发布时间】:2018-06-27 16:26:58 【问题描述】:

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

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

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

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

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

谢谢!

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

【问题讨论】:

【参考方案1】:

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

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

【讨论】:

谢谢你,只是一个问题,你说分配最接近第 j 个集群的 sift 描述符的比例,你能在你的回答中举一个简单的例子吗?我理论上理解它,但我并不真正理解这个新的 v 是如何形成的。根据我的理解,v是每个图像的每个簇中描述符数量的向量?

以上是关于SIFT特征和图像分类?的主要内容,如果未能解决你的问题,请参考以下文章

如何使用 SIFT 和 SVM 实现通用图像分类器

SVM 用于图像特征分类?

OpenCV SIFT特征算法详解与使用

经典图像特征SIFT HOG LBP Haar

SIFT特征提取分析

SIFT特征提取分析