I have a grayscale image (one value per pixel between 0 and 255) and I want to detect keypoints using MSER algorithm (i.e. ellipsoids) and describe those keypoints using SIFT descriptors. I am using the functions in the VLFeat library.
First I get the centroids and the ellipsoids using the functions vl_mser_get_regions (returns a vector of values indicating the position of the centroid in the image) and vl_mser_get_ell (returns a vector of dimension 9 describing the ellipsoid). Then, I want to apply the function vl_sift_calc_raw_descriptor over each one of the previous ellipsoids to obtain a SIFT descriptor per ellipsoid.
I show an example of what I have done until yet (omitting the non-transcendent code):
/*********** 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 )
}
The problem is that I do not know how to use the 9-dim vector describing each ellipsoid in the vl_sift_calc_raw_descriptor function.