findNearestNeighbors

Найдите самых близких соседей точки в облаке точек

Описание

пример

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

пример

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

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

Примечание

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

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

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

Примеры

свернуть все

Загрузите набор 3-D координатных точек в рабочую область.

load('xyzPoints.mat');

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

ptCloud = pointCloud(xyzPoints);

Задайте точку запроса и количество самых близких соседей, чтобы быть идентифицированными.

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

Получите индексы и расстояния самых близких соседних точек K.

[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 object. The axes object contains 3 objects of type scatter, line. These objects represent Point Cloud, Query Point, Nearest Neighbors.

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

Загрузите организованные данные об облаке точек в рабочую область. Облако точек сгенерировано при помощи датчика глубины 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;

Найдите 2D координаты изображений, соответствующие 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;

Найдите индексы и расстояния самых близких соседних точек K при помощи матрицы проекции камеры. Используйте метод облака точек 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 object. The axes object contains 2 objects of type scatter. These objects represent Point Cloud, Nearest Neighbors.

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

свернуть все

Облако точек в виде pointCloud объект.

Примечание

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

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

Количество самых близких соседей в виде положительного целого числа.

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

Аргументы name-value

Задайте дополнительные разделенные запятой пары 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] Muja, M. и Дэвид Г. Лоу. "Быстро Аппроксимируйте Самых близких Соседей Автоматической Настройкой Алгоритма". На Международной конференции VISAPP по вопросам Теории Компьютерного зрения и Приложений. 2009. стр 331–340.

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

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

| |

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