問題タブ [brisk]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
opencv - OpenCV で BRISK 記述子のサイズを設定するにはどうすればよいですか?
BRISK のデフォルト サイズは 512 ビットです。1024 ビット記述子を生成するにはどうすればよいですか?
私のコードの一部:
opencv - BRISK 検出器/記述子 OpenCV を使用したパフォーマンスの問題
BRISK を OpenCV での機能の検出と説明に使用すると、パフォーマンスの問題が発生します。
基本的に、この画像から取得したすべての記述子を一致させようとします。
特徴の検出と説明のために LSH アルゴリズムと BRISK を備えた flann ベースのマッチャーを使用して、画像のデータベースから取得したすべての記述子に対して。
私の画像データベースは 242 枚の画像で構成されています。この 242 枚の画像には、上記の「複雑な」画像クエリで別々に取得された各オブジェクトに対応する 3 つの画像があります。
BRISK 検出に使用されるパラメーターは次のとおりです (デフォルトの opencv パラメーター): しきい値: 30、オクターブ: 4、パターン スケール: 1.0。
ベスト マッチ手法 (イメージ クエリの各記述子は、データベース記述子のセット内の最も近い近傍に関連付けられています) を使用したフラン マッチングの後、私のアルゴリズムは、一致のパーセンテージで並べ替えられたデータベース イメージのリストを出力しました。最初の 4 つの結果は次のとおりです。
- データベース内のボルトに対応する画像: 4 つの一致 / 15 の検出されたキーポイント => 一致率: 26.7%。
- データベース内のボトルに対応する画像には 4 つの一致 / 15 の検出されたキーポイントがあります => 一致率: 26.7%。
- データベース内のボルトに対応する画像には、10 件の一致 / 59 件のキーポイントが検出されています => 一致率: 16.9%。
- 画像クエリに存在しないオブジェクトに対応する画像: 1 つの一致 / 16 の検出されたキーポイント => 一致率: 16.7%。
ORB を機能の検出と説明として使用して、この結果を比較しました。使用されるパラメーターは次のとおりです: フィーチャの数: 2000、スケール係数: 1.2、ピラミッド レベルの数: 8。
ここに私が得る結果があります:
- データベース内のボルトに対応する画像: 576 一致 / 752 検出されたキーポイント => 一致率: 76.6%。
- データベース内のボトルに対応する画像には、111 件の一致 / 189 件のキーポイントが検出されています => 一致率: 58.7%。
- データベース内のペンに対応する画像には、124 の一致 / 293 の検出されたキーポイントがあります => 一致率: 42.3%。
- 画像クエリに存在しないオブジェクトに対応する画像: 2 つの一致 / 66 の検出されたキーポイント => 一致率: 3%。
ご覧のとおり、結果は ORB ではるかに優れています。まず、データベース内の各画像でより多くのキーポイントが検出され、良好なオブジェクトの一致率が大幅に向上します。さらに、適切なオブジェクトの一致率と不適切なオブジェクトの一致率の差はより顕著です。
なぜ BRISK 検出器が ORB 検出器よりもはるかに少ないキーポイントを検出するのか疑問に思っています。BRISK 検出器でより多くのキーポイントを検出する方法を見つけるために、さまざまなテストを行いました (しきい値を下げ、オクターブ数を下げます)。確かにもう少し多くのキーポイントを検出できますが、ORB 検出器との違いは依然として非常に重要です。BRISK 検出器がこのような動作をする理由がわかりましたか?
私の OpenCV バージョンは 2.4.8 ですが、次のステートメントに従って、2.4.4 および 2.4.9 バージョンで BRISK 検出部分を試しました。
http://code.opencv.org/issues/2491およびBRISK 機能検出器は、改善なしでゼロのキーポイントを検出します。
また、ORB 検出器と BRISK 記述を組み合わせようとしました。マッチング結果は、最初の方法 (完全な BRISK) よりも優れていますが、2 番目の方法 (完全な ORB) よりも劣っています。
- データベース内のボルトに対応する画像: 529 一致 / 708 検出されたキーポイント => 一致率: 74.7%。
- データベース内のボトルに対応する画像には 69 の一致 / 134 の検出されたキーポイントがあります => 一致率: 51.5%。
- データベース内のペンに対応する画像には、93 / 247 個のキーポイントが検出されています => 一致率: 37.6%。
- 画像クエリに存在しないオブジェクトに対応する画像: 5 つの一致 / 50 の検出されたキーポイント => 一致率: 10%。
各画像で検出されたキーポイントの数は、方法 2 と方法 3 で同じではないことに注意してください。実際に、このコードをテスト画像 (ここではボルトの画像) で実行すると、次のようになります。
BRISK は、記述子で検出されたすべてのキーポイントを計算していないようです (ORB 検出器によって検出された 752 個のキーポイント => BRISK 記述子によって計算された 708 個の記述子)。
ただし、ORB によって検出されたすべてのキーポイントが BRISK 記述子で計算されていない場合でも。これらの結果から、BRISK は ORB よりもキーポイントを記述するのに適していないように見えますか? 間違っていたら訂正してください。
私の結果を理解するのに役立つ要素がある場合、または OpenCV で BRISK に関する問題を既に経験している場合は、お知らせください。どんな助けでも大歓迎です:)。
ios - OpenCV の Keypoint と Descriptor を取得するのに時間がかかる
キーポイントと記述子を取得するために OpenCV Surf メソッドを使用しました。問題なく動作していますが、非常に時間がかかります。
私のコードは: -
時間の Xcode 結果: -
2015-10-26 13:22:27.282 AVDemo[288:26112] キーポイント検出
2015-10-26 13:22:28.361 AVDemo[288:26112] 記述子検出
2015-10-26 13:22:30.077 AVDemo[288:26112] 一致検出
ここでは、計算に2秒かかります
また、次のようにフェッチする別の方法を使用しました: -
これも正常に動作していますが、Time Xcodeの結果に同じ問題があります: -
2015-10-26 14:19:47.939 AVDemo[305:32700] キーポイントの検出
2015-10-26 14:19:49.787 AVDemo[305:32700] キーポイントの計算
2015-10-26 14:19:49.818 AVDemo[305:32700] カメラ画像変換終了
この時間をどのように最小限に抑えることができますか?
今、私は FASTfeatureDetector を使用しました。これは時間を最小限に抑えますが、それでも SurfDescriptorExtractor には時間がかかります。
新しいコードは: -
Xcode : -
2015-10-26 16:06:19.018 AVDemo[375:47824] キーポイント検出
2015-10-26 16:06:19.067 AVDemo[375:47824] 記述子検出
2015-10-26 16:06:21.117 AVDemo[375:47824] 一致検出
exception-handling - opencv(ORBとBRISK)のクラッシュ検出機能
ディテクタ ORB を使用して画像内のキーポイントを取得しようとしていますが、常に例外が発生してクラッシュします。私のコードは次のコードです。
img は早期に宣言されますが、問題は dodetector->detect(img, kp); の場合です。何が問題なのかわかりません。他の形式で実行しようとしていますが、detect() の呼び出しですべてクラッシュします。
私はBRISKでやろうとしていますが、問題はクラッシュ検出の呼び出しでも同じです。活発に私は簡単にするために次のものをやった:
これは腹立たしいことです。
Windows 10のVisual Studio 2015でopencv 3を使用しています。
私の英語で申し訳ありませんが、答えてくれてありがとう。
javacv - OpenCv Java 2.4.9 でパラメーターを使用して BRISK Feature Detection を作成する方法
OpenCv C++ には BRISK のコンストラクターがあり、しきい値、オクターブ値を設定できることは知っていますが、OpenCv Java では同様のものを見つけることができません。BRISK を作成する create() メソッドがあることは知っていますが、Java でしきい値やオクターブなどの値を設定することはできません。
OpenCv Java 2.4.9 でこれを達成するにはどうすればよいですか?