3

現在、vlfeat-lib の dsift-algorithm を使用しようとしています。ただし、フィルターを作成する値 (サンプル ステップ、ビン サイズ) に関係なく、実行中のすべてのフレームに対して同じ数のキーポイントが返されます (カメラからの連続するフレームは異なります)。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;
4

1 に答える 1

4

実行中にすべてのフレームに対して同じ数のキーポイントを返します

抽出されたキーポイントの数は、入力の幾何学的パラメーター[1]、つまりステップと画像サイズにのみ依存するため、これは密なSIFT 実装では正常です。

ドキュメントを参照してください:

特徴フレーム (キーポイント) は、サンプリング ステップ ( vl_dsift_set_steps) とサンプリング境界 ( vl_dsift_set_bounds) によって間接的に指定されます。

[1]:によってのみ更新され、幾何学的情報 (境界、ステップ、およびビンのサイズ) のみを使用してvl_dsift_get_keypoint_num返されます。self->numFrames_vl_dsift_update_buffers

于 2013-03-06T15:38:52.617 に答える