pcfitcylinder

Подгонка цилиндра к 3-D облаку точек

Описание

model = pcfitcylinder(ptCloudIn,maxDistance) подгонка цилиндра к облаку точек с максимально допустимым расстоянием от точки инлиера до цилиндра. Эта функция использует алгоритм M-estimator SAmple Consensus (MSAC), чтобы найти цилиндр.

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

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

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

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

пример

[___] = pcfitcylinder(___,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.

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

maxDistance = 0.005;

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

roi = [0.4,0.6,-inf,0.2,0.1,inf];
sampleIndices = findPointsInROI(ptCloud,roi);

Установите ограничение ориентации.

referenceVector = [0,0,1];

Обнаружить цилиндр и извлечь его из облака точек путем определения точек inlier.

[model,inlierIndices] = pcfitcylinder(ptCloud,maxDistance,...
        referenceVector,'SampleIndices',sampleIndices);
pc = select(ptCloud,inlierIndices);

Постройте график извлеченного цилиндра.

figure
pcshow(pc)
title('Cylinder Point Cloud')

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

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

load('object3d.mat');

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

figure
pcshow(ptCloud)
xlabel('X(m)')
ylabel('Y(m)')
zlabel('Z(m)')
title('Detect a Cylinder in a Point Cloud')

Figure contains an axes. The axes with title Detect a Cylinder in a Point Cloud contains an object of type scatter.

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

maxDistance = 0.005;

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

roi = [0.4,0.6;-inf,0.2;0.1,inf];
sampleIndices = findPointsInROI(ptCloud,roi);

Установите ограничение ориентации.

referenceVector = [0,0,1];

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

model = pcfitcylinder(ptCloud,maxDistance,referenceVector,...
        'SampleIndices',sampleIndices);

Постройте график цилиндра.

hold on
plot(model)

Figure contains an axes. The axes with title Detect a Cylinder in a Point Cloud contains 2 objects of type scatter, surface.

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

свернуть все

Облако точек, заданное как pointCloud объект. Если на Normal свойство входного ptCloud пуст, функция заполняет его значениями, чтобы соответствовать требованиям алгоритма аппроксимации.

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

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

Ссылка, заданная как вектор 1 на 3.

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

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

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

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

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

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

Процент для нахождения максимального количества инкрустаторов, заданный как разделенная разделенными запятой парами, состоящая из 'Confidence'и числовой скаляр, в области значений (0 100). Чтобы улучшить робастность выхода, увеличьте это значение. Однако это добавляет дополнительные расчеты.

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

свернуть все

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

Коэффициенты для модели выхода равны нулю, когда:

  • Входное облако точек не содержит достаточного количества допустимых точек.

  • Алгоритм не может найти достаточное количество inlier точек.

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

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

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

Алгоритмы

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

Алгоритм аппроксимации для pcfitcylinder функция требует нормали облака точек. Поэтому, если Normal свойство для входного облака точек пусто, функция заполняет его. Когда функция заполняет Normal свойство, оно использует шесть точек, чтобы соответствовать локальному цилиндру. Если шесть точек не работают, и подбор кривой прекращает работать, рассмотрите вызов pcnormals функция, которая позволяет вам выбрать число точек для использования.

Ссылки

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

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

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

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