5.2.2 二维插值
二维插值主要用于图像处理和数据的可视化,其基本思想与一维插值相同,对函数 进行插值。在MATLAB中,采用函数interp2()进行二维插值,其调用格式如下。
zi=interp2(x, y, z, xi, yi):通过初始数据x、y和z产生插值函数y = f(x, y),返回值zi是(xi, yi)在函数f(x, y)上的值。
zi=interp2(x, y, z, xi, yi, method):其中method为可疑采用的插值方法。二维插值采用的方法有4种,分别是'nearest'、'linear'、'spline'和'cubic',其中线性插值为默认的插值方法。
zi=interp2(x, y, z, xi, yi, method, extrapval):当数据超过原始数据范围时,用extraval进行替代的一种外推方法。
【例5-14】 二维插值函数实例分析,分别采用'nearest'、'linear'、'spline'和'cubic'进行二维插值,并绘制三维表面图。其实现的MATLAB代码如下:
>> clear all;
[x,y]=meshgrid(-4:0.8:4); %原始数据
z=peaks(x,y);
[xi,yi]=meshgrid(-4:0.2:4); %插值数据
zi_nearest=interp2(x,y,z,xi,yi,'nearest'); %临近点插值
zi_linear=interp2(x,y,z,xi,yi); %系统默认为线性插值
zi_spline=interp2(x,y,z,xi,yi,'spline'); %三次样条插值
zi_cubic=interp2(x,y,z,xi,yi,'cubic'); %三次多项式插值
figure; %数据显示
hold on;
subplot(321);
surf(x,y,z); %绘制原始数据点
title('原始数据');
subplot(322);
surf(xi,yi,zi_nearest); %绘制临近点插值的结果
title('临近点插值');
subplot(323);
surf(xi,yi,zi_linear); %绘制线性插值的结果
title('线性插值');
subplot(324);
surf(xi,yi,zi_spline); %绘制三次样条插值的结果
title('三次样条插值');
subplot(325);
surf(xi,yi,zi_cubic); %绘制三次多项式插值的结果
title('三次多项式插值');
运行程序后,输出的结果如图5.8所示,分别采用临近点插值、线性插值、三次样条插值和三次多项式插值。在二维插值中已知数据(x, y)必须是栅格格式,一般采用函数meshgrid()产生,例如本程序中采用[x, y] = meshgrid(-4:0.8:4)来产生数据(x, y)。另外,函数interp2()要求数据(x, y)必须是严格单调的,即单调增加或单调减少。如果数据(x, y)在平面上分布不是等间距时,函数interp2()会通过变换将其转换为等间距;如果数据(x, y)已经是等间距的,可以在method参数的前面加星号'*',例如参数'cubic'变为'*cubic',来提高插值的速度。