趣味は車輪の再発明♪

[opencv] cv::calcOpticalFlowFarneback - Farnebackのアルゴリズムで密なオプティカルフローを計算する (imgproc)


詳解 OpenCV ―コンピュータビジョンライブラリを使った画像処理・認識
Gary Bradski Adrian Kaehler
オライリージャパン
売り上げランキング: 25,746


■ たかみんつ / ソフト開発メモINDEX / OpenCVリファレンス(じぶん用) / 関数リファレンス /


概要

Gunnar Farneback のアルゴリズムを使用して密なオプティカルフローを求める。

void calcOpticalFlowFarneback(
    InputArray prev, InputArray next,
    InputOutputArray flow, double pyr_scale, int levels, int winsize,
    int iterations, int poly_n, double poly_sigma, int flags );

引数

cv::InputArraycv::InputOutputArrayは、const cv::Mat&cv::Mat&に読み替えて問題ありません。適切に変換されます。

各パラメータの説明は、モーション解析と物体追跡 ― opencv 2.2 documentationを参考にさせてもらいました。

引数 説明
prev cv::InputArray 最初の画像。8ビット,シングルチャンネルのグレイスケール画像
next cv::InputArray 2番目の画像。prev と同サイズで同じ型。
flow cv::InputOutputArray 計算されたフローが出力される。 サイズは prev と同じで、32ビット2チャンネルの行列(CV_32FC2)。
各画素の移動ベクトルのX,Y成分が、それぞれのチャンネルにfloat値で保持されます。
pyr_scale double それぞれの画像に対する画像ピラミッドを作るためのスケール (<1) を指定します.
pyr_scale=0.5 は,隣り合う各層において, 各層が前の層の半分のサイズになっている古典的画像ピラミッドを意味します.
levels int 最初の画像を含む,画像ピラミッドの層の数. levels=1 は,追加の層が作成されず,元画像だけが利用されることを意味します.
winsize int 平均化窓サイズ.この値が大きくなると,画像のノイズに対するアルゴリズムの頑健さが増し,高速なモーションを検出できる場合が多くなります. しかし,ボケたモーションフィールドを生成することになります.
iterations int 画像ピラミッドの各レベルにおける,アルゴリズムの反復数.
poly_n int 各ピクセルにおける多項式展開を求めるために利用される,ピクセル近傍領域のサイズ.
この値が大きくなると,画像はより滑らかなサーフェイスで近似され, アルゴリズムの頑健さは増します, しかし同時に,ボケたモーションフィールドも増加します. 一般的には, poly_n=5 あるいは 7 となります.
poly_sigma double 多項式展開の基底として利用される導関数を滑らかにするための, ガウス分布の標準偏差.
poly_n=5 ならば poly_sigma=1.1 , poly_n=7 ならば poly_sigma=1.5 が適当な値です.
flags int 処理フラグ.以下の値の組み合わせ:
OPTFLOW_USE_INITIAL_FLOW, OPTFLOW_LK_GET_MIN_EIGENVALS, OPTFLOW_FARNEBACK_GAUSSIAN

flagsの値

リテラル 説明
OPTFLOW_USE_INITIAL_FLOW 4 入力 flow をフローの初期推定値として利用します.
OPTFLOW_LK_GET_MIN_EIGENVALS 8 効果を検証できていません。
OPTFLOW_FARNEBACK_GAUSSIAN 256 オプティカルフロー推定のために,同サイズのボックスフィルタの代わりに winsize× winsize サイズのガウシアンフィルタを利用します.通常,このオプションによって処理速度は低下しますが,ボックスフィルタを利用する場合よりも正確なフローを求めることができます(また,同程度の頑健性を得るためには,ガウシアン窓の winsize をより大きくしなければいけません).

実際には静止している、光源や、金属面で光が反射している明るい領域で、持続的にフローが検出される場合があります。 このような状況で、OPTFLOW_USE_INITIAL_FLOWを指定すると、この誤検出が拡大していくような現象が見られます。

関連文書


Pythonプロフェッショナルプログラミング 第2版
秀和システム (2015-05-21)
売り上げランキング: 1,813


クラウドではじめる機械学習 Azure MLでらくらく体験
脇森浩志 杉山雅和 羽生貴史
リックテレコム
売り上げランキング: 2,081

実践Node.js プログラミング (Programmer's SELECTION)
Mike Cantelon Marc Harter T.J. Holowaychuk Nathan Rajlich
翔泳社
売り上げランキング: 40,213

■ たかみんつ / ソフト開発メモINDEX / OpenCVリファレンス(じぶん用) / 関数リファレンス /



RSS Feed Widget
[opencv] cv::calcOpticalFlowFarneback - Farnebackのアルゴリズムで密なオプティカルフローを計算する (imgproc)
(http://bicycle.life.coocan.jp/takamints/index.php/doc/opencv/function/calcOpticalFlowFarneback)
by Koji Takami ( email: vzg03566@gmail.com, GitHub: takamin )