为什么opencv畸形提取器删除了这么多关键点,特别是使用ORB检测器 我使用OpenCV 2.4.3C++接口来找到两幅图像之间的匹配点。第一次尝试是使用SURF。唯一的问题是耗时,所以我尝试了新的怪物提取器。使用SURF进行检测,使用FRANK进行描述,我意识到FRANK将关键点的数量减少到几乎检测到的一半,结果匹配不够。这就是原因,我试图快速获得更多的关键点。结果是: 冲浪探测器,冲浪提取器,BFMatcher交叉检查为真,RANSAC:70个关键点第一个图像,50个关键点第二个图像,200ms。250毫秒。15毫秒。15毫秒 冲浪探测器,畸形提取器,BFMatcher交叉检查为真,RANSAC:39个关键点第一个图像,30个关键点第二个图像(畸形后),200毫秒,50毫秒,0毫秒,0毫秒。结果是好的匹配太少了 快速检测器,畸形提取器,BFMatcher交叉检查为真,RANSAC:120个关键点,90个关键点,(畸形后69和48个关键点),10ms.,450ms.,15ms.,10ms

为什么opencv畸形提取器删除了这么多关键点,特别是使用ORB检测器 我使用OpenCV 2.4.3C++接口来找到两幅图像之间的匹配点。第一次尝试是使用SURF。唯一的问题是耗时,所以我尝试了新的怪物提取器。使用SURF进行检测,使用FRANK进行描述,我意识到FRANK将关键点的数量减少到几乎检测到的一半,结果匹配不够。这就是原因,我试图快速获得更多的关键点。结果是: 冲浪探测器,冲浪提取器,BFMatcher交叉检查为真,RANSAC:70个关键点第一个图像,50个关键点第二个图像,200ms。250毫秒。15毫秒。15毫秒 冲浪探测器,畸形提取器,BFMatcher交叉检查为真,RANSAC:39个关键点第一个图像,30个关键点第二个图像(畸形后),200毫秒,50毫秒,0毫秒,0毫秒。结果是好的匹配太少了 快速检测器,畸形提取器,BFMatcher交叉检查为真,RANSAC:120个关键点,90个关键点,(畸形后69和48个关键点),10ms.,450ms.,15ms.,10ms,opencv,orb,extractor,feature-descriptor,freak,Opencv,Orb,Extractor,Feature Descriptor,Freak,在那之后,我使用了ORBFeatureDetector,它获得了与FAST相同数量的关键点,但在FREAK extractor之后,每个图像的结果关键点都是0。我做错什么了吗?ORB关键点与从FAST获得的关键点不同吗? 也许我可以就此提出另一个问题,但我还有最后一个问题。与我第一次使用SURF的实验相比,检测器/提取器的最佳组合是什么,以获得相同的结果,但减少处理时间?因为当我获得更多的关键点时,提取器部分也会更加耗时,尽管我使用了FREAK。FAST只是一个关键点检测器(没有描述符)。如果您

在那之后,我使用了ORBFeatureDetector,它获得了与FAST相同数量的关键点,但在FREAK extractor之后,每个图像的结果关键点都是0。我做错什么了吗?ORB关键点与从FAST获得的关键点不同吗?
也许我可以就此提出另一个问题,但我还有最后一个问题。与我第一次使用SURF的实验相比,检测器/提取器的最佳组合是什么,以获得相同的结果,但减少处理时间?因为当我获得更多的关键点时,提取器部分也会更加耗时,尽管我使用了FREAK。

FAST只是一个关键点检测器(没有描述符)。如果您将FAST和use for description(多尺度)组合在一起,您将得到ORB。

如果FREAK不能为其生成描述符,它会删除点,很多时候这会发生在图像的边界中,因为如果它掉出边界图像,它无法生成描述符。我通过在提取之前应用ROI来避免这个问题


我也使用FAST和FRANK组合,我得到了最好的结果,但我仍然存在减少提取时间的问题,这对我来说太高了。

实际上,您使用了参数cross-check=true。这也是你的很多分数被取消的原因。如果该参数为true,则从计算角度来看,该参数代价高昂。它用于避免在匹配过程中出现不完全匹配的描述符对

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

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

致以最良好的祝愿


Alex

除了移除边界点之外,正如Jav_Rock所建议的,点的巨大(不一致的?!)减少实际上取决于存储在keyPoint中的大小参数。即使将scaleNormalized设置为false,当size参数的浮点值接近于零时,FREAK也会丢弃这个关键点。(但我似乎无法找出原因,因为只有scaleNormalized为true时才使用keyPoint的size参数:)

因此,如果不使用scaleNormalization,请确保将size参数设置为大于零的值(例如1)。
并将其作为单位“pixelsize”的值插入(使用scaleNormalization时)。
顺便说一句,最小的关键点大小是7倍


希望这有帮助……

也许我没有解释清楚。问题是,在关键点检测之后,我尝试使用FREAK进行描述,但是这个描述符减少了描述之后检测到的关键点的数量。特别是当我使用ORB时,描述后得到的关键点是0。我注意到在FAST和ORB之后调试生成的关键点时,使用ORB时,每个关键点上的响应都是一个非常小的浮点值。请向我们展示一些代码片段。对我来说,它工作得很好。我无法重现我遇到的问题。但在某些情况下,关键点的数量从800个减少到84个。对于边框来说不是太多了吗?这取决于关键点的大小,这与patternScale参数有关。但是是的,它是相当多的。图案比例。我无法理解这个奇怪的描述,也没有得到任何好的结果。谢谢JavYes,patternScale有点棘手,我给作者发了邮件,但仍然没有回复。无论如何,我得到了非常好的结果,这是一个调整参数的问题,调整匹配器,等等,有点复杂。信息很少,成功需要一些经验。我会再试一次。还有一个问题。有关于使用kmeans进行变态的线索吗?我的意思是,要用海明距离制作弓形词汇表?我喜欢用轻快的探测器和畸形的描述符。它运行得很好。我确实需要精确性,这就是我使用交叉检查的原因。无论如何,谢谢你。