我尝试使用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在他的网站上提供的实现进行比较。