異なる手法を用いた頑健性比較
OpenCVでは特徴点抽出,特徴記述,特徴点のマッチングついて様々なアルゴリズムが実装されており、いまいちどのアルゴリズムを使えば、どのシーンに一番適応されるのが良く分かっていなかったので今回は色んなアルゴリズムの組み合わせを実際に試してみた。
評価画像と比較画像を用いて、スケール変化や回転にもロバストな手法を導きだす為に
マッチングの誤差率に着目した。
まず特徴点を検出し、特徴量を記述、そしてマッチングこの3つ過程がある訳だが、
それぞれにOpenCVには色々な関数が用意されている。
今回は特徴点検出にはFAST SIFT SURF ORB
記述にはSIFT SURF ORB
マッチングにはBruteForceとFlannBasedを使用した。
はじめに評価画像:lena.pngと比較画像:lena.pngを90度回転した画像を用意し
マッチング率を算出。結果はざっくりとこんな感じ。
FlannBased
BruteForce
なぜかFlannBasedの場合、記述でORBを使うと上手くいかなかったので割愛した。
次に、評価画像:lena.pngと比較画像:lena.pngを縮小し45度回転した画像を用いて
マッチング率を算出。
FlannBased
BruteForce
さっきと比較すると大幅にマッチング率が悪い・・・
少し予想していた結果とは異なるが今回の結果をまとめると
・スケール変化なしの回転だけの場合SURF SIFTのマッチング率が良い
・スケール変化及び回転をした場合はORB + SIFT or SURFのマッチング率が良い
恐らくスケール変化した際に、SURF SIFTの検出を用いた結果が悪いのは
マッチングの算出の仕方が原因かも。
他にも、原因があるかもしれないので今一度それぞれの特質などをしかっり復習しておこう。
参考としたサイトはこの辺り:
・Comparison of the OpenCV’s feature detection algorithms - Computer Vision TalksComputer Vision Talks
・Feature Detection and Description — OpenCV 3.0.0-dev documentation
・c++ - improve matching of feature points with openCV - Stack Overflow
・OpenCV on iOS: False matching with SurfFeatureDetector and FlannBasedMatcher - Stack Overflow
・Feature Matching with FLANN — OpenCV v2.4.2 documentation