comparison python/compute-object-from-features.py @ 103:1621b46a1523

started python script to compute the moving object trajectory as the trajectory of the lowest of the features (ie closest to the ground)
author Nicolas Saunier <nico@confins.net>
date Wed, 13 Jul 2011 19:14:17 -0400
parents
children 9844c69d8fa2
comparison
equal deleted inserted replaced
102:abfc54c097d4 103:1621b46a1523
1 #!/usr/bin/env python
2
3 import sys
4
5 import matplotlib.mlab as pylab
6 import matplotlib.pyplot as plt
7 import numpy as np
8
9 import cv
10 import utils
11 import cvutils
12 import ubc_utils
13 import moving
14
15 # use something like getopt to manage arguments if necessary
16
17 if len(sys.argv) < 3:
18 print('Usage: {0} <video-filename> <n-objects>'.format(sys.argv[0]))
19 sys.exit()
20
21 if sys.argv[1].endswith('.avi'):
22 videoFilenamePrefix = utils.removeExtension(sys.argv[1],'.')
23 else:
24 videoFilenamePrefix = sys.argv[1]
25
26 objectNum = int(sys.argv[2])
27
28 objects = ubc_utils.loadTrajectories(videoFilenamePrefix+'-objects.txt', objectNum+1)
29 obj = objects[objectNum]
30 features = ubc_utils.loadTrajectories(videoFilenamePrefix+'-features.txt', max(obj.featureNumbers)+1)
31 h = np.loadtxt(videoFilenamePrefix+'-homography.txt')
32
33 invh = cvutils.invertHomography(h)
34
35 yCoordinates = -np.ones((len(obj.featureNumbers),int(obj.length())))
36 for i,fnum in enumerate(obj.featureNumbers):
37 traj = features[fnum].getPositions().asArray()
38 imgTraj = cvutils.projectArray(invh, traj)
39 yCoordinates[i,features[fnum].getFirstInstant()-obj.getFirstInstant():features[fnum].getLastInstant()+1-obj.getFirstInstant()] = imgTraj[1,:]
40
41 indices = argmax(yCoordinates,0)
42 newTraj = moving.Trajectory()
43 for j,idx in enumerate(indices):
44 newTraj.addPosition(features[obj.featureNumbers[idx]].getPositionAtInstant(j+obj.getFirstInstant()))
45
46 # TODO
47 # use kalman filter over the resulting trajectory
48 # estimate the error terms using actual features