findPointsInROI

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

Синтаксис

indices = findPointsInROI(ptCloud,roi)
indices = findpointsInROI(ptCloud,roi,camMatrix)

Описание

пример

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

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

Используйте метод облака точек 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

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

свернуть все

Облако точек, заданное как объект 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.

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

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

| |

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