2013-03-06 107 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