0

我有一组数据,其值位于某些 x、y、z 坐标处。但是,坐标不是均匀分布的。我想对数据进行插值并有一个 3D 插值图,其中颜色是每个 x、y、z 坐标处的插值(不是 z 的值)。

另外我应该提到我的数据被限制在空间中,我只想在接近的点之间进行插值。我有多个片状结构,我不希望在片材之间进行插值。因此,我想我需要一个点标准之间的距离。

我的问题可以通过这个 MATLAB 测试程序看到

x = rand(100,1)*16 - 8;
y = rand(100,1)*16 - 8;
z = rand(100,1)*16 - 8;
d = rand(100,1)*16 - 8;

散点图效果很好

scatter3(x,y,z,5,d);
colormap(jet);
colorbar;

我想要一个漂亮的表面,上面有那种颜色。当然,上面的插值会非常糟糕,因为它是随机点和颜色(值),但对我来说它更有意义。

关于如何做到这一点的任何想法?

编辑

我将强调我的问题的本地化性质(使用 scatter3 见下图)。

局部插值问题。

Suever 提出的非常有趣的解决方案,在与第一张图相同的数据上使用了 dedicatedInterpolant 给了我下面的图片

插值图片

谢谢,

塞缪尔

4

1 回答 1

1

由于您的输入数据是分散的,因此您将要使用scatteredInterpolant. 这允许对非均匀间隔的输入数据进行插值。

对于您的特定数据,您将使用类似于以下内容的内容,其中xqyqzq是您要对输入进行插值的点。

S = scatteredInterpolant(x,y,z,d);
values = S(xq,yq,zq);

至于您对相邻数据定义的具体条件,您需要查看提供的各种 interp方法scatteredInterpolant看看它们是否满足您的需求。

编辑

仔细阅读后,您似乎可能想要 常规网格上z进行插值。d如果是这种情况,您仍然可以scatteredInterpolant通过以下方式使用。

% First interpolate for z
S = scatteredInterpolant(x,y,z);

xrange = linspace(min(x), max(x), 1000);
yrange = linspace(min(y), max(y), 1000);

[xq, yq] = meshgrid(xrange, yrange);

% These are now the interpolated z values (height of surface)
znew = S(xq,yq);

% Now we want to use x,y,z to interpolate d at the new grid points
S = scatteredInterpolant(x,y,z,d);

% Interpolate d at the new points
dnew = S(xq, yq, znew);

因此,我们将其应用于您提供的随机数据,我们可以像您所说的那样绘制表面。

S = surf(xq, yq, znew, 'CData', dnew);

在此处输入图像描述

原始数据点 (x,y,z) 显示为带有黑色轮廓的散点图。您可以看到数据对这些点进行了插值,并且表面的颜色应该从这些点进行插值。

于 2016-03-08T18:06:04.627 回答