線性插值&雙線性插值&三線性插值


內插是數學領域數值分析中的通過已知離散數據未知數據的過程或方法。

根據若干離散的數據數據,得到一個連續函數(也就是曲線)或者更加密集離散方程與已知數據相吻合。這個過程叫做擬合。內插是曲線必須通過已知點的擬合。

1.線性插值

已知坐標 (x0, y0) 與 (x1, y1),要得到 [x0, x1] 區間內某一位置 x 在直線上的值。

由於 x 值已知,所以可以從公式得到 y 的值

已知 y 求 x 的過程與以上過程相同,只是 x 與 y 要進行交換。

例如,

原來的數值序列:0,10,20,30,40 
線性插值一次為:0,5,10,15,20,25,30,35,40 
即認為其變化(增減)是線形的,可以在坐標圖上畫出一條直線 。

線性插值經常用於補充表格中的間隔部分。

兩值之間的線性插值基本運算在計算機圖形學中的應用非常普遍,以至於在計算機圖形學領域的行話中人們將它稱為 lerp。所有當今計算機圖形處理器的硬件中都集成了線性插值運算,並且經常用來組成更為復雜的運算:例如,可以通過三步線性插值完成一次雙線性插值運算。由於這種運算成本較低,所以對於沒有足夠數量條目的光滑函數來說,它是實現精確快速查找表的一種非常好的方法。

在一些要求較高的場合,線性插值經常無法滿足要求。在這種場合,可以使用多項式插值或者樣條插值來代替。

線性插值可以擴展到有兩個變量的函數的雙線性插值。雙線性插值經常作為一種粗略的抗混疊濾波器使用,三線性插值用於三個變量的函數的插值。線性插值的其它擴展形勢可以用於三角形與四面體等其它類型的網格運算。

2.雙線性插值

在地球物理中,會經常用到雙線性插值(Bilinear interpolation)。比如,模擬生成的地表均勻網格上的速度場或者同震位移場。要與GPS觀測點上的觀測同震位移場進行比較。就必須將均勻網格點的值插值到GPS太站上。這就需要用到雙線性插值。

 

雙線性插值

In mathematics, bilinear interpolation is an extension of linear interpolation for interpolating functions of two variables(e.g, x andy) on a regular grid. The interpolated function should not use the term of x2 or y2, but xy, which is the bilinear form of x and y.

其核心思想是在兩個方向分別進行一次線性插值

Thekey idea is to perform linear interpolation first in one direction, and then again in the other direction.Although each step is linear in the sampled values and in the position, the interpolation as a whole is not linear but rather quadratic in the sample location (details below).

紅色的數據點與待插值得到的綠色點

假如我們想得到未知函數 f 在點 P = (x, y) 的值,假設我們已知函數 f 在 Q11 = (x1, y1)、Q12 = (x1, y2), Q21 = (x2, y1) 以及 Q22 = (x2, y2) 四個點的值。

首先在 x 方向進行線性插值,得到

 

然后在 y 方向進行線性插值,得到

這樣就得到所要的結果 f(x, y),

 

如果選擇一個坐標系統使得 f 的四個已知點坐標分別為 (0, 0)、(0, 1)、(1, 0) 和 (1, 1),那么插值公式就可以化簡為

或者用矩陣運算表示為

與這種插值方法名稱不同的是,這種插值方法並不是線性的,它的形式是

它是兩個線性函數的乘積。看到了吧,雙線性插值並不是線性。

Contrary to what the name suggests, the bilinear interpolant is not linear

 

另外,插值也可以表示為

對於單位正方形,

 

在這兩種情況下,常數的數目都對應於給定的 f 的數據點數目。

線性插值的結果與插值的順序無關。首先進行 y 方向的插值,然后進行 x 方向的插值,所得到的結果是一樣的。

雙線性插值的一個顯然的三維空間延伸是三線性插值

3.三線性插值

  三線性插值是在三維離散采樣數據的張量積網格上進行線性插值的方法。這個張量積網格可能在每一維度上都有任意不重疊的網格點,但並不是三角化的有限元分析網格。這種方法通過網格上數據點在局部的矩形棱柱上線性地近似計算點 (x,y,z) 的值。 

  • 三線性插值在一次n=1三維D=3(雙線性插值的維數:D=2,線性插值:D=1)的參數空間中進行運算,這樣需要(1 + n)D = 8個與所需插值點相鄰的數據點。
  • 三線性插值等同於三維張量的一階B樣條插值。
  • 三線性插值運算是三個線性插值運算的張量積。

  實例

  在一個步距為1的周期性立方網格上,取xd,yd,zd 為待計算點,距離小於 x,y,z, 的最大整數的差值,即,

  x_d=x-\left\lfloor x\right\rfloor

  y_d=y-\left\lfloor y\right\rfloor

  z_d=z-\left\lfloor z\right\rfloor

  首先沿着z軸插值,得到:

  i_1=v\left[\left\lfloor x\right\rfloor,\left\lfloor y\right\rfloor\left\lfloor z\right\rfloor\right],\times(1-z_d)+v\left[\left\lfloor x\right\rfloor,\left\lfloor y\right\rfloor\left\lfloor z\right\rfloor\right]\times z_d

  i_2=v\left[\left\lfloor x\right\rfloor,\left\lfloor y\right\rfloor\left\lfloor z\right\rfloor\right],\times(1-z_d)+v\left[\left\lfloor x\right\rfloor,\left\lfloor y\right\rfloor\left\lfloor z\right\rfloor\right]\times z_d

  j_1=v\left[\left\lfloor x\right\rfloor,\left\lfloor y\right\rfloor\left\lfloor z\right\rfloor\right],\times(1-z_d)+v\left[\left\lfloor x\right\rfloor,\left\lfloor y\right\rfloor\left\lfloor z\right\rfloor\right]\times z_d

  j_2=v\left[\left\lfloor x\right\rfloor,\left\lfloor y\right\rfloor\left\lfloor z\right\rfloor\right],\times(1-z_d)+v\left[\left\lfloor x\right\rfloor,\left\lfloor y\right\rfloor\left\lfloor z\right\rfloor\right]\times z_d

  然后,沿着y軸插值,得到:

  w1 = i1(1 − yd) + i2yd

  w2 = j1(1 − yd) + j2yd

  最后,沿着x軸插值,得到:

  IV = w1(1 − xd) + w2xd
  這樣就得到該點的預測值。

  三線性插值的結果與插值計算的順序沒有關系,也就是說,按照另外一種維數順序進行插值,例如沿着 x、 y、z 順序插值將會得到同樣的結果。這也與張量積的交換律完全一致。

 

參考鏈接:線性插值法雙線性插值三線性插值


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM