网格数据由形成网格的规则间隔点处的值或测量值组成。网格数据出现在许多领域,如气象学、测量学和医学成像。在这些地区,通常会以规则的空间间隔进行测量,可能会随时间变化。这些有序的数据网格的范围从1-D(对于简单时间序列)到4-D(对于随时间测量体积)或更高。网格化数据的一些示例如下:
1-D:随时间变化的股票价格
二维:表面的温度
3-D:大脑的MRI图像
4-D:随时间变化的海水体积
在所有这些应用中,基于网格的插值有效地将数据的有用性扩展到没有测量的点。例如,如果您有某只股票的每小时价格数据,您可以使用插值来每15分钟估计一次价格。
MATLAB®提供了几种用于基于栅格的插值的工具:
的meshgrid
和ndgrid
功能创建不同维度的网格。meshgrid
可以创建二维或三维栅格,而ndgrid
可以创建任意维度的网格。这些函数使用不同的输出格式返回网格。控件可以在这些网格格式之间进行转换页面转置
(自R2020b起)或排列
函数来交换网格的前两个维度。
的插值函数
函数族包括interp1
,interp2
,interp3
,interpn
.每个函数的设计目的是用特定的维数来插值数据。interp2
和interp3
使用网格meshgrid
格式,而interpn
使用网格ndgrid
格式。
网格插值
对象支持在任意维金宝app度内插数据ndgrid
格式。这些对象也支持多值插值(金宝app截至R2021a),其中每个网格点可以有多个相关联的值。
使用它可以带来内存和性能方面的好处网格插值
对象在插值函数
功能。网格插值
为插值对象的重复查询提供了实质性的性能改进,而插值函数
函数每次被调用时都执行一个新的计算。同时,网格插值
将样本点存储在一种内存高效的格式中(例如紧凑的网格)并且是多线程的,以利用多核计算机处理器。
MATLAB允许您用三种表示形式中的一种来表示网格:全网格、紧凑网格或默认网格。使用默认网格和紧凑网格主要是为了方便和提高效率。
一个完整的网格其中所有点都是明确定义的。的输出ndgrid
和meshgrid
定义一个完整的网格。可以创建完整的轴网,这些轴网是制服,其中每个标注中的点具有相等的间距,或非均匀,其中间距在一个或多个维度中变化。均匀网格在每个维度上可以有不同的间距,只要在每个维度内间距是恒定的。
统一的 | 统一的 | 非均匀 |
---|---|---|
|
|
|
一个统一的全网格的例子是:
[X,Y]=meshgrid([1 2 3],[3 6 9 12])
X = 12 3 12 3 12 3 12 3 12 3 12 3 y = 3 3 3 3 6 6 6 9 9 9 12 12 12
在处理大型网格时,显式定义网格中的每个点可能会消耗大量内存。的紧凑的网格表示是一种省去整个网格的内存开销的方法。紧凑网格表示仅存储网格向量(每个维度一个)而不是整个网格。一起,网格向量隐式地定义了网格。实际上,输入meshgrid
和ndgrid
是网格向量,这些函数复制网格向量以形成完整的网格。紧凑的栅格表示使您能够绕过栅格创建,并将栅格向量直接提供给插值函数。
例如,考虑两个向量,x1=1:3
和x2=1:5
. 您可以将这些向量视为图形中的一组坐标x1
方向和中的一组坐标x2
方向,像这样:
每个箭头都指向一个位置。可以使用这两个向量定义一组网格点,其中一组坐标由x1
另一组坐标由x2
.当网格向量被复制时,它们会形成两个坐标数组,构成整个网格:
您的输入网格向量可能是单调或非单调. 单调向量包含在该维度上增加或在该维度上减少的值。相反,非单调向量包含波动的值。如果输入栅格向量是非单调的,例如[2 4 6 3 1]
,然后[X1,X2] = ndgrid([2 4 6 3 1])
输出非单调网格。如果要将网格传递给其他MATLAB函数,网格向量应该是单调的。的排序
函数有助于确保单调性。
在某些应用中,只有网格点上的值是重要的,而网格点之间的距离不是重要的。例如,大多数MRI扫描收集的数据在各个方向上都是均匀分布的。在这种情况下,您可以允许插值函数自动生成默认的网格与数据一起使用的表示。要做到这一点,请忽略插值函数的网格输入。当您忽略网格输入时,该函数会自动认为数据位于单位间隔的网格上。函数在执行时创建这个单位间距的网格,节省了您自己创建网格的麻烦。
考虑在一个表面上收集的温度数据以规则的5厘米间隔,在每个方向上延伸20厘米。使用meshgrid
创建完整的网格。
(X, Y) = meshgrid (0:5:20)
X=051015202005101520200510102005101520200510152020 Y=05055101020200
(x,y)中每个网格点的坐标表示为相应的元素X
和Y
矩阵。第一个网格点是(X (1) (1))
,这是[0 0]
,下一个网格点为[X Y (2) (2)]
,这是[0 5]
等等
现在,创建一个矩阵来表示网格上的温度测量值,然后将数据绘制成一个曲面。
T = [1 1 10 1 1;1 10 10 10 10;100 100 1000 100 100;10 10 10 10 1;1 1 10 1 1];冲浪(X, Y, T)视图(2)
虽然中心网格点的温度较大,但从原始数据来看,其位置及其对周围网格点的影响并不明显。
要将数据分辨率提高10倍,请使用interp2
将温度数据插值到使用0.5 cm间隔的更精细网格上。使用meshgrid
再次创建由矩阵表示的更精细的网格Xq
和Yq
. 然后,使用interp2
使用原始栅格、温度数据和新栅格点,并绘制结果数据。默认情况下,interp2
在每个维度使用线性插值。
[Xq,Yq]=meshgrid(0:0.5:20);Tq=interp2(X,Y,T,Xq,Yq);冲浪(Xq、Yq、Tq)视图(2)
插值温度数据会增加图像的细节,并大大提高测量区域内数据的有用性。
MATLAB中基于网格的插值函数和对象提供了几种不同的插值方法。在选择插值方法时,请记住,有些方法需要比其他方法更多的内存或更长的计算时间。您可能需要权衡这些资源,以实现结果中所需的平滑度。下表给出了应用于相同一维数据的每种插值方法的预览,并概述了每种方法的优点、权衡和要求。
方法 | 描述 |
---|---|
|
查询点上的插值值是最近的样本网格点上的值。
|
|
查询点处的插值是下一个采样栅格点处的值。
|
|
查询点上的插值值是前一个样本网格点上的值。
|
|
查询点上的插值值是基于每个维度上相邻网格点上的值的线性插值。
|
|
查询点处的插值基于相邻网格点处值的保形分段三次插值。
|
|
查询点上的插值值是基于每个维度上相邻网格点上的值的三次插值。
|
|
查询点处的插值基于多项式的分段函数,其阶数最多为三次,使用每个维度中相邻网格点的值进行评估。这个修正了Akima公式避免过激。
|
|
查询点处的插值基于每个相应维度中相邻网格点处的值的立方插值。
|
interp1
|interp2
|interp3
|interpn
|网格插值