Mercurial Hosting > traffic-intelligence
changeset 644:e54751e71d61
more cleanup
author | Nicolas Saunier <nicolas.saunier@polymtl.ca> |
---|---|
date | Fri, 10 Apr 2015 16:09:13 +0200 |
parents | bfaa6b95dae2 |
children | 5ed2118c959d |
files | python/objectsmoothing.py |
diffstat | 1 files changed, 42 insertions(+), 35 deletions(-) [+] |
line wrap: on
line diff
--- a/python/objectsmoothing.py Fri Apr 10 15:40:27 2015 +0200 +++ b/python/objectsmoothing.py Fri Apr 10 16:09:13 2015 +0200 @@ -13,41 +13,42 @@ dist[f]= moving.Point.distanceNorm2(feat.getPositionAtInstant(t-1),f.getPositionAtInstant(t)) return min(dist, key=dist.get) # = utils.argmaxDict(dist) -def getFeatures(obj,features,featureID): - t1,t3 = features[featureID].getFirstInstant(), features[featureID].getLastInstant() - listFeatures=[[features[featureID],t1,t3,moving.Point(0,0)]] +def getFeatures(obj, featureID): + first = obj.features[featureID].getFirstInstant() + last = obj.features[featureID].getLastInstant() + featureList=[[obj.features[featureID],first,last,moving.Point(0,0)]] # find the features to fill in the beginning of the object existence - currentFeature = features[featureID] - while t1!=obj.getFirstInstant(): - delta=listFeatures[-1][3] - featureSet = [f for f in obj.features if f.existsAtInstant(t1-1)] - feat = findNearest(currentFeature,featureSet,t1-1,reverse=True) - if feat.existsAtInstant(t1): - listFeatures.append([feat,feat.getFirstInstant(),t1-1,(currentFeature.getPositionAtInstant(t1)-feat.getPositionAtInstant(t1))+delta]) + currentFeature = obj.features[featureID] + while first != obj.getFirstInstant(): + delta=featureList[-1][3] + featureSet = [f for f in obj.features if f.existsAtInstant(first-1)] + feat = findNearest(currentFeature,featureSet,first-1,reverse=True) + if feat.existsAtInstant(first): + featureList.append([feat,feat.getFirstInstant(),first-1,(currentFeature.getPositionAtInstant(first)-feat.getPositionAtInstant(first))+delta]) else: - listFeatures.append([feat,feat.getFirstInstant(),t1-1,(currentFeature.getPositionAtInstant(t1)-feat.getPositionAtInstant(t1-1))+delta]) + featureList.append([feat,feat.getFirstInstant(),first-1,(currentFeature.getPositionAtInstant(first)-feat.getPositionAtInstant(first-1))+delta]) currentFeature = feat - t1= feat.getFirstInstant() + first= feat.getFirstInstant() # find the features to fill in the end of the object existence delta=moving.Point(0,0) - currentFeature = features[featureID] - while t3!= obj.getLastInstant(): - featureSet = [f for f in obj.features if f.existsAtInstant(t3+1)] - feat = findNearest(currentFeature,featureSet,t3+1,reverse=False) - if feat.existsAtInstant(t3): - listFeatures.append([feat,t3+1,feat.getLastInstant(),(currentFeature.getPositionAtInstant(t3)-feat.getPositionAtInstant(t3))+delta]) + currentFeature = obj.features[featureID] + while last!= obj.getLastInstant(): + featureSet = [f for f in obj.features if f.existsAtInstant(last+1)] + feat = findNearest(currentFeature,featureSet,last+1,reverse=False) + if feat.existsAtInstant(last): + featureList.append([feat,last+1,feat.getLastInstant(),(currentFeature.getPositionAtInstant(last)-feat.getPositionAtInstant(last))+delta]) else: - listFeatures.append([feat,t3+1,feat.getLastInstant(),(currentFeature.getPositionAtInstant(t3)-feat.getPositionAtInstant(t3+1))+delta]) + featureList.append([feat,last+1,feat.getLastInstant(),(currentFeature.getPositionAtInstant(last)-feat.getPositionAtInstant(last+1))+delta]) currentFeature = feat - t3= feat.getLastInstant() - delta=listFeatures[-1][3] - return listFeatures + last= feat.getLastInstant() + delta=featureList[-1][3] + return featureList -def buildFeature(obj,features,featureID,num=1): - listFeatures= getFeatures(obj,features,featureID) +def buildFeature(obj, featureID, num = 1): + featureList= getFeatures(obj, featureID) tmp={} delta={} - for i in listFeatures: + for i in featureList: for t in xrange(i[1],i[2]+1): tmp[t]=[i[0],i[3]] newTraj = moving.Trajectory() @@ -113,13 +114,13 @@ t+= jerk[i]* jerk[i] return t -def smoothObjectTrajectory(obj,features,featureID,newNum,smoothing=False,halfWidth=3,create=False): +def smoothObjectTrajectory(obj, featureID,newNum,smoothing=False,halfWidth=3,create=False): results=[] bearing={} if create: - feature = buildFeature(obj,features,featureID,num=1) + feature = buildFeature(obj, featureID , num=1) # why num=1 else: - feature = features[featureID] + feature = obj.features[featureID] for t in feature.getTimeInterval(): p1= feature.getPositionAtInstant(t) p2= obj.getPositionAtInstant(t) @@ -173,18 +174,24 @@ newObj= moving.MovingObject(newNum,timeInterval=feature.getTimeInterval(),positions=translated) return newObj -def smoothObject(obj,features,newNum,minLengthParam=0.7,smoothing=False,plotResults=True,halfWidth=3, _computeVelocities=True,optimize=True,create=False): +def smoothObject(obj, newNum, minLengthParam = 0.7, smoothing = False, plotResults = True, halfWidth = 3, _computeVelocities = True, optimize = True, create = False): '''Computes a smoother trajectory for the object and optionnally smoother velocities - + + The object should have its features in obj.features TODO: check whether features are necessary''' - featureList=[i.num for i in obj.features if i.length() >= minLengthParam*obj.length()] + if len(obj.features) == 0: + print('Object {} has an empty list of features: please load and add them using obj.setFeatures(features)'.format(obj.getNum())) + from sys import exit + exit() + + featureList=[i for i,f in enumerate(obj.features) if f.length() >= minLengthParam*obj.length()] if featureList==[]: - featureList.append(utils.argmaxDict({f.getNum():f.length() for f in obj.features})) + featureList.append(utils.argmaxDict({i:f.length() for i,f in enumerate(obj.features)})) create = True newObjects = [] - for featureID in featureList: - newObjects.append(smoothObjectTrajectory(obj,features,featureID,newNum,smoothing=smoothing,halfWidth=halfWidth,create=create)) + for featureID in featureList: # featureID should be the index in the list of obj.features + newObjects.append(smoothObjectTrajectory(obj, featureID, newNum, smoothing = smoothing, halfWidth = halfWidth, create = create)) newTranslated = moving.Trajectory() newInterval = [] @@ -232,7 +239,7 @@ plt.figure() plt.title('objects_id = {}'.format(obj.num)) for i in featureList: - features[i].plot('cx-') + obj.features[i].plot('cx-') obj.plot('rx-') newObj.plot('gx-') return newObj