partitionDetections

Обнаружения раздела на основе расстояния

Описание

Раздел набора обнаружений задан как деление этих обнаружений в непустые взаимоисключающие ячейки обнаружения. Используя несколько порогов расстояния, можно использовать функцию, чтобы разделить обнаружения на различные ячейки обнаружения и получить все возможные разделы с помощью или distance-partitioning или density-based spatial clustering of applications with noise (DBSCAN). Кроме того, можно выбрать метрику расстояния в качестве расстояния Mahalanobis или Евклидова расстояния путем определения 'Distance' Аргумент пары "имя-значение".

Разделение расстояния

Разделение расстояния является алгоритмом разделения значения по умолчанию partitionDetections. В разделении расстояния кластер обнаружения включает обнаружения, расстояние которых, по крайней мере, до еще одного обнаружения в кластере меньше порога расстояния. Другими словами, два обнаружения принадлежат тому же кластеру обнаружения, если их расстояние меньше порога расстояния. Чтобы использовать разделение расстояния, можно задать 'Algorithm' Аргумент Name-Value как 'Distance-Partitioning' или просто не задавайте 'Algorithm' аргумент.

пример

partitions = partitionDetections(detections) возвращает возможные разделы для detections использование делящего расстояние алгоритма. По умолчанию функция использует алгоритм разделения расстояния и считает все вещественное значение порогами расстояния Mahalanobis между 0,5 и 6.25 и возвращает максимум 100 разделов.

partitions = partitionDetections(detections,tLower,tUpper) задает нижние и верхние границы порогов расстояния, tLower и tUpper.

partitions = partitionDetections(detections,tLower,tUpper,'MaxNumPartitions',maxNumber) задает максимальное количество позволенных разделов, maxNumber.

partitions = partitionDetections(detections,allThresholds)задает точные пороги, рассмотренные для раздела.

[partitions,indexDP] = partitionDetections(detections,allThresholds) дополнительно возвращает вектор индекса indexDP представление соответствия между всеми порогами и получившимися разделами.

Разделение DBSCAN

Чтобы использовать разделение DBSCAN, задайте 'Algorithm' аргумент как 'DBSCAN'.

partitions = partitionDetections(detections,'Algorithm','DBSCAN') возвращает возможные разделы обнаружений при помощи разделения DBSCAN и десяти порогов расстояния (эпсилон или соседний поисковый радиус) значения, линейно расположенные с интервалами между 0,25 и 6.25. По умолчанию каждый кластер должен содержать по крайней мере три точки.

пример

partitions = partitionDetections(detections,epsilon,minNumPoints,'Algorithm','DBSCAN') задает пороги расстояния epsilon и минимальное число точек на кластерный minNumPoints из алгоритма DBSCAN.

[partitions,indexDB] = partitionDetections(detections,epsilon,minNumPoints,'Algorithm','DBSCAN') дополнительно возвращает вектор индекса indexDB представление соответствия между пороговыми значениями epsilon и получившиеся разделы.

Задайте метрику расстояния

Используя 'Distance' Аргумент Name-Value, можно задать метрику расстояния, используемую в разделении.

___ = partitionDetections(___,'Distance',distance) дополнительно задает метрику расстояния как 'Mahalanobis' или 'Euclidean'. Используйте этот синтаксис с любым из аргументов ввода или вывода в предыдущих синтаксисах.

Примеры

свернуть все

Сгенерируйте 2D обнаружения с помощью objectDetection.

rng(2018); % For reproducible results
detections = cell(10,1);
for i = 1:numel(detections)
    id = randi([1 5]);
    detections{i} = objectDetection(0,[id;id] + 0.1*randn(2,1));
    detections{i}.MeasurementNoise = 0.01*eye(2);
end

Извлеките и отобразите сгенерированные измерения положения.

d = [detections{:}];
measurements = [d.Measurement];

figure()
plot(measurements(1,:),measurements(2,:),'x','MarkerSize',10,'MarkerEdgeColor','b')
title('Measurements')
xlabel('x')
ylabel('y')

Figure contains an axes object. The axes object with title Measurements contains an object of type line.

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

partitions = partitionDetections(detections);
numPartitions = size(partitions,2);

Визуализируйте разделы. Каждый цвет представляет кластер обнаружения.

figure()
for i = 1:numPartitions
    numCells = max(partitions(:,i));
    subplot(4,ceil(numPartitions/4),i);
    for k = 1:numCells
        ids = partitions(:,i) == k;
        plot(measurements(1,ids),measurements(2,ids),'.','MarkerSize',15);
        hold on;
    end
    title(['Partition ',num2str(i),' (',num2str(k),' Detection Clusters)']);
end

Figure contains 7 axes objects. Axes object 1 with title Partition 1 (4 Detection Clusters) contains 4 objects of type line. Axes object 2 with title Partition 2 (5 Detection Clusters) contains 5 objects of type line. Axes object 3 with title Partition 3 (6 Detection Clusters) contains 6 objects of type line. Axes object 4 with title Partition 4 (7 Detection Clusters) contains 7 objects of type line. Axes object 5 with title Partition 5 (8 Detection Clusters) contains 8 objects of type line. Axes object 6 with title Partition 6 (9 Detection Clusters) contains 9 objects of type line. Axes object 7 with title Partition 7 (10 Detection Clusters) contains 10 objects of type line.

Сгенерируйте 2D обнаружения с помощью objectDetection.

rng(2018); % For reproducible results
detections = cell(10,1);
for i = 1:numel(detections)
    id = randi([1 5]);
    detections{i} = objectDetection(0,[id;id] + 0.1*randn(2,1));
    detections{i}.MeasurementNoise = 0.01*eye(2);
end

Извлеките и отобразите сгенерированные измерения положения.

d = [detections{:}];
measurements = [d.Measurement];

figure()
plot(measurements(1,:),measurements(2,:),'x','MarkerSize',10,'MarkerEdgeColor','b')
title('Measurements')
xlabel('x')
ylabel('y')

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

[partitions,index] = partitionDetections(detections,[1.6;2],2,'Algorithm','DBSCAN');
numPartitions = size(partitions,2);

Визуализируйте разделы. Каждый цвет представляет кластер обнаружения.

figure()
for i = 1:numPartitions
    numCells = max(partitions(:,i));
    subplot(2,ceil(numPartitions/2),i);
    for k = 1:numCells
        ids = partitions(:,i) == k;
        plot(measurements(1,ids),measurements(2,ids),'.','MarkerSize',15);
        hold on;
    end
    title(['Partition ',num2str(i),' (',num2str(k),' Detection Clusters)']);
end

От значений индекса первый раздел соответствует значению эпсилона 2 и второй раздел соответствует значению эпсилона 1.6.

index
index = 1×2 uint32 row vector

   2   1

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

свернуть все

Обнаружения объектов в виде N - массив элемента objectDetection объекты, N - массив ячеек элемента objectDetection объекты или N - массив элемента структур, имена полей которых совпадают с именами свойства objectDetection объект, где N является количеством обнаружений. Можно создать detections непосредственно, или можно получить detections от выходных параметров объектов датчика, таких как fusionRadarSensor, irSensor, и sonarSensor.

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

Метрика расстояния для разделения в виде 'Mahalanobis' или 'Euclidean'.

Разделение расстояния

Нижняя граница порогов расстояния в виде скаляра. Этот аргумент устанавливает нижнюю границу порогов расстояния, рассмотренных для разделения расстояния.

Пример: 0.05

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

Верхняя граница порогов расстояния в виде скаляра. Этот аргумент устанавливает верхнюю границу порогов расстояния, рассмотренных для разделения расстояния.

Пример: 0.98

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

Максимальное количество позволенных разделов для разделения расстояния в виде положительного целого числа.

Пример: 20

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

Все пороги для разделения расстояния в виде M - элемент вектор с действительным знаком. Функция вычисляет разделы на основе каждого порогового значения, обеспеченного в allThresholds. Обратите внимание на то, что несколько порогов могут привести к тому же разделу и функциональному выходу partitions, возвращенный как N-by-Q матрица с QM, содержит только уникальные разделы.

Пример: [0.1;0.2;0.35;0.4]

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

DBSCAN

Все пороги для DBSCAN в виде M - элемент вектор элемента с действительным знаком. Функция вычисляет разделы на основе каждого порогового значения, обеспеченного в epsilon. Обратите внимание на то, что несколько порогов могут привести к тому же разделу и функциональному выходу partitions, возвращенный как N-by-Q матрица с QM, содержит только уникальные разделы.

Пример: [0.1;0.2;0.35;0.4]

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

Минимальное число точек для каждого кластера в разделе в виде положительного целого числа, которое применяется ко всем значениям эпсилона или как к M - вектор элемента из положительных целых чисел, где M является длиной epsilon вектор.

Пример: 20

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

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

свернуть все

Разделы обнаружений, возвращенных как N-by-Q матрица. N является количеством обнаружений, и Q является количеством разделов. Каждый столбец матрицы представляет допустимый раздел. В каждом столбце значение i th элемент представляет личный номер кластера, которому принадлежит i th обнаружение. Например, учитывая матрицу раздела P, если P (i, j) = k, то в разделе j, обнаружение i принадлежит, чтобы кластеризировать k.

Вектор индекса для разделения расстояния, возвращенного как M - вектор элемента из положительных целых чисел. Каждым элементом вектора индекса является индекс раздела, к которому дает соответствующее пороговое значение в allThreshould входной параметр. Например, если indexDP(i) = k, затем allThresholds(i) соответствует разделу, заданному partitions(:,k).

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

Вектор индекса для DBSCAN, возвращенного как M - вектор элемента из положительных целых чисел. Каждым элементом вектора индекса является индекс раздела, к которому дает соответствующее пороговое значение в epsilon входной параметр. Например, если indexDB(i) k, затем epsilon(i) соответствует разделу, заданному partitions(:,k).

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

Ссылки

[1] Granstrom, Карл, Кристиан Ландкуист и Омут Оргунер. “Расширенное Целевое Отслеживание Используя Фильтр Gaussian-Mixture PHD”. Транзакции IEEE на Космических и Электронных системах 48, № 4 (октябрь 2012): 3268–86. https://doi.org/10.1109/TAES.2012.6324703.

[2] Сложный эфир, Мартин, Ханс-Питер Кригель, Йорг Сандер и Сяовэй Сюй. “Основанный на плотности Алгоритм для Обнаружения Кластеров в Больших Пространственных Базах данных с Шумом”. В Продолжениях Второй Международной конференции по вопросам Открытия Знаний и Анализа данных, 226–31. KDD ’96. Портленд, Орегон: Нажатие AAAI, 1996.

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

Смотрите также

| |

Введенный в R2019a