Main Content

jpdaEvents

Feasible joint events for trackerJPDA

Description

[FJE,FJEProbs] = jpdaEvents(likelihoodMatrix,k) generates the k-best feasible joint event matrices, FJE, corresponding to the posterior likelihood matrix, likelihoodMatrix. likelihoodMatrix defines the posterior likelihood of associating detections with tracks.

example

FJE = jpdaEvents(validationMatrix) returns the feasible joint events, FJE, based on the validation matrix. A validation matrix describes the possible associations between detections and tracks, whereas a feasible joint event for multi-object tracking is one realization of the associations between detections and tracks.

example

Examples

collapse all

Create a likelihood matrix assuming four detections and two tracks.

likeMatrix = [0.1 0.1 0.1;
              0.1 0.3 0.2;
              0.1 0.4 0.1;
              0.1 0.6 0.1;
              0.1 0.5 0.3];

Generate three most probable events and obtain their normalized probabilities.

[FJE,FJEProbs] = jpdaEvents(likeMatrix,3)
FJE = 4×3×3 logical array
FJE(:,:,1) =

   1   0   0
   1   0   0
   0   1   0
   0   0   1


FJE(:,:,2) =

   0   0   1
   1   0   0
   0   1   0
   1   0   0


FJE(:,:,3) =

   1   0   0
   0   1   0
   1   0   0
   0   0   1

FJEProbs = 3×1

    0.4286
    0.2857
    0.2857

Define an arbitrary validation matrix for five measurements and six tracks.

  M = [1     1     1     1     1     0     1
       1     0     1     1     0     0     0
       1     0     0     0     1     1     0
       1     1     1     1     0     0     0
       1     1     1     1     1     1     1];

Generate all feasible joint events and count the total number.

  FJE = jpdaEvents(M); 
  nFJE = size(FJE,3);

Display a few of the feasible joint events.

  disp([num2str(nFJE) ' feasible joint event matrices were generated.'])
574 feasible joint event matrices were generated.
 
  toSee = [1:round(nFJE/5):nFJE, nFJE];
  for ii = toSee
      disp("Feasible joint event matrix #" + ii + ":")
      disp(FJE(:,:,ii))
  end
Feasible joint event matrix #1:
   1   0   0   0   0   0   0
   1   0   0   0   0   0   0
   1   0   0   0   0   0   0
   1   0   0   0   0   0   0
   1   0   0   0   0   0   0
Feasible joint event matrix #116:
   0   0   1   0   0   0   0
   1   0   0   0   0   0   0
   0   0   0   0   1   0   0
   0   1   0   0   0   0   0
   0   0   0   1   0   0   0
Feasible joint event matrix #231:
   0   0   0   0   1   0   0
   0   0   1   0   0   0   0
   0   0   0   0   0   1   0
   1   0   0   0   0   0   0
   0   0   0   0   0   0   1
Feasible joint event matrix #346:
   0   0   0   0   0   0   1
   0   0   0   1   0   0   0
   0   0   0   0   1   0   0
   1   0   0   0   0   0   0
   0   1   0   0   0   0   0
Feasible joint event matrix #461:
   1   0   0   0   0   0   0
   0   0   1   0   0   0   0
   1   0   0   0   0   0   0
   0   0   0   1   0   0   0
   0   0   0   0   0   0   1
Feasible joint event matrix #574:
   1   0   0   0   0   0   0
   1   0   0   0   0   0   0
   1   0   0   0   0   0   0
   1   0   0   0   0   0   0
   0   0   0   0   0   0   1

Input Arguments

collapse all

Likelihood matrix, specified as an (m+1)-by-(n+1) matrix, where m is the number of detections within the cluster of a sensor scan, and n is the number of tracks maintained in the tracker. The likelihood matrix uses the first column to account for the possibility that each detection is clutter or false alarm, which is commonly referred to as "Track 0" or T0. The matrix uses the first row to account for the possibility that each track is not assigned to any detection, which can be referred to as "Detection 0" or D0. The (j+1,i+1) element of the matrix represents the likelihood to assign track Ti to detection Dj.

Data Types: logical

Number of joint probabilistic events, specified as a positive integer.

Data Types: logical

Validation matrix, specified as an m-by-(n+1) matrix, where m is the number of detections within the cluster of a sensor scan, and n is the number of tracks maintained in the tracker. The validation matrix uses the first column to account for the possibility that each detection is clutter or false alarm, which is commonly referred to as "Track 0" or T0. The validation matrix is a binary matrix listing all possible detections-to-track associations. If it is possible to assign track Ti to detection Dj, then the (j, i+1) entry of the validation matrix is 1. Otherwise, the entry is 0.

Data Types: logical

Output Arguments

collapse all

Feasible joint events, specified as an m-by-(n+1)-by-p array, where m is the number of detections within the cluster of a sensor scan, n is the number of tracks maintained in the tracker, and p is the total number of feasible joint events. Each page (an m-by-(n+1) matrix) of FJE corresponds to one possible association between all the tracks and detections. The feasible joint event matrix on each page satisfies:

  • The matrix has exactly one "1" value per row.

  • Except for the first column, which maps to clutter, there can be at most one "1" per column.

For more details on feasible joint events, see Feasible Joint Events.

Data Types: logical

Probabilities of feasible joint events, returned as a p-by-1 vector of nonnegative scalars. The summation of these scalars is equal to 1. The k-th element represents the probability of the k-th joint events (specified in the FJE output argument) normalized over the p feasible joint events.

Data Types: logical

More About

collapse all

References

[1] Zhou, Bin, and N. K. Bose. "Multitarget tracking in clutter: Fast algorithms for data association." IEEE Transactions on aerospace and electronic systems 29, no. 2 (1993): 352-363.

[2] Fisher, James L., and David P. Casasent. "Fast JPDA multitarget tracking algorithm." Applied optics 28, no. 2 (1989): 371-376.

Extended Capabilities

expand all

Version History

Introduced in R2019a

See Also