pcfitplane

Соответствуйте плоскости к 3-D облаку точек

Описание

model = pcfitplane(ptCloudIn,maxDistance) соответствует плоскости к облаку точек, которое имеет максимальное допустимое расстояние от точки inlier до плоскости. Функция возвращает геометрическую модель, которая описывает плоскость.

Эта функция использует Демонстрационное Согласие M-средства-оценки (MSAC) алгоритм, чтобы найти плоскость. Алгоритм MSAC является вариантом Согласия Случайной выборки (RANSAC) алгоритм.

model = pcfitplane(ptCloudIn,maxDistance,referenceVector) соответствует плоскости к облаку точек, которому задали дополнительные ограничения ориентации 1 3 referenceVector входной параметр.

пример

model = pcfitplane(ptCloudIn,maxDistance,referenceVector,maxAngularDistance) соответствует плоскости к облаку точек, которое имеет заданное максимальное угловое расстояние.

[model,inlierIndices,outlierIndices] = pcfitplane(ptCloudIn,maxDistance) дополнительно возвращает линейные индексы в inlier и точки выброса во входе облака точек.

[___,meanError] = pcfitplane(ptCloudIn,maxDistance) дополнительно возвращается, средняя погрешность расстояния inlier указывает на модель, с помощью любого из предыдущих синтаксисов.

пример

[___] = pcfitplane(ptCloudIn,maxDistance,Name,Value) дополнительные опции использования заданы одним или несколькими Name,Value парные аргументы.

Примеры

свернуть все

Загрузите облако точек.

load('object3d.mat')

Отобразите и пометьте облако точек.

figure
pcshow(ptCloud)
xlabel('X(m)')
ylabel('Y(m)')
zlabel('Z(m)')
title('Original Point Cloud')

Figure contains an axes object. The axes object with title Original Point Cloud contains an object of type scatter.

Установите максимальное расстояние точки к плоскости (2 см) для плоского подбора кривой.

maxDistance = 0.02;

Установите вектор нормали плоскости.

referenceVector = [0,0,1];

Установите максимальное угловое расстояние до 5 градусов.

maxAngularDistance = 5;

Обнаружьте первую плоскость, таблицу, и извлеките его из облака точек.

[model1,inlierIndices,outlierIndices] = pcfitplane(ptCloud,...
            maxDistance,referenceVector,maxAngularDistance);
plane1 = select(ptCloud,inlierIndices);
remainPtCloud = select(ptCloud,outlierIndices);

Установите необходимую область ограничивать поиск второй плоскости, оставленной стену.

roi = [-inf,inf;0.4,inf;-inf,inf];
sampleIndices = findPointsInROI(remainPtCloud,roi);

Обнаружьте левую стену и извлеките ее из остающегося облака точек.

[model2,inlierIndices,outlierIndices] = pcfitplane(remainPtCloud,...
            maxDistance,'SampleIndices',sampleIndices);
plane2 = select(remainPtCloud,inlierIndices);
remainPtCloud = select(remainPtCloud,outlierIndices);

Постройте эти две плоскости и остающиеся точки.

figure
pcshow(plane1)
title('First Plane')

Figure contains an axes object. The axes object with title First Plane contains an object of type scatter.

figure
pcshow(plane2)
title('Second Plane')

Figure contains an axes object. The axes object with title Second Plane contains an object of type scatter.

figure
pcshow(remainPtCloud)
title('Remaining Point Cloud')

Figure contains an axes object. The axes object with title Remaining Point Cloud contains an object of type scatter.

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

свернуть все

Облако точек в виде pointCloud объект.

Максимальное расстояние от inlier указывает на плоскость в виде скалярного значения. Задайте расстояние в модулях, которые сопоставимы с модулями, которые вы используете для облака точек.

Типы данных: single | double

Ссылочное ограничение ориентации в виде 1 3 вектора.

Типы данных: single | double

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

Типы данных: single | double

Аргументы name-value

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

Пример: 'SampleIndices',[].

Линейные индексы точек к выборке в облаке точки ввода в виде разделенной запятой пары, состоящей из 'SampleIndices'и вектор-столбец. Пустой вектор означает, что все точки являются кандидатами к выборке в итерации RANSAC, чтобы соответствовать плоскости. Когда вы задаете подмножество, только точки в подмножестве производятся, чтобы подобрать модель.

Обеспечение подмножества точек может значительно ускорить процесс и сократить количество испытаний. Можно сгенерировать вектор индексов использование findPointsInROI метод pointCloud объект.

Максимальное количество случайных испытаний за нахождение inliers в виде разделенной запятой пары, состоящей из 'MaxNumTrials'и положительное целое число. Увеличение этого значения делает выход более устойчивым, но добавляет дополнительные расчеты.

Процент доверия для нахождения максимального количества inliers в виде разделенной запятой пары, состоящей из 'Confidence'и числовой скаляр, в области значений [0 100]. Увеличение этого значения делает выход более устойчивым, но добавляет дополнительные расчеты.

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

свернуть все

Геометрическая модель плоскости, возвращенной как planeModel объект.

Когда облако точки ввода не содержит достаточно актуальных вопросов, или когда функция не может найти достаточно точек inlier, коэффициенты для выходной модели обнуляются.

Линейные индексы inlier указывают в облаке точки ввода, возвращенном как вектор-столбец.

Линейные индексы выброса указывают в облаке точки ввода, возвращенном как вектор-столбец.

Средняя погрешность расстояния inlier точки к модели, возвращенной как скалярное значение.

Ссылки

[1] Торр, P. H. S. и А. Зиссермен. “MLESAC: новое устойчивое средство оценки с приложением к оценке геометрии изображений”. Компьютерное зрение и распознавание изображений. 2000.

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

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

Введенный в R2015b