pruneTrackBranches
Prune track branches with low likelihood
Syntax
Description
[
returns a logical flag, toPrune
,globalProbability
] = pruneTrackBranches(branchHistory
,scores
,hypotheses
)toPrune
, that indicates which branches should
be pruned based on the branch history, branch scores, and hypotheses.
pruneTrackBranches
also returns the global branch probabilities,
globalProbability
.
[
uses name-value pairs to modify how branches are pruned.toPrune
,globalProbability
] = pruneTrackBranches(branchHistory
,scores
,hypotheses
,Name,Value
)
[
returns additional information, toPrune
,globalProbability
,info
] = pruneTrackBranches(___)info
, about the pruned branches.
Examples
Prune Branches For Single Sensor Using N-Scan Pruning
Create a branch history matrix for a single sensor with 20 branches. For this example, the history depth is 4 therefore the matrix has 7 columns.
history = [ 8 14 14 0 0 2 0 1 23 23 0 0 2 1 2 24 24 0 0 1 2 9 25 25 0 1 0 0 10 26 26 0 2 0 0 1 28 28 0 1 0 1 4 33 33 0 1 2 1 1 34 34 0 1 2 1 2 35 35 0 2 1 2 11 0 36 1 0 0 0 12 0 37 2 0 0 0 8 14 38 2 0 2 0 1 23 39 2 0 2 1 2 24 40 1 0 1 2 9 25 41 2 1 0 0 10 26 42 1 2 0 0 1 28 43 2 1 0 1 4 33 44 2 1 2 1 1 34 45 2 1 2 1 2 35 46 1 2 1 2];
Get the list of clusters and the list of incompatible branches. The clusters
matrix has two columns, therefore there are two clusters.
[clusters,incompBranches] = clusterTrackBranches(history);
Specify a 20-by-1 column vector containing branch scores.
scores = [4.5 44.9 47.4 6.8 6.8 43.5 50.5 61.9 64.7 9.1 9.1 19 61.7 ...
63.5 21.2 20.5 60.7 67.3 79.2 81.5]';
Get a matrix of hypothesis.
hypotheses = compatibleTrackBranches(clusters,incompBranches,scores,10);
Prune the track branches, using name-value pair arguments to specify a single sensor and the 'Hypothesis'
method of N-scan pruning. Return the pruning flag, global probability, and pruning information about each branch. To make the information easier to compare, convert the information from a struct to a table.
The i-th value of toPrune
is true
if any of 'PrunedByProbability
', 'PrunedByNScan
', or 'PrunedByNumBranches
' are true
in the i-th row of the information table.
[toPrune,probs,info] = pruneTrackBranches(history,scores,hypotheses, ... 'NumSensors',1,'NScanPruning','Hypothesis'); infoTable = struct2table(info)
infoTable=20×6 table
BranchID PriorProbability GlobalProbability PrunedByProbability PrunedByNScan PrunedByNumBranches
________ ________________ _________________ ___________________ _____________ ___________________
14 0.98901 0.098901 false false false
23 1 0.1 false false true
24 1 0.1 false false true
25 0.99889 0.099889 false false false
26 0.99889 0.099889 false false false
28 1 0 true true false
33 1 0 true false false
34 1 0.2 false false false
35 1 0.2 false false false
36 0.99989 0.19998 false false false
37 0.99989 0.19998 false false false
38 1 0 true false false
39 1 0.1 false false false
40 1 0.1 false false false
41 1 0.1 false false false
42 1 0.1 false false false
⋮
Input Arguments
branchHistory
— Branch history
matrix of integers
Branch history, specified as a matrix of integers. Each row of
branchHistory
represents a unique track branch.
branchHistory
must have
3+(D×S) columns, where D is
the number of maintained scans (the history depth) and S is the
maximum number of maintained sensors. For more information, see the history
output of the
trackBranchHistory
system object.
scores
— Branch scores
M-by-1 numeric vector | M-by-2 numeric matrix
Branch scores, specified as an M-by-1 numeric vector or an M-by-2 numeric matrix.
Note
If you specify scores
as an
M-by-2 numeric matrix, then the first column
specifies the current score of each branch and the second column specifies the maximum
score. pruneTrackBranches
ignores the second column.
Data Types: single
| double
hypotheses
— Hypotheses
M-by-H logical matrix
Hypotheses, returned as an M-by-H logical
matrix, where M is the number of branches and H is
the number of global hypotheses. You can use clusterTrackBranches
to compute the clusters from a branch history matrix,
then use compatibleTrackBranches
to compute the hypotheses from the
clusters.
Name-Value Arguments
Specify optional pairs of arguments as
Name1=Value1,...,NameN=ValueN
, where Name
is
the argument name and Value
is the corresponding value.
Name-value arguments must appear after other arguments, but the order of the
pairs does not matter.
Before R2021a, use commas to separate each name and value, and enclose
Name
in quotes.
Example: [toPrune,probs] =
pruneTrackBranches(branchHistory,scores,hypotheses,'MinBranchProbability',2e-3);
MinBranchProbability
— Minimum branch probability
1e-3
(default) | number in the range [0,1)
Minimum branch probability threshold, specified as the comma-separated pair
consisting of 'MinBranchProbability'
and a number in the range
[0,1). Typical values are between 1e-3 and 5e-3. The
pruneTrackBranches
function prunes branches with global
probability less than the threshold.
MaxNumTrackBranches
— Maximum number of branches
3
(default) | positive integer
Maximum number of branches to keep per track, specified as the comma-separated
pair consisting of 'MaxNumTrackBranches'
and a positive integer.
Typical values are between 2 and 6. If a track has more than this number of branches,
then pruneTrackBrances
prunes branches with the lowest initial
score.
NScanPruning
— N-scan pruning method
'None'
(default) | 'Hypothesis'
N-scan pruning method, specified as the comma-separated pair consisting of
'NScanPruning'
and 'None'
or
'Hypothesis'
. If you specify 'Hypothesis'
,
then pruneTrackBrances
prunes branches that are incompatible with
the current most likely branch in the most recent N scans. By
default, pruneTrackBrances
does not use N-scan pruning.
NumSensors
— Number of sensors
20
(default) | positive integer
Number of sensors in history, specified as the comma-separated pair consisting of
'NumSensors'
and a positive integer.
Output Arguments
toPrune
— Branches to prune
M-by-1 logical vector
Branches to prune, returned as an M-by-1
logical vector. A value of true
indicates that the branch should be
pruned.
Data Types: logical
globalProbability
— Global branch probabilities
M-by-1 numeric vector
Global branch probabilities, returned as an M-by-1 numeric vector.
info
— Pruning information
struct
Pruning information about each branch, returned as a struct with the following fields.
BranchID
— An M-by-1 numeric vector. Each value specifies the ID of a track branch. The IDs come from the third column ofbranchHistory
.PriorProbability
— An M-by-1 numeric vector. Each value specifies the branch prior probability from the branch score.GlobalProbability
— An M-by-1 numeric vector. Each value specifies the branch global probability, which considers the hypotheses that contain the branch and their scores.PrunedByProbability
— An M-by-1 logical vector. A value oftrue
indicates that the branch is pruned byMinBranchProbability
.PrunedByNScan
— An M-by-1 logical vector. A value oftrue
indicates that the branch is pruned byNScanPruning
.PrunedByNumBranches
— An M-by-1 logical vector. A value oftrue
indicates that the branch is pruned byMaxNumTrackBranches
.
References
[1] Werthmann, John R. "A Step-by-Step Description of a Computationally Efficient Version of Multiple Hypothesis Tracking." In Proceedings of SPIE Vol. 1698, Signal and Processing of Small Targets. 1992, pp. 288–300. doi: 10.1117/12.139379.
[2] Blackman, Samuel, and Robert Popoli. "Design and Analysis of Modern Tracking Systems." Artech House, 1999.
Extended Capabilities
C/C++ Code Generation
Generate C and C++ code using MATLAB® Coder™.
Version History
Introduced in R2018b
MATLAB コマンド
次の MATLAB コマンドに対応するリンクがクリックされました。
コマンドを MATLAB コマンド ウィンドウに入力して実行してください。Web ブラウザーは MATLAB コマンドをサポートしていません。
Select a Web Site
Choose a web site to get translated content where available and see local events and offers. Based on your location, we recommend that you select: .
You can also select a web site from the following list:
How to Get Best Site Performance
Select the China site (in Chinese or English) for best site performance. Other MathWorks country sites are not optimized for visits from your location.
Americas
- América Latina (Español)
- Canada (English)
- United States (English)
Europe
- Belgium (English)
- Denmark (English)
- Deutschland (Deutsch)
- España (Español)
- Finland (English)
- France (Français)
- Ireland (English)
- Italia (Italiano)
- Luxembourg (English)
- Netherlands (English)
- Norway (English)
- Österreich (Deutsch)
- Portugal (English)
- Sweden (English)
- Switzerland
- United Kingdom (English)