zoukankan      html  css  js  c++  java
  • 双线性插值

     

    双线性插值,这个名字咋一听很高大上的样纸,再在维基百科上一查(见文末,我去,一堆的公式吓死人),像俺这种半文盲,看到公式脑子就懵的类型,真心给跪。虽然看着好复杂,但仔细一看道理再简单不过了,所以还是自己梳理一下好。

    双线性插值,顾名思义就是两个方向的线性插值加起来(这解释过于简单粗暴,哈哈)。所以只要了解什么是线性插值,分别在x轴和y轴都做一遍,就是双线性插值了。

    线性插值的概念也非常简单粗暴,就是两个点A,B,要在AB中间插入一个点C(点C坐标在AB连线上),就直接让C的值落在AB的值的连线上就可以了。

    如A点坐标(0,0),值为3,B点坐标(0,2),值为5,那要对坐标为(0,1)的点C进行插值,就让C落在AB线上,值为4就可以了。

    但是如果C不在AB的线上肿么办捏,所以就有了双线性插值。如图,已知Q12,Q22,Q11,Q21,但是要插值的点为P点,这就要用双线性插值了,首先在x轴方向上,对R1和R2两个点进行插值,这个很简单,然后根据R1和R2对P点进行插值,这就是所谓的双线性插值。

    clip_image001

     

    附:维基百科--双线性插值:

    双线性插值,又称为双线性内插。在数学上,双线性插值是有两个变量的插值函数的线性插值扩展,其核心思想是在两个方向分别进行一次线性插值。

    假如我们想得到未知函数 f 在点 P=left( x, y
ight) 的值,假设我们已知函数 fQ_{11} = left( x_1, y_1 
ight) , Q_{12} = left( x_1, y_2 
ight) , Q_{21} = left( x_2, y_1 
ight) , 及 Q_{22} = left( x_2, y_2 
ight) 四个点的值。

    首先在 x 方向进行线性插值,得到

     f(R_1) approx frac{x_2-x}{x_2-x_1} f(Q_{11}) + frac{x-x_1}{x_2-x_1} f(Q_{21}) quadmbox{Where}quad R_1 = (x,y_1),
     f(R_2) approx frac{x_2-x}{x_2-x_1} f(Q_{12}) + frac{x-x_1}{x_2-x_1} f(Q_{22}) quadmbox{Where}quad R_2 = (x,y_2).

    然后在 y 方向进行线性插值,得到

     f(P) approx frac{y_2-y}{y_2-y_1} f(R_1) + frac{y-y_1}{y_2-y_1} f(R_2).

    这样就得到所要的结果 f left( x, y 
ight),

     f(x,y) approx frac{f(Q_{11})}{(x_2-x_1)(y_2-y_1)} (x_2-x)(y_2-y) + frac{f(Q_{21})}{(x_2-x_1)(y_2-y_1)} (x-x_1)(y_2-y)
      + frac{f(Q_{12})}{(x_2-x_1)(y_2-y_1)} (x_2-x)(y-y_1) + frac{f(Q_{22})}{(x_2-x_1)(y_2-y_1)} (x-x_1)(y-y_1).

    如果选择一个坐标系统使得 f 的四个已知点坐标分别为 (0, 0)、(0, 1)、(1, 0) 和 (1, 1),那么插值公式就可以化简为

     f(x,y) approx f(0,0) \, (1-x)(1-y) + f(1,0) \, x(1-y) + f(0,1) \, (1-x)y + f(1,1) xy.

    或者用矩阵运算表示为

     f(x,y) approx egin{bmatrix}
1-x & x end{bmatrix} egin{bmatrix}
f(0,0) & f(0,1) \
f(1,0) & f(1,1) end{bmatrix} egin{bmatrix}
1-y \
y end{bmatrix}

    与这种插值方法名称不同的是,这种插值方法的结果通常不是线性的,它的形式是

     b_1 + b_2 x + b_3 y + b_4 x y. \,

    常数的数目都对应于给定的 f 的数据点数目

     b_1 = f(0,0)
     b_2 = f(1,0) - f(0,0)
     b_3 = f(0,1) - f(0,0)
     b_4 = f(1,1) - f(1,0) - f(0,1) + f(0,0)

    线性插值的结果与插值的顺序无关。首先进行 y 方向的插值,然后进行 x 方向的插值,所得到的结果是一样的。

  • 相关阅读:
    【BZOJ 2124】【CodeVS 1283】等差子序列
    【BZOJ 1036】【ZJOI 2008】树的统计Count
    【BZOJ 1901】【ZJU 2112】Dynamic Rankings
    【BZOJ 3924】【ZJOI 2015】幻想乡战略游戏
    【BZOJ 4103】【THUSC 2015】异或运算
    【BZOJ 4513】【SDOI 2016】储能表
    【HDU 3622】Bomb Game
    【BZOJ 3166】【HEOI 2013】Alo
    【BZOJ 3530】【SDOI 2014】数数
    【BZOJ 4567】【SCOI 2016】背单词
  • 原文地址:https://www.cnblogs.com/linkr/p/3630902.html
Copyright © 2011-2022 走看看