assignDetectionsToTracks

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

Синтаксис

[assignments,unassignedTracks,unassignedDetections] = assignDetectionsToTracks(costMatrix,costOfNonAssignment)
[assignments,unassignedTracks,unassignedDetections] = assignDetectionsToTracks(costMatrix, unassignedTrackCost,unassignedDetectionCost)

Описание

пример

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

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

свернуть все

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

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

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

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

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

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

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

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

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

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