2014-09-12 2 views
2

У меня есть набор серых патчей размером 100K 64x64 (которые уже выровнены, что означает, что все они имеют одинаковую ориентацию), и я хотел бы извлечь дескриптор SIFT из каждого используя OpenCV.OpenCV - Извлечение дескриптора SIFT/SURF из предварительно обрезанных патчей

Мне ясно, что все, что мне нужно сделать, это определить вектор с одной ключевой точкой kp такой, что: kp.x = 32, kp.y = 32.

Однако, я не знаю, как установить параметр kp.size. Из переходящего кода SIFT это выглядит так, как будто он выполняет некоторые нетривиальные вычисления с этим параметром, а не просто предполагает, что это размер патча.

Вопрос 1: каким должен быть параметр kp.size при извлечении дескрипторов SIFT из патчей размером 64x64?

Вопрос 2: каков должен быть параметр kp.size при извлечении дескрипторов SURF из патчей размером 64x64?

+0

Посмотрите на оригинальные документы SIFT/SURF, как связаны масштаб объекта и размер дескриптора. 2. openCV-код, используют ли они одни и те же вычисления. Или вы можете просто изменить код openCV SIFT/SURF для печати масштаба и размера дескриптора и проверить некоторые значения;) – Micka

ответ

2

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

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

Кроме того, поскольку вы работаете с этими выровненными патчами, я бы посоветовал вам не использовать высокоуровневые функции OpenCV, а просто использовать/перекодировать часть извлечения дескриптора и применять любой вес, который вы хотите вычислить патч. Одна из причин этого заключается в том, что в примере SIFT вычисление дескрипторов SIFT может «добавлять новые ключевые точки» к тому, которое вы предоставили, если алгоритм «недоволен» ориентацией ключевой точки, он дублирует ключевую точку в том же но с другой ориентацией.

2

Хорошо. Таким образом, дескриптор SIFT обычно использует окрестности сеток 4x4, каждая сетка обычно составляет 4x4 пикселей. Поэтому окрестности в пикселях обычно 16x16. Масштаб/размер - это параметр для определения величины понижающей дискретизации/размытости/радиуса ключевой точки. Поэтому я бы подумал, что в вашем случае это будет .

Возможно, вам также известно, что ключевые точки SIFT также работают с субпиксельными слоями. (32,32) не будет точным центром вашего патча изображения, который на самом деле был бы (32,5, 32,5), если ваши размеры изображения (x, y) начинаются с 1. Если они начинаются с 0, это будет (31,5, 31.5) - как в случае opencv.

Смежные вопросы