OpenCV имеет очень хорошую документацию по созданию дескрипторов SIFT, но это версия "слабого SIFT", где ключевые точки обнаруживаются оригинальным алгоритмом Лоу.. Пример OpenCV читается примерно так:
img = cv2.imread('home.jpg')
gray= cv2.cvtColor(img,cv2.COLOR_BGR2GRAY)
sift = cv2.SIFT()
kp = sift.detect(gray,None)
kp,des = sift.compute(gray,kp)
Я ищу сильный / плотный SIFT, который не обнаруживает ключевые точки, а вместо этого вычисляет дескрипторы SIFT для набора патчей (например, 16x16 пикселей, заполнение 8 пикселей), покрывающих изображение в виде сетки. Насколько я понимаю, в OpenCV есть два способа сделать это:
- Я мог бы сам разделить изображение на сетку и каким-то образом преобразовать эти патчи в KeyPoints.
- Я мог бы использовать детектор функций на основе сетки
Другими словами, мне пришлось бы заменить строку sift.detect()
чем-то, что дает мне нужные мне ключевые точки.
Моя проблема в том, что остальной части документации OpenCV, особенно по Python, очень не хватает, поэтому я понятия не имею, как достичь того или другого. В документации по C ++ я вижу, что есть детекторы ключевых точек для сетки, но я не знаю, как их использовать в Python.
Альтернативой является переключение на VLFeat, который имеет очень хорошую реализацию DSift / PHOW, но означает, что мне придется переключиться с python на matlab.
Любые идеи? Спасибо.