python规则网格插值_Python中规则网格上的插值
什么是合理的解決方案很大程度上取決于你試圖用插值像素回答的問題——請注意清空器:對丟失的數據進行外推會導致非常誤導的答案!
徑向基函數插值/核平滑
就Python中可用的實際解決方案而言,填充這些像素的一種方法是使用Scipy的徑向基函數插值實現(參見here),其目的是對散亂數據進行平滑/插值。
考慮到矩陣M和底層的一維坐標數組r和c(這樣M.shape == (r.size, c.size)),其中M的缺失項被設置為nan,這對于線性RBF內核來說工作得相當好,如下所示:import numpy as np
import scipy.interpolate as interpolate
with open('measurement.txt') as fh:
M = np.vstack(map(float, r.split(' ')) for r in fh.read().splitlines())
r = np.linspace(0, 1, M.shape[0])
c = np.linspace(0, 1, M.shape[1])
rr, cc = np.meshgrid(r, c)
vals = ~np.isnan(M)
f = interpolate.Rbf(rr[vals], cc[vals], M[vals], function='linear')
interpolated = f(rr, cc)
這將生成您鏈接到上面的數據的以下插值,盡管看起來很合理,但它確實強調了丟失樣本與實際數據的比率有多不利:
高斯過程回歸/Kriging
克里格插值可以通過scikit學習庫中的Gaussian Process Regression實現(它本身基于用于Matlab的DACE克里格工具箱)獲得。可按如下方式調用:from sklearn.gaussian_process import GaussianProcess
gp = GaussianProcess(theta0=0.1, thetaL=.001, thetaU=1., nugget=0.01)
gp.fit(X=np.column_stack([rr[vals],cc[vals]]), y=M[vals])
rr_cc_as_cols = np.column_stack([rr.flatten(), cc.flatten()])
interpolated = gp.predict(rr_cc_as_cols).reshape(M.shape)
這產生了一個非常類似的插值徑向基函數的例子以上。在這兩種情況下,都有很多參數需要探索——這些參數的選擇很大程度上取決于您可以對數據進行的假設。(上述RBF例子中使用的線性核的一個優點是它沒有自由參數)
修補
最后,一個完全visually motivated的解決方案是使用OpenCV的inpainting功能,盡管這假設了8位數組(0-255),并且沒有直接的數學解釋。
總結
以上是生活随笔為你收集整理的python规则网格插值_Python中规则网格上的插值的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 原神三个雷柱子怎么解?
- 下一篇: python编的俄罗斯方块游戏下载_py