26

2D マトリックスの「空の」ピクセルのデータを補間するのに苦労しています。基本的に、Inverse Distance Weighting、Kriging、Bicubic などの補間手法を理解しています (ただし、深くは理解していません)。開始点が正確にはわかりません (問題のステートメントまたは Python のケースのいずれか)。

問題の定義: 各ピクセルが特定の測定値を表す MxN マトリックス (通常のグリッド) があります (下の図、この図で使用されているデータは こちら)。青いピクセルとして持っている既存のデータを使用して、「疑問符スペース」(同じサイズで空のピクセルで構成される空白) 領域のデータを補間したかったのです。

宇宙での水分蒸発

私の質問:

1) このデータを補間するにはどうすればよいですか。それを明確に理解するために、簡単な例(3x3マトリックスなど)を教えてもらえますか?

2) Python 環境でソリューションに向けた手順を実行する方法を教えてもらえますか?

3) Python を使用して精度の意味で内挿法を比較するにはどうすればよいですか?

4) データの密度に応じて異なる補間を使用することは良い考えだと思いますか?

あなたの答えと提案に感謝します。

4

1 に答える 1

48

何が賢明な解決策であるかは、補間されたピクセルでどのような質問に答えようとしているかによって大きく異なります。

放射基底関数補間 / カーネル スムージング

Python で利用可能な実用的なソリューションに関しては、それらのピクセルを埋める 1 つの方法は、分散データの平滑化/補間を目的とした放射基底関数補間 (こちらを参照) の Scipy の実装を使用することです。

行列Mと基礎となる 1D 座標配列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)

これにより、上記でリンクしたデータの次の補間が得られます。見た目は合理的ですが、実際のデータに対する欠損サンプルの比率がいかに好ましくないかを強調しています。

RBF 補間

ガウス過程回帰/クリギング

クリギング補間は、scikit-learn ライブラリの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 の例で使用されている線形カーネルの利点の 1 つは、自由なパラメーターがないことです)

クリギング/ガウス過程回帰

修復

最後に、完全に視覚的に動機付けられたソリューションは、OpenCV の修復機能を使用することですが、これは 8 ビット配列 (0 ~ 255) を想定しており、単純な数学的解釈はありません。

于 2014-07-27T16:55:49.040 に答える