いくつかの特徴量検出器の比較

出典 http://ishidate.my.coocan.jp/opencv310_10/opencv310_10.htm

図形に対する詳細設定

下記○印は、詳細設定により改善できたもので、デフォルトのまま(変更なし)も含めて、全ての結果を図に示す。

*  AGAST ----- 全く問題がないので、デフォルトのままとする

*  AKAZE ----- 引数をいろいろと変えても、上辺部、左辺部の検出はできなかった

* 〇 BRISK ----- patternScaleをデフォルトの1.0fから0.6fに下げ、thresholdを上げたら、良い結果になった

auto brisk = BRISK::create(120, 3, 0.6f);

* ○ FAST ------ nomaxSuppressionをデフォルトのtrueからfalseに変えたら、多くの特徴点が検出されたので、thresholdを上げた

auto fast = FastFeatureDetector::create(127, false);

* ○ GFTT ------ maxCornersをデフォルトの1000から40に下げたら、ほぼ良好な結果が得られた

auto gftt = GTFFDetector::create(40);

* ○ KAZE ------ thresholdをデフォルトの0.001fから0.005fに上げたら、白地部分の検出点が減った

auto kaze = KAZE::create(false, false, 0.005f);

*  MSER ------ これは特徴点検出とも違い、ブロブ検出は優れているので、デフォルトのままとする

* ○ ORB ------ 画像周辺を検出するために、edgeThresholdとpatchSizeをデフォルトの31から7に変更する、scaleFactorもデフォルトの1.2fから1.25fに変更した(「OpenCVとVisual C++による画像処理と認識(10)」を参照)、nfeaturesも80に減らした

auto orb = ORB::create(80, 1.25f, 4, 7, 0, 2, ORB::HARRIS_SCORE, 7, 20);

特徴点検出の比較3 特徴点検出の比較4

デフォルト条件で、図形を原画像とした場合の結果

デフォルト設定でも、AGASTは素晴らしい結果を示している。、GTFFも良い結果が出ているが、デフォルトでは検出する特徴点の最大個数が1000個と大きく設定されているので、傾斜を持った辺などが無理やりに特徴点にさせられている。

 AKAZEとBRISKは、似たような傾向を示し、上辺部、左辺部の特徴点が検出できてない。FASTは、デフォルトでは、ほとんど特徴点を見つけられない。MSERは、ブロブ(blob、binary large object、同じような値のピクセル値を持った塊)検出器なので、普通の特徴点検出器とは異なるが、その性能を十分示している。ORBも、デフォルトでは周辺部の検出に難があるが、これは詳細設定により改善できる(後述)。KAZEは他と異なる特性を示す。MSERと類似してパターン中央部を特徴点としたり、白地の中間点を特徴点としたりする特異な性能を持つ。

特徴点検出の比較 特徴点検出の比較2

実写建築物に対する詳細設定の結果

出典 http://ishidate.my.coocan.jp/opencv310_10/opencv310_10.htm

 下記○印は、詳細設定により改善できたもので、デフォルトのままを含めて、全ての結果を図に示す。

  • ○AGAST ----- thresholdを、デフォルトの10から70に上げたauto agast = AgastFeatureDetector::create(70);

* AKAZE ------ デフォルトでも、ほぼ適切な特徴点検出がされており、引数を変えてもほとんど変化がなかった

*〇BRISK ----- thresholdを、デフォルトの30から70に上げた

auto brisk = BRISK::create(70);

* ○FAST ------ thresholdを、デフォルトの10から70に上げた

auto fast = FastFeatureDetector::create(70);
  • ○GFTT ------ maxCornersをデフォルトの1000から400に下げた

    auto gftt = GTFFDetector::create(400);
  • KAZE ------- デフォルトでも、ほぼ適切な特徴点検出がされており、引数を変えてもあまり変化がなかった

  • MSER ------- これは特徴点検出とも違い、ブロブ検出は優れているので、デフォルトのままとする

  • ○ORB ------- 画像周辺を検出するために、edgeThresholdとpatchSizeをデフォルトの31から7に変更し、scaleFactorもデフォルトの1.2fから1.25fに変更した(「OpenCVとVisual C++による画像処理と認識(10)」を参照)、nfeaturesも400に減らした

    auto orb = ORB::create(400, 1.25f, 8, 7, 0, 2, ORB::HARRIS_SCORE, 7);

特徴点検出の比較5A 特徴点検出の比較5B