pctransform
转换3d点云
描述
应用指定的三维仿射变换,ptCloudOut
= pctransform (ptCloudIn
,tform
)tform
到点云,ptCloudIn
。变换可以是刚性变换、相似变换或仿射变换。
应用位移场ptCloudOut
= pctransform (ptCloudIn
,D
)D
到点云。使用位移场的点云变换定义了关于点云中每个点的平移。
例子
使用刚变换旋转三维点云
读一个点云。
ptCloud = pcread (“teapot.ply”);
绘制点云。
图pcshow (ptCloud)包含(“X”) ylabel (“Y”) zlabel (“Z”)
创建一个沿z轴旋转45度的变换对象。
rotationAngles = [0 0 45];Translation = [0 0 0];tform = rigidtform3d (rotationAngles、翻译);
变换点云。
ptCloudOut = pctransform (ptCloud tform);
绘制变换后的点云。
图pcshow (ptCloudOut)包含(“X”) ylabel (“Y”) zlabel (“Z”)
三维点云的刚性和非刚性变换
本例对三维点云应用刚性变换(旋转)和非刚性变换(剪切)。
读取一个点云到工作区。
ptCloud = pcread (“teapot.ply”);
绘制原始的3d点云。
图1 =图;axes1 =轴(父=图1);pcshow (ptCloud、家长= axes1 AxesVisibility =“上”);包含(“X”);ylabel (“Y”);zlabel (“Z”);标题(三维点云的字形大小= 14)
3-D点云旋转
创建一个刚性转换对象,定义沿z设在。
rotationAngles = [0 0 45];Translation = [0 0 0];tform = rigidtform3d (rotationAngles、翻译);
变换点云。
ptCloudOut1 = pctransform (ptCloud tform);
绘制旋转的点云。
figure2 =图;axes2 =轴(父= figure2);pcshow (ptCloudOut1、家长= axes2 AxesVisibility =“上”);包含(“X”);ylabel (“Y”);zlabel (“Z”);标题({“3d点云的旋转”},字形大小= 14)
3-D点云剪切
创建一个仿射变换对象,定义沿x设在。
A = [1 0.75 0.75 0;…0 1 0 0;…0 0 1 0;…0 0 0 1];tform = affinetform3d(一个);
变换点云。
ptCloudOut2 = pctransform (ptCloud tform);
绘制变换后的点云。
图3 =图;axes3 =轴(父=图3);pcshow (ptCloudOut2、家长= axes3 AxesVisibility =“上”);包含(“X”);ylabel (“Y”);zlabel (“Z”);标题({“剪切3d点云”},字形大小= 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。
indices = 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”);标题(“使用位移场转换的3d点云”)
输入参数
ptCloudIn
- - - - - -点云
pointCloud
对象
点云,指定为pointCloud
对象。
tform
- - - - - -三维几何变换
rigidtform3d
对象|simtform3d
对象|affinetform3d
对象
三维几何变换,指定为rigidtform3d
,simtform3d
,或affinetform3d
对象。看到指定变换矩阵了解如何设置仿射3d的详细信息tform
输入。
D
- - - - - -位移场
米3矩阵|米——- - - - - -N3组
位移场,指定为任意米3或米——- - - - - -N3数组。位移场是一组位移向量,它指定了点云中每个点的平移大小和方向。位移场的大小必须与的大小相同位置
财产的pointCloud
对象。
数据类型:单
|双
输出参数
ptCloudOut
-转化的点云
pointCloud
对象
转化的点云,返回为pointCloud
对象。变换适用于点的坐标及其法向量。
扩展功能
C / c++代码生成
使用MATLAB®Coder™生成C和c++代码。
GPU的代码生成
使用GPU Coder™为NVIDIA®GPU生成CUDA®代码。
版本历史
介绍了R2015aR2022b:支持新的几何变换对象
从R2022b开始,大多数计算机视觉工具箱™函数使用预乘法约定创建和执行几何变换。因此,您现在可以指定tform
作为一个rigidtform3d
,simtform3d
,或affinetform3d
对象,它们使用premultiply约定。
尽管你仍然可以指定tform
作为一个rigid3d
对象或一个affine3d
对象,这些对象不推荐,因为它们使用后乘约定。你可以通过切换到新的预乘法几何变换对象来简化你的几何变换工作流。有关更多信息,请参见将几何变换迁移到预乘法约定。
MATLAB命令
你点击了对应这个MATLAB命令的链接:
在MATLAB命令窗口中输入命令即可运行该命令。Web浏览器不支持MATLAB命令。
您也可以从以下列表中选择一个网站:
如何获得最佳的网站性能
选择中国网站(中文或英文),获得最佳的网站性能。其他MathWorks国家站点没有针对您所在位置的访问进行优化。