Example #1
0
 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
Example #2
0
 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
Example #3
0
    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
Example #7
0
 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
Example #8
0
 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)