【问题标题】:MATLAB - Plotting a smooth volume from 3D scatter plot dataMATLAB - 从 3D 散点图数据绘制平滑体积
【发布时间】:2015-06-15 21:12:52
【问题描述】:

所以我有 [x y z 强度] 形式的数据,我用 xyz 轴绘制在 scatter3 图上。数据的颜色用于指示强度值。问题是,使用散点图意味着数据点显示为离散点。我需要的是一个平滑的形状 - 所以我想我需要在点之间进行某种插值?

我尝试过使用 trisurf,但这个问题在于它会在不应该的点之间进行插值。因此,在我的表面应该有“间隙”的地方,它会连接边缘,以便填充间隙。请参阅随附的图片进行说明。

有人有什么建议吗?

我使用的代码如下(注释掉的scatter3是散点图,其余的是trisurf):

% Read in data
dataM = csvread('3dDispersion.csv');

% scatter3(dataM(:,1), dataM(:,2), dataM(:,3), 5, dataM(:,4),'filled');

% Plot
hold on;
x = dataM(:,1);
y = dataM(:,2);
freq = dataM(:,3);
tri = delaunay(x,y);
h = trisurf(tri, x, y, freq);

% Make it pretty
% view(-45,30);
view(3);
axis vis3d;
lighting phong;
shading interp;

【问题讨论】:

  • 我不确定你是否真的可以这样做。希望你能找到答案。
  • 你试过alpha-shapes吗?
  • @knedlsepp 我没试过。我并不过分乐观,因为我相信 trisurf 函数也使用 Delaunay 三角测量,这可能是行不通的事情 - 但由于我实际上不知道这是否属实,我会试试你的建议!
  • 在某处上传3dDispersion.csv
  • 我一直在努力解决同样的问题。 Matlab 似乎无法正确执行此操作。

标签: matlab volume surface


【解决方案1】:

在 Matlab 中使用boundary 函数。这将在您的点上应用类似于 shrinkwrap 的网格。为了减少“间隙关闭器”,您将需要增加“收缩系数”。

试试K = boundary(X,Y,Z,0.9)

其中 X、Y 和 Z 是数据点的向量

https://www.mathworks.com/help/matlab/ref/boundary.html

然后您可以使用trimesh 或相关的曲面绘图功能,具体取决于您希望如何显示它。

【讨论】:

    猜你喜欢
    • 2021-01-21
    • 2021-05-14
    • 2021-04-07
    • 1970-01-01
    • 2020-02-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-10-18
    相关资源
    最近更新 更多