线性插值和双线性插值

原地址:
http://blog.csdn.net/longzaitianya1989/article/details/8761731
线性插值

如果你只处理分离的数据、想知道分离点之间的某些值,需要用到某种类型的插值。这种情况如图5-17坐标所示。对某些分离的(整数) X值,你知道Y值。当X=2,你知道Y=10,X=3时Y=30。但你不知道X=2.7时的Y值。

图5-17

                                                                                      图1线性插值:简单常规的例子

使用线性插值,你通过连接两点的线段找到X=2.7对应的Y值,如图1所示。使用线性插值,通过连接两点的线段找到X=2.7对应的Y值。线性插值总是将X表达成0和1之间,0对应X的最小值(你知道对应的Y值,本例中为2),1对应X的最大值(本例中为3) 。本例中你想找到X=2.7时的Y值,结果是0.7,意思是“2和3至之间的70%。”

已知的红色数据点与待插值得到的绿色点
假如我们想得到未知函数 f在点 P= ( x, y) 的值,假设我们已知函数 fQ11 = ( x1, y1)、 Q12 = ( x1, y2), Q21 = ( x2, y1) 以及 Q22 = ( x2, y2) 四个点的值。
首先在 x方向进行线性插值,得到R1和R2,然后在 y方向进行线性插值,得到P.
这样就得到所要的结果 f( x, y).
其中红色点Q11,Q12,Q21,Q22为已知的4个像素点.
第一步:X方向的线性插值,插入蓝色 第二步 :做完X方向的插值后再做Y方向的
点R1和R2插值 ,由R1与R2计算P点.
x方向上 x方向上
Y方向上插入绿色点P.
线性插值的结果与插值的顺序无关。首先进行 y方向的插值,然后进行 x方向的插值,所得到的结果是一样的。但双线性插值插值方法这种方法并不是线性的,首先进行 y方向的插值,然后进行 x方向的插值,与首先进行 x方向的插值,然后进行 y方向的插值,所得到的R1与R2是不一样的。
如果选择一个坐标系统使得 的四个已知点坐标分别为 (0, 0)、(0, 1)、(1, 0) 和 (1, 1),那么插值公式就可以化简为
f(x,y)=f(0,0)(1-x)(1-y)+f(0,1)(1-x)y+f(1,1)xy+f(1,0)x(1-y)
  • 在x与y方向上,z值成单调性特性的应用中,此种方法可以做外插运算,即可以求解Q1~Q4所构成的正方形以外的点的值。
  • 双线性插值的一个显然的 三维空间延伸是三线性插值。



本人注:
可以提一下 三样条插值和贝塞尔曲线的区别
这两种可以作为插值算法,更常用的做法是 做离散点的平滑处理。而三样条插值方法是 对序列中三个点计算出 一个三次表达式,通过这个三次表达式画出曲线,可以知道,这个曲线是经过这三个点的
贝塞尔曲线则是只经过起始点,不需要经过中间的控制点的。它的效果会更平滑,刻画了数据的发展趋势。

好的,我知道了。下面是我对线性插值双线性插值和三线性插值的简要介绍: 1. 线性插值 线性插值是一种基本的插值方法,它通过已知的两个点来估计中间的值。假设我们要在点 $(x_0, y_0)$ 和 $(x_1, y_1)$ 之间插值,那么对于 $x \in [x_0, x_1]$,可用以下公式计算出 $y$ 的近似值: $$y = y_0 + (y_1 - y_0) \frac{x - x_0}{x_1 - x_0}$$ 2. 双线性插值 双线性插值是一种常用的二维插值方法,它适用于在一个矩形网格上进行插值。假设我们要在四个已知点 $(x_0, y_0)$,$(x_1, y_0)$,$(x_0, y_1)$ 和 $(x_1, y_1)$ 形成的矩形网格上插值,那么对于任意点 $(x,y)$,可用以下公式计算出近似值: $$f(x,y) = f_{00}(1-t)(1-s) + f_{10}t(1-s) + f_{01}(1-t)s + f_{11}ts$$ 其中,$f_{ij}$ 表示 $(x_i, y_i)$ 的函数值,$s$ 和 $t$ 是插值点 $(x,y)$ 在水平和竖直方向上相对于 $(x_0,y_0)$ 的距离比例。具体而言,$s$ 和 $t$ 可以通过以下公式计算: $$s = \frac{x - x_0}{x_1 - x_0},\quad t = \frac{y - y_0}{y_1 - y_0}$$ 3. 三线性插值线性插值是一种常用的三维插值方法,它适用于在一个立方体网格上进行插值。假设我们要在八个已知点 $(x_0,y_0,z_0)$,$(x_1,y_0,z_0)$,$(x_0,y_1,z_0)$,$(x_1,y_1,z_0)$,$(x_0,y_0,z_1)$,$(x_1,y_0,z_1)$,$(x_0,y_1,z_1)$ 和 $(x_1,y_1,z_1)$ 形成的立方体网格上插值,那么对于任意点 $(x,y,z)$,可用以下公式计算出近似值: $$f(x,y,z) = \sum_{i=0}^1 \sum_{j=0}^1 \sum_{k=0}^1 f_{ijk}(1-t_i)(1-s_j)(1-r_k)$$ $$+ \sum_{i=0}^1 \sum_{j=0}^1 \sum_{k=0}^1 f_{i+1,j,k}t_i(1-s_j)(1-r_k) $$ $$+ \sum_{i=0}^1 \sum_{j=0}^1 \sum_{k=0}^1 f_{i,j+1,k}(1-t_i)s_j(1-r_k) $$ $$+ \sum_{i=0}^1 \sum_{j=0}^1 \sum_{k=0}^1 f_{i,j,k+1}(1-t_i)(1-s_j)r_k $$ $$+ \sum_{i=0}^1 \sum_{j=0}^1 \sum_{k=0}^1 f_{i+1,j+1,k}t_is_j(1-r_k) $$ $$+ \sum_{i=0}^1 \sum_{j=0}^1 \sum_{k=0}^1 f_{i+1,j,k+1}t_i(1-s_j)r_k $$ $$+ \sum_{i=0}^1 \sum_{j=0}^1 \sum_{k=0}^1 f_{i,j+1,k+1}(1-t_i)s_jr_k $$ $$+ \sum_{i=0}^1 \sum_{j=0}^1 \sum_{k=0}^1 f_{i+1,j+1,k+1}t_is_jr_k$$ 其中,$f_{ijk}$ 表示 $(x_i,y_j,z_k)$ 的函数值,$s$、$t$ 和 $r$ 是插值点 $(x,y,z)$ 在三个方向上相对于 $(x_0,y_0,z_0)$ 的距离比例。具体而言,$s$、$t$ 和 $r$ 可以通过以下公式计算: $$s = \frac{x - x_0}{x_1 - x_0},\quad t = \frac{y - y_0}{y_1 - y_0},\quad r = \frac{z - z_0}{z_1 - z_0}$$ 以上就是三种插值方法的简要介绍。希望对你有所帮助!
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值