2017-02-10 12 views
0

私は画像を持っています。つまり、ピクセル値の配列は5000x5000(これは典型的なサイズです)です。今私は2倍に拡大して10kx10kにしたいと思っています。拡張画像の(0,0)ピクセル値の値は、(0,0)、(0,1)、(1,0)、(1,1)になります。Pythonで画像をより速くサイズ変更するには

その後、私はscipy.interpolate.rotateを使用して展開された画像を回転させています(私は、配列のサイズ与えられたこのよりもより高速な方法はありません信じている)

次私は再び元に、この10kx10k配列のサイズを変更する必要がありますサイズは5kx5kです。これを行うには、展開された画像の(0,0)、(0,1)、(1,0)、(1,1)の平均ピクセル値を取り、新しいイメージ。

しかし、この全体が高価な手順であることが判明しました。私の配列のサイズを考えると、多くの時間がかかります。 もっと速い方法がありますか? 私は同様の方法は、回転後に元のサイズに画像を低減するために使用される。

#Assume the original image is already given 
largeImg=np.zeros((10000,10000), dtype=np.float32) 
for j in range(5000): 
    for k in range(5000): 
      pixel_value=original_img[j][k] 
      for x in range((2*k), (2*(k+1))): 
       for y in range((2*j), (2*(j+1))): 
        largeImg[y][x] = pixel_value 

原画像を拡大するために、次のコードを使用してい

答えて

4

あなたはrepeatを使用することができます。

large_img = original_img.repeat(2, axis=1).repeat(2, axis=0) 

final_img = 0.25 * rotated_img.reshape(5000,2,5000,2).sum(axis=(3,1)) 

またはscipy.ndimage.zoom。 numpyのメソッドよりもスムーズな結果が得られます。

関連する問題