pcfitcylinder

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

Синтаксис

model = pcfitcylinder(ptCloudIn,maxDistance)
model = pcfitcylinder(ptCloudIn,maxDistance,referenceVector)
model = pcfitcylinder(ptCloudIn,maxDistance,referenceVector,maxAngularDistance)
[model,inlierIndices,outlierIndices] = pcfitcylinder(ptCloudIn,maxDistance)
[___,meanError] = pcfitcylinder(ptCloudIn,maxDistance)
[___] = pcfitcylinder(___,Name,Value)

Описание

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')

Установите максимальное расстояние точки к цилиндру (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')

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

load('object3d.mat');

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

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

Установите максимальное расстояние точки к цилиндру (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)

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

свернуть все

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

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

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

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

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

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

Укажите необязательные аргументы в виде пар ""имя, значение"", разделенных запятыми. Имя (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.

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

Введенный в R2015b