exponenta event banner

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 для точек в пределах 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 вход.

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

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

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

свернуть все

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

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

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

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