Mercurial Hosting > traffic-intelligence
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=[] |