主要内容

本页采用了机器翻译。点击此处可查看英文原文。

pointCloud

用于存储三维点云的对象

说明

pointCloud 对象根据三维坐标系中的一组点生成点云数据。这些点通常代表表面或环境中样本的 xyz 几何坐标。每个点还可以通过附加信息(例如 RGB 颜色)来表示。点云数据以对象的形式存储,其属性如属性中所列。使用 对象函数 从点云数据中检索、选择和删除所需的点。

创建对象

描述

ptCloud = pointCloud(xyzPoints) 返回一个点云对象,其坐标由 xyzPoints 指定。

ptCloud = pointCloud(___,Name=Value) 除了上述语法外,还支持使用一个或多个名称-值参量来设置选项。例如,Color=[1 0 0] 将点云的颜色设置为红色。

示例

输入参量

全部展开

三维坐标点,指定为一个 M×3 的点列表,或一个用于表示有序点云的 M×N×3 的数组。这些三维坐标点指定了该点在三维坐标系中的 xyz 位置。有序点云的前两个维度对应于 RGBD 或激光雷达等传感器采集的扫描顺序。此参量设置 Location 属性。

数据类型: single | double

名称-值参数

全部展开

将可选参量对组指定为 Name1=Value1,...,NameN=ValueN,其中 Name 是参量名称,Value 是对应的值。名称-值参量必须出现在其他参量之后,但对各个参量对组的顺序没有要求。

如果使用的是 R2021a 之前的版本,请使用逗号分隔每个名称和值,并用引号将 Name 引起来。

示例: Color=[1 0 0] 将点云的颜色设置为红色。

点云颜色,指定为 RGB 值,可以是颜色字符串、1×3 向量,或者 M×3 或 M×N×3 数组。M× N 指定点云的维度。每个条目指定了点云数据中某一点的 RGB 颜色。因此,您可以为所有点指定相同的颜色,也可以为每个点指定不同的颜色。

  • 对于 singledouble 数据类型,Color 的 RGB 值必须指定在 [0, 1] 范围内。

  • 对于 uint8 数据类型,Color 的 RGB 值必须指定在 [0, 255] 范围内。

  • 对于 uint16 数据类型,Color 的 RGB 值必须指定在 [0, 65535] 范围内。

  • 该函数将 Color 的值存储为 M×3 或 M×N×3 形式。如果将颜色指定为字符串或 1×3 的向量,该函数会将其转换为上述任一维度。

颜色格式示例
为所有点指定一种颜色

字符串标量或字符向量

"r"

"red"

1×3 向量

[255 0 0]1-by-3 grid, with columns labeled r,g,b respectively.

为每个点指定一种颜色

M×3 矩阵,作为 RGB 值的列表

255 0 0
255 0 0
0 255 255
M-by-3 grid, with columns labeled r,g,b respectively.

M×N×3 数组,用于表示一个结构化的点云,其中每个点都包含 RGB 值,其中 M×N 是该点云的维度。

M-by-N-by3 grid, with 3 m-by-n matrices labeled r,g,b respectively.

数据类型: uint8 | uint16 | single | double

表面法线,指定为一个 M×3 或 M×N×3 数组。使用此属性来指定点云中每个点的法向量。表面法线中的每一项都指定了法线向量的 xyz 组件。

坐标曲面法线
M×3 数组M×3 数组,其中每一行包含一个对应的法线向量。
M×N×3 数组M×N×3 数组,其中包含每个点对应的 1×1×3 向量。

数据类型: single | double

每个点的灰度强度,指定为一个 M 行 1 列的向量或 MN 列的矩阵。该函数将每个亮度值映射到当前色图中的一个颜色值。

坐标强度
M×3 数组M×1 向量,其中每一行包含一个对应的强度值。
M×N×3 数组M×N 矩阵,其中包含每个点的强度值。

数据类型: single | double | uint8 | uint16

输出参量

全部展开

点云,以 pointCloud 对象的形式返回,其属性与 属性 中列出的属性相同。

属性

全部展开

此 属性 为只读。

点在三维坐标系或地理坐标系中的位置,以 M×3 或 M×N×3 数组的形式表示。每个条目指定一个点的坐标,该坐标可以是:

xyzPoints 参量用于设置此属性。为了减少内存占用,可以将点的位置存储为 single 数据类型。

  • 对于未组织化的点云,Location 必须指定为一个 M×3 的数组,其中 M 是点的总数,该数组提供了每个点的坐标。

  • 对于有组织的点云,Location 必须指定为一个 M×N×3 的数组,其中 M*N 是点的总数,该数组提供了每个点的坐标。从投影式相机(如 Kinect®)或激光雷达传感器获取的点,会被存储为一个有组织的点云。一个有组织的点云被布局为一个二维数组,其结构类似于图像。

数据类型: single | double

此 属性 为只读。

点云中的点数,以正整数表示。

此 属性 为只读。

沿 x 轴的坐标范围,表示为一个包含 2 个元素的向量。

此 属性 为只读。

沿 y 轴的坐标范围,表示为一个包含 2 个元素的向量。

此 属性 为只读。

沿 z 轴的坐标范围,表示为一个包含 2 个元素的向量。

对象函数

findNearestNeighborsFind nearest neighbors of query points in point cloud
findNeighborsInRadiusFind neighbors within radius for query points in point cloud
findPointsInROIFind points within a region of interest in the point cloud
findPointsInCylinderFind points within a cylindrical region in a point cloud
removeInvalidPoints从点云中移除无效点
select在点云中选择点
copyCopy array of point cloud objects

示例

全部折叠

将三维坐标点读入工作区。

load("xyzPoints");

根据输入的点坐标创建一个点云对象。

ptCloud = pointCloud(xyzPoints);

检查点云对象的属性。

ptCloud
ptCloud = 
  pointCloud with properties:

     Location: [5184×3 single]
        Count: 5184
      XLimits: [-3 3.4338]
      YLimits: [-2 2]
      ZLimits: [0.0016 3.1437]
        Color: []
       Normal: []
    Intensity: []

使用 pcshow 显示点云。

pcshow(ptCloud)

Figure contains an axes object. The axes object contains an object of type scatter.

修改点云数据的颜色

创建一个与点云数据大小相同的 RGB 颜色数组。将点颜色设置为红色。

cmatrix = ones(size(ptCloud.Location)).*[1 0 0];

创建点云对象,并将颜色属性设置为 RGB 颜色数组。

ptCloud = pointCloud(xyzPoints,Color=cmatrix);
pcshow(ptCloud)

Figure contains an axes object. The axes object contains an object of type scatter.

向点云数据添加表面法线

使用 pcnormals 计算与点云数据对应的表面法线。

normals = pcnormals(ptCloud);

根据输入的点坐标创建点云对象。将计算出的表面法线添加到点云对象中。

ptCloud = pointCloud(xyzPoints,Normal=normals);

显示点云并绘制曲面法线。

pcshow(ptCloud)
x = ptCloud.Location(:,1);
y = ptCloud.Location(:,2);
z = ptCloud.Location(:,3);
u = normals(:,1);
v = normals(:,2);
w = normals(:,3);
hold on
quiver3(x,y,z,u,v,w);
hold off

Figure contains an axes object. The axes object contains 2 objects of type scatter, quiver.

提示

pointCloud 对象是一个 handle 对象。如果要创建点云的独立副本,可以使用 MATLAB® copy 方法。

ptCloudB = copy(ptCloudA)

如果要保留点云的单份副本(该副本可由点云函数进行修改),请为输入和输出使用相同的点云变量名。

ptCloud = pcFunction(ptCloud)

扩展功能

全部展开

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

版本历史记录

在 R2015a 中推出

全部展开