2016-12-08 25 views
1

OpenCVVLFeatのSIFT実装を比較しようとしています。 OpenCVのためのSIFT記述子の値:OpenCVとVLFeat

0 0 0 0 0 0 0 0 0 0 0 17 45 20 26 0 1 ...

ながら:これらは、2枚の異なる画像のための記述子である

0.0391555 0 0 0.0998274 0.235747 0 0 0.0276871 0.156622 ...

お知らせこと

私はVLFeatに対する記述子値のような、整数であることに気づきました。

  1. は、なぜ彼らは2つの異なる値を持っている:

    私は2つの質問がありますか?

  2. VLFeat(そしてVLADエンコーディング)を使用してk-meansのOpenCV表現が必要な場合は、これらの値を変更する必要がありますか?

答えて

1

免責事項、私はOpenCVまたはVLFeatの専門家ではありませんが、私は回答を知っていると思います。

VLFeatは、整数と浮動小数点の両方の記述子を生成できます。整数記述子を生成するには、vl_sift関数を使用し、float記述子を生成するには、FloatDescriptorsパラメータでvl_dsift関数を使用します。

VLFeatはパフォーマンス上の理由から整数記述子を使用している可能性があります。整数を使用する計算は、一般にfloatを使用するよりも高速です。しかし、それは精度を犠牲にしている可能性があります。それにもかかわらず、コンピュータビジョンの場合、精度はそれほど重要ではないかもしれません。 integer k-means algorithmの説明では、「これは一部のアプリケーションでは制限されていますが、通常は非常に高い精度が不要な画像記述子のクラスタリングには適しています。

k-meansアルゴリズムについて。整数記述子のバージョン(vl_ikmeans)とfloat記述子のバージョン(vl_kmeans)があります。 OpenCVでは、単にOpenCVを使用します。

+0

'vl_sift'と' vl_dsift'は*完全に*異なるアルゴリズムw.r.tです。キーポイントを生成する手順は、記述子の値(intまたはfloat)に基づいて比較することはできません。 – justHelloWorld

+0

VLFeat [documentation](http://www.vlfeat.org/matlab/vl_dsift.html)によると:「デフォルトでは、VL_DSIFT()はVL_SIFT()と同等の機能を計算します。 "この例では、VL_DSIFT()およびVL_SIFT()を使用して同等のSIFT記述子を生成します。" –

+0

私の不具合は、デフォルト動作が同じであることを知らなかった(私は-1を取り除いた))。しかし、DSIFTは "密なSIFT"を意味し、キーポイントは標準グリッドから生成されます。おそらく同じ動作を得ることができますが、2つのアルゴリズムの目的は異なります。 – justHelloWorld

関連する問題