pcfitcylinder

Подходящий цилиндр к 3-D облаку точек

Описание

model = pcfitcylinder(ptCloudIn,maxDistance) соответствует цилиндру к облаку точек, которое допустимое расстояние имеющее от inlier указывает на цилиндр. Эта функция использует Демонстрационное Согласие M-средства-оценки (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 object. The axes object 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 object. The axes object 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 object. The axes object 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 object. The axes object with title Detect a Cylinder in a Point Cloud contains 2 objects of type scatter, surface.

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

свернуть все

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

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

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

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

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

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

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

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

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

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

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

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

свернуть все

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

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

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

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

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

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

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

Алгоритмы

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

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

Ссылки

[1] Торр, P. H. S. и А. Зиссермен. “MLESAC: Новое Устойчивое Средство оценки с Приложением к Оценке Геометрии Изображений”. Компьютерное зрение и Распознавание изображений. Объем 78, Выпуск 1, апрель 2000, стр 138-156.

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

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

Введенный в R2015b