2017-01-26 14 views
0

を補間:私はこの配列アップサンプリングだけでなく、両方の結果の値を補間したいアップサンプリングと私は、配列のようなもの持ってnumpyのアレイ

array = np.arange(0,4,1).reshape(2,2) 

> [[0 1 
    2 3]] 

を。私は配列をアップサンプリングするための良い方法は、使用していることを知っている:

array = eratemp[0].repeat(2, axis = 0).repeat(2, axis = 1) 
[[0 0 1 1] 
[0 0 1 1] 
[2 2 3 3] 
[2 2 3 3]] 

が、私は、配列の各2×2部との間に「ブロッキー」自然を削除するには値を補間する方法を把握することはできません。このような

[[0 0.4 1 1.1] 
[1 0.8 1 2.1] 
[2 2.3 3 3.1] 
[2.1 2.3 3.1 3.2]] 

何か(注:これらは、正確な数ではありません)

は、私はこのような何かをしたいです。私は、この特定の2Dグリッドを補間することは不可能かもしれないが、答えの最初のグリッドを使って、アップサンプリングプロセス中にピクセル数を増やすことで補間が可能でなければならないことを理解しているので、 '

私は補間の種類にあまり騒がしいわけではありませんが、最終的な出力は平滑面です!私はscipy.interp2dメソッドを使用しようとしましたが、誰かが彼らの知恵を分かち合うことができれば、役に立たないでしょう!

+0

2次元補間を行いますか?私はこれがどのように機能するかわかりません。あなたが1軸を補間するとき、あなたは他の軸の補間を破るでしょう。右? – tnknepp

+0

"あなたはアイデアを得る!" - 申し訳ありませんが、私はそれを得ていません。あなたが期待している4x4配列の残りの部分を記入できますか? –

+0

コメントありがとうございます。私は、グリッドの残りの部分を埋めて、私の望む結果をいくつか考えました。私の答えで2番目の2次元グリッドを補間することは問題になるかもしれないが、アップサンプリングプロセスが行われている間に最初のグリッドを補間する方法が必要であると理解していますか? –

答えて

1

補間にSciPy interp2dを使用することができます。hereというドキュメントがあります。

私はドキュメントから少し例を変更した:

from scipy import interpolate 
x = np.array(range(2)) 
y = np.array(range(2)) 
a = np.array([[0, 1], [2, 3]]) 
xx, yy = np.meshgrid(x, y) 
f = interpolate.interp2d(x, y, a, kind='linear') 

xnew = np.linspace(0, 2, 4) 
ynew = np.linspace(0, 2, 4) 
znew = f(xnew, ynew) 

あなたがznewを印刷する場合、それは次のようになります。

array([[ 0.  , 0.66666667, 1.  , 1.  ], 
     [ 1.33333333, 2.  , 2.33333333, 2.33333333], 
     [ 2.  , 2.66666667, 3.  , 3.  ], 
     [ 2.  , 2.66666667, 3.  , 3.  ]]) 
+0

+1ありがとうございます!既存の関数を使い、アップサンプリングと補間の両方のステップを1つの方法で行うことができます! –

0

私はscipy.misc.imresizeを使用します。

array = np.arange(0,4,1).reshape(2,2) 
from skimage.transform import resize 
out = scipy.misc.imresize(array, 2.0) 

2.0は、出力を2倍にしたいと示しています。入力の寸法。代わりにintまたはtupleを指定して元の寸法のパーセンテージまたは新しい寸法のみを指定することもできます。

これは非常に使いやすいですが、imresizeは最大値が255になり、最小値が0になるようにすべてをリサイズするため、余分なステップがあります。データタイプをnp.unit8に変更します。以下のような:

out = out.astype(array.dtype)/255 * (np.max(array) - np.min(array)) + np.min(array) 

はのは、出力を見てみましょう:

>>> out.round(2) 
array([[0. , 0.25, 0.75, 1. ], 
     [0.51, 0.75, 1.26, 1.51], 
     [1.51, 1.75, 2.26, 2.51], 
     [2. , 2.25, 2.75, 3. ]]) 

imresizeは、しかし、非推奨の警告および代替が付属しています:

推奨されなくなりました警告:imresizeは推奨されていません! imresizeはSciPy 1.0.0では非推奨の で、1.2.0では削除されます。代わりに skimage.transform.resizeを使用してください。

関連する問題