pctransform

Преобразуйте 3-D облако точек

Описание

пример

ptCloudOut = pctransform(ptCloudIn,tform) применяет заданное 3-D смежное преобразование, tform к облаку точек, ptCloudIn. Преобразование может быть твердым или нетвердым преобразованием.

пример

ptCloudOut = pctransform(ptCloudIn,D) применяет поле D смещения к облаку точек. Преобразование облака точек с помощью поля define смещения переводы относительно каждой точки в облаке точек.

Примеры

свернуть все

Считайте облако точек.

ptCloud = pcread('teapot.ply');

Постройте облако точек.

figure
pcshow(ptCloud)
xlabel('X')
ylabel('Y')
zlabel('Z')

Figure contains an axes. The axes contains an object of type scatter.

Создайте объект преобразования с 45 вращениями степени вдоль оси z.

theta = pi/4;
rot = [cos(theta) sin(theta) 0; ...
      -sin(theta) cos(theta) 0; ...
               0          0  1];
trans = [0, 0, 0];
tform = rigid3d(rot,trans);

Преобразуйте облако точек.

ptCloudOut = pctransform(ptCloud,tform);

Постройте преобразованное облако точек.

figure
pcshow(ptCloudOut)
xlabel('X')
ylabel('Y')
zlabel('Z')

Figure contains an axes. The axes contains an object of type scatter.

Этот пример показывает аффинное преобразование 3-D облака точек. Заданное прямое преобразование может быть твердым или нетвердым преобразованием. Показанные преобразования включают вращение (твердое преобразование) и сдвигающий (нетвердое преобразование) облака точки ввода.

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

ptCloud = pcread('teapot.ply');

Вращение 3-D облака точек

Создайте объект смежного преобразования, который задает 45 вращений степени вдоль оси z.

A = [cos(pi/4) sin(pi/4) 0 0; ...
     -sin(pi/4) cos(pi/4) 0 0; ...
     0 0 1 0; ...
     0 0 0 1];
tform = affine3d(A);

Преобразуйте облако точек.

ptCloudOut1 = pctransform(ptCloud,tform);

Сдвиг 3-D облака точек

Создайте объект смежного преобразования, который задает сдвиг вдоль оси X.

A = [1 0 0 0; ...
     0.75 1 0 0; ...
     0.75 0 1 0; ...
     0 0 0 1];
tform = affine3d(A);

Преобразуйте облако точек.

ptCloudOut2 = pctransform(ptCloud,tform);

Отобразите исходные и аффинные преобразованные 3-D облака точек

Постройте исходное 3-D облако точек.

figure1 = figure('WindowState','normal');
axes1 = axes('Parent',figure1);
pcshow(ptCloud,'Parent',axes1); 
xlabel('X');
ylabel('Y');
zlabel('Z');
title('3-D Point Cloud','FontSize',14)

Figure contains an axes. The axes with title 3-D Point Cloud contains an object of type scatter.

% Plot the rotation and shear affine transformed 3-D point clouds.
figure2 = figure('WindowState','normal');
axes2 = axes('Parent',figure2);
pcshow(ptCloudOut1,'Parent',axes2);
xlabel('X');
ylabel('Y');
zlabel('Z');
title({'Rotation of 3-D Point Cloud'},'FontSize',14)

Figure contains an axes. The axes with title Rotation of 3-D Point Cloud contains an object of type scatter.

figure3 = figure('WindowState','normal');
axes3 = axes('Parent',figure3);
pcshow(ptCloudOut2,'Parent',axes3);
xlabel('X');
ylabel('Y');
zlabel('Z');
title({'Shearing of 3-D Point Cloud'},'FontSize',14)

Figure contains an axes. The axes with title Shearing of 3-D Point Cloud contains an object of type scatter.

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

ptCloud = pcread('teapot.ply');

Создайте поле D смещения из того же размера как облако точек.

D = zeros(size(ptCloud.Location));

Установите значение поля смещения вдоль оси X для первой половины точек к 7.

pthalf = ptCloud.Count/2;
D(1:pthalf,1) = 7;

Извлеките индексы точек в видимой области (ROI) с помощью pointCloud метод findNeighborsInRadius. Установите значение поля смещения вдоль x-, y-, и ось z для точек в ROI к 4, 4, и-2, соответственно.

indices = findNeighborsInRadius(ptCloud,[0 0 3.1],1.5);
D(indices,1:2) = 4;
D(indices,3) = -2;

Преобразуйте облако точек с помощью поля смещения.

ptCloudOut = pctransform(ptCloud,D);

Отобразите исходное и преобразованное облако точек.

figure
pcshow(ptCloud)
xlabel('X');
ylabel('Y');
zlabel('Z');
title('Original 3-D Point Cloud')

Figure contains an axes. The axes with title Original 3-D Point Cloud contains an object of type scatter.

figure
pcshow(ptCloudOut)
xlabel('X');
ylabel('Y');
zlabel('Z');
title('Transformed 3-D Point Cloud Using Displacement Field')

Figure contains an axes. The axes with title Transformed 3-D Point Cloud Using Displacement Field contains an object of type scatter.

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

свернуть все

Облако точек в виде pointCloud объект.

3-D геометрическое преобразование в виде rigid3d возразите или affine3d объект. Смотрите Задают Матрицу преобразования для получения дополнительной информации о том, как настроить аффинный 3-D tform входной параметр.

Поле Displacement или в виде M-by-3 или в виде M-by-N-by-3 массив. Поле смещения является набором векторов смещения, которые задают величину и направление перевода для каждой точки в облаке точек. Размер поля смещения должен совпасть с размером Location свойство pointCloud объект.

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

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

свернуть все

Преобразованное облако точек, возвращенное как pointCloud объект. Преобразование применяется к координатам точек и их векторов нормали.

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

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

Представленный в R2015a