[〜#〜] surf [〜#〜] および [〜#〜] sift [〜#〜] でオブジェクト検出をテストしています。
SURFはSIFTよりも高速で堅牢であると主張していますが、テストではこれは真実ではないことがわかりました。 SIFTは中程度の画像(600 * 400)でSURFと同じ速度であり、オブジェクトをかなりよく認識します(SURFよりも優れている場合があります)。
私は何か間違っていますか?
[編集]
記事 があることに注意してください。opencvコードを少し変更するだけで、SURFがはるかに高速になります。
アクティブなopencv開発者を知っている場合は、彼にそれを見せてください。
設計時には、高速化を目的としていましたが、実際には、違いは標準カメラを使用したリアルタイムアプリケーションには関係ありません。ちなみに、FAST検出器は高速で非常に堅牢です。私は電話でのリアルタイム拡張現実向けのプログラミングを行っており、アプリケーションの実行中にSIFT(初期化)とFAST(リアルタイム機能検出用のピラミッド型FAST)の組み合わせを使用しています。 FASTはより高速で、OpenCVに実装されているため、SURFに固執したくない場合は試してみてください。リアルタイムでSURFを使用している最近の論文を見たことはありませんが、記述子やその他の種類の修正のためのピクセル数が少ないSIFTの修正版を見てきました。そのため、SURFは、考えられていた限りでは。とにかくそれは私の意見です。
OpenCVには、速度や安定性のためにSURFの最適な実装がありません。 SURFは、FLOPSの2つの適切に作成された実装をカウントする場合、SIFTよりも大幅に高速になります。 SURFは、積分画像を使用してその近似を実現します。
SURFのいくつかの実装の比較を見るには、こちらのページをご覧ください。
http://boofcv.org/index.php?title=Performance:SURF
残念ながら、OpenCVはクロスプラットフォームの問題のために、丸めに関連するパッチを拒否しました。パッチが調整されて再送信される可能性があります。私自身の仕事では、汎用的なround()が非常に遅いことに気づき、カスタム関数に置き換えました。
Jav_RockによるFAST検出器については、最後の手段としてのみ使用します。検出器の安定性は他のどの製品よりも劣りますが、実際には高速です。
SURFはより高速で、SIFTはより堅牢である必要があります。 Astorは、今日の標準では600 * 400は小さなイメージであると言っています。しかし。
とはいえ、SURFはSIFTよりも何桁も高速でなければなりません。
変更なしで、OPENCVでSIFTとSURFを適用すると、SIFTはSURFよりも高速に見えますが、そうではありません。 393 * 387ピクセルの画像でテストしたことを証明するために。同じ特徴抽出を100回実行して平均時間を取得すると、結果は次のようになります。
SIFT:0.0983946(s)
SURF:0.183372(s)
ただし、キーポイントの数には大きな違いがありますSIFT:kpsize = 671 d-row = 671 d-col = 128
SURF:kpsize = 1156 d-row = 1156 d-col = 64
SURFはSIFTのキーポイントのほぼ2倍の数を返すため、SIFTがSURFよりも高速であると言うのは公平ではありません。
Fastを検出器として使用した場合、SIFT、SURFを適用します。
SIFT:0.199448(s)SURF:0.0613682(s)
SIFT:kpsize = 2362 d-row = 2362 d-col = 64
SURF:kpsize = 2362 d-row = 2362 d-col = 64
ここで、SURFはSIFTよりも3倍高速です。
テストには SURFの元の実装 を使用してください。 Open CVは低速です。
SIFTとSURFの元の実装を比較する場合、 SURFを使用するとはるかに高速な結果が得られます 。パラメータを微調整することで、おそらく一桁も速くなります。ただし、堅牢性が低下する可能性があります。これはすべてユースケースに依存します。
一般に、SURFはSIFTと同じくらい堅牢です。データセットによって異なる結果が得られる場合がありますが、en grosは、堅牢性に関しては同じです。
SURFのGPU実装 もありますが、これは元の実装よりも非常に高速です。
すべてのフレームではなく、6番目のフレームごとに適用することで、Surf機能検出器の速度を向上させました。私のアプリケーションでは問題ありませんでした。カウンターiを作成し、ifステートメントif(i%6 == 0)を作成し、このifステートメントの下にurコードを入力すると、速度が上がります