Particle Filter Tracking in Python

Post on 15-Jan-2015

8,098 views 4 download

Tags:

description

 

transcript

Particle Filter Trackingin Python

Tokyo.SciPy #1 Lightning TalkAug 28 2011

Kohta Ishikawa(@_kohta)

12年1月8日日曜日

About myselfgoogle it ➡ Kohta Ishikawa

(a professional skier is not me)

12年1月8日日曜日

Particle

distribution empirical approximation

12年1月8日日曜日

Filter

observationand

Bayes update

movement estimation

12年1月8日日曜日

Particle Filter

observationand

resampling

particle movement

12年1月8日日曜日

Tracking

12年1月8日日曜日

Tracking

12年1月8日日曜日

Tracking

12年1月8日日曜日

Tracking

12年1月8日日曜日

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日日曜日

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日日曜日

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日日曜日

Demo

12年1月8日日曜日

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日日曜日

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日日曜日