增加 SIFT 中检测到的特征数量会提高精度吗?
Increasing the number of detected features in SIFT will increase precision?
我正在实施 content-based image retrieval application which involves the Bag of Features 模型。我正在使用 cv::SIFT
作为特征检测器。
无论如何,应用程序性能不是很好,我正在尝试从检测特征的第一步算法开始改进它们。
正在阅读 cv::SIFT::create()
documentation 我看到了 3 个引起我注意的参数:
- nfeatures – The number of best features to retain. The features are ranked by their scores (measured in SIFT algorithm as the local
contrast)
- contrastThreshold – The contrast threshold used to filter out weak features in semi-uniform (low-contrast) regions. The larger the
threshold, the less features are produced by the detector.
- edgeThreshold – The threshold used to filter out edge-like features. Note that the its meaning is different from the
contrastThreshold, i.e. the larger the edgeThreshold, the less
features are filtered out (more features are retained).
这意味着增加第一个和第三个参数,同时减少第二个参数,应该会提高算法精度(时间性能较低)?
我特别想知道第一个参数,例如,如果我们设置 nfeatures=2000
,它将准确检测 2000
个特征,无论它们是否 "interesting"或不。这意味着它会检测到 "uninteresting"(太糟糕了)关键点吗?
我在 python 中使用过 SIFT 算法,并且在某个时间点研究过它以提高准确性。据我所知,以下是我可以整理的一些要点:
- "interesting" 特征的数量将始终取决于您使用它检测的对象。如果物体有非常随机的边缘,那么检测到的关键点就会更多。如果图像更简单(例如只有 1-2 种不同的颜色和非常独特的边界),那么检测到的关键点将非常少。在这种情况下,如果您增加 "nfeatures" 属性,则很有可能会检测到错误点并给您带来不好的结果。
- 假设你有非常好的目标图像并且你得到了你正在寻找的“2000”个关键点,改变其他属性将显着影响特征,因为这些属性主要用于关键点定位。您需要使用参数进行微调,但这些参数可能因对象而异。
根据官方文档,http://docs.opencv.org/3.1.0/da/df5/tutorial_py_sift_intro.html#gsc.tab=0
你可以看到图像中有很多检测到的关键点。所以要找出更多"interesting"个关键点,参数要实验
如果您正在寻找数学细节,我发现另一个 link 非常有用:
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
希望你发现这对你的努力有用。
我正在实施 content-based image retrieval application which involves the Bag of Features 模型。我正在使用 cv::SIFT
作为特征检测器。
无论如何,应用程序性能不是很好,我正在尝试从检测特征的第一步算法开始改进它们。
正在阅读 cv::SIFT::create()
documentation 我看到了 3 个引起我注意的参数:
- nfeatures – The number of best features to retain. The features are ranked by their scores (measured in SIFT algorithm as the local contrast)
- contrastThreshold – The contrast threshold used to filter out weak features in semi-uniform (low-contrast) regions. The larger the threshold, the less features are produced by the detector.
- edgeThreshold – The threshold used to filter out edge-like features. Note that the its meaning is different from the contrastThreshold, i.e. the larger the edgeThreshold, the less features are filtered out (more features are retained).
这意味着增加第一个和第三个参数,同时减少第二个参数,应该会提高算法精度(时间性能较低)?
我特别想知道第一个参数,例如,如果我们设置 nfeatures=2000
,它将准确检测 2000
个特征,无论它们是否 "interesting"或不。这意味着它会检测到 "uninteresting"(太糟糕了)关键点吗?
我在 python 中使用过 SIFT 算法,并且在某个时间点研究过它以提高准确性。据我所知,以下是我可以整理的一些要点:
- "interesting" 特征的数量将始终取决于您使用它检测的对象。如果物体有非常随机的边缘,那么检测到的关键点就会更多。如果图像更简单(例如只有 1-2 种不同的颜色和非常独特的边界),那么检测到的关键点将非常少。在这种情况下,如果您增加 "nfeatures" 属性,则很有可能会检测到错误点并给您带来不好的结果。
- 假设你有非常好的目标图像并且你得到了你正在寻找的“2000”个关键点,改变其他属性将显着影响特征,因为这些属性主要用于关键点定位。您需要使用参数进行微调,但这些参数可能因对象而异。
根据官方文档,http://docs.opencv.org/3.1.0/da/df5/tutorial_py_sift_intro.html#gsc.tab=0 你可以看到图像中有很多检测到的关键点。所以要找出更多"interesting"个关键点,参数要实验
如果您正在寻找数学细节,我发现另一个 link 非常有用: 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 希望你发现这对你的努力有用。