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 betweentrackerGNN
andtrackerTOMHT
.
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 theFilterInitializationFcn
property to@initcaekf
, then the tracker uses theinitcaekf
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 withtrackerGNN
andtrackerJPDA
.'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 withtrackerGNN
andtrackerTOMHT
.'Integrated'
— Track confirmation and deletion are based on the probability of track existence. You can use this logic withtrackerJPDA
.
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,
|
Assignment | The name of the assignment algorithm. The tracker provides
three built-in algorithms: |
CustomAssignmentFcn | The name of the custom assignment algorithm function. This
property is available on when the
|
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
–- help trackHistoryLogic help trackScoreLogic |
ConfirmationThreshold | Specify the threshold for track confirmation. The threshold
depends on the setting for
. |
DeletionThreshold | Specify the threshold for track deletion. The threshold
depends on the setting of
. |
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
|
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
|
Beta | Specify the rate of new tracks per unit volume as a
positive number. This property is used only when
|
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 |
| 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 |
HasDetectableTrackIDsInput | Set this property to |
HasCostMatrixInput | Set this property to |
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 |
detections | Cell array of |
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. |
costmatrix | Cost 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 |
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(...)
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. |
TrackLogic | The track logic used in confirming the track –
'History' or
'Score' . |
TrackLogicState | The current state of the track logic.
|
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. |