Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/matlab/16.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何在MATLAB中利用强度信息绘制三维点云对象?_Matlab_Plot_Point Clouds - Fatal编程技术网

如何在MATLAB中利用强度信息绘制三维点云对象?

如何在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); 现在我想使用命令绘制点云,即

我正在使用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);
现在我想使用命令绘制点云,即

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'
属性可以解决这个问题?嗯,这不是我最喜欢的解决方案,但我想这是一个可行的解决方法。它需要改变颜色映射的灵活性,但我想人们不需要经常这样做。