2017-06-11 - 2018-05-30 (update) |
|
|
*オプティカルフロー とは
画像の各部の動きを表すベクトルです.動画像から物の動きを調べるときに利用します.図1は,2枚の画像間のオプティカルフローを計算した例を示します.
[img:tnpg]
{{small:図1 2枚の画像とそのオプティカルフロー 線の長さは移動量,色は方向を表します}}
[1]の文献の方法(Lucas-Kanade法)は,オプティカルフローを計算する代表的なアルゴリズムです.そこでは,画像の勾配を手掛かりに,各部のオプティカルフローを計算します.
{{small:[1]BD.Lucas, T.Kanade, "An iterative image registration technique with an application to stereo vision", Proceedings of Imaging Understanding Workshop, 1981}}
{{small:[link:http://users.utcluj.ro/~tmarita/HCI/C5-extra/Optical_Flow_Lukas-Kanade.pdf] }}
*サンプルコード (C++)
ライブラリ:[link:simplesp]
サンプルコード:simplesp/sample/cv/opticalflow
webカメラで撮影中の画像からオプティカルフローを推定します.
*アルゴリズム
ここでは,Lucas-Kanade法のアルゴリズムを説明します.
**1次元の場合
まず,2次元の画像を考える前に,図2に示す1次元の信号を考えます.
[img:gbrc]
{{small:図2 1次元の信号とその変位}}
図2の{$t_0$},{$t_1$}は信号を観測した時刻,{$\Delta x$}は信号の位置の変化を表します.ここで,ある位置{$p$}について,各時刻の信号の数値を{$I(p,t_0)$},{$I(p,t_1)$}とおきます.また{$I(p,t_0)$}の勾配(傾き)を{$\frac{\partial I(p,t_0)}{\partial x}$}とおくと,次の近似式を設定できます.
{$$\frac{\partial I(p,t_0)}{\partial x} \Delta x \cong I(p,t_0) - I(p,t_1)$$}
この式を,{$\Delta x$}について解くことで,2つの信号の位置の変化を求めることができます.
**2次元の画像の場合
次に,2次元の画像について考えます.1次元の例を2次元に拡張して考えると次の近似式を設定できます.
{$$\frac{\partial I(p,t_0)}{\partial x} \Delta x + \frac{\partial I(p,t_0)}{\partial y} \Delta y\cong I(p,t_0) - I(p,t_1) \tag{1}$$}
ここで,{$p$}は画像上のある画素の位置を表します.{$\frac{\partial I(p,t_0)}{\partial x}$}と{$\frac{\partial I(p,t_0)}{\partial y}$}は,各軸に対する画像の輝度値の勾配です.この式で,未知数は{$\Delta x$}と{$\Delta y$}の2つで,各軸における位置の変化(オプティカルフロー)を表しています.しかし,1つの式に対して,未知数が2つあるため解を求めることができません.
ここで,注目する位置{$p$}の周囲の画素も,同じ解({$\Delta x$},{$\Delta y$})であると仮定します.すると,周囲の画素についても同様に近似式を設定でき,式を増やすことができます.そして,その連立方程式の最小二乗解を計算することで,{$\Delta x$}と{$\Delta y$}を求めることができます.
{$\frac{\partial I(p_1,t_0)}{\partial x} \Delta x + \frac{\partial I(p_1,t_0)}{\partial y} \Delta y\cong I(p_1,t_0) - I(p_1,t_1)$}
{$\frac{\partial I(p_2,t_0)}{\partial x} \Delta x + \frac{\partial I(p_2,t_0)}{\partial y} \Delta y\cong I(p_2,t_0) - I(p_2,t_1)$}
{$\vdots$}
{$\frac{\partial I(p_n,t_0)}{\partial x} \Delta x + \frac{\partial I(p_n,t_0)}{\partial y} \Delta y\cong I(p_n,t_0) - I(p_n,t_1)$}
位置{$p$}の周囲の画素の位置を{$p_1,p_2,\cdots, p_n$}としています.通常,位置{$p$}を中心としたブロック内の画素について式を設定します.
**補足
ある程度勾配のある位置でなければ,正確にオプティカルフローを求めることができません.そのため,まずは画像上から勾配の強いコーナーを検出し,その位置についてのみオプティカルフォローを計算するアプローチが一般的です.
>> ご意見・ご質問など お気軽にご連絡ください.info