exponenta event banner

findNeighborsInRadius

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

Описание

пример

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

Figure contains an axes. The axes contains 3 objects of type scatter, line. These objects represent Point Cloud, Query Point, Radial 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];
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;

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

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

свернуть все

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

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

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

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

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

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

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

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

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

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

свернуть все

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

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

Ссылки

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

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

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