exponenta event banner

pcfitplane

Вписать плоскость 3-D облако точек

Описание

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

Эта функция использует алгоритм SAmple Consolude (MSAC) M-оценщика для поиска плоскости. Алгоритм MSAC является вариантом алгоритма RANdom SAmple Consolude (RANSAC).

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

пример

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

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

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

пример

[___] = 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 объект.

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

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

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

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

Ссылки

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

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

Создание кода C/C + +
Создайте код C и C++ с помощью MATLAB ® Coder™

.
Представлен в R2015b