【画像処理】パーティクルフィルタによる物体追跡の原理

この記事では、画像処理におけるパーティクルフィルタによる動体追跡の原理について解説します。

パーティクルフィルタとは

パーティクルフィルタ(Particle filter)とは、確率分布による時系列データの予測手法です。
粒子フィルターや逐次モンテカルロ法とも呼ばれます。
パーティクルフィルタでは、現状態から起こりうる多数の次状態を、多数のパーティクル(粒子)で表現します。
そして、全パーティクルの尤度に従って算出された重みつき平均を次状態であると推測して追跡を行います。

要は確率的な予測


要はパーティクルフィルタでは、正確な位置を求めるのでなく、過去の時系列データから“追跡対象が次は〇〇%の確率でこの辺に来るのだろう”という確率的な推定をします。
パーティクルフィルタは計算量が少ないため、画像処理においてはリアルタイムな物体追跡に応用されています。

パーティクルフィルタの操作手順

パーティクルフィルタの基本的な操作手順は次の3段階です。

説明
①リサンプリング 前フレームでの尤度(重み)に従って、パーティクルを撒き直します。
(追跡対象の周りにパーティクルをばら撒く)
※初期状態の場合、前フレームがないので追跡対象の周辺に一様にパーティクルを撒きます。
②推定 適当なモデルを使って現フレームにおける追跡対象の位置を推定し、パーティクルを少し動かします。(動画のような2次元座標の場合、等速直線運動や適当な乱数のモデルが使われます)
③観測 現フレームにおける各パーティクルの尤度と重み(正規化)を計算します。つまり、「②推定」の答え合わせをして実際の追跡対象の位置に近いパーティクルの重みを大きくします。重みが大きいパーティクルが集中している領域が追跡対象となります。

①~③の手順を繰り返します。

■尤度・・・追跡したい対象物らしさ
例)赤色の物体追跡・・・各パーティクルの周辺領域にある赤色の存在率などを尤度とします

パーティクルフィルタの実装例

Python版OpenCVでパーティクルフィルタを実装する方法について、以下ページで解説しています。

【Python/OpenCV】パーティクルフィルタで物体追跡
Python版OpenCVでパーティクルフィルタを実装し、物体追跡する方法をソースコード付きで解説します。

関連ページ

【画像処理入門】アルゴリズム&プログラミング
画像処理における基本的なアルゴリズムとその実装例(プログラム)についてまとめました。

コメント