findPointsInROI

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

Описание

пример

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

пример

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

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

Примечание

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

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

Примеры

свернуть все

Считайте данные об облаке точек в рабочую область.

ptCloud = pcread('teapot.ply');

Задайте ROI кубоида в области значений x, y и z координат облака точки ввода.

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

Найдите индексы точек, которые лежат в ROI кубоида.

indices = findPointsInROI(ptCloud,roi);

Выберите точки, которые лежат в ROI кубоида и хранилище как объект облака точек.

ptCloudB = select(ptCloud,indices);

Отобразите облако точки ввода и облако точек в заданном ROI.

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.

Найдите точки в 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;

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

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

indices = findPointsInROI(ptCloud,roi,camMatrix);

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

ptCloudB = select(ptCloud,indices);

Отобразите облако точки ввода и точки в ROI кубоида.

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 мировые точки с 2D точками изображений. Можно найти camMatrix при помощи estimateCameraMatrix функция.

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

свернуть все

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

Ссылки

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

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

Генерация кода C/C++
Генерация кода C и C++ с помощью MATLAB® Coder™.

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

| |

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