5

opencv SiftDescriptorExtractor について 2 つの質問があります。

  1. cv::Mat記述子をvector<float* >(i 番目の行 = i 番目の記述子)に変換するにはどうすればよいですか?
  2. SIFT 記述子のサイズ (= 次元) を定義するにはどうすればよいですか?

ええ、OpenCV リファレンスについては知っていますが、それを機能させることができません。誰かがここに最小限の実例を載せることができますか?

4

2 に答える 2

6

1-変換:

vector<float*> descriptor;
for(int i; i = 0; i < keypoints.size())
{
    descriptor.push_back(&keypoints.at<float>(i));
}

SIFTの2サイズ:

SIFT アルゴリズムがブロック、ビンなどのサイズを定義するため、できません。何ができますか? 独自のふるいをコーディングできます。これは難しいですが、試してみることをお勧めします。

于 2012-09-28T07:24:29.747 に答える
1
  1. cv::Mat の各要素にアクセスし、独自のベクトルを作成できます。これは、cv::Mat の要素にアクセスする方法を知りたい場合に役立ちます。
  2. 私が知っているように、OpenCV が提供する SiftDescriptorExtractor でそれを行う方法はありません。ただし、 http: //blogs.oregonstate.edu/hess/code/sift/ から取得した OpenCV の SIFT 実装では 、元のコードを変更して記述子のサイズを変更できます。SIFT ディスクリプタ ビン サイズの定数を変更することで、ディスクリプタ サイズを変更できます。それ以上のことが必要な場合は、コードを読む必要があります。コードは十分にコメントされており、Lowe の論文 2004 Distinctive Image Feature From Scale-Invariant Keypoints に基づいています。
于 2011-10-06T14:24:06.217 に答える