pctransform

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

Синтаксис

ptCloudOut = pctransform(ptCloudIn,tform)
ptCloudOut = pctransform(ptCloudIn,D)

Описание

пример

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

пример

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

Примеры

свернуть все

Этот пример показывает аффинное преобразование 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','maximized');
axes1 = axes('Parent',figure1,'Position',[0.28 0.54 0.46 0.41]);
pcshow(ptCloud,'Parent',axes1); 
xlabel('X');
ylabel('Y');
zlabel('Z');
title('3-D Point Cloud','FontSize',14)

Постройте вращение и сдвиньте аффинно преобразованные 3-D облака точек.

axes2 = axes('Parent',figure1,'Position',[0.15 0.02 0.35 0.42]);
pcshow(ptCloudOut1,'Parent',axes2);
xlabel('X');
ylabel('Y');
zlabel('Z');
title({'Rotation of 3-D Point Cloud'},'FontSize',14)

axes3 = axes('Parent',figure1,'Position',[0.5 0.02 0.35 0.42]);
pcshow(ptCloudOut2,'Parent',axes3);
xlabel('X');
ylabel('Y');
zlabel('Z');
title({'Shearing of 3-D Point Cloud'},'FontSize',14)

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

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);

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

figure1 = figure('WindowState','maximized');
axes1 = axes('Parent',figure1,'Position',[0.03 0.4 0.35 0.42]);
pcshow(ptCloud,'Parent',axes1)
xlabel('X');
ylabel('Y');
zlabel('Z');
title('Original 3-D Point Cloud','FontSize',14)

axes2 = axes('Parent',figure1,'Position',[0.4 0.4 0.38 0.42]);
pcshow(ptCloudOut,'Parent',axes2)
xlabel('X');
ylabel('Y');
zlabel('Z');
title('Transformed 3-D Point Cloud Using Displacement Field','FontSize',14)

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

свернуть все

Облако точек, заданное как объект pointCloud.

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

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

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

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

свернуть все

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

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

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