コンピュータビジョンにおけるオプティカルフローの基礎を探求しましょう。Ultralytics において、運動ベクトルが動画理解を促進し追跡性能を向上させる仕組みを学びます。
オプティカルフローとは、観察者とシーンの間の相対運動によって引き起こされる、視覚シーン内の物体、表面、エッジの見かけの動きのパターンである。コンピュータビジョン分野において、この概念は動画シーケンス内の時間的ダイナミクスを理解する上で基礎となる。 二つの連続するフレーム間のピクセル変位を分析することで、 オプティカルフローアルゴリズムはベクトル場を生成する。 各ベクトルは特定の点における移動の方向と大きさを表す。 この低次元の視覚的手がかりにより、 人工知能システムは画像内の「何」だけでなく「どのように動いているか」を認識でき、 静止画分析と動画理解の間の隔たりを埋める。
オプティカルフローの計算は一般的に輝度不変性の仮定に依存しており、これは物体上のピクセルの輝度が、たとえ移動していても、フレーム間で一定に保たれると仮定するものである。アルゴリズムはこの原理を利用して、主に二つのアプローチで運動ベクトルを解く:
光学フローと物体追跡はしばしば併用されるが、両者を区別することが極めて重要である。光学フローは低次元の操作であり、瞬間的な画素の動きを記述するものである。物体の同一性や持続性を本質的に理解するものではない。
対照的に、物体追跡は特定のエンティティを特定し、時間経過にわたり一貫したIDを割り当てる高次タスクである。Ultralytics 統合されたような高度なトラッカーは、通常、物体検出によって対象物を見つけ、その後、フレーム間で検出結果を関連付けるために(時にオプティカルフローから導出される)運動手がかりを利用する。 オプティカルフローが「これらのピクセルは今どれほどの速度で動いているか」に答えるのに対し、トラッキングは「5番車の行方は?」に答える。
ピクセルレベルでの動き推定能力は、幅広い高度な技術を可能にします:
以下の例は、コンピュータビジョン分野の標準ツールである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と軌跡をすぐに提供します。