assignmunkres

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

Синтаксис

[assignments,unassignedrows,unassignedcolumns] = assignmunkres(costmatrix,costofnonassignment)

Описание

пример

[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

Для просмотра документации необходимо авторизоваться на сайте