为啥 sift.compute() 在 MSER 关键点上比在 SIFT 关键点上慢

Posted

技术标签:

【中文标题】为啥 sift.compute() 在 MSER 关键点上比在 SIFT 关键点上慢【英文标题】:Why is sift.compute() slower on MSER keypoints than on SIFT keypoints为什么 sift.compute() 在 MSER 关键点上比在 SIFT 关键点上慢 【发布时间】:2021-09-18 19:34:44 【问题描述】:

在 1080x1080 图像上测试来自 openCV 的 sift 提取器的性能得到了一些意想不到的结果:

img = cv.imread("myImage.jpg", 0)  # gray
mser = cv.MSER_create()
sift = cv.SIFT_create()

kp = sift.detect(img)   # len(kp) == 5804
des = sift.compute(img, kp)  # time: 0.22s

kp = mser.detect(img)   # len(kp) == 2511
des = sift.compute(img, kp)  # time: 1.62s

与 SIFT 检测到的关键点相比,为什么 sift.compute() 在 MSER 检测到的关键点上速度较慢?请注意,MSER 检测到的关键点比 SIFT 少。

【问题讨论】:

使用检测+计算时高斯尺度空间的差异是否只计算一次或两次?也许 sift 描述符正在使用预先计算的信息,而在 mser 中没有预先计算的信息,所以在描述期间必须完成那部分? 【参考方案1】:

我绘制的关键点清楚地表明 MSER 关键点比 SIFT 关键点覆盖更大的区域。这可以解释为什么它更慢。

MSER:

SIFT:

【讨论】:

以上是关于为啥 sift.compute() 在 MSER 关键点上比在 SIFT 关键点上慢的主要内容,如果未能解决你的问题,请参考以下文章

OpenCV实战——使用MSER提取特征区域

opencv mser算法框出图片文字区域

有没有人在 OpenCV 中使用 MSER 来检测区域?

合并 MSER 中的区域以识别 OCR 中的文本行

最大稳定极值区域(MSER)检测

OpenCV 例程 300篇247. 特征检测之最大稳定极值区域(MSER)