我目前正在尝试使用vlfeat-lib的dsift-algorithm。但是,无论我使用哪个值创建过滤器(采样步长,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;
最佳答案
这对于密集 SIFT实现是正常的,因为提取的关键点的数量仅取决于输入的几何参数[1],即步长和图像大小。
参见documentation:
[1]:vl_dsift_get_keypoint_num
返回仅由self->numFrames
更新的_vl_dsift_update_buffers
,该ojit_code仅使用几何信息(边界,步长和bin大小)。