exponenta event banner

assignDetectionsToTracks

Назначение обнаружений дорожкам для отслеживания нескольких объектов

Описание

пример

[assignments,unassignedTracks,unassignedDetections] = assignDetectionsToTracks(costMatrix,costOfNonAssignment) назначает обнаружения трекам в контексте отслеживания нескольких объектов, используя вариант Джеймса Манкреса алгоритма назначения Венгрии. Он также определяет, какие дорожки отсутствуют и какие обнаружения должны начать новые дорожки. Он возвращает индексы назначенных и неназначенных дорожек и неназначенных обнаружений. costMatrix должна быть матрицей M-by-N. В этой матрице M представляет количество дорожек, а N - количество обнаружений. Каждое значение представляет стоимость назначения N-го обнаружения M-й дорожке. Чем ниже стоимость, тем больше вероятность того, что обнаружение будет назначено дорожке. costOfNonAssignment скалярный ввод представляет стоимость дорожки или обнаружения, остающегося неназначенным.

[assignments,unassignedTracks,unassignedDetections] = assignDetectionsToTracks(costMatrix, unassignedTrackCost,unassignedDetectionCost) определяет стоимость неназначенных дорожек и обнаружений отдельно. unassignedTrackCost должно быть скалярным значением или вектором M-элемента, где M представляет количество дорожек. Для вектора М-элемента каждый элемент представляет собой стоимость отсутствия какого-либо обнаружения для этой дорожки. unassignedDetectionCost должно быть скалярным значением или вектором N-элемента, где N представляет число обнаружений.

Примеры

свернуть все

В этом примере показано, как назначить обнаружение дорожке для одного видеокадра.

Задание прогнозируемых местоположений объектов в текущем кадре. Получение прогнозов с помощью объекта системы фильтров Калмана.

predictions = [1,1;2,2];

Установка местоположения объектов, обнаруженных в текущем кадре. В этом примере имеются 2 дорожки и 3 новых обнаружения. Таким образом, по меньшей мере, одно из обнаружений не соответствует друг другу, что может указывать на новую дорожку.

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

Предварительное распределение матрицы затрат.

cost = zeros(size(predictions,1),size(detections,1));

Вычислите стоимость каждого прогноза, соответствующего обнаружению. Стоимость здесь определяется как евклидово расстояние между предсказанием и обнаружением.

for i = 1:size(predictions, 1)
      diff = detections - repmat(predictions(i,:),[size(detections,1),1]);
      cost(i, :) = sqrt(sum(diff .^ 2,2));
end

Связать обнаружения с прогнозами. Обнаружение 1 должно соответствовать дорожке 1, а обнаружение 2 должно соответствовать дорожке 2. Обнаружение 3 должно быть несопоставимым.

[assignment,unassignedTracks,unassignedDetections] = ...
            assignDetectionsToTracks(cost,0.2);
  figure;
  plot(predictions(:,1),predictions(:,2),'*',detections(:,1),...
            detections(:,2),'ro');
  hold on;
  legend('predictions','detections');
  for i = 1:size(assignment,1)
    text(predictions(assignment(i, 1),1)+0.1,...
            predictions(assignment(i,1),2)-0.1,num2str(i));
    text(detections(assignment(i, 2),1)+0.1,...
            detections(assignment(i,2),2)-0.1,num2str(i));
  end
  for i = 1:length(unassignedDetections)
    text(detections(unassignedDetections(i),1)+0.1,...
            detections(unassignedDetections(i),2)+0.1,'unassigned');
  end
  xlim([0,4]);
  ylim([0,4]);

Figure contains an axes. The axes contains 7 objects of type line, text. These objects represent predictions, detections.

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

свернуть все

Стоимость назначения обнаружения дорожке, определенной как матрица M-by-N, где M представляет количество дорожек, а N - количество обнаружений. Значение матрицы затрат должно быть вещественным, непарабельным и числовым. Чем ниже стоимость, тем больше вероятность того, что обнаружение будет назначено дорожке. Каждое значение представляет стоимость назначения N-го обнаружения M-й дорожке. Если нет вероятности назначения между обнаружением и дорожкой, costMatrix вход установлен в значение Inf. Внутри этой функции матрица затрат заполняется фиктивными строками и столбцами для учета возможности неназначенных дорожек и обнаружений. Дополненные строки представляют обнаружения, не назначенные каким-либо дорожкам. Заполненные столбцы представляют дорожки, не связанные с обнаружениями. Функция применяет венгерский алгоритм назначения к дополненной матрице.

Типы данных: int8 | uint8 | int16 | uint16 | int32 | uint32 | single | double

Стоимость отсутствия назначения обнаружения какой-либо дорожке или дорожке для обнаружения. Это значение можно указать как скалярное значение, представляющее стоимость дорожки или обнаружение, оставшееся неназначенным. Неназначенное обнаружение может стать началом новой дорожки. Если дорожка не назначена, объект не отображается. Чем выше costOfNonAssignment значение, чем выше вероятность того, что каждой дорожке будет назначено обнаружение.

Внутри этой функции матрица затрат заполняется фиктивными строками и столбцами для учета возможности неназначенных дорожек и обнаружений. Дополненные строки представляют обнаружения, не назначенные каким-либо дорожкам. Заполненные столбцы представляют дорожки, не связанные с обнаружениями. Чтобы применить одно и то же значение ко всем элементам в строках и столбцах, используйте синтаксис costOfNonAssignment вход. Чтобы изменить значения для различных обнаружений или дорожек, используйте синтаксис с unassignedTrackCost и unassignedDetectionCost входные данные.

Типы данных: int8 | uint8 | int16 | uint16 | int32 | uint32 | single | double

Стоимость или вероятность неназначенной дорожки. Можно задать это значение как скалярное значение или вектор M-элемента, где M представляет количество дорожек. Для вектора М-элемента каждый элемент представляет собой стоимость отсутствия какого-либо обнаружения для этой дорожки. Скалярный ввод представляет одинаковую стоимость отмены назначения для всех дорожек. Стоимость может варьироваться в зависимости от того, что вы знаете о каждом треке и сцене. Например, если объект собирается покинуть поле зрения, стоимость не назначенной соответствующей дорожки должна быть низкой.

Внутри этой функции матрица затрат заполняется фиктивными строками и столбцами для учета возможности неназначенных дорожек и обнаружений. Дополненные строки представляют обнаружения, не назначенные каким-либо дорожкам. Заполненные столбцы представляют дорожки, не связанные с обнаружениями. Чтобы изменить значения для различных обнаружений или дорожек, используйте синтаксис с unassignedTrackCost и unassignedDetectionCost входные данные. Чтобы применить одно и то же значение ко всем элементам в строках и столбцах, используйте синтаксис costOfNonAssignment вход.

Типы данных: int8 | uint8 | int16 | uint16 | int32 | uint32 | single | double

Стоимость неназначенного обнаружения, заданная как скалярное значение или вектор N-элемента, где N представляет количество обнаружений. Для вектора N- элемента каждый элемент представляет стоимость запуска новой дорожки для этого обнаружения. Скалярный ввод представляет одинаковую стоимость отмены назначения для всех дорожек. Стоимость может варьироваться в зависимости от того, что известно о каждом обнаружении и сцене. Например, если обнаружение появляется близко к краю изображения, это скорее всего новый объект.

Внутри этой функции матрица затрат заполняется фиктивными строками и столбцами для учета возможности неназначенных дорожек и обнаружений. Дополненные строки представляют обнаружения, не назначенные каким-либо дорожкам. Заполненные столбцы представляют дорожки, не связанные с обнаружениями. Чтобы изменить значения для различных обнаружений или дорожек, используйте синтаксис с unassignedTrackCost и unassignedDetectionCost входные данные. Чтобы применить одно и то же значение ко всем элементам в строках и столбцах, используйте синтаксис costOfNonAssignment вход.

Типы данных: int8 | uint8 | int16 | uint16 | int32 | uint32 | single | double

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

свернуть все

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

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

Неназначенные дорожки, возвращенные как вектор P-элемента. P представляет количество неназначенных дорожек. Каждый элемент представляет дорожку, которой не назначено никаких обнаружений.

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

Неназначенные обнаружения, возвращаемые как вектор Q-элемента, где Q представляет количество неназначенных обнаружений. Каждый элемент представляет обнаружение, которое не было назначено ни одной дорожке. Эти обнаружения могут начать новые треки.

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

Ссылки

[1] Миллер, Мэтт Л., Гарольд С. Стоун и Ингемар Дж. Кокс, «Оптимизация метода ранжирования Мурти», IEEE Transactions on Aerospace and Electronic Systems, 33 (3), 1997.

[2] Манкрес, Джеймс, «Алгоритмы для задач назначения и транспортировки», Журнал Общества промышленной и прикладной математики, том 5, номер 1, март 1957.

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

Создание кода C/C + +
Создайте код C и C++ с помощью MATLAB ® Coder™

.
Представлен в R2012b