exponenta event banner

cuboidModel

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

Описание

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

Создание

Описание

пример

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

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

пример

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

Дополнительные сведения об использовании этой функции см. на веб-сайте pcfitcuboid страница ссылки на функцию.

Свойства

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

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

Параметры кубоидной модели, хранящиеся как девятиэлементный вектор строки вида [xctr yctr zctr xlen ylen zlen xrot yrot zrot].

  • xctr, yctr и zctr указывают центр кубоида.

  • xlen, ylen и zlen указывают длину кубоида вдоль осей x, y и z, соответственно, перед применением вращения.

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

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

Эти параметры определяются params входной аргумент.

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

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

Центр кубоида, хранящийся в виде трехэлементного вектора строки вида [xctr yctr zctr]. Вектор содержит 3-D координаты кубоидного центра по осям X, Y и Z соответственно.

Это свойство является производным от Parameters собственность.

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

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

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

Это свойство является производным от Paramareters собственность.

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

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

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

Это свойство является производным от Paramareters собственность.

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

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

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

Примеры

свернуть все

Обнаружение кубоида в облаке точек с помощью pcfitcuboid функция. Функция сохраняет параметры cuboid как 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 = [-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 and an object of type uipanel. The axes 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 and an object of type uipanel. The axes 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 and an object of type uipanel. The axes with title Fitting Bounding Boxes contains 4 objects of type scatter, patch.

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

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

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