Python版OpenCVでパーティクルフィルタを実装し、物体追跡する方法をソースコード付きで解説します。
パーティクルフィルタで物体追跡
パーティクルフィルタ(Particle filter)とは、確率分布による時系列データの予測手法です。
粒子フィルターや逐次モンテカルロ法とも呼ばれ、画像処理分野では物体追跡に利用されています。
今回はPython + OpenCV + NumPyでパーティクルフィルタを実装し、赤色の物体を追跡してみました。

【画像処理】パーティクルフィルタによる物体追跡の原理
この記事では、画像処理におけるパーティクルフィルタによる動体追跡の原理について解説します。
動画
ソースコード
サンプルプログラム(Python3 + OpenCV)のソースコードです。
実行結果
サンプルプログラムの実行結果です。
赤色の物体を追跡しています。

【PythonでOpenCV入門】使い方とサンプル集
OpenCV(IntelOpenSourceComputerVisionLibrary)とは、インテル社で開発された画像処理・画像認識用のオープンソースライブラリです。Python/C++/Java/Android/Node.jsなどで使用...
コメント
追跡対象を赤から白に変更するにはどうすればよいでしょうか?
※ほげ様
コメントありがとうございます。
追跡対象の色を変更する場合はis_target関数内のroiの値域を変更します。
赤色のHue値は、だいたい30~150なので今サンプルプログラムでは(roi <= 30) | (roi >= 150)としています。
ただし、白色、灰色、黒色は無彩色なのでこの方法では検出できません。
ソースコード通りにやらせてもらいましたが、赤色の四角が上の実行結果通りにならず、まったく追ってくれません。。。なぜでしょうか
コメントありがとうございます。
対象の動き方によって、パラメータを調整する必要があります。
今回ですと、分散に従ってパーティクルを少し動かしていますが、分散の値を調整したり動かした方そのものを変えたりします。
ブログの例では、ゆっくり動かす分には追従できるのですが、速く動くと追従しなくなります。
どこのパラメタを調節すると早くても追従しやすくなりますか
webカメラでリアルタイムに追跡するにはどうしたらよいですか
cv2.VideoCapture(0)とすると、Webカメラの映像を処理します。