線性插值, 雙線性插值講解
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