+ All Categories
Home > Technology > Particle Filter Tracking in Python

Particle Filter Tracking in Python

Date post: 15-Jan-2015
Category:
Upload: kohta-ishikawa
View: 8,098 times
Download: 4 times
Share this document with a friend
Description:
 
Popular Tags:
15
Particle Filter Tracking in Python Tokyo.SciPy #1 Lightning Talk Aug 28 2011 Kohta Ishikawa(@_kohta) 1218日日曜日
Transcript
Page 1: Particle Filter Tracking in Python

Particle Filter Trackingin Python

Tokyo.SciPy #1 Lightning TalkAug 28 2011

Kohta Ishikawa(@_kohta)

12年1月8日日曜日

Page 2: Particle Filter Tracking in Python

About myselfgoogle it ➡ Kohta Ishikawa

(a professional skier is not me)

12年1月8日日曜日

Page 3: Particle Filter Tracking in Python

Particle

distribution empirical approximation

12年1月8日日曜日

Page 4: Particle Filter Tracking in Python

Filter

observationand

Bayes update

movement estimation

12年1月8日日曜日

Page 5: Particle Filter Tracking in Python

Particle Filter

observationand

resampling

particle movement

12年1月8日日曜日

Page 6: Particle Filter Tracking in Python

Tracking

12年1月8日日曜日

Page 7: Particle Filter Tracking in Python

Tracking

12年1月8日日曜日

Page 8: Particle Filter Tracking in Python

Tracking

12年1月8日日曜日

Page 9: Particle Filter Tracking in Python

Tracking

12年1月8日日曜日

Page 10: Particle Filter Tracking in Python

Codedef filtration(svs,mv,systemModel,likelihood): #システムモデルに用いる乱数を生成 dim = len(svs[1]) N = len(svs) sigma = 2.0 rnorm = stats.norm.rvs(0,sigma,size=N*dim) ranges = zip([N*i for i in range(dim)], [N*i for i in (range(dim+1)[1:])]) ws = np.array([rnorm[p:q] for p,q in ranges]) ws = ws.transpose()

#予測サンプルを生成 svs_predict = [systemModel.generate(sv,w) for sv,w in zip(svs,ws)] #尤度重みを計算 normalization_factor = likelihood.normalization(svs_predict,mv) likelihood_weights = [likelihood.generate(sv,mv)/normalization_factor for sv in svs_predict]

#重みによってリサンプリング svs_resampled = resampling(svs_predict,likelihood_weights) return(svs_resampled)

12年1月8日日曜日

Page 11: Particle Filter Tracking in Python

Codeif(__name__=="__main__"): #イメージソースを指定 img = Image()

#パーティクル数を指定 sampleSize = 100

#モデルオブジェクトを生成 systemModel = SystemModel(model_s) likelihood = Likelihood(model_l)

#初期パーティクルを生成 svs = initStateVectors(img.size,sampleSize)

while(True): #描画 showImage(svs,img) #観測 img.create() #フィルタ svs = filtration(svs,img,systemModel,likelihood)

12年1月8日日曜日

Page 12: Particle Filter Tracking in Python

Code (openCV Bundle)class Image: def __init__(self): self.capture = cv.CreateCameraCapture(0) self.image = cv.QueryFrame(self.capture) cv.ShowImage("Capture",self.image) self.size = (self.image.width,self.image.height)

def create(self): self.image = cv.QueryFrame(self.capture)

def getCol(self,sv): x = sv[0] y = sv[1] #パーティクルが画面外にはみ出した場合は黒として返す if((x<0 or x>self.size[0]) or (y<0 or y>self.size[1])): return((0,0,0,0)) else: return(cv.Get2D(self.image,int(sv[1]),int(sv[0])))

12年1月8日日曜日

Page 13: Particle Filter Tracking in Python

Demo

12年1月8日日曜日

Page 14: Particle Filter Tracking in Python

NumPy/SciPydef model_s(sv,w): #等速直線運動モデル #状態ベクトルは(x,y,vx,vy)を仮定 F = np.matrix([[1,0,1,0], [0,1,0,1], [0,0,1,0], [0,0,0,1]]) return(np.array(np.dot(F,sv))[0]+w)

def filtration(svs,mv,systemModel,likelihood): #システムモデルに用いる乱数を生成 dim = len(svs[1]) N = len(svs) sigma = 2.0 rnorm = stats.norm.rvs(0,sigma,size=N*dim) ranges = zip([N*i for i in range(dim)], [N*i for i in (range(dim+1)[1:])]) ws = np.array([rnorm[p:q] for p,q in ranges]) ws = ws.transpose()

12年1月8日日曜日

Page 15: Particle Filter Tracking in Python

Referencesphoto: By Dale Gillard from everystockphoto.com

terms of use : http://creativecommons.org/licenses/by/2.5/

book: 「コンピュータビジョン最先端ガイド1」

code: http://d.hatena.ne.jp/koh_ta/20110814https://github.com/kohta/pftrack

12年1月8日日曜日


Recommended