オプティカルフローの概要

実世界を撮影した動画の多くでは、パラメトリックモーションの2次元モデル以外の「3次元的な動き」が数多く個別に発生してくるので、平行移動や回転などの2次元運動モデルだけを動画にあてはめての動き推定には、限界あります。また、横にまっすぐ物体(もしくはカメラ)が進んでいるような、パラメトリックモーションだけで動きをほぼ表現できる動画でも、その部分以外ではピクセルごとに個別の動きが発生していたりするので、全体的に平行移動などのモーションモデルをあてはめての動き推定をするだけでは限界があります。

そこで、「画素ごと独立した移動量パラメータを割り当てる」という動きモデルである「オプティカルフロー」を用いた動き推定が1980年ごろに提案され、それ以降幅広く用いられるようになりました。

例えば動画のサイズが640×480画素だとすると、2枚目の画像において予測された640×480個の各画素における「フローベクトル」から構成される「フレーム間の、画素毎の2次元移動度ベクトルのフィールド」がオプティカルフローです。

オプティカルフローは、動画中の隣り合うフレーム「画像1」と「画像2」の間で、画像1の各画素が画像2どの画素に移動したのか(フローベクトル)を、全体の各画素の周辺の画素値の様子と周辺のフローベクトル量を考慮しながら、まとめてオプティカルフローの各フローベクトルを予測する技術です。

図:オプティカルフロー

オプティカルフローの可視化

先程の図の右下に2つ示したように、コンピュータビジョンではオプティカルフローの可視化には、主に2つの流儀があり、それぞれの可視化の長所に合うように使い分けられています。各画素に推測されたフローベクトルの方向と大きさを「矢印」による可視化と、色の違いと強さによりフローベクトルの方向と大きさを表した「色符号化」による可視化が存在します。以下の動画が矢印で可視化したオプティカルフローの例です。

一方、以下の動画は色符号化によるオプティカルフロー可視化の例です。

色符号化の方が、色マップで表現しているので、オプティカルフローを推測した元の動画に半透明で重ねて同時にフローを表示できるメリットはあります(この動画では別々に表示されてはいますが)。一方、矢印による可視化の方が、各フローベクトルの移動量が矢印の長さと方向から、直感的に確認しやすいという利点があると言えます。

パラメトリックモーション推定が仮定できる動きとできない動き

動画で生じる動きには、全体的な「グローバルな動き」と、各小領域ごとに独立して生じる「ローカルな動き」があります。グローバルな動きとは、画面全体で同じように生じる統一した動きのことです(例:カメラの平行移動や回転などの動き量。または、カメラは固定されている時に、同一方向に動く車や動物の群れの全体で同じをする際の平行移動量など)。これはすでに述べたパラメトリックモーションであり、フレーム間の対応付けからパラメトリックモーションの移動量を予測しやすそうですね。今回紹介するデジタルビデオ安定化技術では、カメラの手ぶれを補正するためには、まずカメラの動きに相当しているグローバルな動きをしっかり推定できることが必要で、次に、動画中を動いている車や人間などのブレを補正したいですよね(このあと紹介する「特徴点ベースの手法」により、これらはパラメトリックモーションとして推定できます)。

一方、動画中には、ローカルな動きの中でもパラメトリックモーションを仮定できない動きもあります。そういったものに対応して、各画素が「独立に」動いていると見なし、画素毎の移動ベクトルを計算する密な動き推定が、「密な」オプティカルフローです(このあと紹介する「変分法ベースの手法」では、このようにパラメトリックモーションを仮定できない動きも推定できます)。