特徴量検出器の比較

今回はSIFTやSURFなど様々なものがある特徴量検出器の違いを、実際に画像から特徴点を検出することで比較していきます。

特徴点の抽出方法はこちらを参考にしてください。

今回、特徴点を抽出したのは次の画像です。

元画像

検出元の画像は幅が454px、高さが397pxと、あえて小さいものにしています。

特徴点検出結果

こちらの画像に対して、SURF、KAZE、AKAZE、ORB、SIFTの5種の特徴量を検出した結果が次の画像となります。


特徴量検出結果(flags=4)

AKAZE特徴量は円が小さいですね。スケール変化に弱いのでしょうか・・・(理論的に言えなくてすいません)

検出結果の比較

またそれぞれの特徴点の数、特徴点のサイズの平均値および標準偏差をグラフ化して比較をしてみました。


特徴検出器によって、検出される特徴点の数やサイズも全然違うことが分かりますね。
次の表に今回の結果をまとめてみました。

特徴検出器概要
KAZE検出される特徴点の数が多い。サイズは小さい
AKAZEKAZEに比べて、数もサイズも小さい。
SURF特徴点の数は少なめ。サイズにばらつきあり。
ORB特徴点サイズが大きい。
SIFTAKAZEより大きい特徴が検出されているが、平均サイズは最小。

次回はこれらの特徴量のマッチング精度に着目してみたいところです!

おまけ

前回記事でakaze = cv2.AKAZE_create() としていた箇所を下記に書き換えると、扱う特徴量検出器を変更することができます。
sift = cv2.xfeatures2d.SIFT_create()

kaze = cv2.KAZE_create() 

akaze = cv2.AKAZE_create() 

orb =  cv2.ORB_create()

surf = cv2.xfeatures2d.SURF_create()

今回使用した画像:自作の時計

今回使用した画像の時計はアイロンビーズで手作りしたものになります。
好きな絵を作れるので非常におすすめです。
ひっつき虫という練り消しみたいなものを使えば壁にも貼れますので、ぜひ作ってみてください。

コメント