Python+OpenCVで特徴量記述・アルゴリズムまとめ
Python+OpenCVで画像の特徴点の特徴量を記述する.OpenCV2.4.9およびOpenCV3.0 alphaについて使用できるアルゴリズムをまとめる.
Python+OpenCVで特徴点抽出・使えるアルゴリズムまとめ OpenCV2.4.9と3.0 alpha - whoopsidaisies's diary
の続き.
特徴量記述器の使い方
特徴点抽出のときのFeatureDetectorと同じように,特徴量記述についてもDescriptorExtractorという共通インターフェースが用意されている.
使い方は以下の通り.
# 引数でどの特徴量記述子を使うか指定 extractor = cv2.DescriptorExtractor_create(extractor_name) # 引数として画像と特徴点を渡す # 戻り値は特徴点と特徴量 keypoints, descriptors = extractor.compute(img, keypoints)
DescriptorExtractor_createメソッドで指定出来る特徴量記述子を以下にまとめた.
OpenCVバージョン | 実数ベクトル | バイナリコード |
---|---|---|
2.4.9 | SIFT, SURF | BRIEF, BRISK, |
3.0 alpha | KAZE | AKAZE, BRISK, ORB |
(2.4.9でORBがなぜかランタイムエラーが出るので追々調査予定)
特徴量の中身
descriptorsの中身は2次元のarrayになっており,特徴点ごとに特徴量のベクトルが格納されている.
KAZEで記述した特徴量を表示してみるとこんな感じ(0番目の点).
>>descriptors[0] array([ -7.38840317e-04, -6.34267868e-04, 2.61819176e-03, 3.50267510e-03, -1.59906253e-04, -4.56994586e-03, 4.39605350e-03, 9.44076758e-03, -1.75689301e-03, 8.05667194e-04, 3.55383591e-03, 4.12554527e-03, -1.54193444e-03, 1.58668880e-03, 2.78847502e-03, 3.14337271e-03, -1.62520558e-02, 1.65848620e-02, 3.65739577e-02, 2.07063138e-01, 2.64649391e-02, -6.13974873e-03, 9.64385048e-02, 2.91850477e-01, 5.54781593e-02, 6.74537197e-03, 6.74520805e-02, 8.45865980e-02, -2.12559430e-03, 1.18403265e-03, 5.09992335e-03, 4.04977519e-03, -1.28035052e-02, 6.93068025e-04, 3.93203236e-02, 4.54802722e-01, -2.96720478e-04, 6.83288351e-02, 8.15773308e-02, 6.17026806e-01, -1.08468741e-01, 5.95125668e-02, 1.92962006e-01, 2.17324436e-01, -1.21422755e-02, 2.50244630e-03, 1.34693161e-02, 6.25377288e-03, 2.55310140e-03, -4.21544649e-02, 2.98030730e-02, 1.50349155e-01, 4.27789390e-02, -9.73087847e-02, 1.63991615e-01, 1.90487400e-01, 3.39032081e-03, -2.32313443e-02, 1.98113456e-01, 6.58137947e-02, -1.16498368e-02, 2.66303378e-03, 1.25482017e-02, 4.14769724e-03], dtype=float32)
グラフ表示だとこんな感じ.
import matplotlib.pyplot as plt plt.plot(descriptors[0])
KAZEは64次元の実数ベクトルで特徴量記述をするので以上のようになるが,記述子によってデータ量が違うため配列の長さや型が変わってくる.
カテゴリー
- .NET (28)
- Accord.NET (3)
- AForge.NET (4)
- Android (1)
- AR (1)
- C# (35)
- C++ (17)
- d3.js (1)
- Deep Learning (3)
- Excel (2)
- javascript (1)
- LINQ (2)
- NuGet (20)
- OpenCV (17)
- OpenCV 3.0 (5)
- Programming (46)
- python (5)
- SVG (1)
- VBA (1)
- Windows フォーム アプリケーション (10)
- コンピュータビジョン (13)
- ディジタル信号処理 (2)
- ディジタル画像処理 (2)
- 可視化 (1)
- 機械学習 (4)
- 統計 (1)