Trajectory Separation#

Segregate Points#

We can separate out trajectory segments / points that are spatio-temporally far away to:

  1. Remove spurious, noisy points.

  2. Separate out continuous trajectory segments.

The spatio-temporal metric differentiates between points that may be in the same location at different times. This is achieved by allowing points to be connected in a sliding window approach.

The pept.tracking.Segregate algorithm works by creating a Minimum Spanning Tree (MST, or minimum distance path) connecting all points in a dataset, then cutting all paths longer than a cut_distance. All distinct segments are assigned a trajectory 'label' (integer starting from 0); trajectories with fewer than min_trajectory_size points are considered noise (label -1).

from pept.tracking import *

trajectories = Segregate(window = 20, cut_distance = 10.).fit(trajectories)

Consider all trajectories with fewer than 50 points to be noise:

segr = Segregate(
    window = 20,
    cut_distance = 10.,
    min_trajectory_size = 50,
)

trajectories = segr.fit(trajectories)

This step adds a new column “label”. We can group each individual trajectory into a list with GroupBy:

traj_list = GroupBy("label").fit(trajectories)
traj_list[0]    # First trajectory

[New in pept-0.5.2] Only connect points within a time interval; in other words, disconnect into different trajectories points whose timestamps are further apart than max_time_interval:

 segr = Segregate(
    window = 20,
    cut_distance = 10.,
    min_trajectory_size = 50,
    max_time_interval = 2000,       # Disconnect tracer with >2s gap
)

trajectories = segr.fit(trajectories)