assignDetectionsToTracks

Присвойте обнаружения дорожкам для мультиобъектного отслеживания

Описание

пример

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

[assignments,unassignedTracks,unassignedDetections] = assignDetectionsToTracks(costMatrix, unassignedTrackCost,unassignedDetectionCost) задает стоимость неприсвоенных дорожек и обнаружений отдельно. unassignedTrackCost должно быть скалярное значение или M - вектор элемента, где 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 object. The axes object contains 7 objects of type line, text. These objects represent predictions, detections.

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

свернуть все

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

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

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

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

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

Стойте или вероятность неприсвоенной дорожки. Можно задать это значение как скалярное значение или M - вектор элемента, где 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 на космических и электронных системах, 33 (3), 1997.

[2] Munkres, Джеймс, “Алгоритмы для проблем присвоения и транспортировки”, журнал общества промышленной и прикладной математики, объем 5, номер 1, март 1957.

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

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

Представленный в R2012b