Main Content

Tracking and Tracking Filters

Multi-Object Tracking

You can use multi-sensor, multi-target trackers, trackerGNN, trackerJPDA, and trackerTOMHT, to track multiple targets. These trackers implement the multi-object tracking problem using the measurement-to-track association approach. Tracks are initiated and updated using sensor detections of targets. Trackers take several steps when new detections are made:

  • The tracker tries to assign a detection to an existing track.

  • The tracker creates a track for each detection it cannot assign. When starting the tracker, all detections are used to create tracks.

  • The tracker evaluates the status of each track. For new tracks, the status is tentative until enough detections are made to confirm the track. For existing tracks, newly assigned detections are used by the tracking filter to update the track state. When a track has no new added detections, the track is coasted (predicted) until new detections are assigned to it. If no new detections are added after a specified number of updates, the track is deleted.

When tracking multiple objects using these trackers, there are several things to consider:

  • Decide which tracker to use.

    • trackerGNN uses a global nearest-neighbor assignment algorithm, which maintains a single hypothesis about the tracked object. The tracker offers low computation cost but is not robust during ambiguous association events.

    • trackerTOMHT assigns detections based on a track-oriented, multi-hypothesis approach, which maintains multiple hypotheses about the tracked object. The tracker is robust during ambiguous data association events but is computationally more expensive.

    • trackerJPDA uses a joint probabilistic data association approach, which applies a soft assignment where multiple detections can contribute to each track. The tracker balances the robustness and computation cost between trackerGNN and trackerTOMHT.

    See the Tracking Closely Spaced Targets Under Ambiguity example for a comparison between these three trackers.

  • Decide which type of tracking filter to use.

    The choice of tracking filter depends on the expected dynamics of the object you want to track. The toolbox provides multiple Kalman filters including the Linear Kalman filter, trackingKF, the Extended Kalman filter, trackingEKF, the Unscented Kalman filter, trackingUKF, and the Cubature Kalman filter, trackingCKF. The linear Kalman filter is used when the dynamics of the object follow a linear model and the measurements are linear functions of the state vector. The extended, unscented, and cubature Kalman filters are used when the dynamics are nonlinear, the measurement model is nonlinear, or both. The toolbox also provides non-Gaussian filters such as the particle filter, trackingPF, Gaussian-sum filter, trackingGSF, and the Interacting Multiple Model (IMM) filter, trackingIMM. See the Tracking with Range-Only Measurements and Tracking Maneuvering Targets examples for more information about these filters.

    You can set the type of filter by specifying the FilterInitializationFcn property of a tracker. For example, if you set the FilterInitializationFcn property to @initcaekf, then the tracker uses the initcaekf function to create a constant-acceleration extended Kalman filter for a new track generated from detections.

  • Decide which track logic to use.

    You can specify the conditions under which a track is confirmed or deleted by setting the TrackLogic property. Three algorithms are supported:

    • 'History' — Track confirmation and deletion are based on the number of times the track has been assigned to a detection in the last several tracker updates. You can use this logic with trackerGNN and trackerJPDA.

    • 'Score' — Track confirmation and deletion are based on a log-likelihood computation. A high score means that the track is more likely to be valid. A low score means that the track is more likely to be false. You can use this logic with trackerGNN and trackerTOMHT.

    • 'Integrated' — Track confirmation and deletion are based on the probability of track existence. You can use this logic with trackerJPDA.

    For more details, see the Introduction to Track Logic example.

You can also use a multi-sensor, multi-target tracker, trackerPHD, to track multiple targets simultaneously. trackerPHD approaches the multi-object tracking problem using the random finite set (RFS) method and tracks the probability hypothesis density (PHD) of a scenario. trackerPHD extracts peaks from the PHD-intensity to represent potential targets and maintain identities of targets by assigning a label to each component. The toolbox offers one realization of PHD, ggiwphd, which represents the PHD of extended targets using a Gamma Gaussian Inverse-Wishart (GGIW) target-state model. You can represent the configurations of sensors for trackerPHD using trackingSensorConfiguration.

Multi-Object Tracker Properties

trackerGNN Properties

The trackerGNN object is a multi-sensor, multi-object tracker that uses global nearest neighbor association. Each detection can be assigned to only one track (single-hypothesis tracker) which can also be a new track that the detection initiates. At each step of the simulation, the tracker updates the track state. You can specify the behavior of the tracker by setting the following properties.

trackerGNN Properties

FilterInitializationFcn

A handle to a function that initializes a tracking filter based on a single detection. This function is called when a detection cannot be assigned to an existing track. For example, initcaekf creates an extended Kalman filter for an accelerating target. All tracks are initialized with the same type of filter.

Assignment

The name of the assignment algorithm. The tracker provides three built-in algorithms: 'Munkres', 'Jonker-Volgenant', and 'Auction' algorithms. You can also create your own custom assignment algorithm by specifying 'Custom'.

CustomAssignmentFcn

The name of the custom assignment algorithm function. This property is available on when the Assignment property is set to 'Custom'.

AssignmentThreshold

Specify the threshold that controls the assignment of a detection to a track. Detections can only be assigned to a track if their normalized distance from the track is less than the assignment threshold. Each tracking filter has a different method of computing the normalized distance. Increase the threshold if there are detections that can be assigned to tracks but are not. Decrease the threshold if there are detections that are erroneously assigned to tracks.

TrackLogic

Specify the track confirmation logic –-'History' or 'Score'. For descriptions of these options, type

help trackHistoryLogic
or
help trackScoreLogic
at the command line.

ConfirmationThreshold

Specify the threshold for track confirmation. The threshold depends on the setting for TrackLogic

  • 'History' –- specify the confirmation threshold as [M N]. If the track is detected at least M times in the last N updates, the track is confirmed.

  • 'Score' –-- specify the confirmation threshold as a single number. If the score is greater than or equal to the threshold, this track is confirmed.

.

DeletionThreshold

Specify the threshold for track deletion. The threshold depends on the setting of TrackLogic

  • 'History' –- specify the deletion threshold as a pair of integers [P R]. A track is deleted if it is not assigned to a track at least P times in the last R updates.

  • 'Score' –-- specify the deletion threshold as a single number. The track is deleted if its score decreases by at least this threshold from its maximum track score.

.

DetectionProbability

Specify the probability of detection as a number in the range (0,1). The probability of detection is used to calculate the track score when initializing and updating a track. This property is used only when TrackLogic is set to 'Score'.

FalseAlarmRate

Specify the rate of false detection as a number in the range (0,1). The false alarm rate is used to calculate the track score when initializing and updating a track. This property is used only when TrackLogic is set to 'Score'.

Beta

Specify the rate of new tracks per unit volume as a positive number. This property is used only when TrackLogic is set to 'Score'. The rate of new tracks is used in calculating the track score during track initialization. This property is used only when TrackLogic is set to 'Score'.

Volume

Specify the volume of the sensor measurement bin as a positive scalar. For example, a radar sensor that produces a 4-D measurement of azimuth, elevation, range, and range-rate creates a 4-D volume. The volume is a product of the radar angular beamwidth, the range bin width, and the range-rate bin width. The volume is used in calculating the track score when initializing and updating a track. This property is used only when TrackLogic is set to 'Score'.

MaxNumTracks

Specify the maximum number of tracks the tracker can maintain.

MaxNumSensors

Specify the maximum number of sensors sending detections to the tracker as a positive integer. This number must be greater than or equal to the largest SensorIndex value used in the objectDetection input to the object. This property determines how many sets of ObjectAttributes each track can have.

HasDetectableTrackIDsInput

Set this property to true if you want to provide a list of detectable track IDs as input to the object. This list contains all tracks that the sensors expect to detect and, optionally, the probability of detection for each track ID.

HasCostMatrixInput

Set this property to true if you want to provide an assignment cost matrix as input to the object.

trackerGNN Input

The input to the trackerGNN consists of a list of detections, the update time, cost matrix, and other data. Detections are specified as a cell array of objectDetection objects (see Detections). The input arguments are listed here.

trackerGNN Input

tracker

A trackerGNN object.

detections

Cell array of objectDetection objects (see Detections).

time

Time to which all the tracks are to be updated and predicted. The time at this execution step must be greater than the value in the previous call.

costmatrixCost matrix for assigning detections to tracks. A real T-by-D matrix, where T is the number of tracks listed in the allTracks argument returned from the previous call to the object. D is the number of detections that are input in the current call. A larger cost matrix entry means a lower likelihood of assignment.
detectableTrackIDs

IDs of tracks that the sensors expect to detect, specified as an M-by-1 or M-by-2 matrix. The first column consists of track IDs, as reported in the TrackID field of the tracker output. The second column is optional and allows you to add the detection probability for each track.

trackerGNN Output

The output of the tracker can consist of up to three struct arrays with track state information. You can retrieve just the confirmed tracks, the confirmed and tentative tracks, or these tracks plus a combined list of all tracks.

confirmedTracks = tracker(...)
[confirmedTracks, tentativeTracks] = tracker(...)
[confirmedTracks, tentativeTracks, allTracks] = tracker(...)
The fields contained in the struct are:

trackerGNN Output struct

TrackID

Unique integer that identifies the track.

UpdateTime

Time to which the track is updated.

Age

Number of updates since track initialization.

State

State vector at update time.

StateCovariance

State covariance matrix at update time.

IsConfirmed

True if the track is confirmed.

TrackLogicThe track logic used in confirming the track – 'History' or 'Score'.
TrackLogicState

The current state of the track logic.

  • For 'History' track logic, a 1-by-Q logical array, where Q is the larger of N specified in the confirmation threshold property, ConfirmationThreshold, and R specified in the deletion threshold property, DeletionThreshold.

  • For 'Score' track logic, a 1-by-2 numerical array in the form: [currentScore, maxScore].

IsCoasted

True if the track has been updated without a detection. In this case, tracks are predicted to the current time.

ObjectClassID

An integer value representing the target classification. Zero is reserved for an "unknown" class.

ObjectAttributes

A cell array of cells. Each cell captures the object attributes reported by the corresponding sensor.