exponenta event banner

findNearestNeighbors

Поиск ближайших соседей точки в облаке точек

Описание

пример

[indices,dists] = findNearestNeighbors(ptCloud,point,K) возвращает значение indices для K-ближайших соседей точки запроса во входном облаке точек. ptCloud может быть неорганизованным или организованным облаком точек. K-ближайшие соседи точки запроса вычисляются с использованием алгоритма поиска на основе дерева Kd.

пример

[indices,dists] = findNearestNeighbors(ptCloud,point,K,camMatrix) возвращает К-ближайшие соседи точки запроса во входном облаке точек. Входное облако точек - это организованное облако точек, генерируемое глубинной камерой. Определяют К-ближайшие соседи точки запроса, используя алгоритм быстрого аппроксимированного К-ближайшего поиска соседей.

Функция использует матрицу проекции камеры camMatrix чтобы узнать взаимосвязь между соседними точками и, следовательно, ускорить поиск ближайшего соседа. Однако результаты имеют более низкую точность по сравнению с подходом на основе дерева Kd.

Примечание

  • Этот синтаксис поддерживает только организованные данные облака точек, создаваемые датчиками RGB-D.

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

[indices,dists] = findNearestNeighbors(___,Name,Value) указывает параметры, использующие один или несколько аргументов «имя-значение» в дополнение к входным аргументам в предыдущих синтаксисах.

Примеры

свернуть все

Загрузите набор 3-D точек координат в рабочее пространство.

load('xyzPoints.mat');

Создайте объект-облако точек.

ptCloud = pointCloud(xyzPoints);

Укажите точку запроса и число ближайших соседей для идентификации.

point = [0,0,0];
K = 220;

Получить индексы и расстояния К ближайших соседних точек.

[indices,dists] = findNearestNeighbors(ptCloud,point,K);

Отображение облака точек. Постройте график точки запроса и их ближайших соседей.

figure
pcshow(ptCloud)
hold on
plot3(point(1),point(2),point(3),'*r')
plot3(ptCloud.Location(indices,1),ptCloud.Location(indices,2),ptCloud.Location(indices,3),'*')
legend('Point Cloud','Query Point','Nearest Neighbors','Location','southoutside','Color',[1 1 1])
hold off

Figure contains an axes. The axes contains 3 objects of type scatter, line. These objects represent Point Cloud, Query Point, Nearest Neighbors.

Найдите К-ближайшие соседи точки запроса в данных организованного облака точек с помощью матрицы проекции камеры. Вычислите матрицу проекции камеры из выбранных точек данных облака точек и их соответствующих координат точек изображения.

Загрузка упорядоченных данных облака точек в рабочее пространство. Облако точек генерируется с помощью датчика глубины Kinect.

ld = load('object3d.mat');
ptCloud = ld.ptCloud;

Укажите размер шага для выборки данных облака точек.

stepSize = 100;

Выполните выборку входного облака точек и сохраните отобранные координаты 3-D точек как объект облака точек.

indices = 1:stepSize:ptCloud.Count;
tempPtCloud = select(ptCloud,indices);

Удалите недопустимые точки из выбранного облака точек.

[tempPtCloud,validIndices] = removeInvalidPoints(tempPtCloud);

Определите координаты 3-D точек мира облака входных точек.

worldPoints = tempPtCloud.Location;

Найдите координаты 2-D изображения, соответствующие координатам точек 3-D облака входных точек.

[Y,X] = ind2sub([size(ptCloud.Location,1),size(ptCloud.Location,2)],indices);
imagePoints = [X(validIndices)' Y(validIndices)'];

Оценка матрицы проекции камеры по изображению и координатам мировой точки.

camMatrix = estimateCameraMatrix(imagePoints,worldPoints);

Укажите точку запроса и число ближайших соседей для идентификации.

point = [0.4 0.3 0.2];
K = 20;

Найдите индексы и расстояния К ближайших соседних точек с помощью матрицы проекции камеры. Использование метода облака точек select для получения данных облака точек ближайших соседей.

[indices,dists] = findNearestNeighbors(ptCloud,point,K,camMatrix);
ptCloudB = select(ptCloud,indices);

Отображение облака точек и ближайших соседей точки запроса.

figure
pcshow(ptCloud)
hold on
pcshow(ptCloudB.Location,'ob')
legend('Point Cloud','Nearest Neighbors','Location','southoutside','Color',[1 1 1])
hold off

Figure contains an axes. The axes contains 2 objects of type scatter. These objects represent Point Cloud, Nearest Neighbors.

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

свернуть все

Облако точек, указанное как pointCloud объект.

Примечание

Функция поддерживает организованные данные облака точек, генерируемые только от датчиков RGB-D.

Точка запроса, заданная как трехэлементный вектор формы [x,y,z].

Число ближайших соседей, указанное как положительное целое число.

Матрица проекции камеры, заданная как матрица 4 на 3, отображающая точки мира 3-D 2-D точки изображения. Вы можете вычислить camMatrix с помощью estimateCameraMatrix функция.

Аргументы пары «имя-значение»

Укажите дополнительные пары, разделенные запятыми Name,Value аргументы. Name является именем аргумента и Value - соответствующее значение. Name должен отображаться внутри кавычек. Можно указать несколько аргументов пары имен и значений в любом порядке как Name1,Value1,...,NameN,ValueN.

Пример: findNearestNeighbors(ptCloud,point,k,'Sort',true)

Отсортировать индексы, указанные как пара, разделенная запятыми 'Sort' и логический скаляр. При установке Sort кому trueвозвращаемые индексы сортируются в порядке возрастания на основе расстояния от точки запроса. Чтобы отключить сортировку, установите Sort кому false.

Количество проверяемых конечных узлов, указанных как разделенная запятыми пара, состоящая из 'MaxLeafChecks' и целое число. При установке этого значения в значение Inf, все дерево искали. При поиске всего дерева получаются точные результаты поиска. Увеличение количества проверяемых конечных узлов повышает точность, но снижает эффективность.

Примечание

Аргумент имя-значение 'MaxLeafChecks' допустим только с методом поиска на основе дерева Kd.

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

свернуть все

Индексы сохраненных точек, возвращаемые в виде вектора столбца. Вектор содержит K линейных индексов ближайших соседей, хранящихся в облаке точек.

Расстояния до точки запроса, возвращаемые в виде вектора столбца. Вектор содержит евклидовы расстояния между точкой запроса и ближайшими соседями.

Ссылки

[1] Муджа, М. и Дэвид Г. Лоу. «Быстрое аппроксимирование ближайших соседей с автоматической настройкой алгоритма». В VISAPP Международная конференция по теории и применению компьютерного зрения. 2009. стр 331–340.

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

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