プログラミング言語Pythonを使用して、特徴抽出を行います。
Pythonを触ったことすらない方も取り組めるように、環境準備から行います。
環境として必要なものは下記の通りです。
下記の環境準備ができている方は、「特徴点を結ぶ」からご覧ください。
※コマンドライン入力を行う際は、
WindowsならPowerShell、Macなら端末もしくはiTermをご活用ください。
python3
pip3
numpy
cv2+contrib
環境準備
Python3をインストールする
以下のサイトでダウンロードしてください。
Download Python | Python.org
ダウンロードしたパッケージインストーラに従い、インストール。
「端末」を起動しコマンドラインに
python3 --version
と入力し
Python 3.6.6
このように出力されれば無事インストールできています。
※バージョンはダウンロードした際のバージョンによって異なります。
pip3
pip3はpython3をインストールした時に一緒にインストールされています。
どの場所にあるのかを調べたい方はコマンドラインにて
which pip3
と入力してください。入っていれば何かしらディレクトリが表示されます。
numpyのインストール
pip3があれば各モジュールをインストールすることができます。コマンドライン上で以下のように入力してください。
pip3 install numpy
その結果、
Successfully installed numpy-1.15.0
のようにコマンドライン上で表示されていればうまくインストールできています。
特徴点を結ぶ
環境の準備が整ったので早速特徴点を結ぶプログラムを作りましょう。
コード
準備が完了したので、早速コードを書いていきましょう。
import numpy as np import cv2 img1 = cv2.imread('saturn.png',0) img2 = cv2.imread('solar.png',0) #特徴抽出機の生成 detector = cv2.xfeatures2d.SIFT_create() #kpは特徴的な点の位置 destは特徴を現すベクトル kp1, des1 = detector.detectAndCompute(img1, None) kp2, des2 = detector.detectAndCompute(img2, None) #特徴点の比較機 bf = cv2.BFMatcher() matches = bf.knnMatch(des1,des2, k=2) #割合試験を適用 good = [] match_param = 0.5 for m,n in matches: if m.distance < match_param*n.distance: good.append([m]) #cv2.drawMatchesKnnは適合している点を結ぶ画像を生成する img3 = cv2.drawMatchesKnn(img1,kp1,img2,kp2,good, None,flags=2) cv2.imwrite("shift_solar.png", img3)
下記サイトのコードを参考にいたしました。
ネットサーフィンの壺
※ディレクトリはどこでも良いですが、画像があるディレクトリとプログラムがあるディレクトリは同じにしてください。
※同じにしたくない場合は、絶対パスで指定してください。