Jonker-Volgenant global nearest neighbor assignment algorithm

`[`

returns a table of `assignments`

,`unassignedrows`

,`unassignedcolumns`

] = assignjv(`costmatrix`

,`costofnonassignment`

)`assignments`

of detections to tracks using the
Jonker-Volgenant algorithm. The JV algorithm finds an optimal solution to the global nearest
neighbor (GNN) assignment problem by finding the set of assignments that minimize the total
cost of the assignments. The Jonker-Volgenant algorithm solves the GNN assignment in two
phases: begin with the auction algorithm and end with the Dijkstra shortest path
algorithm.

The cost of each potential assignment is contained in the cost
matrix, `costmatrix`

. Each matrix entry represents the cost of a possible
assignments. Matrix rows represent tracks and columns represent detections. All possible
assignments are represented in the cost matrix. The lower the cost, the more likely the
assignment is to be made. Each track can be assigned to at most one detection and each detection
can be assigned to at most one track. If the number of rows is greater than the number of
columns, some tracks are unassigned. If the number of columns is greater than the number of
rows, some detections are unassigned. You can set an entry of `costmatrix`

to
`Inf`

to prohibit an assignment.

`costofnonassignment`

represents the cost of leaving tracks or
detections unassigned. Higher values increase the likelihood that every existing object is
assigned.

The function returns a list of unassigned tracks, `unassignedrows`

,
and a list of unassigned detections, `unassignedcolumns`

.

[1] Samuel S. Blackman and Popoli, R.
*Design and Analysis of Modern Tracking Systems*. Artech House:
Norwood, MA. 1999.