我想做一个允许使用 SIFT、SURF、ORB(所有特征检测器)、不同描述符和不同匹配器的程序。
我想运行这样的东西:特征(“SIFT”,“SIFT”,“BruteForce”)分别是特征(“检测器”,“描述符”,“匹配器”)。
确实我之前做过一个程序,但是有很多“如果”。例如 "if (detection="SIFT")" "if (matcher=="BruteForce")" 等。因此,如果我想将某个检测器与另一种描述符一起使用,我的程序就不灵活。
所以我发现了类似的东西:
featureDetector = FeatureDetector::create( detectorType );
descriptorExtractor = DescriptorExtractor::create( descriptorType );
descriptorMatcher = DescriptorMatcher::create( matcherType );
这是完美的,因为我可以在一个函数中使用一个字符串来确定我想使用哪个检测器、描述符和匹配器。
但是,我无法更改参数(我发现了类似 featureDetector.set() 但没有文档),因此结果非常糟糕......仅计算一张图片需要时间,关键点不准确。
即使是 SIFT 也比 SURF 花费的时间更少!
而在我的第一个程序中,当我使用
detector=new SiftFeatureDetector(nfeatureSift,nOctaveLayerSift,contrastThresholdSift,edgeThresholdSift,sigmaSift);
结果更好!(因为我可能更改了参数)。
那么我该如何解决呢?也许,这是一个更好的解决方案来做我以前做过的事情,但它太重了,因为我必须做很多“如果”才能知道我想与哪个检测器一起使用哪个检测器等等......
你怎么看待这件事 ?
感谢