findNeighborsInRadius

Найдите соседей в радиусе точки в облаке точек

Синтаксис

[indices,dists] = findNeighborsInRadius(ptCloud,point,radius)
[indices,dists] = findNeighborsInRadius(ptCloud,point,radius,camMatrix)
[indices,dists] = findNeighborsInRadius(___,Name,Value)

Описание

пример

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

пример

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

Примечание

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

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

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

Примеры

свернуть все

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

load('xyzPoints.mat');

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

ptCloud = pointCloud(xyzPoints);

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

point = [0,0,3];
radius = 0.5;

Получите индексы и расстояния точек, которые лежат в заданном радиусе.

[indices,dists] = findNeighborsInRadius(ptCloud,point,radius);

Поймите данные об облаке радиальных соседей.

ptCloudB = select(ptCloud,indices);

Отобразите облако точек. Постройте точку запроса и соответствующих радиальных соседей.

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

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

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

Получите индексы и расстояния радиальных соседей. Используйте метод облака точек select, чтобы понять данные об облаке соседних точек.

[indices,dists] = findNeighborsInRadius(ptCloud,point,radius,camMatrix);
ptCloudB = select(ptCloud,indices);

Отобразите облако точек и радиальных соседей, найденных приблизительно точкой запроса.

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

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

свернуть все

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

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

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

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

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

Укажите необязательные аргументы в виде пар ""имя, значение"", разделенных запятыми. Имя (Name) — это имя аргумента, а значение (Value) — соответствующее значение. Name должен появиться в кавычках. Вы можете задать несколько аргументов в виде пар имен и значений в любом порядке, например: Name1, Value1, ..., NameN, ValueN.

Пример: findNeighborsInRadius(ptCloud,point,radius,'Sort',true)

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

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

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

свернуть все

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

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

Ссылки

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

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

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

| |

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