1. 程式人生 > 其它 >線性插值, 雙線性插值講解

線性插值, 雙線性插值講解

線性插值, 雙線性插值講解

1 線性插值(Linear Interpolation):

  原理:已知一組(x, y)資料點,如[(x0, y0), (x1, y1), ......, (xn, yn)],通過在每一對點之間建立直線方程,來求解出未知點x所對應的y值,如圖1.1,圖1.2所示:

圖1.1

圖1.2

  如上圖中的例子,已知資料 (x2, y2) 與 (x3, y3),要計算 [x2, x3] 區間內某一位置 x 在直線上的y值,則根據(x2, y2) 與 (x3, y3)兩點,得出直線方程公式1:

公式1

  變換一下,即的到公式2:

公式2

  因此,在程式碼實現時,可以通過對每段區間應用公式2,即可計算出每個區間內的線性插值結果。

  在具體的程式碼實現中,有一個比較麻煩的地方是如何快速的確定出x在哪一個(x_i, y_i)區間,對於該問題,我是採用了"二分法"進行的搜尋,這相比於直接遍歷搜尋,能夠很好的提高區間搜尋的時間效率

2雙線性插值(Bilinear Interpolation):

  原理:雙線性插值,其實就是線性插值在2維資料空間上的拓展

  如圖2.1所示,先在x方向上:

    對點(x0, y0),(x1, y0)進行1次線性插值,得到點(x, y0)的值z_0
    對點(x0, y1),(x1, y1)進行1次線性插值,得到點(x, y1)的值z_1

圖2.1

  接著,如圖2.2所示,在y方向上:

    對點(x, y0),(x, y1)進行1次線性插值,得到點(x, y)的值z

圖2.2

    總計使用了3次線性插值

  ***:

  這裡有一個我在看插值演算法過程中,所產生過的一個思維錯誤,在這裡分享一下:

  為什麼如圖3.1的方式,不能做到2-D資料的線性插值?

圖3.1

  原因:

    如圖3.2所示,若採用上面的那種思路,則則在(x, y)處,則沒有值可計算了,因為2維空間(x, y)對應的是一個面,因此待求解的座標點所在區間其實是一個面區域,因此,上述那種思路,其實只能投影到面區域中的一條線上,這是錯誤的

圖3.2