【问题标题】:Image detection features: SIFT, HISTOGRAM and EGDE图像检测功能:SIFT、HISTOGRAM 和 EDGE
【发布时间】:2013-07-31 11:05:46
【问题描述】:

我正在使用 SIFT、HISTOGRAM 和 EGDE 等 3 个不同的功能开发对象分类器。

但是,这 3 个特征具有不同的维度向量,例如SIFT = 128 维。历史 = 256。

现在,由于大小不同,这些特征无法连接到一次向量中。我打算做什么,但我不确定这是否是正确的方式是这样的:

对于每个特征,我分别训练分类器,然后分别对 3 个不同的特征应用分类,然后计算多数,最后以多数票声明图像。

你认为这是正确的方法吗?

【问题讨论】:

    标签: opencv image-processing histogram sift


    【解决方案1】:

    有多种方法可以获得考虑到多个特征的分类结果。您所建议的一种可能性是,您可以训练多个分类器并通过某种协议而不是组合特征,而是在它们之间达成共识。这通常属于集成方法领域。尝试使用谷歌搜索增强随机森林,了解有关如何组合分类器的更多详细信息。

    但是,您的特征向量不能连接起来是不正确的,因为它们具有不同的维度。您仍然可以将这些特征连接在一起形成一个巨大的向量。例如,将您的 SIFT 和 HIST 特征连接在一起将为您提供一个 384 维的向量。根据您使用的分类器,您可能必须对向量的条目进行归一化,以便没有一个特征仅仅因为通过构造它具有更大的值而占主导地位。

    编辑回应您的评论: 看起来您的直方图是描述整个对象的特征(例如颜色)的一些特征向量,而您的 SIFT 描述符是在该对象的局部兴趣关键点处提取的。由于 SIFT 描述符的数量可能因图像而异,因此您不能将它们直接传递给典型的分类器,因为它们通常会在您希望分类的每个样本中获取一个特征向量。在这种情况下,您必须使用从许多图像中提取的 SIFT 描述符来构建 codebook(也称为视觉词典)。然后,您将使用此代码簿来帮助您从从每个图像中提取的许多 SIFT 描述符中导出单个特征向量。这就是所谓的“视觉词袋 (BOW)”模型。现在您有了一个“总结”SIFT 描述符的向量,您可以将它与直方图连接起来形成一个更大的向量。这个单一的向量现在总结了整个图像/(图像中的对象)。

    有关如何构建词袋码本以及如何使用它从从每张图像中提取的许多 SIFT 描述符中导出单个特征向量的详细信息,请查看本书(可从作者网站免费下载)http://programmingcomputervision.com/在“搜索图像”一章下。它实际上比听起来简单得多。

    粗略地说,只需运行 KMeans 来对来​​自许多图像的 SIFT 描述符进行聚类,并将它们的质心(这是一个称为“视觉词”的向量)作为码本。例如。对于 K = 1000,你有一个 1000 个视觉字码本。然后,对于每个图像,创建一个与 K 大小相同的结果向量(在本例中为 1000)。这个向量的每个元素对应一个视觉词。然后,对于从图像中提取的每个 SIFT 描述符,在码本中找到其最接近的匹配向量,并增加结果向量中相应单元格中的计数。完成后,此结果向量实质上会计算不同视觉词在图像中出现的频率。对于相同的视觉词,相似的图像将具有相似的计数,因此该向量有效地代表了您的图像。您还需要“标准化”这个向量,以确保具有不同数量的 SIFT 描述符(以及因此总计数)的图像具有可比性。这可以像简单地将每个条目除以向量中的总计数一样简单,也可以通过更复杂的度量,例如书中描述的 tf/idf。

    我相信作者也在他的网站上提供了python代码来配合本书。如果您不确定,请查看或试用它们。

    更复杂的功能组合方法包括多核学习 (MKL)。在这种情况下,您计算不同的内核矩阵,每个使用一个特征。然后,您可以找到组合核矩阵的最佳权重,并使用组合核矩阵来训练 SVM。您可以在 Shogun 机器学习库中找到相关代码。

    【讨论】:

    • 感谢您对我的问题的出色回答。对于您提到的 MKL 方法,它看起来很有趣,因为我不想知道这一点。对于您提到的第二种方法,我们结合在一起。我正在使用 OpenCV,例如一张使用 sift 的图像具有 [128 x 34] 特征向量大小,直方图具有 [256 x 1]。我试图将它们结合起来,但我做不到。这就是为什么我觉得它不能合并。我做错什么了吗?再次非常感谢您。
    • 我在回复您的回复时添加了详细信息。顺便说一句,即使使用 MKL,您也可能需要将许多 SIFT 描述符减少到一个向量才能使用它。部分原因是不同的图像会给你不同数量的 SIFT 描述符。除非您直接匹配 SIFT 描述符,否则分类器通常无法为每个样本(即图像)处理不同数量的特征向量。
    • @rish 感谢您的客气话。关于将 SVM 用于 BOW,当然。 BOW 只是一种表示数据的方式。之后,您可以使用任何分类器对数据进行分类,无论是支持向量机、随机森林......关于 MKL,我建议了解支持向量机的工作原理,特别是支持向量机中内核(矩阵)的使用。内核矩阵的 (i, j) 条目本质上存储了第 i 个和第 j 个样本之间的相似性度量。 MKL 基本上弄清楚了如何优化组合多个内核矩阵(为每个特征创建一个)并在 SVM 中使用它。查看 Shogun 机器学习库了解详情
    • 首先,SIFT 的 descriptor 公式中没有任何部分明确要求它与自己的 keypoint 一起使用。图像检索文献中充斥着关于寻找好的关键点以从中提取描述符(不一定是 SIFT)的研究,例如MSER 检测器(见robots.ox.ac.uk/~vgg/research/affine)。话虽如此,选择一个好的关键点检测器对于获得良好的结果至关重要。但是,根据您的数据集,某些具有某些参数设置的关键点检测器可能无法检测关键点,从而导致 BOW 模型表现不佳。
    • (cont.) 因此,即使标准 Harris 角点检测器在检测“稳定”关键点方面可能不如 SIFT 或 MSER,其默认设置也可能允许它检测SIFT 的参数设置 无法处理的图像(例如低分辨率或过于平滑的图像)。因此,Harris 可能不是更好,只是它的设置更适合您的图像。一般来说,SIFT 和 MSER 比 Harris 更能区分他们找到的关键点。通过在图像上绘制检测到的 SIFT 关键点进行调试,以查看是否检测到太少个关键点。
    猜你喜欢
    • 2012-11-17
    • 2011-10-07
    • 1970-01-01
    • 2023-02-08
    • 2014-07-30
    • 2011-11-26
    • 1970-01-01
    • 2018-06-27
    • 2012-07-29
    相关资源
    最近更新 更多