主要内容

pctransform

变换三维点云

描述

例子

ptCloudOut= pctransform (ptCloudIntform应用指定的三维仿射变换,tform到点云,ptCloudIn.转换可以是刚性转换或非刚性转换。

例子

ptCloudOut= pctransform (ptCloudInD应用位移场D到点云。使用位移场的点云变换定义了相对于点云中每个点的平移。

例子

全部折叠

读点云。

ptCloud = pcread (“teapot.ply”);

绘制点云。

图pcshow (ptCloud)包含(“X”) ylabel (“Y”) zlabel (“Z”

图中包含一个轴对象。axis对象包含一个散点类型的对象。

创建一个变换对象,沿z轴旋转45度。

θ=π/ 4;Rot = [cos sin 0;...sin(θ)因为(θ)0;...0 0 1);Trans = [0,0,0];tform = rigid3d(腐烂,反式);

转换点云。

ptCloudOut = pctransform (ptCloud tform);

绘制转换后的点云。

图pcshow (ptCloudOut)包含(“X”) ylabel (“Y”) zlabel (“Z”

图中包含一个轴对象。axis对象包含一个散点类型的对象。

这个例子展示了三维点云的仿射变换。指定的前向转换可以是刚性转换或非刚性转换。所示的转换包括输入点云的旋转(刚性变换)和剪切(非刚性变换)。

将点云读取到工作区中。

ptCloud = pcread (“teapot.ply”);

3-D点云旋转

创建一个仿射变换对象,该对象定义沿z设在。

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

转换点云。

ptCloudOut1 = pctransform (ptCloud tform);

三维点云的剪切

创建一个仿射变换对象,它定义沿着x设在。

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

转换点云。

ptCloudOut2 = pctransform (ptCloud tform);

显示原始和仿射变换的三维点云

绘制原始的三维点云。

图1 =图(“WindowState”“正常”);axes1 =轴(“父”,图1);pcshow (ptCloud“父”, axes1);包含(“X”);ylabel (“Y”);zlabel (“Z”);标题(三维点云的“字形大小”14)

图中包含一个轴对象。标题为3d点云的轴对象包含一个散点类型的对象。

%绘制旋转和剪切仿射变换的三维点云。figure2 =图(“WindowState”“正常”);axes2 =轴(“父”, figure2);pcshow (ptCloudOut1“父”, axes2);包含(“X”);ylabel (“Y”);zlabel (“Z”);标题({“三维点云旋转”},“字形大小”14)

图中包含一个轴对象。标题为“三维点云旋转”的轴对象包含一个散点类型的对象。

图3 =图(“WindowState”“正常”);axes3 =轴(“父”,图3);pcshow (ptCloudOut2“父”, axes3);包含(“X”);ylabel (“Y”);zlabel (“Z”);标题({“三维点云的剪切”},“字形大小”14)

图中包含一个轴对象。标题为“三维点云剪切”的轴对象包含一个散点类型的对象。

将点云读取到工作区中。

ptCloud = pcread (“teapot.ply”);

创建一个位移场D与点云的大小相同。

D = 0(大小(ptCloud.Location));

沿着设置位移字段值x-轴表示点的前半部分到7。

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

方法提取感兴趣区域(ROI)内点的索引pointCloud方法findNeighborsInRadius.沿。设置位移字段值x-,y- - - - - -,z-轴表示ROI内的点,分别为4、4和-2。

index = findNeighborsInRadius(ptCloud,[0 0 3.1],1.5);D(指标,1:2)= 4;D(下标3)= 2;

使用位移场转换点云。

ptCloudOut = pctransform (ptCloud D);

显示原始和转换的点云。

图pcshow (ptCloud)包含(“X”);ylabel (“Y”);zlabel (“Z”);标题(“原始3d点云”

图中包含一个轴对象。标题为“原始三维点云”的轴对象包含一个散点类型的对象。

图pcshow (ptCloudOut)包含(“X”);ylabel (“Y”);zlabel (“Z”);标题(“使用位移场转换的三维点云”

图中包含一个轴对象。标题为“使用位移场转换三维点云”的轴对象包含一个散点类型的对象。

输入参数

全部折叠

点云,指定为pointCloud对象。

三维几何变换,指定为rigid3d对象或一个affine3d对象。看到定义变换矩阵有关如何设置仿射3d的细节tform输入。

位移字段,指定为3或——- - - - - -N3数组。位移场是一组位移矢量,它指定了点云中每个点的平移幅度和方向。位移场的大小必须与位移场的大小相同位置财产的pointCloud对象。

数据类型:|

输出参数

全部折叠

变换点云,返回为pointCloud对象。这个变换适用于点的坐标及其法向量。

扩展功能

C / c++代码生成
使用MATLAB®Coder™生成C和c++代码。

GPU的代码生成
使用GPU Coder™为NVIDIA®GPU生成CUDA®代码。

介绍了R2015a