如何在MATLAB中利用强度信息绘制三维点云对象?
我正在使用MATLAB类处理和显示三维点云。我有x、y和z维上每个点的坐标,以及相应的灰度强度值。例如,请参见以下测试数据:如何在MATLAB中利用强度信息绘制三维点云对象?,matlab,plot,point-clouds,Matlab,Plot,Point Clouds,我正在使用MATLAB类处理和显示三维点云。我有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); 现在我想使用命令绘制点云,即
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(ptCloud, 'MarkerSize', 1000);
注意:'MarkerSize'
仅用于此示例,因此四个点清晰可见
然而,这并没有考虑强度信息——正如文档中所述,这需要点云对象的颜色信息,在我的例子中不存在。
pointCloud
对象只允许保存颜色字段中每个像素的RGB值,即灰度强度不可能
pcshow
函数还可以将xyz
数组和相应的颜色信息作为输入,而不是pointCloud
对象。然后,可以使用灰度强度作为颜色信息,并按预期工作:
pcshow(cat(3, x, y, z), c, 'MarkerSize', 1000);
但是,我希望继续使用
pointCloud
对象,而不是退回到每帧多个数组。如何在pcshow
中使用pointCloud
对象的强度信息?您可以在c
的第三维上使用repmat
创建灰色RGB颜色向量,然后使用pointCloud
的属性:
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)支持这种开箱即用的行为。如中所述,对于具有位置和强度信息的点云对象,强度值将使用当前颜色贴图映射到颜色
因此,以下代码片段在较新的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);
谢谢你的回答。这种方法的问题是不能使用颜色贴图和颜色条,因此在我的情况下,它实际上是不可行的。我需要能够设置颜色映射,例如colormapjet
,并在颜色栏中查看与每种颜色对应的值。我看到了。提前使用一些colormap(jet
)设置'Color'
属性可以解决这个问题?嗯,这不是我最喜欢的解决方案,但我想这是一个可行的解决方法。它需要改变颜色映射的灵活性,但我想人们不需要经常这样做。