Yolo 深圳
深セン
今すぐ参加
用語集

オプティカルフロー

コンピュータビジョンにおけるオプティカルフローの基礎を探求しましょう。Ultralytics において、運動ベクトルが動画理解を促進し追跡性能を向上させる仕組みを学びます。

オプティカルフローとは、観察者とシーンの間の相対運動によって引き起こされる、視覚シーン内の物体、表面、エッジの見かけの動きのパターンである。コンピュータビジョン分野において、この概念は動画シーケンス内の時間的ダイナミクスを理解する上で基礎となる。 二つの連続するフレーム間のピクセル変位を分析することで、 オプティカルフローアルゴリズムはベクトル場を生成する。 各ベクトルは特定の点における移動の方向と大きさを表す。 この低次元の視覚的手がかりにより、 人工知能システムは画像内の「何」だけでなく「どのように動いているか」を認識でき、 静止画分析と動画理解の間の隔たりを埋める。

オプティカル・フローのコア・メカニズム

オプティカルフローの計算は一般的に輝度不変性の仮定に依存しており、これは物体上のピクセルの輝度が、たとえ移動していても、フレーム間で一定に保たれると仮定するものである。アルゴリズムはこの原理を利用して、主に二つのアプローチで運動ベクトルを解く:

光フローとオブジェクト追跡

光学フローと物体追跡はしばしば併用されるが、両者を区別することが極めて重要である。光学フローは低次元の操作であり、瞬間的な画素の動きを記述するものである。物体の同一性や持続性を本質的に理解するものではない。

対照的に、物体追跡は特定のエンティティを特定し、時間経過にわたり一貫したIDを割り当てる高次タスクである。Ultralytics 統合されたような高度なトラッカーは、通常、物体検出によって対象物を見つけ、その後、フレーム間で検出結果を関連付けるために(時にオプティカルフローから導出される)運動手がかりを利用する。 オプティカルフローが「これらのピクセルは今どれほどの速度で動いているか」に答えるのに対し、トラッキングは「5番車の行方は?」に答える。

実際のアプリケーション

ピクセルレベルでの動き推定能力は、幅広い高度な技術を可能にします:

  • 自律走行車両とロボティクス: オプティカルフローは視覚オドメトリに用いられ、ロボットや自動車が環境に対する自身の動きを推定することを可能にする。 また、視野内の物体がどれほど急速に拡大または移動しているかを分析することで、 深度推定や障害物回避を支援する。
  • 動画安定化:カメラと編集ソフトはフローベクトルを用いてdetect 手ぶれをdetect 。この全体的な動きを補正することで、システムは映像をデジタル的に安定化できる。これはスマートフォンやアクションカメラなどの現代の民生用電子機器における標準機能である。
  • 動作認識スポーツ分析とセキュリティ分野では、ピクセルの時間的流れを分析することで、システムが複雑な人間の動作を識別するのに役立ちます。例えば、姿勢推定モデルにフローデータを組み込むことで、四肢の動きの速度に基づいて歩行と走行を区別することが可能です。
  • 動画圧縮: MPEG動画符号化などの規格は、動き推定に大きく依存している。 全フレームを保存する代わりに、コーデックは光学的流れ(動きベクトル)とフレーム間の差分(残差)を保存し、 ストリーミングや保存のためのファイルサイズを大幅に削減する。

実施例

以下の例は、コンピュータビジョン分野の標準ツールであるOpenCV を用いて密なオプティカルフローを計算する方法を示します。このコードスニペットは、連続する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で利用可能な追跡モードを検討すべきです。 Ultralytics YOLO11 および YOLO26で利用可能なトラッキングモードを検討すべきです。これらのモデルは動作解析の複雑さを抽象化し、交通監視から小売分析に至るタスク向けに、堅牢なオブジェクトIDと軌跡をすぐに提供します。

Ultralytics コミュニティに参加する

AIの未来を共に切り開きましょう。グローバルなイノベーターと繋がり、協力し、成長を。

今すぐ参加