如何在MATLAB中使用Intensity信息绘制三维pointCloud对象?

时间:2017-05-10 16:23:39

标签: matlab plot point-clouds

我正在使用MATLAB pointCloud类来处理和显示三维点云。我有 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个对象,而不是每帧都回退到多个数组。如何在pointCloud中使用pcshow对象的强度信息?

2 个答案:

答案 0 :(得分:2)

您可以在repmat的第三维上使用c来创建灰色RGB颜色向量,然后使用'Color'的{​​{1}}属性:

pointCloud

enter image description here

答案 1 :(得分:0)

最新的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);

resulting point cloud