Farnebackの仕組み
Farnebackの実行とパラメータ調整
Farnebackの実行
Farnebackの実行にあたってはOpenCVを用いることが多いです。OpenCVにはPythonバインディングも用意されており、Pythonからも使用することができます。以下ではPythonを用いた実行について確認します。
import cv2 as cv
image1_gray = cv.cvtColor(image1, cv.COLOR_BGR2GRAY)
image2_gray = cv.cvtColor(image2, cv.COLOR_BGR2GRAY)
flow = cv.calcOpticalFlowFarneback(image1_gray, image2_gray, None, 0.5, 3, 15, 3, 5, 1.2, 0)
Farnebackは上記のようなPython実装を用いることで実行することができます。image1
とimage2
はRGBの3チャネルを持った画像を読み込んだものであり、Farnebackのアルゴリズムによってimage1
からimage2
の変化を各ピクセル毎に(dense)縦横の2Dのベクトルで出力します。
ライブラリのインストールにあたってはpip install opencv-python
を実行することで入手することができます。
Farnebackのパラメータ調整
calcOpticalFlowFarneback
の実行にあたっては下記のような引数を用います。
メソッド | 概要 |
---|---|
prev |
Source(変化する前の画像) |
next |
Target(変化後の画像) |
flow |
計算されたflow (None を用いることで省略可能) |
pyr_scale |
画像のピラミッドを作成する際の小さくする比率 |
levels |
作成するピラミッドの数(元画像を含んで数える) |
winsize |
averagingに用いるWindowのサイズ |
iterations |
それぞれのピラミッドで行う繰り返し演算の数 |
poly_n |
|
poly_sigma |
|
flags |
前項のコードは下記のようにパラメータを明示的に指定して実行することもできます。
import cv2 as cv
image1_gray = cv.cvtColor(image1, cv.COLOR_BGR2GRAY)
image2_gray = cv.cvtColor(image2, cv.COLOR_BGR2GRAY)
flow = cv.calcOpticalFlowFarneback(prev=image1_gray, next=image2_gray, flow=None, pyr_scale=0.5, levels=3, winsize=15, iterations=3, poly_n=5, poly_sigma=1.2, flags=0)