def transformTrack(self, track): points = np.asarray(track.positions) undistorted = [ np.array([x, self._imgHeight - y]) for x, y in track.positions ] newTrack = Track(np.asarray(undistorted), track.times, track.id) return newTrack
def transformTracks(self, tracks): for track in tracks: points = np.asarray(track.positions) undistorted = [ np.array([x, self._imgHeight - y]) for x, y in track.positions ] newTrack = Track(np.asarray(undistorted), track.times, track.id) yield newTrack
def transformTrack(self, track): points = np.asarray(track.positions) undistorted = [ np.dot(self._rotation, np.append(p, [1])) for p in track.positions ] newTrack = Track(np.asarray(undistorted), track.times, track.id) return newTrack
def simulateWithMass(self, particle, velocity, mass, endTime, startTime=0.0): if (self._flowField is None): print("Error: No vector field is set") return None self._mass = mass particleObservations = [] particlePositions = [] particleTimes = [] # y = [x, y, x', y'] f = lambda t, y: self._motion(t, y) r = ode(f).set_integrator('dop853') x, y = particle vx, vy = velocity if self._mass < 0.001: vx, vy = self._flowField.sampleAtPoint((x, y)) y0 = np.asarray([x, y, vx, vy]) print("y0:", y0) particleVel = self._flowField.sampleAtPoint(tuple(particle)) print(f"Field Velocity at initial particle location: {particleVel}") t0 = startTime print(self._motion(t0, y0)) #particleTimes.append(t0) #particlePositions.append(y0) savePosition = lambda t, y: particleObservations.append((t, [*y])) r.set_solout(savePosition) r.set_initial_value(y0, t0) r.integrate(endTime) for t, p in particleObservations: particleTimes.append(t) particlePositions.append(np.asarray(p[:2])) particleTrack = Track(particlePositions, particleTimes) return particleTrack
def simulateODEInt(self, particle, times): if (self._flowField is None): print("Error: No vector field is set") return None particleObservations = [] particlePositions = [] particleTimes = [] f = lambda y, t: list(self._flowField.sampleAtPoint(tuple(y))) particleVel = self._flowField.sampleAtPoint(tuple(particle)) print(f"Initial Particle Velocity: {particleVel}") y0 = np.asarray(particle) solution = odeint(f, y0, times) #print(solution) particleTrack = Track(solution, times) return particleTrack
def simulate(self, particle, endTime, startTime=0.0, timestep=None): if (self._flowField is None): print("Error: No vector field is set") return None particleObservations = [] particlePositions = [] particleTimes = [] f = lambda t, y: list(self._flowField.sampleAtPoint(tuple(y))) r = ode(f).set_integrator('dop853') particleVel = self._flowField.sampleAtPoint(tuple(particle)) #print(f"Initial Particle Velocity: {particleVel}") y0 = np.asarray(particle) t0 = startTime #particleTimes.append(t0) #particlePositions.append(y0) if (timestep is None): savePosition = lambda t, y: particleObservations.append((t, [*y])) r.set_solout(savePosition) r.set_initial_value(y0, t0) r.integrate(endTime) else: r.set_initial_value(y0, t0) while (r.successful() and r.t < endTime): y = r.integrate(r.t + timestep) particleObservations.append((r.t, [*y])) for t, p in particleObservations: particleTimes.append(t) particlePositions.append(np.asarray(p)) particleTrack = Track(particlePositions, particleTimes) return particleTrack
def inverseTransformTrack(self, track): points = np.asarray(track.positions) distorted = self._camera.distortPoints(points) newTrack = Track(np.asarray(distorted), track.times, track.id) return newTrack
def transformTracks(self, tracks): for track in tracks: points = np.asarray(track.positions) undistorted = self._camera.undistortPoints(points) newTrack = Track(np.asarray(undistorted), track.times, track.id) yield newTrack
boatPosition = (boat[0] + boat[2] / 2, boat[1] + boat[3] / 2) frontPanelPosition = (frontPanel[0] + frontPanel[2] / 2, frontPanel[1] + frontPanel[3] / 2) rearPanelPosition = (rearPanel[0] + rearPanel[2] / 2, rearPanel[1] + rearPanel[3] / 2) b.append(np.array(boatPosition)) f.append(np.array(frontPanelPosition)) r.append(np.array(rearPanelPosition)) db = [b, f, r] c1 = f[-1] c2 = r[-1] m = (c1 + c2) / 2 boatTrack = Track.from_point(m, timestamp) while (data.more()): img, timestamp = data.read() transImg = undistortTransform.transformImage(img) ok, boxes = boatTracker.update(transImg) for i, box in enumerate(boxes): if ok: position = (box[0] + box[2] / 2, box[1] + box[3] / 2) db[i].append(np.array(position)) p1 = (int(box[0]), int(box[1])) p2 = (int(box[0] + box[2]), int(box[1] + box[3])) color = [0., 0., 0.] color[i] = 200. cv2.rectangle(transImg, p1, p2, tuple(color), 2)