使用cv :: Mat的vlfeat库的dsift

时间:2013-03-06 11:28:28

标签: c++ c opencv computer-vision vlfeat

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

// 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;

1 个答案:

答案 0 :(得分:4)

  

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

这是正常的密集 SIFT实现,因为提取的关键点数量仅取决于输入几何参数[1],即步长和图像大小。

请参阅documentation

  

特征框(关键点)由采样步骤(vl_dsift_set_steps)和采样边界(vl_dsift_set_bounds)间接指定。

[1]:vl_dsift_get_keypoint_num返回仅由self->numFrames更新的_vl_dsift_update_buffers,{{1}}仅使用几何信息(边界,步长和区域大小)。