2016-10-06 3 views
0

イメージがあります。np.arrayにPILで読み込みます。 私の場合、それは(1000, 1500)np.arrayです。イメージのnumpy配列表現を簡略化

私は視覚化のために簡略化したいと思います。簡素化することで 、私はこの行列から

1 1 1 1 0 0 
1 0 1 0 0 0 

に変換し、次の
1 1 0 

それは1の50%以上のように、いくつかの基準を満たしている場合ので、基本的に、すべての2*2サンプルを見て - > 1と数えれば0とカウントします。

私はそれを正しく呼び出す方法はわかりませんが、そうするためのよく知られた数学的手順があるはずです。

+1

私は、あなたが話していると思う数学の手順は、と呼ばれることが多いです"downsampling" [Wikipedia](https://en.wikipedia.org/wiki/Comparison_gallery_of_image_scaling_algorithms)には、一般的な方法のいくつかを視覚的に比較した小さなページがあります – Aaron

答えて

1

axis引数:小さな2×2ブロックに

import numpy as np 
a = np.array([[1, 1, 1, 1, 0, 0], [1, 0, 1, 0, 0, 0]]) 
a = np.reshape(a, (a.shape[0]/2, 2, a.shape[1]/2, 2)) 
a = np.sum(a, axis=(1, 3)) >= 2 

整形グループあなたの配列(長軸オリジナルズが2の倍数でなければならない)でnp.reshape()np.sum(array)の組み合わせを使用し、私はそれに沿って和を使用しますグループ内の4つの値のうち少なくとも1つが1であることを確認するために作成された軸を使用します。

Computing average for numpy arrayを参照してください。

+0

代わりに '> 2'にしてください。 – Divakar

+0

@Divakar「少なくとも1つのエントリは1つです」と読んでいました。一定 ! –

1

PIL.Image.fromarrayを使用して画像をPILに変換し、次にresizeに変換するか、その画像を希望のサイズのthumbnailに変換します。この利点の1つは、ファイルに簡単に保存したり、キャンバスに描画したり、デバッグのために表示することができます。数値型と画像モード(私が頻繁に落とす落とし穴)のみを意識してください。画像がで行われている作成

バックnumpyの配列に画像を取得する
from PIL import Image 
image = Image.fromarray(arr).astype(np.uint8) #unsigned bytes for 8-bit grayscale 
smallerImage = image.resize(desired_size, resample=Image.BILINEAR) #resize returns a copy thumbnail modifies in place 

がするのと同じくらい簡単です:np.array(image.getdata()).reshape(image.size)

関連する問題