パーティクルフィルタによる動体追跡の原理・仕組みと計算方法について解説します。
パーティクルフィルタとは
パーティクルフィルタ(Particle filter)とは、確率分布に基づく時系列データの予測手法です。粒子フィルターや逐次モンテカルロ法とも呼ばれます。
多数のパーティクル(粒子)を用いて、現在の状態から将来の状態を推定します。画像処理の分野では、物体の追跡などに応用されています。
以下の画像は、パーティクルフィルタで物体追跡するときの簡単なイメージです。
パーティクルフィルタでは、正確な位置を求めるのでなく、「過去の状態から、追跡対象が次は〇〇%の確率でこの辺に来るのだろう」という推定をします。
パーティクルフィルタは計算量が少ないため、リアルタイムな物体追跡に応用されています。
パーティクルフィルタによる物体追跡の流れ
パーティクルフィルタによる物体追跡の流れは以下のとおりです。
- リサンプリング
- 前フレームでの尤度(重み)に従って、パーティクルを撒き直します。(追跡対象の周りにパーティクルをばら撒く)
- ※初期状態の場合、前フレームがないので追跡対象の周辺に一様にパーティクルを撒きます。
- 尤度とは、「追跡したい対象物らしさ」のことです。例えば、「赤色の物体追跡」を行う場合、各パーティクルの周辺領域にある赤色の存在率などを尤度とします。
- 推定
- 適当なモデルを使って現フレームにおける追跡対象の位置を推定し、パーティクルを少し動かします。
- 動画のような2次元座標の場合、等速直線運動や適当な乱数のモデルが使われます
- 観測
- 現フレームにおける各パーティクルの尤度と重み(正規化)を計算します。つまり、「②推定」の答え合わせをして実際の追跡対象の位置に近いパーティクルの重みを大きくします。
- 重みが大きいパーティクルが集中している領域が追跡対象となります。
上記3つの手順を繰り返し行います。
パーティクルフィルタの実装例
Python版OpenCVでパーティクルフィルタを実装する方法について、以下ページで解説しています。

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

【画像処理超入門】アルゴリズムの仕組みと実装方法を簡単に解説
画像処理超アルゴリズムの仕組みとプログラミングによる実装方法を簡単に解説します。
コメント