python规则网格插值_Python中规则网格上的插值
什么是合理的解決方案很大程度上取決于你試圖用插值像素回答的問題——請注意清空器:對丟失的數(shù)據(jù)進行外推會導(dǎo)致非常誤導(dǎo)的答案!
徑向基函數(shù)插值/核平滑
就Python中可用的實際解決方案而言,填充這些像素的一種方法是使用Scipy的徑向基函數(shù)插值實現(xiàn)(參見here),其目的是對散亂數(shù)據(jù)進行平滑/插值。
考慮到矩陣M和底層的一維坐標數(shù)組r和c(這樣M.shape == (r.size, c.size)),其中M的缺失項被設(shè)置為nan,這對于線性RBF內(nèi)核來說工作得相當好,如下所示: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)
這將生成您鏈接到上面的數(shù)據(jù)的以下插值,盡管看起來很合理,但它確實強調(diào)了丟失樣本與實際數(shù)據(jù)的比率有多不利:
高斯過程回歸/Kriging
克里格插值可以通過scikit學(xué)習庫中的Gaussian Process Regression實現(xiàn)(它本身基于用于Matlab的DACE克里格工具箱)獲得。可按如下方式調(diào)用: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)
這產(chǎn)生了一個非常類似的插值徑向基函數(shù)的例子以上。在這兩種情況下,都有很多參數(shù)需要探索——這些參數(shù)的選擇很大程度上取決于您可以對數(shù)據(jù)進行的假設(shè)。(上述RBF例子中使用的線性核的一個優(yōu)點是它沒有自由參數(shù))
修補
最后,一個完全visually motivated的解決方案是使用OpenCV的inpainting功能,盡管這假設(shè)了8位數(shù)組(0-255),并且沒有直接的數(shù)學(xué)解釋。
總結(jié)
以上是生活随笔為你收集整理的python规则网格插值_Python中规则网格上的插值的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 原神三个雷柱子怎么解?
- 下一篇: python编的俄罗斯方块游戏下载_py