У меня есть изображение в градациях серого (одно значение на пиксель от 0 до 255), и я хочу обнаружить ключевые точки, используя алгоритм MSER (то есть эллипсоиды), и описать эти ключевые точки, используя дескрипторы SIFT. Я использую функции из библиотеки VLFeat.
Сначала я получаю центроиды и эллипсоиды, используя функции vl_mser_get_regions
(возвращает вектор значений, указывающих положение центроида на изображении) и vl_mser_get_ell
(возвращает вектор измерения 9, описывающий эллипсоид). Затем я хочу применить функцию vl_sift_calc_raw_descriptor
к каждому из предыдущих эллипсоидов, чтобы получить SIFT-дескриптор для каждого эллипсоида.
Я покажу пример того, что я делал до сих пор (опуская нетрансцендентный код ):
/*********** MSER *************/
vl_mser_process (filter, image) ; //mser filter creation
number_regions = vl_mser_get_regions_num (filter) ; //number of ellipsoids
regions = vl_mser_get_regions (filter) ; //centroids of the ellipsoids
vl_mser_ell_fit (filt) ;
dimension_ellipsoids = vl_mser_get_ell_dof (filter) ; //dimension of the vector that describes the ellipsoids: 9
number_frames = vl_mser_get_ell_num (filter) ; //number of ellipsoids
frames = vl_mser_get_ell (filter) ; //ellipsoids
/*********** SIFT *************/
sift_filter = vl_sift_new (image_width, image_height octaves, levels, omin) ; //sift filter creation
for(int i=0; i < number_frames; i++){ //iterate over each ellipsoid
// HERE is the problem, I do not what input parameters I have
//to pass to this function except the first one (they must surely
//be obtained from the ellipsoids vector)
vl_sift_calc_raw_descriptor ( sift_filter,
vl_sift_pix const * grad,
vl_sift_pix * descr,
int width,
int height,
double x,
double y,
double sigma,
double angle0 )
}
Проблема в том, что я не знаю, как использовать 9-мерный вектор, описывающий каждый эллипсоид в функции vl_sift_calc_raw_descriptor
.