findNearestNeighbors

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

Синтаксис

[indices,dists] = findNearestNeighbors(ptCloud,point,K)
[indices,dists] = findNearestNeighbors(ptCloud,point,K,camMatrix)
[indices,dists] = findNearestNeighbors(___,Name,Value)

Описание

пример

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

пример

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

Примечание

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

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

[indices,dists] = findNearestNeighbors(___,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

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

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

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

свернуть все

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

Примечание

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

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

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

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

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

Укажите необязательные аргументы в виде пар ""имя, значение"", разделенных запятыми. Имя (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