2013-03-06 103 views
3

我目前正在尝试使用vlfeat-lib的dsift算法。但是无论使用哪个值创建滤镜(采样步长,bin大小),它在执行过程中都会为每个帧返回相同数量的关键点(连续帧与摄像机不同)。在C或C++使用的文档是非常薄的,我无法找到这些语言的任何很好的例子.. 下面是相关代码:使用cv的vlfeat库的dsift :: Mat

// create filter 
vlf = vl_dsift_new_basic(320, 240, 1, 3); 

// transform image in cv::Mat to float vector 
std::vector<float> imgvec; 
for (int i = 0; i < img.rows; ++i){ 
    for (int j = 0; j < img.cols; ++j){ 
    imgvec.push_back(img.at<unsigned char>(i,j)/255.0f);                                                   
    } 
} 
// call processing function of vl 
vl_dsift_process(vlf, &imgvec[0]); 

// echo number of keypoints found 
std::cout << vl_dsift_get_keypoint_num(vlf) << std::endl; 

回答

4

返回相同数量的关键点的每一帧一个 执行期间

这是正常具有致密 SIFT的实现,因为提取的关键点的数量仅取决于输入几何参数[1],即,步骤和图像尺寸。

documentation

特征帧(关键点)被间接地通过采样步骤(vl_dsift_set_steps)和采样边界(vl_dsift_set_bounds)指定。

[1]:vl_dsift_get_keypoint_num返回self->numFrames,其仅由_vl_dsift_update_buffers其使用几何信息只(边界,步骤和块大小)更新。

+2

是。密集筛选基于固定网格提取描述符。这给出了每个图像相同数量的描述符。 – 2013-03-06 20:44:31