MATLAB-二维线性插值运算

二维插值在图像处理和数据可视化方面得到了大量的应用,二维插值的基本原理与一维插值一样,但二维插值是对两个变量进行函数的插值。在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('立方插值');