目次 — 知りたいところから読む
前提と読み方

前提知識 ベクトル・行列とカメラ投影の基礎。

入門 · 原理・構成・判断のための解説です。

動画を一枚ずつ眺めても、画像のどの部分がどれだけ移動したかは直感的に分かりにくい。Optical Flow(オプティカルフロー)は、画素の明るさが次のフレームでどこへ移ったかをベクトルとして表す。自動運転の衝突予測、ドローンの自己位置推定、スポーツ解析、映像補間まで、動きが関わる処理の共通言語になる。

0. 30秒要約

  • フローは「物体そのものの速度」ではなく、画像上の見かけの移動である。カメラ運動、物体運動、深度が混ざる。
  • 輝度一定の式は1画素1本の方程式しか与えないため、局所窓の滑らかさ仮定、特徴点、正則化を追加して解く。
  • Lucas–Kanadeは小窓を一つの速度とみなす疎な追跡、Horn–Schunckは画像全体の滑らかさを使う密な推定である。
  • 大きな変位には画像ピラミッド、遮蔽・反射・ブラーには信頼度と外れ値処理が必要。ローリングシャッターでは行時刻の違いも補正する。
  • RAFTなど学習ベース手法は高精度だが、GPUメモリ、学習分布外、リアルタイム性、ライセンスを確認して採用する。

1. 輝度一定からフロー拘束式へ

図1 · ボタンで表示を切り替え
画像ピラミッドから密なOptical Flowを推定する流れ

図1 — 大きな動きは粗い画像ピラミッドで捉え、解像度を戻しながら残差を更新する。遮蔽や外れ値は別途信頼度として管理する。

静止した小さな模様がフレーム間で移動するなら、理想化して輝度が変わらない。

I(x,y,t)=I(x+u\Delta t,y+v\Delta t,t+\Delta t)

一次Taylor展開と\Delta t\to0により

I_xu+I_yv+I_t=0

を得る。未知の速度(u,v)が2つなのに式が1本しかないため、これだけでは解けない。エッジ上ではエッジに沿う方向の移動が見えず、平坦部では勾配がない。これがアパーチャ問題である。

2. Lucas–KanadeとHorn–Schunck

Lucas–Kanadeは、局所窓W内で速度が同じだと仮定し、次の二乗誤差を最小化する。

E(u,v)=\sum_{(x,y)\in W}w(x,y)\{I_xu+I_yv+I_t\}^2

勾配行列が十分に条件付けられたコーナーだけを採用し、前節の特徴点追跡で使ったピラミッドと反復更新を組み合わせる。OpenCVのcalcOpticalFlowPyrLKはこの系統の実装である。

Horn–Schunckは画像全体のフロー場を未知変数にし、輝度拘束と速度の滑らかさを同時に最小化する。

E(u,v)=\iint (I_xu+I_yv+I_t)^2+\alpha^2(|\nabla u|^2+|\nabla v|^2)\,dxdy

\alphaを大きくすると滑らかなフロー、小さくすると局所的な不連続を許す。物体境界を跨いで平滑化すると異なる物体の速度が混ざるため、ロバスト損失やエッジ保存正則化を使う。

3. 疎なフローと密なフロー

種類 推定点 代表手法 長所 弱点
疎(Sparse) コーナーなど数百〜数千点 LK、KLT 軽量、姿勢推定へ直結 低テクスチャの領域が空白
半密(Semi-dense) 勾配のある画素 Direct VO、Hessian法 幾何情報と計算量のバランス 画像全体は埋まらない
密(Dense) ほぼ全画素 Horn–Schunck、TV-L1、RAFT 動物体・流体・補間に有効 計算量、遮蔽境界の曖昧さ

Visual Odometryでは、疎な対応点を幾何計算へ渡す方が安定しやすい。一方、動く歩行者の領域をマスクしたり、映像補間で画素ごとの移動を使ったりするなら密なフローが必要になる。目的に対して必要な密度を先に決めることが、GPUを増やすより効果的である。

4. 大変位・遮蔽・明るさ変化への対策

一画素の微分近似は大きな移動で破綻する。画像を1/2、1/4、1/8へ縮小するGaussian pyramidを作り、粗いレベルで大きな変位を推定し、細かいレベルへアップサンプルして反復する。ピラミッドの段数を増やしすぎると小物体が消え、減らしすぎると探索範囲が足りない。

照明が変わると輝度一定が破れるため、局所正規化、勾配方向、ロバストなCharbonnier損失、相対的な色差を使う。動く物体の境界では、前フレームにはあった画素が次フレームでは隠れる(遮蔽)。遮蔽フラグ、forward-backward consistency、可視性マスクで無理に追跡しない。

5. 学習ベース:RAFTをどう読むか

RAFT(Recurrent All-Pairs Field Transforms)は、二枚の画像から全画素間の相関を計算し、反復的な更新演算子でフローを精密化する設計として知られる。従来法の「局所窓」より広い対応候補を持てるため、テクスチャが繰り返す場所や大きな変位で強い場合がある。

ただしベンチマークの平均エンドポイント誤差(EPE)が低いことと、現場のロボットで安全に使えることは別である。カメラのレンズ、露光、ローリングシャッター、土煙、夜間の照明が学習データと違えば、信頼度が落ちる。推論時間、入力解像度、量子化誤差、GPUドライバ、モデルのライセンスを含めて評価する。

6. カメラ運動と動的物体を分ける

フローをカメラ運動へ変換するには、カメラ内部行列Kと深度Zが必要になる。画像点\mathbf{x}の正規化座標で、カメラの並進\mathbf{t}と角速度\boldsymbol{\omega}によるフローは、概念的に

\mathbf{u}=\frac{1}{Z}A(\mathbf{x})\mathbf{t}+B(\mathbf{x})\boldsymbol{\omega}

と書ける。並進成分は1/Zに比例して遠近で変わり、回転成分は深度に依存しない。RANSACで単一の運動モデルへ一致するフローを背景とみなし、残差の大きい領域を動的物体候補にする。道路上の車や人が多い場合は、物体検出・セマンティックマスクと幾何推定を併用する。

7. 評価指標と再現可能な計測

真値フロー(u^*,v^*)がある場合、平均エンドポイント誤差は

EPE=\frac{1}{N}\sum_{i=1}^{N}\sqrt{(u_i-u_i^*)^2+(v_i-v_i^*)^2}

である。平均だけでなく、95パーセンタイル、遮蔽境界、低テクスチャ領域、速度別の誤差を分けて報告する。実機では真値が得にくいため、モーションキャプチャ、ロボットアームの既知軌道、合成画像、前後整合性、VOの再投影誤差を組み合わせる。

ログには、カメラ時刻、露光、解像度、ピラミッド段数、窓サイズ、反復回数、GPU/CPU、温度、フロー信頼度を残す。同じアルゴリズム名でもこれらの条件が違えば結果は比較できない。

8. まとめ

Optical Flowは、画素の見かけの動きを数式で拘束し、局所窓、全体の滑らかさ、画像ピラミッド、学習ベース相関で解く技術である。疎なLKは自己位置推定へ、密なフローは動的物体や映像処理へ向く。カメラ運動と物体運動、遮蔽、照明、ローリングシャッターを分けて考え、平均誤差だけでなく失敗条件を評価すると、実装の選択を誤りにくい。

理解を確かめる
画像上の動きは物体の実空間速度そのもの?

カメラの運動、物体の運動、奥行きが一緒に投影される。画素毎秒をメートル毎秒にするには追加の幾何情報が必要になる。

参考資料

現在の項目 · 8 / 19 · コンピュータビジョン入門

次に読む

前提を確認するオプティカルフロー Lab:2フレーム間の動きを追跡するシリーズの次の内容へ進むホモグラフィ変換入門 — 平面の対応を1枚の3x3行列で説明する同じ分野を別の観点から読む画像の明るさ・輝度 Lab — 露出、ガンマ、クリッピングを比較