增加SIFT中检测到的特征的数量将提高精度

Increasing the number of detected features in SIFT will increase precision?

本文关键字:高精度 特征 检测 增加 SIFT      更新时间:2023-10-16

我正在实现一个基于内容的图像检索应用程序,该应用程序涉及Bag of Features模型。我使用cv::SIFT作为特征检测器。

无论如何,应用程序的性能并不好,我正试图从检测特征的第一步算法开始改进它们。

在阅读cv::SIFT::create()文档时,我看到了3个引起我注意的参数:

  • nfeatures–要保留的最佳功能的数量。特征根据其得分进行排名(在SIFT算法中测量为局部对比度)
  • 对比度阈值–用于滤除半均匀(低对比度)区域中的弱特征的对比度阈值。越大阈值,检测器产生的特征就越少
  • edgeThreshold–用于过滤类似边缘的特征的阈值。请注意,它的含义与contrastThreshold,即edgeThreshold越大,越小过滤掉特征(保留更多特征)

这意味着增加第一个和第三个参数,同时减少第二个参数,应该提高算法精度(时间性能较低)?

我想知道这一点,尤其是对于第一个参数,例如,如果我们设置nfeatures=2000,它将准确地检测2000特征,无论它们是否"有趣"。这意味着它会检测到"无趣"(如此糟糕)的关键点吗?

我在python中使用了SIFT算法,并在某个时候对其进行了研究,以提高准确性。以下是我记忆中可以整理的一些要点:

  1. "有趣"特征的数量总是取决于您使用它来检测的对象。如果对象具有非常随机的边缘,则检测到的关键点将更多。如果图像更简单(例如,仅具有1-2种不同的颜色并且具有非常独特的边界),则检测到的关键点将非常少。在这种情况下,如果增加"nfeatures"属性,则很有可能检测到假点,并给您带来糟糕的结果
  2. 假设你有非常好的对象图像,并且你得到了你正在寻找的"2000"个关键点,那么改变其他属性将显著影响特征,因为这些属性主要用于关键点定位。您需要使用这些参数进行微调,但这些参数可能因对象而异

根据官方文件,http://docs.opencv.org/3.1.0/da/df5/tutorial_py_sift_intro.html#gsc.tab=0您可以看到图像中有很多检测到的关键点。因此,为了找出更"有趣"的关键点,需要对参数进行实验

如果你正在寻找数学细节,我发现另一个非常有用的链接是:http://www.inf.fu-berlin.de/lehre/SS09/CV/uebungen/uebung09/SIFT.pdf?bcsi_scan_ee7e30f120188340=0&bcsi_scan_filename=SIFT.pdf

这可以帮助您在MATLAB中更改参数及其时查看结果:http://www.vlfeat.org/overview/sift.html希望你觉得这对你的爱好有用。