3

基本的に、最初に次のことを行う必要があります。

SurfFeatureDetector surf(400);
surf.detect(image1, keypoints1);

そして:

surfDesc.compute(image1, keypoints1, descriptors1);

検出と計算が2つの異なる操作であるのはなぜですか?
検出後にコンピューティングを実行しても、冗長ループは発生しませんか?

私は自分.computeのアプリケーションで最も高価であることに気づきました。

.detect 

0.2秒で行われます

.compute

約1秒かかります。スピードアップする方法はあります.computeか?

4

3 に答える 3

9

キーポイントの検出は、「良い特徴」と見なされる画像内のポイントを選択するプロセスにすぎません。

これらのキーポイントの記述子の抽出は、隣接するものとのコントラストなどのその特徴のプロパティをエンコードするまったく異なるプロセスであるため、異なる画像、異なるスケール、方向からの他のキーポイントと比較できます。

キーポイントを記述する方法は、マッチングを成功させるために重要であり、これが実際に重要な要素です。また、キーポイントを記述する方法は、マッチング速度の決定要因です。たとえば、フロートまたはバイナリ シーケンスとして記述できます。

于 2013-02-06T12:33:15.110 に答える
3

画像内のキーポイントを検出することと、それらのキーポイントの記述子を計算することには違いがあります。たとえば、SURF キーポイントを抽出し、SIFT 特徴を計算できます。DescriptorExtractor::compute メソッドでは、キーポイントのフィルターが適用されることに注意してください。

KeyPointsFilter::runByImageBorder()
KeyPointsFilter::runByKeypointSize();
于 2012-06-20T23:01:52.550 に答える
0

Jay_Rockが去った場所からピックアップして、ORB、Brisk、FREAKなどのアルゴリズムによって提供されるバイナリ記述子を使用することで、これらの処理時間を改善できます。それらは64ビットではなく32ビットを占めるだけでなく、SURFと同じくらい堅牢で、はるかに高速な記述子を計算するためのさまざまな方法も提供します。

最終的に記述子間でマッチング操作を実行する場合は、両方の間のハミング距離を計算することによって実行されます。2つのバイナリ文字列間のXOR演算であることを考えると、実行には数ミリ秒しかかかりません。

于 2013-03-12T18:35:12.820 に答える