首页 文章

为什么opencv FREAK提取器会删除这么多关键点,特别是使用ORB检测器

提问于
浏览
17

我正在使用OpenCV 2.4.3 c接口来查找两个图像之间的匹配点 . 第一次尝试是使用SURF . 唯一的问题是消耗时间,所以我尝试了新的FREAK提取器 . 使用SURF进行检测和FREAK进行描述,我意识到FREAK将关键点的数量减少到几乎检测到的一半,并且得到的匹配不够 . 这就是原因,我尝试了FAST以获得更多关键点 . 结果:

  • SURF检测器,SURF提取器,BFMatcher交叉检查true,RANSAC:70关键第一图像,50关键点第二图像,200ms . 250毫秒 . 为15ms . 为15ms .

  • SURF检测器,FREAK提取器,BFMatcher交叉检查true,RANSAC:39个关键点第一个图像,30个关键点第二个图像(FREAK之后),200ms . ,50 ms . ,0ms . ,0ms . 这导致很少有良好的匹配 .

  • FAST检测器,FREAK提取器,BFMatcher交叉检查true,RANSAC:120个关键点,90个关键点,(FREAK后69和48个关键点),10ms . ,450 ms . ,15 ms . ,10 ms .

之后,我使用了ORBFeatureDetector,它获得了与FAST相同数量的关键点,但在FREAK提取器之后,每个图像的结果关键点为0 . 难道我做错了什么? ORB关键点是否与从FAST获得的关键点不同?也许我可以为此开另一个问题,但我有最后一个问题 . 检测器/提取器的最佳组合是什么才能获得与使用SURF的第一次实验相同的结果,但缩短处理时间?因为虽然我使用了FREAK,但是当我获得更多关键点时,提取器部分也更耗时 .

4 回答

  • 3

    FREAK如果无法为其生成描述符,则会删除点,很多时候会出现在图像的边框中,因为如果它不在边界图像之外,则无法生成描述符 . 我通过在提取前应用ROI来避免此问题 .

    我也使用FAST结合FREAK,我得到了最好的结果,但我仍然有减少提取器时间的问题,这对我来说太高了 .

  • 1

    实际上,您使用参数cross check = true . 这也是为什么你的积分被消除的原因 . 当为真时,该参数从计算的角度来看是昂贵的 . 它用于避免在匹配过程中不完全匹配的成对描述符 .

    如果您有两组描述符D1和D2,则此参数仅允许在D1-> D2和D2-> D1匹配方向上通常匹配的对 .

    那么,这一切都取决于你的应用,也许你不需要那么多的匹配精度......

    最好的祝福 .

    亚历克斯

  • 3

    除了删除边界点之外,正如Jav_Rock所暗示的那样,点的巨大(不一致?!)减少实际上取决于你存储在keyPoint中的size参数 . 即使您将scaleNormalized设置为false,size参数的浮点值接近零,FREAK也会丢弃此keyPoint . (但我似乎无法弄清楚原因,因为只有当scaleNormalized为true时才使用keyPoint的size-parameter:source

    因此,如果不使用scaleNormalization,请务必将size参数设置为大于零的值(例如一个) .
    并将其作为值与单位'pixelsize'(使用scaleNormalization时)进行交互 .
    顺便说一句 . default的最小关键点大小为7 .

    希望这可以帮助...

  • 11

    FAST只是一个关键点检测器(没有描述符) . 如果您将FAST和用于描述(多尺度)简要结合使用,您将获得ORB .

相关问题