2013-03-06 4 views
3

현재 vlfeat-lib의 dsift- 알고리즘을 사용하려고합니다. 그러나 필터 (샘플 단계, bin 크기)를 생성하는 값에 관계없이 실행 중 모든 프레임에 대해 동일한 수의 키포인트를 반환합니다 (연속 프레임은 카메라와 다릅니다). C 또는 C++ 사용에 대한 문서는 매우 얇은이며, 나는이 언어에 대한 좋은 예를 찾을 수 없습니다 .. 여기에 관련 코드입니다 :cv :: Mat와 함께 vlfeat 라이브러리의 dsift 사용

// 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 만 반환 기하학적 정보 만 (경계 단계와 빈 크기)를 사용하여 업데이트된다 _vl_dsift_update_buffersself->numFrames.

+2

넵. Dense는 고정 격자를 기반으로 설명자를 추출합니다. 이는 이미지 당 동일한 수의 설명자를 제공합니다. –