我试图使用Opencv在Python中实现FREAK Descriptor。这是我使用的代码:
def surf_freak_detect(image,hessianThreshold):
surfDetector = cv2.SURF(hessianThreshold)
surfDetector=cv2.GridAdaptedFeatureDetector(surfDetector,50)
keypoints = surfDetector.detect(image,None)
freakExtractor = cv2.DescriptorExtractor_create('FREAK')
keypoints,descriptors= freakExtractor.compute(image,keypoints)
del freakExtractor
return keypoints,descriptors
这是初始化异常描述符的正确方法吗?通过做一些调试,我发现解释器在计算描述符时需要很长时间,然后最终崩溃。正确检测关键点。奇怪的是,它有时有效,有时只是崩溃!
如果正确检测到关键点,但程序在生成描述符时崩溃,这是因为描述符区域(围绕关键点)来自图像,并且存在对不存在的位置的内存访问。
您必须以某种方式限制异常描述符的操作区域。
OpenCV 3.0 中现在有 FREAK 的 Python 绑定。此处介绍了其配置选项。它似乎缺少如何在 Python 中实际调用它的文档,但您可以在 Python 中像这样使用它:
freakExtractor = cv2.xfeatures2d.FREAK_create()
keypoints,descriptors= freakExtractor.compute(image,keypoints)
(您必须从单独的功能检测器获取关键点,就像您在上面的代码中所做的那样。