如何在 MATLAB 中绘制具有强度信息的 3-D 点云对象?

How to plot a 3-D pointCloud object with Intensity information in MATLAB?

我正在使用 MATLAB pointCloud class 来处理和显示 3-D 点云。我有 x-、y- 和 z- 维度中每个点的坐标,如以及相应的灰度强度值。例如看下面的测试数据:

x = [0,   1;   0,   1];
y = [0,   0;   1,   1];
z = [0,   0;   0,   0];
c = [0, 1/3; 2/3,   1];

对应的pointCloud对象是用

创建的
ptCloud = pointCloud(cat(3, x, y, z), 'Intensity', c);

现在我想使用 pcshow 命令绘制点云,即

pcshow(ptCloud, 'MarkerSize', 1000);

注:'MarkerSize'仅针对本例,所以四个点清晰可见

然而,这并没有考虑强度信息——如文档中所述,这需要点云对象的颜色信息,这在我的例子中不存在。 pointCloud 对象只允许保存色域中每个像素的 RGB 值,即灰度强度是不可能的。

pcshow函数也可以将xyz数组和相应的颜色信息作为输入,而不是pointCloud对象。然后,使用灰度强度作为颜色信息是可能的并且按预期工作:

pcshow(cat(3, x, y, z), c, 'MarkerSize', 1000);

但是,我想继续使用 pointCloud 个对象,而不是退回到每帧多个数组。如何在 pcshow 中使用 pointCloud 对象的强度信息?

您可以在 c 的第 3 维上使用 repmat 创建灰色 RGB 颜色向量,然后使用 pointCloud'Color' 属性:

x = [0,   1;   0,   1];
y = [0,   0;   1,   1];
z = [0,   0;   0,   0];
c = [0, 1/3; 2/3,   1];
% convert grayscale intensities to gray rgb values
C = repmat(c,[1 1 3]);
% plot colored pointcloud
ptCloud = pointCloud(cat(3, x, y, z),'Color',C);
pcshow(ptCloud, 'MarkerSize', 1000);

最新的 MATLAB 版本(至少 R2018a)支持开箱即用的这种行为。如documentation中所述,对于具有位置和强度信息的点云对象,使用当前颜色图将强度值映射到颜色。

因此,以下代码片段在较新的 MATLAB 版本中确实按预期工作:

x = [0,   1;   0,   1];
y = [0,   0;   1,   1];
z = [0,   0;   0,   0];
c = [0, 1/3; 2/3,   1];

ptCloud = pointCloud(cat(3, x, y, z), 'Intensity', c);
pcshow(ptCloud, 'MarkerSize', 1000);