グンナー・Farnebackアルゴリズム
论文:多項式展開上の2フレーム動き推定に基づきます
期刊:画像解析第13回スカンジナビア会議(2003 SCIA)
作者:グンナー・Farnebäck(コンピュータビジョン研究室、リンショーピング大学、SE-581 83リンチェピング、スウェーデン)
注:[email protected] http://www.isy.liu.se/cvl/
まず、多項式展開
アイデアは、多項式で表される近傍の各画素についての多項式を展開することです。
(1)
Aが対称行列であり、bはベクトルであり、Cは定数です。係数は、近傍の信号値の重み付き最小二乗法によると推定されます。決定論と適用として知られている2つの成分の重量、。隣接する領域に結合された決定論的信号値、近傍の重量の位置の近傍の点の相対的な重みの適合性を決定するために、ポイントに応じ。
第二に、変位見積り
各近傍は、多項式を近似するために使用することができますので、翻訳後に何が起こるか多項式の変化の最初の分析ので。以下の二次多項式を考えてみましょう:
(2)
単位を取得するため、全体的な変位信号d :
(3)
以下の二次多項式を提供:
(4)
(5)
(6)
ときに時間が正則行列であり、それを解決することができます。
(7)
(8)
実際には、信号の全体の欠如は多項式として表され、グローバル並進これら二つの画像信号は、上記式(7)は、まだ実際の信号に適用されます。
ここでは地元の多項式とグローバル多項式近似(2)。次いで、2枚の画像は多項式展開係数を対応する第一の画像を有する、及び第二の画像と同じように。理想的には、式に従って(4)が持っているはずですが、実際に近似を解決する必要があります。
(9)
(10)
そして、代わりにグローバル変数の前の:
(11)
問題の隣人推定を解決するために始めましょう。式(11)によれば、各画素の値を計算するが、そうするために、計算の膨大な量を考慮すると、明らかに現実的ではありません。変位プロセスはゆっくりと行われると仮定すると、それは可能な限り小さくする必要がある近所の検索および式(11)で行を見つけます:
(12)
ここで設定した重み関数に対応する画素の、最小二乗法により得ることができます。
(13)
第三に、変位場のパラメータ
アルゴリズムのロバスト性を向上させるために、いくつかの移動パターンについてパラメトリックモデルを確立しなければなりません。以下の2次元運動モデルは、8つのパラメータで構成さ:
(15)
それは式のように表すことができます。
(16)
(17)
(18)
式(12)に、重み付き最小二乗問題を取得します:
(19)
今で最小二乗法でインデックスに画素近傍の座標、描画することができます。
(20)
ここで以前のように計算されたと、その後使用変位の加重平均が得られる作ります。
第四に、事前情報の利用
これまでの変位に加えて、同じ座標での2つのローカル多項式の信号が同じであるという問題が依然として存在します。この拡張は、部分多項式モデルであるから、それは空間的変位によって変化するので、エラー(11)を導入することができ、そしてエラーは、変位の増加に伴って増加します。だからここ先験的変位情報、すなわち、第1比較信号組み込ま多項式展開の及び第二の信号、前記多項式展開を先験的変位のみニーズを計算するように、値の整数切り上げ変位の演繹的推定に基づいて真の値。
あるいは(9)及び(10)上記のように:
(21)
(22)
その中でも、
(23)
反復およびマルチスケールの変位の推定第五に、
アルゴリズムに事前に使用して、変位フィールドは、反復の閉ループおよび利点であってもよいです。良好に順番に変位推定の精度を向上させることができる相対変位が小さいこと先験的推定手段を有しています。ここでは、2つの異なる方法、推定変位推定の反復とマルチスケールの変位を考えます。
次のステップの前変位として両方の方法、変位の反復推定ステップ、です。明確なメッセージが存在しない限り、最初の工程は、通常先験的変位フィールドは、ゼロに初期化されます。第一の方法では、すべての反復において同じ多項式展開係数、および一度だけ計算される必要があります。これは、変位の最初の反復が(前の変位に対して)大きすぎると、変位出力の向上が期待できず、反復は、その意味を失う、という問題です。粗いスケールで分析することにより、我々は、過度の変位の問題を軽減することができます。この手段は、私たちは多項式展開への高い適応性を持っていること。その結果、推定アルゴリズムは、大きな変位を扱うことができるが、精度が低下します。
マルチスケール変位推定方法、段階的詳細化の規模によって、より多くの正確な見積もりを取得、その後、変位の荒いが、合理的な見積もりを取得するには、粗いスケールから始まります。そのような欠点は、各スケールのための多項式展開係数を再計算する必要があるが、このコストは、スケーリングの間にサブサンプリングすることによって低減することができます。
異常データセットにおけるデモFarnebackオプティカルフロー法UCSD
実験環境:Win10 | Pythonの3.7.3 | OpenCVの4.1.0
テストコード:
def draw_flow(im, flow, step=16):
# 在间隔分开的像素采样点处绘制光流
h, w = im.shape[:2]
y, x = mgrid[step/2:h:step, step/2:w:step].reshape(2, -1).astype(int)
fx, fy = flow[y, x].T
# 创建线的终点
lines = vstack([x, y, x+fx, y+fy]).T.reshape(-1, 2, 2)
lines = int32(lines)
# 创建图像并绘制
vis = cv2.cvtColor(im, cv2.COLOR_GRAY2BGR)
for (x1, y1), (x2, y2) in lines:
cv2.line(vis, (x1, y1), (x2, y2), (0, 255, 0), 1)
cv2.circle(vis, (x1, y1), 1, (0, 255, 0), -1)
return vis
# 省略N行代码......
# 提取第一帧
first_rgbframe = cv2.imread(frame_path + frames[0], 1)
del frames[0]
prev_gray = cv2.cvtColor(first_rgbframe, cv2.COLOR_BGR2GRAY)
for frame_i in frames:
rgbframe = cv2.imread(frame_path + frame_i, 1)
gray = cv2.cvtColor(rgbframe, cv2.COLOR_BGR2GRAY)
# 计算流
flow = cv2.calcOpticalFlowFarneback(prev_gray, gray, None, 0.5, 3, 15, 3, 5, 1.2, 0)
prev_gray = gray
drawImg = draw_flow(gray, flow)
cv2.imwrite(frameFB_path + frame_i, drawImg)
# 画出流矢量
cv2.imshow('Optical flow', drawImg)
if cv2.waitKey(10) == 27:
break
time.sleep(0.1)
結果:
UCSDped1 \テスト\ Test014
UCSDped2 \テスト\ Test005
上記群集または自転車/車両が通過する場所を確認することができ、異常でデータセットの2つのテストセグメントUCSDであり、緑色のドットは、リンケージを伴うであろう。
付録:
データセットリンク:UCSD異常検出データセット
OpenCN - calcOpticalFlowFarneback()のパラメータは説明しました:
PREV:入力画像の前に単一のチャネル8
次:シングルチャンネルの入力画像後8
フロー:算出した入力画像の一致図CV_32FC2におけるオプティカルフローの大きさと種類と
pyr_scale:建設画像スケーリング係数(<1)ピラミッドの; =係数等0.5はない次のレベルでの画像の半分のサイズであり、典型的なピラミッドモデルであります
レベル:ピラミッド層1の階層レベルは、直接入力画像の追加のレベルを示していません
winsize:平均ウィンドウのサイズ、感度の低い画像ノイズのために、より大きなウィンドウは、より迅速なキャプチャ動作することができるが、操作がより不足しているフィールドを生成します
反復:反復の各ピラミッド階層アルゴリズム
poly_n:近傍の画素の大きさは、近隣の多項式展開を行うために、より大きな近傍を、より多くの画像を平滑化、アルゴリズムは、標準参照値5または7より堅牢でよりぼやけスタジアム
poly_sigma:差の基本的なガウス導関数の関数としての標準的な平滑化多項式展開; poly_n = 5、1.1 poly_sigmaに設定されてもよい。poly_n = 7、提供されてもよいpoly_sigma = 1.5
フラグは次の2つのフラグのいずれかに設定することができます
OPTFLOW_USE_INITIAL_FLOW:オプティカルフロー推定の初期値として入力を使用して、図オプティカルフロー
OPTFLOW_FARNEBACK_GAUSSIAN:winsize×winsizeフィルタの代わりに同じサイズカセットオプティカルフロー推定のガウシアンフィルタを用いて、典型的には、このオプションは、より低い速度でフィルタカートリッジZストリームより正確提供する。一般的には、ガウス窓はwinsizeべきロバスト性の同じレベルを達成するために大きな値を設定します。
OpenCVのオリジナルの公式の説明:公式文書にジャンプします
参考文献:
1.グンナーFarnebäck。多項式展開上の2フレーム動き推定に基づく画像解析の[C] // 13日スカンジナビア会議(SCIA 2003)。シュプリンガー・フェアラーク、2003。
2. OpenCVの公式文書