图像识别 - OpenCV SIFT vs David Lowe 的 SIFT 实现,OpenCV 更差



我尝试使用David Lowe的实现和OpenCV实现对几个不同的对象进行对象检测(只是在此代码中更改了' surfffeaturedetector ' -> 'SiftFeatureDetector'和'SurfDescriptorExtractor' -> 'SiftDescriptorExtractor')。

看起来opencv的实现要糟糕得多!大量的误报和更少的关键点检测!我尝试使用"SiftFeatureDetector"参数,如sigma/contrastThreshold等,但结果总是比原来的David版本差得多。

  • SIFT的opencv实现是否与原始David Lowe的实现"不同"?

  • 有没有人知道一个很好的参数设置为'SiftFeatureDetector',使结果与David的实现提供的对象图像(如box.pgm/basmatit .pgm..)可能看起来类似于David的版本。

VLFeat的SIFT实现与原始实现非常接近(就特征输出而言)。

以下是我在Python中使用的代码:

 detector = cv2.xfeatures2d.SIFT_create(
        nfeatures = 0,  # def 0 
        nOctaveLayers = 3,  # def 3
        contrastThreshold = 0.04,  # def 0.04 
        edgeThreshold = 10,  # def 10 
        sigma = 1.6)  # def 1.6 

所有默认值。我得到了很好的结果,虽然执行起来很慢。

我正在使用OpenCV的SIFT实现,并与David Lowe在他的网站上提供的实现进行比较。

最新更新