【发布时间】:2017-10-02 00:54:17
【问题描述】:
我正在测试对象以使用 C++ 和 OpenCV 使用 Sift 和 Surf 进行 特征匹配。
Surf 声称比 Surf 更快,Sift 声称可以检测到许多关键点。我想确定哪种算法最准确。
但我对确定时间或匹配关键点的准确性感到困惑。有人可以向我解释如何确定哪种算法最准确吗?我从哪个因素来确定它的准确性?
【问题讨论】:
标签: opencv feature-detection sift surf
我正在测试对象以使用 C++ 和 OpenCV 使用 Sift 和 Surf 进行 特征匹配。
Surf 声称比 Surf 更快,Sift 声称可以检测到许多关键点。我想确定哪种算法最准确。
但我对确定时间或匹配关键点的准确性感到困惑。有人可以向我解释如何确定哪种算法最准确吗?我从哪个因素来确定它的准确性?
【问题讨论】:
标签: opencv feature-detection sift surf
我习惯于计算比率。那么速度,SURF 比 SIFT 快多少呢?你做 timeSift/timeSurf * 100。所以你得到 SIFT 比 SURF 慢多少倍。
关于准确性,它更复杂。您可以通过最小距离比应用匹配过滤器和/或先进行一些 RASNAC 过滤。然后你可以比较matchesSift/matchesSurf,你会得到SIFT比SURF多多少倍。但即使这样,您也可能在任何一种情况下都得到错误匹配,因此最好平均绘制匹配并查看哪个看起来更好/更准确。
做统计检验。不只是两张图片,几张图片重复同样的测试,取平均比率timeSift/timeSurf和平均比率matchesSift/matchesSurf..
为了结束(当然是平均值)我会做以下事情
speedRatio=timeSift/timeSurf
matchesRatio=matchesSift/matchesSurf
R=matchesRatio/speedRatio.
-If R>1 then SIFT worths it .
-If R<1 then SURF if definitively more convenient
If R=1 its the same
【讨论】: