FREAK дескриптор с Opencv Python


Я пытался реализовать дескриптор FREAK в Python, используя Opencv. Вот код, который я использую:

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 ? Проведя небольшую отладку, я обнаружил, что интерпретатор занимает очень много времени при вычислении дескрипторов, а затем в конечном итоге выходит из строя. Ключевые точки определяются правильно. Странно, иногда это работает и иногда просто вылетает !

2 10

2 ответа:

Если ключевые точки обнаружены правильно, но программа аварийно завершает работу при генерации дескрипторов, это происходит потому, что область дескриптора (которая окружает ключевую точку) выходит из изображения и существует доступ к памяти к позиции, которая не существует.

Вы должны каким-то образом ограничить рабочую область для дескрипторов freak.

Теперь есть привязки Python для FREAK в OpenCV 3.0. Его параметры конфигурации описаны здесь . Похоже, отсутствует документация о том, как на самом деле вызвать его в Python, но вы можете использовать его в Python следующим образом:

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

(Вы должны получить ключевые точки от отдельного детектора функций, как вы сделали в своем коде выше.)