exponenta event banner

pcfitcylinder

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

Описание

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

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

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

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

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

пример

[___] = 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];

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

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

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

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

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

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

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

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

Алгоритмы

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

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

Ссылки

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

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

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

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