pcfitplane

Подбор плоскости к 3-D облаку точек

Описание

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

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

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

пример

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. The axes 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. The axes with title First Plane contains an object of type scatter.

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

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

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

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

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

свернуть все

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

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

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

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

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

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

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

Аргументы в виде пар имя-значение

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

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

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

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

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

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

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

свернуть все

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

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

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

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

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

Ссылки

[1] Торр, П. Х. С., и А. Циссерман. MLESAC: новый робастный оценщик с приложением для оценки геометрии изображения. Компьютерное зрение и понимание изображений. 2000.

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

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

.
Введенный в R2015b