assignmunkres

Глобальная переменная Munkres самый близкий соседний алгоритм присвоения

Описание

пример

[assignments,unassignedrows,unassignedcolumns] = assignmunkres(costmatrix,costofnonassignment) возвращает таблицу assignments из обнаружений к дорожкам с помощью алгоритма Munkres. Алгоритм Munkres получает оптимальное решение проблемы присвоения глобального самого близкого соседа (GNN). Оптимальное решение минимизирует общую стоимость присвоений.

Стоимость каждого потенциального присвоения содержится в матрице стоимости, costmatrix. Каждая матричная запись представляет стоимость возможные присвоения. Строки матрицы представляют дорожки, и столбцы представляют обнаружения. Все возможные присвоения представлены в матрице стоимости. Чем ниже стоимость, тем более вероятно присвоение должно быть сделано. Каждая дорожка может быть присвоена самое большее одному обнаружению, и каждое обнаружение может быть присвоено самое большее одной дорожке. Если количество строк больше количества столбцов, некоторые дорожки являются неприсвоенными. Если количество столбцов больше количества строк, некоторые обнаружения являются неприсвоенными. Можно установить запись costmatrix к Inf запретить присвоение.

costofnonassignment представляет стоимость оставления следов или неприсвоенных обнаружений. Более высокие значения увеличивают вероятность, что каждый существующий объект присвоен.

Функция возвращает список неприсвоенных дорожек, unassignedrows, и список неприсвоенных обнаружений, unassignedcolumns

Примеры

свернуть все

Используйте assignMunkres присваивать три обнаружения двум дорожкам.

Начните с двух предсказанных мест дорожки в координатах x-y.

tracks = [1,1; 2,2];

Примите, что три обнаружения получены. По крайней мере одно обнаружение не будет присвоено.

dets = [1.1, 1.1; 2.1, 2.1; 1.5, 3];

Создайте матрицу стоимости путем определения стоимости присвоения обнаружения к дорожке как Евклидово расстояние между ними. Установите стоимость неприсвоения на 0,2.

for i = size(tracks, 1):-1:1
    delta = dets - tracks(i, :);
    costMatrix(i, :) = sqrt(sum(delta .^ 2, 2));
end
costofnonassignment = 0.2;

Используйте Аукционный алгоритм, чтобы присвоить обнаружения дорожкам.

[assignments, unassignedTracks, unassignedDetections] = ...
    assignmunkres(costMatrix,costofnonassignment);

Отобразите присвоения.

disp(assignments)
   1   1
   2   2

Покажите, что нет никаких неприсвоенных дорожек.

disp(unassignedTracks)

Отобразите неприсвоенные обнаружения.

disp(unassignedDetections)
   3

Постройте обнаружение, чтобы отследить присвоения.

plot(tracks(:, 1), tracks(:, 2), '*', dets(:, 1), dets(:, 2), 'o')
hold on
xlim([0, 4])
ylim([0, 4])
legend('tracks', 'detections')
assignStr = strsplit(num2str(1:size(assignments,1)));
text(tracks(assignments(:, 1),1) + 0.1, ...
    tracks(assignments(:, 1),2) - 0.1, assignStr);
text(dets(assignments(:, 2),1) + 0.1, ...
    dets(assignments(:, 2),2) - 0.1, assignStr);
text(dets(unassignedDetections(:),1) + 0.1, ...
    dets(unassignedDetections(:),2) + 0.1, 'unassigned');

Дорожка к присвоениям обнаружения:

  1. Обнаружение 1 присвоено отследить 1.

  2. Обнаружение 2 присвоено отследить 2.

  3. Обнаружение 3 не присвоено.

Входные параметры

свернуть все

Стойте матрицы в виде M-by-N матрица. M является количеством дорожек, которые будут присвоены, и N является количеством обнаружений, которые будут присвоены. Каждая запись в матрице стоимости содержит стоимость присвоения обнаружения и дорожки. Матрица может содержать Inf записи, чтобы указать, что присвоение запрещается. Матрица стоимости не может быть разреженной матрицей.

Типы данных: single | double

Стоимость неприсвоения в виде скаляра. Стоимость неприсвоения представляет стоимость оставления следов или неприсвоенных обнаружений. Более высокие значения увеличивают вероятность, что каждый объект присвоен. Значение не может быть установлено к Inf.

Типы данных: single | double

Выходные аргументы

свернуть все

Присвоение обнаружений, чтобы отследить, возвращенный как L с целочисленным знаком-by-2 матрица, где L является количеством присвоений. Первый столбец матрицы содержит присвоенные индексы дорожки, и второй столбец содержит присвоенные индексы обнаружения.

Типы данных: uint32

Индексы неприсвоенных дорожек, возвращенных как P с целочисленным знаком-by-1 вектор-столбец.

Типы данных: uint32

Индексы неприсвоенных обнаружений, возвращенных как Q с целочисленным знаком-by-1 вектор-столбец.

Типы данных: uint32

Ссылки

[1] Сэмюэль С. Блэкмен и Пополи, R. Проект и анализ современных систем слежения. Дом Artech: Норвуд, MA. 1999.

Расширенные возможности

Генерация кода C/C++
Генерация кода C и C++ с помощью MATLAB® Coder™.

Смотрите также

Функции

Введенный в R2018b