13

我试图使用 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

这是初始化 Freak Descriptor的正确方法吗?通过进行一些调试,我发现解释器在计算描述符时需要很长时间,然后最终崩溃。正确检测关键点。奇怪的是,它有时有效有时只是崩溃

4

2 回答 2

10

如果正确检测到关键点但程序在生成描述符时崩溃,那是因为描述符区域(围绕关键点)从图像中出来,并且对不存在的位置进行了内存访问

您必须以某种方式限制怪异描述符的操作区域。

于 2013-12-17T10:47:11.310 回答
7

现在 OpenCV 3.0 中有 FREAK 的 Python 绑定。此处描述了其配置选项。它似乎缺少有关如何在 Python 中实际调用它的文档,但您可以像这样在 Python 中使用它:

freakExtractor = cv2.xfeatures2d.FREAK_create()
keypoints,descriptors= freakExtractor.compute(image,keypoints)

(您必须从单独的特征检测器中获取关键点,就像您在上面的代码中所做的那样。)

于 2015-11-20T03:55:31.933 回答