MATLAB中的3D海洋温度插值

时间:2020-07-23 18:06:56

标签: matlab interpolation temperature ocean

我正在执行自动水下航行器任务,这些任务会向我提供经纬度,经度,深度和温度数据,我将使用这些数据来创建3D插值。我能够创建环境的3D模型,但是我正在尝试使颜色填充为每个关联位置处的插值温度。

下面的图像是我得到的3d深度图,我希望将填充色设为这些位置的温度:

我尝试使用颜色图,其中surf(X,Y,Z,C)和C是温度数据,但这不起作用。

这就是我的代码所需要的代码,其中VPSA是我的数据集,X =经度,y =纬度,Z =深度和C =温度

%Making Variables:
X = VPSA {:,1};
Y = VPSA {:,2};
Z = VPSA {:,3};
C = VPSA {:,4};

%Three axis plot
%Plotting Variable with coordinates
xi = linspace(min(X),max(X),1000);
yi = linspace(min(Y),max(Y),1000);

[Xi,Yi] = meshgrid(xi,yi);
Zi = griddata(X,Y,Z, Xi,Yi);
mesh (Xi,Yi,-Zi)
    xlabel('Latitude')
    ylabel('Longitude')
    zlabel('Depth') 

更新:我添加了以下代码行

Ci = griddata(X,Y,C,Xi,Yi);
mesh(Xi,Yi,-Zi,Ci)
 

得到下图,但是很难说是怎么回事,我想知道是否有一种方法可以将插值平滑到一个盒子中,所以不会像锯齿一样。 enter image description here

谢谢!

2 个答案:

答案 0 :(得分:0)

我假设原始的X,Y,Z,C数据点是匹配的,并且您可以使用命令mesh(X,Y,Z,C)获得可用的图。现在,您希望执行相同的操作,但是要插入一个数据集。

在这种情况下,您只需要为mesh命令提供颜色数据C

C也需要插值,所以也许像这样:

Ci = griddata(X,Y,C,Xi,Yi); % Interpolate C the same way you did for Z
mesh(Xi,Yi,-Zi,Ci)

编辑: 为先前的错误答案道歉。

答案 1 :(得分:0)

很难确切地知道“不起作用”的含义或温度矩阵C的性质,但是C的规格如下:

  • 与Z大小相同(更具体地说,Z中的每个元素对应于C中处于相同位置的每个元素)
  • C中的
  • 每个元素是一个整数,对应于 current 色彩图中的位置。 (这意味着如果您更新颜色图,则表面图将相应地更新)
  • 可以在绘制后通过表面图的cdata属性检查/更改整数。
  • 您可能必须更改绘图是将色图视为缩放还是直接处理(即cdatamapping)。查看对象的属性以找出答案。