pctransform

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

Описание

пример

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

пример

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

Примеры

свернуть все

Чтение облака точек.

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 для точек в информация только для чтения равным 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 объект. Смотрите Define Transformation Matrix для получения дополнительной информации о том, как настроить аффинную 3-D tform вход.

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

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

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

свернуть все

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

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

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

.
Введенный в R2015a