Optical Flow
コンピュータビジョンにおけるオプティカルフロー(光学流)の基礎を探求します。モーションベクトルがどのようにビデオ理解を促進し、Ultralytics YOLO26におけるトラッキングを強化するかを学びましょう。
オプティカルフローとは、観察者とシーンの相対的な動きによって引き起こされる、視覚シーン内の物体、表面、およびエッジの見かけの動きのパターンです。コンピュータビジョンの分野において、この概念はビデオシーケンス内の時間的ダイナミクスを理解するための基礎となります。連続する2つのフレーム間でのピクセルの変位を解析することで、オプティカルフローアルゴリズムは各ベクトルが特定の地点の動きの方向と大きさを表すベクトル場を生成します。この低レベルな視覚キューにより、人工知能システムは画像内に何があるかだけでなく、それがどのように動いているかを認識できるようになり、静止画解析と動的な動画理解の間のギャップを埋めることができます。
Link to this sectionオプティカルフローの核心メカニズム#
オプティカルフローの計算は一般的に、輝度恒常性の仮定に基づいています。これは、物体上のピクセルの強度が、移動中であってもフレーム間で一定に保たれるという考え方です。アルゴリズムはこの原則を利用して、主に2つのアプローチでモーションベクトルを算出します。
- スパースオプティカルフロー: この手法は、特徴抽出によって検出されたコーナーやエッジなどの特定の重要な特徴サブセットに対してモーションベクトルを計算します。Lucas-Kanade法のようなアルゴリズムは計算効率が高く、特定の関心点を追跡するだけで十分なリアルタイム推論タスクに最適です。
- デンスオプティカルフロー: このアプローチは、フレーム内のすべてのピクセルに対してモーションベクトルを計算します。計算負荷は大幅に高くなりますが、画像セグメンテーションや構造解析のような詳細なタスクに不可欠な包括的な動きのマップを提供します。現代のディープラーニングアーキテクチャは、大規模なデータセットから複雑な動きのパターンを学習することで、デンスフロー推定において伝統的な数学的手法を上回ることがよくあります。
Link to this sectionオプティカルフローと物体追跡の比較#
これらは併用されることが多いですが、オプティカルフローと物体追跡を区別することは重要です。オプティカルフローは瞬間的なピクセルの動きを記述する低レベルな操作であり、それ自体で物体の同一性や永続性を理解するものではありません。
対照的に、物体追跡は特定のエンティティを特定し、時間の経過とともに一貫したIDを割り当てる高レベルなタスクです。Ultralytics YOLO26などに統合されている高度なトラッカーは、通常物体検出を実行して物体を見つけ、その後に(時にオプティカルフローから派生した)動きのキューを使用してフレーム間での検出結果を関連付けます。オプティカルフローは「今このピクセルがどのくらいの速さで動いているか」に答え、追跡は「車#5はどこへ行ったか?」に答えます。
Link to this section実社会での応用#
ピクセルレベルで動きを推定する能力は、幅広い高度なテクノロジーの原動力となっています。
- 自動運転車とロボット工学: オプティカルフローは視覚的オドメトリに使用され、ロボットや自動車が環境に対する自身の動きを推定することを可能にします。また、視野内の物体がどれほど急速に拡大または移動しているかを解析することで、深度推定や障害物回避を支援します。
- ビデオスタビライゼーション(手ブレ補正): カメラや編集ソフトウェアは、フローベクトルを使用して意図しないカメラの揺れを検出します。この全体的な動きを補正することで、システムはデジタル的に映像を安定化させることができます。これは、スマートフォンやアクションカメラなどの現代の家電製品における標準機能です。
- アクション認識: スポーツ解析やセキュリティの分野では、ピクセルの時間的な流れを解析することで、システムが人間の複雑な動作を識別するのに役立ちます。例えば、姿勢推定モデルは、四肢の動きの速度に基づいて人が歩いているか走っているかを区別するために、フローデータで補強することができます。
- ビデオ圧縮: MPEGビデオコーディングのような標準規格は、動き推定に大きく依存しています。すべての完全なフレームを保存する代わりに、コーデックはオプティカルフロー(モーションベクトル)とフレーム間の差分(残差)を保存することで、ストリーミングや保存のためのファイルサイズを大幅に削減します。
Link to this section実装例#
以下の例は、コンピュータビジョンエコシステムの標準的なツールであるOpenCVライブラリを使用してデンスオプティカルフローを計算する方法を示しています。このスニペットではFarnebackアルゴリズムを使用して、連続する2フレーム間のフローマップを生成します。
import cv2
import numpy as np
# Simulate two consecutive frames (replace with actual image paths)
frame1 = np.zeros((100, 100, 3), dtype=np.uint8)
frame2 = np.zeros((100, 100, 3), dtype=np.uint8)
cv2.rectangle(frame1, (20, 20), (40, 40), (255, 255, 255), -1) # Object at pos 1
cv2.rectangle(frame2, (25, 25), (45, 45), (255, 255, 255), -1) # Object moved
# Convert to grayscale for flow calculation
prvs = cv2.cvtColor(frame1, cv2.COLOR_BGR2GRAY)
next = cv2.cvtColor(frame2, cv2.COLOR_BGR2GRAY)
# Calculate dense optical flow
flow = cv2.calcOpticalFlowFarneback(prvs, next, None, 0.5, 3, 15, 3, 5, 1.2, 0)
# Compute magnitude and angle of 2D vectors
mag, ang = cv2.cartToPolar(flow[..., 0], flow[..., 1])
print(f"Max motion detected: {np.max(mag):.2f} pixels")生のピクセルの動きではなく物体の永続性を必要とする高レベルなアプリケーションについては、Ultralytics YOLO11およびYOLO26で利用可能なトラッキングモードを検討してください。これらのモデルは動き解析の複雑さを抽象化し、交通監視から小売業向け解析に至るまでのタスクに対して、堅牢な物体IDと軌跡をすぐに提供します。






