二维插值在图像处理和数据可视化方面得到了大量的应用,二维插值的基本原理与一维插值一样,但二维插值是对两个变量进行函数的插值。在MATLAB中,主要使用interp2()函数进行二维插值的实现,其调用格式如下,
zi =interp2(z,xi,yi) %表示若 z=mxn,则x=1,y=1:m
zi = interp2(z, ntimes) % 在两点之间递归地插值ntimes次
zi=interp2(x,y,z,xi,yi) % 对原始数据x,y ,决定插值函数,返回值z为(x;,y)在函数f(x,y)上的值
zi= interp2(x,y ,z,xi,yi ,method) % 采用的不同的插值方法进行插值
zi= interp2( method,extrapval) % 若数据超过原始数据的范围时,则输入“extrapval”来指定种 %外推方法
在二维插值中,“mtethod”为选取插值的方法。插值的方法有以下4种:邻近插值、双线性插值、样条插值和立方插值。二维插值方法对比见表。
例:不同二维插值方法的结果图。
1)创建M文件,输人以下代码,实现原始数据图和二维插值4种
方法的结果图,所示。
[x.y] = meshgrid( -2:0.4:2); %原始数据
z= peaks(x,y);
[xi,yi] =meshgrid( -2:0.2:2); %设置插值点
zl = interp2(x,y,z,xi,yi, ' nearest '); %邻近插值
z2= interp2(x,y,z,xi,yi); %双线性插值
z3= interp2(x,y,z,xi,yi, 'spline'); %样条插值
z4= interp2(x,y,z,xi,yi, ' cubic '); %立方插值
hold on;
subplot(2,3,1);
surf(x,y,z);
title( '原始数据);
subplot(2,3,2);
surf(xi,yi,zl);
title( '邻近插值');
subplot(2,3,3);
surf(xi,yi,z2);
title( '双线性插值');
subplot(2,3,4);
surf(xi,yi,z3);
tile( '样条插值');
subplot(2,3,5);
surf(xi,yi,z4);
title('立方插值');
2)接着输人以下代码,实现插值结果等高线的绘制,如图6-11所示。
>>figure;
subplot(2,2,1); %绘制等高线
contour(xi,yi,z1);
tile( '邻近插值');
subplot(2,2,2);
contour( xi ,yi,z2);
title(’双线性插值');
subplot(2,2,3);
contour(xi,yi,z3);
title( '样条插值');
subplot(2,2,4) ;
contour( xi,yi,z4) ;
title('立方插值');