
ゆうき( @BASEBALLY15 )です^^
動画内から特徴点を抽出する方法を知りたいのですが,何かいい方法はないでしょうか?
そうですね^^
それでは,ORBを使って特徴点を抽出してみてはどうですか?
OpenCVを使うと,数行のコードでORBを使うことが出来ますよ^^
そうなんですか?
ぜひ,教えてください!
いいですよ^^

ORBって何?
ORB(Oriented FAST and Rotated BRIEF)とは,特徴点や特徴量を抽出するアルゴリズムです.
回転・拡大・移動の全てにおいてロバストネス(≒強い特性)があります.
ORBは,コーナーのみを特徴点として検出する手法のFAST(Features from Accelerated Segment Test)とバイナリコードを生成する特徴記述手法のBRIEF(Binary Robust Independent Elementary Features)で成り立っています.
OpenCVでORBを使った結果を見せて!
それでは,実際にOpenCVでORBを使った結果をお見せしたいと思います.
こちらは,木々が映っている動画からORBによって特徴点を抽出したものです.
木と背景の境界や枝の部分で特徴点が抽出されていることが分かると思います.
それでは,早速ORBによる特徴点を抽出する方法をご紹介します⤵
OpenCVでORBアルゴリズムを使ってみた!
まずは,ORBアルゴリズムを使って特徴点を抽出し,動画に抽出した特徴点を反映するまでの流れを載せておきます.
2. ORBで特徴点と特徴量を抽出
3. 動画(.mp4)に特徴点を書き込み
4. 結果の動画を表示
あと,開発環境も載せておきます.
言語 :Python 3.8
ライブラリ:OpenCV 4.4.0
プログラム
#OpenCVをインポート
import cv2
#動画から入力を開始(動画ファイルは各自で用意してください.)
cap = cv2.VideoCapture("Forest - 49981.mp4")
while(True):
#画像を取得
_, img = cap.read()
# ORB検出器を作る
orb = cv2.ORB_create()
# ORBでキーポイントを計算
kp = orb.detect(img,None)
# ORBで特徴記述子を計算
kp, des = orb.compute(img, kp)
# キーポイントの位置だけを描画、サイズと向きは描画しない
img2 = cv2.drawKeypoints(img,kp,None,color=(0,0,255), flags=0)
#映像として表示
cv2.imshow("ORB-SLAM", img2)
#もし,エンターキーが押されたら,終了
if cv2.waitKey(1)==13:
break
cap.release()#カメラを開放
cv2.destroyAllWindows()#ウィンドウを破棄
終わりに
今回は,OpenCVでORBアルゴリズムを使ってみました.
ORBアルゴリズムについて調べていく中で,自律走行型のロボットなどで活用されていてるということを知り,更に興味が沸いてきました.
今後さらにORBについて勉強し,ORBに関する記事やコード等を紹介していこうと思います^^
それでは・・・
Q &A
参考文献
・hitomatagi,OpenCV3とPython3で特徴点を抽出する,(Accessed Oct. 24th).
・OpenCV,ORB (Oriented FAST and Rotated BRIEF),(Accessed Oct. 24th).
・竹中浩貴:ORB 特徴を用いた画像の一部の類似性に基づく画像検索,高知工科大学,2015,学士学位論文.