Date post: | 15-Jan-2015 |
Category: |
Technology |
Upload: | kohta-ishikawa |
View: | 8,098 times |
Download: | 4 times |
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日日曜日