Pythonによるデータ分析・機械学習ブログ

Pythonによるデータの前処理・グラフ化、機械学習、統計解析、画像処理、Webスクレイピング、自然言語処理の基礎について紹介していきます。

MENU

【第14回】OpenCVを用いた画像内の特徴点マッチング

はじめに

OpenCVとはインテルが開発・公開したオープンソースのコンピュータビジョン向けライブラリで、画像処理・画像解析および機械学習等の機能を持つC/C++JavaPythonMATLAB用ライブラリとなっています。

OpenCVには以下のような機能があります。

  • グレースケール化
  • 2値化
  • 輪郭の検出
  • 顔検出
  • ノイズ除去
  • テンプレートマッチング

画像処理や動画処理をしていると、複数の画像の重なりを考慮して重ね合わせたり、姿勢推定などをしたくなります。その際に活躍するのが画像内の特徴点を抽出してマッチングをする処理です。

本記事ではOpenCVを用いた画像内の特徴点マッチングの手法を紹介します。

SAMURAI TERAKOYA

 

1. 本記事で使用する画像

本記事で使用する画像は以下の図です。

 

2. 特徴点マッチング

2.1 特徴点マッチングの全体的な流れ

以下のコードではcv2.AKAZE.create()で特徴検出をしてcv2.BFMatcher()で特徴点マッチングを行い、その結果をcv2.drawMatches()を用いて描画しています。

出力結果は以下の様になります。それぞれの特徴点が対応しているのがわかると思います。

 

2.2 特徴検出

 まずは画像から特徴を検出する特徴検出器を生成します。本記事ではcv2.AKAZE_create()を用いてAKAZE特徴検出器を生成します。

 特徴検出器が生成できたら、detectAndCompute()を用いて画像から特徴点の座標情報kpと特徴量記述子descを検出します。特徴点の座標情報はいくつかデータがまとまっていますので、一つ一つ分割しています。

 

特徴点を画像に描画するには、特徴点座標kpを用います。

特徴点を描画した結果は以下の様になります。

 

2.3 マッチング

 特徴量のマッチングを行うマッチング器を生成します。本記事ではcv2.BFMatcher(cv2.NORM_HAMMING)を用いてマッチング器matcherを生成します。さらに、matcher.match()でマッチした特徴点の関係性が格納されています。

 

2.4 マッチング描画

マッチングした特徴点の描画についてはcv2.drawMatches()を用います。

 

オススメ書籍

Pythonで始めるOpenCV4プログラミング

実践OpenCV4 for Python 画像映像情報処理と機械学習

 

スキル修得&転職

 近年、DXの進展に伴うデジタル人材の需要の高まりに追いついていない状況が続いていると経済産業省がホームページで記載している通り、DX人材、IT人材が不足しているのが現状です。さらにコンピュータの性能向上やAI技術の発展により、よりDX人材、IT人材の需要が高まってきます。さらには、今後の長期間安定して職がある業種とも考えられます。

以下の求人では、IT業界の転職や、IT未経験だけどIT人材を志望する就活を支援してくれます。無料で会員登録もできるので、まずは登録だけでもして様子を見てみてはいかがでしょうか?

▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼

▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲

 

おわりに

本記事ではOpenCVを用いた画像内の特徴点マッチングの手法を紹介しました。こちらを用いて類似性などで活用していたければ幸いです。

 

参考ページ:

1) 画像の特徴点を抽出する - Qiita

2) 【Python】OpenCVで特徴量マッチング – ORB, SIFT, FLANN

3)  OpenCV - 特徴点マッチングを行う方法について - pystyle