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 Descriptor? Проведя небольшую отладку, я обнаружил, что интерпретатор занимает очень много времени при вычислении дескрипторов, а затем в конечном итоге происходит сбой. Ключевые точки определены правильно. Странно, иногда работает, а иногда просто вылетает!
2 ответа
Если ключевые точки обнаружены правильно, но программа аварийно завершает работу при генерации дескрипторов, это происходит потому, что область дескриптора (которая окружает ключевую точку) выходит из изображения и имеется доступ к памяти в позиции, которая не существует.
Вы должны как-то ограничить рабочую область для странных дескрипторов.
В OpenCV 3.0 теперь есть привязки Python для FREAK. Его параметры конфигурации описаны здесь. Кажется, отсутствует документация о том, как на самом деле вызывать его в Python, но вы можете использовать его в Python следующим образом:
freakExtractor = cv2.xfeatures2d.FREAK_create()
keypoints,descriptors= freakExtractor.compute(image,keypoints)
(Вы должны получить ключевые точки от отдельного детектора функций, как вы делали это в коде выше.)