assignjv

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

Описание

пример

[assignments,unassignedrows,unassignedcolumns] = assignjv(costmatrix,costofnonassignment) возвращает таблицу assignments из обнаружений к дорожкам с помощью алгоритма Jonker-Volgenant. Алгоритм JV находит оптимальное решение проблемы присвоения глобального самого близкого соседа (GNN) путем нахождения набора присвоений, которые минимизируют общую стоимость присвоений. Алгоритм Jonker-Volgenant решает присвоение GNN в двух фазах: начните с аукционного алгоритма и закончитесь алгоритмом поиска кратчайшего пути Дейкстры.

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

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

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

Примеры

свернуть все

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

Запустите с двух предсказанных мест дорожки в координатах 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] = ...
    assignjv(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