findPointsInROI

Поиск точек в необходимую область в облаке точек

Описание

пример

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

пример

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

Функция использует матрицу проекции камеры 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);

Задайте кубоидный информация только для чтения в области значений координат x, y и z входного облака точек.

roi = [0.3 0.7 0 0.4 0.1 0.3];

Найдите индексы данных облака точек, которые находятся в кубоидном информация только для чтения.

indices = findPointsInROI(ptCloud,roi,camMatrix);

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

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] Muja, M. and David G. Lowe. «Быстрая аппроксимация ближайших соседей с автоматическим строением алгоритма». Международная конференция VISAPP по теории и применению компьютерного зрения. 2009. стр 331–340.

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

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

..
Введенный в R2015a
Для просмотра документации необходимо авторизоваться на сайте