增加SIFT中检测到的特征的数量将提高精度
Increasing the number of detected features in SIFT will increase precision?
我正在实现一个基于内容的图像检索应用程序,该应用程序涉及Bag of Features模型。我使用cv::SIFT
作为特征检测器。
无论如何,应用程序的性能并不好,我正试图从检测特征的第一步算法开始改进它们。
在阅读cv::SIFT::create()
文档时,我看到了3个引起我注意的参数:
- nfeatures–要保留的最佳功能的数量。特征根据其得分进行排名(在SIFT算法中测量为局部对比度)
- 对比度阈值–用于滤除半均匀(低对比度)区域中的弱特征的对比度阈值。越大阈值,检测器产生的特征就越少
- edgeThreshold–用于过滤类似边缘的特征的阈值。请注意,它的含义与contrastThreshold,即edgeThreshold越大,越小过滤掉特征(保留更多特征)
这意味着增加第一个和第三个参数,同时减少第二个参数,应该提高算法精度(时间性能较低)?
我想知道这一点,尤其是对于第一个参数,例如,如果我们设置nfeatures=2000
,它将准确地检测2000
特征,无论它们是否"有趣"。这意味着它会检测到"无趣"(如此糟糕)的关键点吗?
我在python中使用了SIFT算法,并在某个时候对其进行了研究,以提高准确性。以下是我记忆中可以整理的一些要点:
- "有趣"特征的数量总是取决于您使用它来检测的对象。如果对象具有非常随机的边缘,则检测到的关键点将更多。如果图像更简单(例如,仅具有1-2种不同的颜色并且具有非常独特的边界),则检测到的关键点将非常少。在这种情况下,如果增加"nfeatures"属性,则很有可能检测到假点,并给您带来糟糕的结果
- 假设你有非常好的对象图像,并且你得到了你正在寻找的"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希望你觉得这对你的爱好有用。
- 特征::矩阵<双精度,1,3> 结构类型函数中的返回类型函数
- 当使用比格式支持的精度更高的精度来显示数字时,会写出什么数据
- 高精度双精度的 Sprintf 格式化问题
- 在 Windows/C++ 上使用多进程应用程序的高精度定时操作
- 空间旋转矢量,C++精度高
- 双倍精度太高
- 如何使用特征库实现 max(A),其中 A 是双精度复矩阵
- 高精度线程同步
- 错误:类型"类特征::张量<双精度,3>"参数提供给"删除",预期指针
- 高精度计算平均值的最佳策略
- 如何在没有浮点数/双精度数的情况下生成均匀和高斯分布的伪随机数
- odeint:复杂且更高的精度类型
- 跨平台C++高精度事件定时器实现
- 高精度事件计时器
- C++:高精度随机双精度数
- 如何在C++中以高精度生成随机双精度数
- 使用boost-lib的更高精度浮点(高于16位)
- 如何获得比Windows XP上的计时器滴答(15毫秒)更高精度的时间
- 与PostgreSQL一起工作时,SOCI库中的高精度时间戳
- 用于高精度浮点数的c++类型