comparison python/objectsmoothing.py @ 612:6ee8765bb8db

minor modifications
author MohamedGomaa
date Thu, 04 Dec 2014 18:52:07 -0500
parents 75ad9c0d6cc3
children dc2d0a0d7fe1
comparison
equal deleted inserted replaced
611:233867934190 612:6ee8765bb8db
10 if reverse: 10 if reverse:
11 dist[f]= moving.Point.distanceNorm2(feat.getPositionAtInstant(t+1),f.getPositionAtInstant(t)) 11 dist[f]= moving.Point.distanceNorm2(feat.getPositionAtInstant(t+1),f.getPositionAtInstant(t))
12 else: 12 else:
13 dist[f]= moving.Point.distanceNorm2(feat.getPositionAtInstant(t-1),f.getPositionAtInstant(t)) 13 dist[f]= moving.Point.distanceNorm2(feat.getPositionAtInstant(t-1),f.getPositionAtInstant(t))
14 return min(dist, key=dist.get) # = utils.argmaxDict(dist) 14 return min(dist, key=dist.get) # = utils.argmaxDict(dist)
15
16 def FeatureList(obj,minLengthParam=0.7):
17 featureList=[]
18 for i in obj.features:
19 if i.length>= minLengthParam*obj.length():
20 featureList.append(i.num)
21 return featureList
22 15
23 def getFeatures(obj,features,featureID): 16 def getFeatures(obj,features,featureID):
24 #longestFeature = utils.argmaxDict({f:f.length() for i,f in enumerate(obj.features)}) 17 #longestFeature = utils.argmaxDict({f:f.length() for i,f in enumerate(obj.features)})
25 t1,t3 = features[featureID].getFirstInstant(), features[featureID].getLastInstant() 18 t1,t3 = features[featureID].getFirstInstant(), features[featureID].getLastInstant()
26 listFeatures=[[features[featureID],t1,t3,moving.Point(0,0)]] 19 listFeatures=[[features[featureID],t1,t3,moving.Point(0,0)]]
78 velocities={} 71 velocities={}
79 for i in list(object.timeInterval)[:-1]: 72 for i in list(object.timeInterval)[:-1]:
80 p1= object.getPositionAtInstant(i) 73 p1= object.getPositionAtInstant(i)
81 p2= object.getPositionAtInstant(i+1) 74 p2= object.getPositionAtInstant(i+1)
82 velocities[i]=p2-p1 75 velocities[i]=p2-p1
83 velocities[object.timeInterval.last]= velocities[object.timeInterval.last-1] # duplicate last point 76 velocities[object.getLastInstant()]= velocities[object.getLastInstant()-1] # duplicate last point
84 if smoothing: 77 if smoothing:
85 velX= [velocities[y].aslist()[0] for y in sorted(velocities.keys())] 78 velX= [velocities[y].aslist()[0] for y in sorted(velocities.keys())]
86 velY= [velocities[y].aslist()[1] for y in sorted(velocities.keys())] 79 velY= [velocities[y].aslist()[1] for y in sorted(velocities.keys())]
87 v1= list(utils.filterMovingWindow(velX, halfWidth)) 80 v1= list(utils.filterMovingWindow(velX, halfWidth))
88 v2= list(utils.filterMovingWindow(velY, halfWidth)) 81 v2= list(utils.filterMovingWindow(velY, halfWidth))
119 t=0 112 t=0
120 for i in sorted(jerk.keys()): 113 for i in sorted(jerk.keys()):
121 t+= jerk[i]* jerk[i] 114 t+= jerk[i]* jerk[i]
122 return t 115 return t
123 116
124 def getObject(obj,features,featureID,newNum,smoothing=False,halfWidth=3,create=False): 117 def smoothObjectTrajectory(obj,features,featureID,newNum,smoothing=False,halfWidth=3,create=False):
125 results=[] 118 results=[]
126 bearing={} 119 bearing={}
127 if create: 120 if create:
128 feature= buildFeature(obj,features,featureID,num=1) 121 feature= buildFeature(obj,features,featureID,num=1)
129 else: 122 else:
130 feature=features[featureID] 123 feature=features[featureID]
131 for t in feature.getTimeInterval(): 124 for t in feature.getTimeInterval():
132 p1= feature.getPositionAtInstant(t) 125 p1= feature.getPositionAtInstant(t)
133 p2= obj.getPositionAtInstant(t) 126 p2= obj.getPositionAtInstant(t)
134 if t!=feature.timeInterval.last: 127 if t!=feature.getLastInstant():
135 p3= feature.getPositionAtInstant(t+1) 128 p3= feature.getPositionAtInstant(t+1)
136 else: 129 else:
137 p1= feature.getPositionAtInstant(t-1) 130 p1= feature.getPositionAtInstant(t-1)
138 p3= feature.getPositionAtInstant(t) 131 p3= feature.getPositionAtInstant(t)
139 bearing[t]= getBearing(p1,p2,p3)[1] 132 bearing[t]= getBearing(p1,p2,p3)[1]
172 #modify first and last un-smoothed positions (half width) 165 #modify first and last un-smoothed positions (half width)
173 if smoothing: 166 if smoothing:
174 d1= translated[halfWidth]- feature.positions[halfWidth] 167 d1= translated[halfWidth]- feature.positions[halfWidth]
175 d2= translated[-halfWidth-1]- feature.positions[-halfWidth-1] 168 d2= translated[-halfWidth-1]- feature.positions[-halfWidth-1]
176 for i in xrange(halfWidth): 169 for i in xrange(halfWidth):
177 p1.x=feature.positions.__getitem__(i).x+d1.x 170 p1= feature.getPositionAt(i)+d1
178 p2.x= feature.positions.__getitem__(-i-1).x+d2.x 171 p2= feature.getPositionAt(-i-1)+d2
179 p1.y=feature.positions.__getitem__(i).y+d1.y
180 p2.y= feature.positions.__getitem__(-i-1).y+d2.y
181 translated.setPosition(i,p1) 172 translated.setPosition(i,p1)
182 translated.setPosition(-i-1,p2) 173 translated.setPosition(-i-1,p2)
183 174
184 newObj= moving.MovingObject(newNum,timeInterval=feature.timeInterval,positions=translated) 175 newObj= moving.MovingObject(newNum,timeInterval=feature.getTimeInterval(),positions=translated)
185 return newObj 176 return newObj
186 177
187 def smoothObjectTrajectory(obj,features,newNum,minLengthParam=0.7,smoothing=False,plotResults=True,halfWidth=3,computeVelocities=True,optimize=True,create=False): 178 def smoothObjectTrajectory(obj,features,newNum,minLengthParam=0.7,smoothing=False,plotResults=True,halfWidth=3,computeVelocities=True,optimize=True,create=False):
188 featureList=FeatureList(obj,minLengthParam=minLengthParam) 179 featureList=[i.num for i in obj.features if i.length() >= minLengthParam*obj.length()]
189 if featureList==[]: 180 if featureList==[]:
190 featureList.append(longestFeature(obj)) 181 featureList.append(longestFeature(obj))
191 create=True 182 create=True
192 objs=[] 183 objs=[]
193 for featureID in featureList: 184 for featureID in featureList:
194 objTMP=getObject(obj,features,featureID,newNum,smoothing=smoothing,halfWidth=halfWidth,create=create) 185 objTMP=smoothObjectTrajectory(obj,features,featureID,newNum,smoothing=smoothing,halfWidth=halfWidth,create=create)
195 objs.append(objTMP) 186 objs.append(objTMP)
196 newTranslated = moving.Trajectory() 187 newTranslated = moving.Trajectory()
197 newInterval=[] 188 newInterval=[]
198 for t in obj.timeInterval: 189 for t in obj.timeInterval:
199 xCoord=[] 190 xCoord=[]