exponenta event banner

findPointsInROI

Поиск точек в интересующей области в облаке точек

Описание

пример

indices = findPointsInROI(ptCloud,roi) возвращает точки в интересующей области (ROI) во входном облаке точек. Точки в пределах указанного ROI получают с использованием алгоритма поиска на основе Kd-дерева.

пример

indices = findpointsInROI(ptCloud,roi,camMatrix) возвращает точки в области ROI облака входных точек. Входное облако точек - это организованное облако точек, генерируемое глубинной камерой. Точки в пределах указанного ROI получают с использованием алгоритма быстрого аппроксимированного поиска соседей.

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

Примечание

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

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

Примеры

свернуть все

Считывание данных облака точек в рабочее пространство.

ptCloud = pcread('teapot.ply');

Определите кубовидную окупаемость инвестиций в диапазоне координат x, y и z облака входных точек.

roi = [-2 2 -2 2 2.4 3.5];

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

indices = findPointsInROI(ptCloud,roi);

Выберите точки, лежащие внутри кубовидной окупаемости инвестиций, и сохраните их как объект-облако точек.

ptCloudB = select(ptCloud,indices);

Отображение входного облака точек и облака точек в пределах указанной окупаемости инвестиций.

figure
pcshow(ptCloud.Location,[0.5 0.5 0.5])
hold on
pcshow(ptCloudB.Location,'r');
legend('Point Cloud','Points within ROI','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, Points within ROI.

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

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

Укажите кубовидную ROI в диапазоне координат x, y и z облака входных точек.

roi = [0.3 0.7 0 0.4 0.1 0.3];

Найдите индексы данных облака точек, которые находятся в пределах cuboid ROI.

indices = findPointsInROI(ptCloud,roi,camMatrix);

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

ptCloudB = select(ptCloud,indices);

Отображение облака входных точек и точек внутри кубовидной окупаемости инвестиций.

figure
pcshow(ptCloud)
hold on
pcshow(ptCloudB.Location,'r');
legend('Point Cloud','Points within the ROI','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, Points within the ROI.

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

свернуть все

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

Интересующая область, указанная как шестиэлементный вектор формы [xmin, xmax, ymin, ymax, zmin, zmax], где:

  • xmin и xmax - минимальный и максимальный пределы вдоль оси X.

  • ymin и ymax - минимальный и максимальный пределы вдоль оси y соответственно.

  • zmin и zmax - минимальный и максимальный пределы вдоль оси z соответственно.

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

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

свернуть все

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

Ссылки

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

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

Создание кода C/C + +
Создайте код C и C++ с помощью MATLAB ® Coder™

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