二维插值算法
1. MATLAB中三种差值法怎样编程
http://wenku..com/view/4b8beb2dcfc789eb172dc896.html?st=1
http://wenku..com/view/49a35f050740be1e650e9aac.html?st=1
http://wenku..com/view/97931e353968011ca30091ac.html
http://wenku..com/view/702346f8910ef12d2af9e7ad.html
2. 如何用matlab实现二维插值
matlab中主要是靠interp2命令来实现二维插值,
该命令的格式如下。
z1=interp2(x0,y0,z0,x1,y1,'method')
功能介绍:根据已知的数据(x0,y0,z0),用method方法进行插值,然后计算(x1,y1)对应的值z1.
参数介绍及其注意事项:
x0,y0是已知的原始数据,z0是函数值;x1,y1是插值点的自变量坐标向量;‘method‘是用来选择插值算法的,它可以取’linear‘(线性),
’cubic‘(三次插值)、’nearst‘(最近插值)。
3. 双三次样条插值
在数值分析这个数学分支中,双三次插值(英语:Bicubic interpolation)是二维空间中最常用的插值方法。在这种方法中,函数f在点 (x,y) 的值可以通过矩形网格中最近的十六个采样点的加权平均得到,在这里需要使用两个多项式插值三次函数,每个方向使用一个。
计算系数的过程依赖于插值数据的特性。如果已知插值函数的导数,常用的方法就是使用四个顶点的高度以及每个顶点的三个导数。一阶导数与表示 x 与 y 方向的表面斜率,二阶相互导数表示同时在 x 与 y 方向的斜率。这些值可以通过分别连续对 x 与 y 向量取微分得到。对于网格单元的每个顶点,将局部坐标(0,0, 1,0, 0,1 和 1,1) 带入这些方程,再解这 16 个方程。
After bilinear interpolation, perhaps the most widely used technique is that of bicubic interpolation, certainly by computational geometers, if not GIS users. This makes use of the 16-term function:
Bicubic interpolation is the lowest order 2-D interpolation procere that maintains the continuity of the function and its first derivatives (both normal and tangential) across cell boundaries (Russell, 1995). As we want the function to be valid over the grid cell of the interpolated point, we need to consider which 16 values to use to derive the coefficients. The common approach is to use the height at the four vertices, together with three derivatives at each vertex. The first derivativesh'xandh'yexpress the slope of the surface in thexandydirections, while the second (cross) derivativeh''xyrepresents the slope in bothxandy. In terms of solving the coefficients of [9], these values can be expressed by differentiating thexandyvectors independently, and then consecutively. For each of the vertices of the grid cell, the local coordinates (at 0,0, 1,0, 0,1 and 1,1) can be input into these equations to generate the 16 equations to solve [9]. Press et al., (1988) present algorithms for piecewise cubic, bicubic polynomial and bicubic spline interpolation. Methods for determining the slope estimates or partial derivatives are presented in Section 3.10.
A simpler approach described by Schut (1976) is to use the 12-term incomplete bicubic polynomial:
In this instance the cross-derivativeh''xyis not required, leaving the four corner elevations and eight first-order derivatives sufficient to compute the parameters. While the total surface is continuous, it is only smooth at the nodes.
4. 双线性插值原理的原理
双线性插值原理,是一种数学原理。
原理
简单来说
原来的数值序列:0,10,20,30,40
线性插值一次为:0,5,10,15,20,25,30,35,40
即认为其变化(增减)是线形的,可以在坐标图上画出一条直线
在数码相机技术中,这些数值可以代表组成一张照片的不同像素点的色彩、色度等指标。
为了方便理解,先考虑一维情况下的线性插值
对于一个数列c,我们假设c[a]到c[a+1]之间是线性变化的
那么对于浮点数x(a<=x<a+1),c(x)=c[a+1]*(x-a)+c[a]*(1+a-x);
双线性插值
双线性插值作为数值分析中的一种插值算法,广泛应用在信号处理,数字图像和视频处理等方面。
把这种插值方式扩展到二维情况。
对于一个二维数组c,我们假设对于任意一个浮点数i,c(a,i)到c(a+1,i)之间是线性变化的,c(i,b)到c(i,b+1)之间也是线性变化的(a,b都是整数)
那么对于浮点数的坐标(x,y)满足(a<=x<a+1,b<=y<b+1),我们可以先分别求出c(x,b)和c(x,b+1):
c(x,b) = c[a+1][b]*(x-a)+c[a][b]*(1+a-x);
c(x,b+1) = c[a+1][b+1]*(x-a)+c[a][b+1]*(1+a-x);
好,现在已经知道c(x,b)和c(x,b+1)了,而根据假设c(x,b)到c(x,b+1)也是线性变化的,所以:
c(x,y) = c(x,b+1)*(y-b)+c(x,b)*(1+b-y)
这就是双线性插值。
5. MATLAB中的meshgrid具体实例
meshgrid是MATLAB中用于生成网格采样点的函数。在使用MATLAB进行3-D图形绘制方面以及画矢量图方面有着广泛的应用。下面就来介绍一下该命令。
6. Matlab中插值函数
MATLAB中的插值函数为interp1,其调用格式为: yi= interp1(x,y,xi,'method') 其中x,y为插值点,yi为在被插值点xi处的插值结果;x,y为向量, 'method'表示采用的插值方法,MATLAB提供的插值方法有几种: 'method'是最邻近插值, 'linear'线性插值; 'spline'三次样条插值; 'cubic'立方插值.缺省时表示线性插值。 注意:所有的插值方法都要求x是单调的,并且xi不能够超过x的范围。 例:在一 天24小时内,从零点开始每间隔2小时测得的环境温度数据分别为 12,9,9,10,18 ,24,28,27,25,20,18,15,13 问题:推测中午12点(即13点)时的温度. 功能 一维数据插值(表格查找)。该命令对数据点之间计算内插值。它找出一元函数f(x)在中间点的数值。其中函数f(x)由所给数据决定。 x:原始数据点 Y:原始数据点 xi:插值点 Yi:插值点 (1)yi = interp1(x,y,xi,method) 用指定的算法计算插值: ’nearest’:最近邻点插值,直接完成计算; ’linear’:线性插值(缺省方式),直接完成计算; ’spline’:三次样条函数插值。 ’cubic’:该方法保留单调性与数据的外形; 功能 二维数据内插值 (1)ZI = interp2(X,Y,Z,XI,YI,method) 返回矩阵ZI,其元素包含对应于参量XI 与YI(可以是向量、或同型矩阵) 的元素, 即Zi(i,j) ←[Xi(i,j),yi(i,j)]。用户可以输入行向量和列向量Xi 与Yi,此时,输出向量Zi 与矩阵meshgrid(xi,yi)是同型的。 (2)ZI = interp2(Z,XI,YI) 缺省地,X=1:n、Y=1:m,其中[m,n]=size(Z)。再按第一种情形进行计算。 用指定的算法method 计算二维插值: ’linear’:双线性插值算法(缺省算法); ’nearest’:最临近插值; ’spline’:三次样条插值; ’cubic’:双三次插值。 (4)VI = interp3(X,Y,Z,V,XI,YI,ZI,method) 找出由参量X,Y,Z决定的三元函数V=V(X,Y,Z)在点(XI,YI,ZI)的值。 %用指定的算法method 作插值计算: ‘linear’:线性插值(缺省算法); ‘cubic’:三次插值; ‘spline’:三次样条插值; ‘nearest’:最邻近插值。 功能 数据格点 (1)ZI = griddata(x,y,z,XI,YI,method) 用二元函数z=f(x,y)的曲面拟合有不规则的数据向量x,y,z。griddata 将返回曲面z 在点(XI,YI)处的插值。曲面总是经过这些数据点(x,y,z)的输入参量(XI,YI)通常是规则的格点(像用命令meshgrid 生成的一样)。 用指定的算法method 计算: ‘linear’:基于三角形的线性插值(缺省算法); ‘cubic’: 基于三角形的三次插值; ‘nearest’:最邻近插值法; ‘v4’:MATLAB 4 中的griddata 算法。 功能 三次样条数据插值 格式 (1)yy = spline(x,y,xx) 功能 生成用于画三维图形的矩阵数据 格式 [X,Y] = meshgrid(x,y) 将由向量x,y(可以是不同方向的)指定的区域[min(x),max(x) , min(y) , max(y)] 用直线x=x(i),y=y(j) ( i=1,2,…,length(x) ,j=1,2,…,length(y))进行划分。这样,得到了length(x)*length(y)个点, 这些点的横坐标用矩阵X 表示,X 的每个行向量与向量x 相同;这些点的纵坐标用矩阵Y 表示,Y 的每个列向量与向量y 相同。其中X,Y可用于计算二元函数z=f(x,y)与三维图形中xy 平面矩形定义域的划分或曲面作图。 [X,Y] = meshgrid(x) %等价于[X,Y]=meshgrid(x,x)。 [X,Y,Z] = meshgrid(x,y,z) %生成三维阵列X,Y,Z,用于计算三元函数v=f(x,y,z)或三维容积图。7. 数字图像处理——图像插值
网上有很多介绍插值算法的,但感觉收获都不大
介绍三种图像插值算法:最近邻内插,双线性内插,双三次内插(双立方内插)
三次插值即用三阶多项式拟合原函数(也应该有其他用途)。假设三次拟合函数为
在matlab中,图像被定义为一个三维向量,若不考虑图像的通道数,可以将图像看作一个二维矩阵处理。matlab图像矩阵中坐标值映射到二维坐标系中,每一个像素块对应的是一个点,但实际的像素块是有一定尺寸的。
在进行双线性插值和双三次插值时,需要用坐标值拟合函数,为了简化计算,总是选取 作为局部坐标系原点,其中 为待插值坐标。
当出现这些情况时,补充这些像素的灰度值为图像内最相邻像素块的灰度值。
进行坐标变换后,选取与内插点 欧式距离最近的像素值进行插值。在程序中,使用将 按照四舍五入的舍入方式选取最近邻的像素块。
双线性内插是线性内插的二维实现,在x维度先进行线性插值,再由得到的值对y维度进行插值。在局部坐标系中,选取 相邻的四个像素进行双线性内插。由在数学原理中的推导可知
双三次内插是三次插值的二维实现。选取与 相邻的16个像素进行双三次内插,局部坐标系中x与y坐标范围均为 。由数学原理中的推到可知
最近邻插值法的优点是计算量很小,运算速度较快。但它仅使用离待测采样点最近的像素的灰度值作为该采样点的灰度值,而没考虑其他相邻像素点的影响,因而重新采样后灰度值有明显的不连续性,会产生明显的马赛克和锯齿现象。
双线性插值法效果要好于最近邻插值,计算量较大。缩放后图像质量高,基本克服了最近邻插值灰度值不连续的特点,因为它考虑了待测采样点周围四个直接邻点对该采样点的相关性影响。但是,此方法未考虑到各邻点间灰度值变化率的影响, 具有低通滤波器的性质, 从而导致缩放后图像的高频分量受到损失, 图像边缘在一定程度上变得较为模糊,丢失了一些细节信息。
双立方插值计算量最大,运算速度慢。双立方插值用三阶函数逼近,不仅考虑到周围四个直接相邻像素点灰度值的影响,还考虑到它们灰度值变化率的影响,能够产生比双线性插值更为平滑的边缘,计算精度很高,处理后的图像细节损失最少,效果最佳。
8. [求助]fortran如何进行二维插值
你说的 应该属于平滑问题 在f里不好弄 1维好说 你说的是2维 3次样条是最好的 不过 你可以用 matlab 其中里面的库函数interp2()中的spline参数就可以很好的完成你的要求 但是我现在对于interp2的源码还没有,所以对于他是怎么平滑的还是不清楚 希望可以帮上你
9. 二维三次样条插值
这是用在平面内内插数值的一种算法。利用平面内一些点的平面分布及已知数据,根据这些点在平面内的二维坐标,采用数学方法求出待求点的数值。
三次样条插值只是这种算法中的一种。
这种数学方法多用于绘制地图等高线、气压等压线、水温线等领域
10. 数据插值的matlab实现,插值后结果是这样的,是什么错误急需答案
看看这个能不能帮到你:
Matlab中插值函数汇总和使用说明 :
MATLAB中的插值函数为interp1,其调用格式为:
yi= interp1(x,y,xi,'method')
其中x,y为插值点,yi为在被插值点xi处的插值结果;x,y为向量, 'method'表示采用的插值方法,
MATLAB提供的插值方法有几种:
'nearest'是最邻近插值, 'linear'线性插值; 'spline'三次样条插值; 'cubic'立方插值.缺省时表示线性插值。
注意:所有的插值方法都要求x是单调的,并且xi不能够超过x的范围。
例如:在一 天24小时内,从零点开始每间隔2小时测得的环境温度数据分别为
12,9,9,10,18 ,24,28,27,25,20,18,15,13,
推测中午12点(即13点)时的温度.
x=0:2:24;
y=[12 9 9 10 18 24 28 27 25 20 18
15 13];
a=13;
y1=interp1(x,y,a,'spline')
结果为: 27.8725
若要得到一天24小时的温度曲线,则:
xi=0:1/3600:24;
yi=interp1(x,y,xi, 'spline');
plot(x,y,'o' ,xi,yi)
命令1
interp1
功能
一维数据插值(表格查找)。该命令对数据点之间计算内插值。它找出一元函数f(x)在中间点的数值。其中函数f(x)由所给数据决定。
x:原始数据点
Y:原始数据点
xi:插值点
Yi:插值点
格式
(1)yi = interp1(x,Y,xi)
返回插值向量yi,每一元素对应于参量xi,同时由向量x
与Y 的内插值决定。参量x 指定数据Y 的点。
若Y
为一矩阵,则按Y 的每列计算。yi 是阶数为length(xi)*size(Y,2)的输出矩阵。
(2)yi = interp1(Y,xi)
假定x=1:N,其中N
为向量Y 的长度,或者为矩阵Y 的行数。
(3)yi = interp1(x,Y,xi,method)
用指定的算法计算插值:
’nearest’:最近邻点插值,直接完成计算;
’linear’:线性插值(缺省方式),直接完成计算;
’spline’:三次样条函数插值。对于该方法,命令interp1
调用函数spline、ppval、mkpp、umkpp。这些命令生成一系列用于分段多项式操作的函数。命令spline
用它们执行三次样条函数插值;
’pchip’:分段三次Hermite
插值。对于该方法,命令interp1 调用函数pchip,用于对向量x 与y 执行分段三次内插值。该方法保留单调性与数据的外形;
’cubic’:与’pchip’操作相同;
’v5cubic’:在MATLAB
5.0 中的三次插值。
对于超出x
范围的xi 的分量,使用方法’nearest’、’linear’、’v5cubic’的插值算法,相应地将返回NaN。对其他的方法,interp1
将对超出的分量执行外插值算法。
(4)yi = interp1(x,Y,xi,method,'extrap')
对于超出x
范围的xi 中的分量将执行特殊的外插值法extrap。
(5)yi = interp1(x,Y,xi,method,extrapval)
确定超出x
范围的xi 中的分量的外插值extrapval,其值通常取NaN 或0。
例1
>>x = 0:10; y =
x.*sin(x);
>>xx = 0:.25:10; yy =
interp1(x,y,xx);
>>plot(x,y,'kd',xx,yy)
例2
>> year =
1900:10:2010;
>> proct = [75.995
91.972 105.711 123.203 131.669 150.697 179.323 203.212 226.505
249.633 256.344 267.893
];
>>p1995 =
interp1(year,proct,1995)
>>x =
1900:1:2010;
>>y =
interp1(year,proct,x,'pchip');
>>plot(year,proct,'o',x,y)
插值结果为:
p1995 =
252.9885
命令2
interp2
功能
二维数据内插值(表格查找)
格式
(1)ZI
= interp2(X,Y,Z,XI,YI)
返回矩阵ZI,其元素包含对应于参量XI
与YI(可以是向量、或同型矩阵) 的元素, 即Zi(i,j) ←[Xi(i,j),yi(i,j)]。用户可以输入行向量和列向量Xi 与Yi,此时,输出向量Zi
与矩阵meshgrid(xi,yi)是同型的。同时取决于由输入矩阵X、Y 与Z 确定的二维函数Z=f(X,Y)。参量X 与Y
必须是单调的,且相同的划分格式,就像由命令meshgrid 生成的一样。若Xi与Yi 中有在X 与Y范围之外的点,则相应地返回nan(Not a
Number)。
(2)ZI
= interp2(Z,XI,YI)
缺省地,X=1:n、Y=1:m,其中[m,n]=size(Z)。再按第一种情形进行计算。
(3)ZI
= interp2(Z,n)
作n
次递归计算,在Z 的每两个元素之间插入它们的二维插值,这样,Z 的阶数将不断增加。interp2(Z)等价于interp2(z,1)。
(4)ZI
= interp2(X,Y,Z,XI,YI,method)
用指定的算法method
计算二维插值:
’linear’:双线性插值算法(缺省算法);
’nearest’:最临近插值;
’spline’:三次样条插值;
’cubic’:双三次插值。
例3:
>>[X,Y] =
meshgrid(-3:.25:3);
>>Z = peaks(X,Y);
>>[XI,YI] =
meshgrid(-3:.125:3);
>>ZZ =
interp2(X,Y,Z,XI,YI);
>>surfl(X,Y,Z);hold
on;
>>surfl(XI,YI,ZZ+15)
>>axis([-3 3 -3 3 -5
20]);shading flat
>>hold
off
例4:
>>years =
1950:10:1990;
>>service =
10:10:30;
>>wage = [150.697
199.592 187.625
179.323 195.072 250.287
203.212 179.092 322.767
226.505 153.706 426.730
249.633 120.281
598.243];
>>w =
interp2(service,years,wage,15,1975)
插值结果为:
w =
190.6288
命令3
interp3
功能
三维数据插值(查表)
格式
(1)VI
= interp3(X,Y,Z,V,XI,YI,ZI)
找出由参量X,Y,Z决定的三元函数V=V(X,Y,Z)在点(XI,YI,ZI)的值。参量XI,YI,ZI
是同型阵列或向量。若向量参量XI,YI,ZI 是不同长度,不同方向(行或列)的向量,这时输出参量VI 与Y1,Y2,Y3 为同型矩阵。其中Y1,Y2,Y3
为用命令meshgrid(XI,YI,ZI)生成的同型阵列。若插值点(XI,YI,ZI)中有位于点(X,Y,Z)之外的点,则相应地返回特殊变量值NaN。
(2)VI
= interp3(V,XI,YI,ZI)
缺省地,
X=1:N ,Y=1:M, Z=1:P ,其中,[M,N,P]=size(V),再按上面的情形计算。
(3)VI
= interp3(V,n)
作n
次递归计算,在V 的每两个元素之间插入它们的三维插值。这样,V 的阶数将不断增加。interp3(V)等价于interp3(V,1)。
(4)VI
= interp3(......,method) %用指定的算法method 作插值计算:
‘linear’:线性插值(缺省算法);
‘cubic’:三次插值;
‘spline’:三次样条插值;
‘nearest’:最邻近插值。
说明
在所有的算法中,都要求X,Y,Z 是单调且有相同的格点形式。当X,Y,Z
是等距且单调时,用算法’*linear’,’*cubic’,’*nearest’,可得到快速插值。