我正在使用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
对象的强度信息?
答案 0 :(得分:2)
答案 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);