cuboidModel

Параметрическая модель кубоида

Описание

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

Создание

Существует два способа создать cuboidModel объект.

  • Создайте модель кубоида путем определения параметров кубоида в cuboidModel функция.

  • Подбирайте модель кубоида по облаку точек с помощью pcfitcuboid функция.

Описание

пример

model = cuboidModel(params) создает параметрическую модель кубоида из 1 9 входного вектора, params.

model = pcfitcuboid(ptCloudIn) соответствует кубоиду по данным об облаке точки ввода. pcfitcuboid функционируйте хранит свойства кубоида в параметрическом объекте модели кубоида, model.

пример

model = pcfitcuboid(ptCloudIn,indices) соответствует кубоиду по выбранному набору точек, indices, в облаке точки ввода.

Свойства

развернуть все

Это свойство доступно только для чтения.

Параметры модели кубоида, сохраненные как вектор-строка с девятью элементами из формы [центр x центр y центр z x len y len z len гниль x гниль y гниль z].

  • Центр x, центр y и центр z задают центр кубоида.

  • x len, y len и z len задает длину кубоида вдоль x - y - и z - ось, соответственно, прежде чем вращение было применено.

  • Гниль x, гниль y и гниль z задают углы поворота для кубоида вдоль x - y - и z - ось, соответственно. Эти углы по часовой стрелке положительны при взгляде в прямом направлении их соответствующих осей.

Рисунок показывает, как эти значения определяют положение кубоида.

Эти параметры заданы params входной параметр.

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

Это свойство доступно только для чтения.

Центр кубоида, сохраненного как трехэлементный вектор-строка из формы [центр x центр y центр z]. Вектор содержит 3-D координаты центра кубоида в x - y - и z - ось, соответственно.

Это свойство выведено из Parameters свойство.

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

Это свойство доступно только для чтения.

Размерности кубоида, сохраненного как трехэлементный вектор-строка из формы [x len y len z len]. Вектор содержит длину кубоида вдоль x - y - и z - ось, соответственно.

Это свойство выведено из Paramareters свойство.

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

Это свойство доступно только для чтения.

Ориентация кубоида, сохраненного как трехэлементный вектор-строка из формы, [гниль x гниль y гниль z], в градусах. Вектор содержит вращение кубоида вдоль x - y - и z - ось, соответственно.

Это свойство выведено из Paramareters свойство.

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

Функции объекта

getCornerPointsПолучите угловые точки модели кубоида
findPointsInsideCuboidНайдите точки заключенными моделью кубоида
plotПостройте модель кубоида

Примеры

свернуть все

Обнаружьте кубоид в облаке точек с помощью pcfitcuboid функция. Функция хранит параметры кубоида как cuboidModel объект.

Считайте данные об облаке точек в рабочую область.

ptCloud = pcread('highwayScene.pcd');

Ищите облако точек в заданной видимой области (ROI). Создайте облако точек только обнаруженных точек.

roi = [-30 30 -20 30 -8 13];
in = findPointsInROI(ptCloud,roi);
ptCloudIn = select(ptCloud,in);

Постройте облако точек обнаруженных точек.

   figure
   pcshow(ptCloudIn.Location)
   xlabel('X(m)')
   ylabel('Y(m)')
   zlabel('Z(m)')
   title('Detected Points in ROI')

Найдите индексы точек в заданном ROI в облаке точек.

roi = [9.6 13.8 7.9 9.3 -2.5 3];
sampleIndices = findPointsInROI(ptCloudIn,roi);

Соответствуйте кубоиду к выбранному набору точек в облаке точек.

 model = pcfitcuboid(ptCloudIn,sampleIndices);
  figure
  pcshow(ptCloudIn.Location)
  xlabel('X(m)')
  ylabel('Y(m)')
  zlabel('Z(m)')
  title('Detect a Cuboid in a Point Cloud')

График кубоид окружает облако точек.

hold on
plot(model)

Отобразите внутренние свойства cuboidModel объект.

model
model = 
  cuboidModel with properties:

     Parameters: [11.4873 8.5997 -1.6138 3.6713 1.3220 1.7576 0 0 0.9999]
         Center: [11.4873 8.5997 -1.6138]
     Dimensions: [3.6713 1.3220 1.7576]
    Orientation: [0 0 0.9999]

Подходящие ограничительные рамки кубоида вокруг кластеров в облаке точек.

Загрузите данные об облаке точек в рабочую область.

data = load('drivingLidarPoints.mat');

Задайте и обрежьте видимую область (ROI) от облака точек. Визуализируйте выбранный ROI облака точек.

roi = [-40 40 -6 9 -2 1];
in = findPointsInROI(data.ptCloud,roi);
ptCloudIn = select(data.ptCloud,in);
hcluster = figure;
panel = uipanel('Parent',hcluster,'BackgroundColor',[0 0 0]);
ax = axes('Parent',panel,'Color',[0 0 0]); 
pcshow(ptCloudIn,'MarkerSize',30,'Parent',ax)
title('Input Point Cloud')

Figure contains an axes object and an object of type uipanel. The axes object with title Input Point Cloud contains an object of type scatter.

Сегментируйте наземную плоскость. Визуализируйте сегментированную наземную плоскость.

maxDistance = 0.3;
referenceVector = [0 0 1];
[~,inliers,outliers] = pcfitplane(ptCloudIn,maxDistance,referenceVector);
ptCloudWithoutGround = select(ptCloudIn,outliers,'OutputSize','full');
hSegment = figure;
panel = uipanel('Parent',hSegment,'BackgroundColor',[0 0 0]);
ax = axes('Parent',panel,'Color',[0 0 0]); 
pcshowpair(ptCloudIn,ptCloudWithoutGround,'Parent',ax)
legend('Ground Region','Non-Ground Region','TextColor', [1 1 1])
title('Segmented Ground Plane')

Figure contains an axes object and an object of type uipanel. The axes object with title Segmented Ground Plane contains 2 objects of type scatter. These objects represent Ground Region, Non-Ground Region.

Сегментируйте неназемную область облака точек в кластеры. Визуализируйте сегментированное облако точек.

distThreshold = 1;
[labels,numClusters] = pcsegdist(ptCloudWithoutGround,distThreshold);
labelColorIndex = labels;
hCuboid = figure;
panel = uipanel('Parent',hCuboid,'BackgroundColor',[0 0 0]);
ax = axes('Parent',panel,'Color',[0 0 0]); 
pcshow(ptCloudIn.Location,labelColorIndex,'Parent',ax)
title('Fitting Bounding Boxes')
hold on

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

for i = 1:numClusters
    idx = find(labels == i);
    model = pcfitcuboid(ptCloudWithoutGround,idx);
    plot(model)
end

Figure contains an axes object and an object of type uipanel. The axes object with title Fitting Bounding Boxes contains 4 objects of type scatter, patch.

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

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

Смотрите также

Функции

Объекты

Введенный в R2020b