3

私は Numpy と Python2.7 を使用しており、画像を読み込むときにピクセルの列ごとに色が表示される回数をカウントする関数を作成しています (PIL を使用):

for i in range(wbmp.size[0]):
    bcount = 0
    for j in range(wbmp.size[1]):
        if wbmp.getpixel((i,j)) == 1:
            bcount = bcount + 1
    bdict[i] = bcount

ディクショナリは として返されます{Column#: # of times color appears}。ディクショナリ内のすべての値に対して標準偏差を実行できるようにしたいと考えています。最初にそれらすべてをリストに入れる必要がありますか? それとも、辞書からそれを引き出すだけの場所はありますか?

4

2 に答える 2

4

ディクショナリ内のすべての値のリストは で取得できるbdict.values()ため、次のように使用できます。

std = np.std(bdict.values())

これを行うためのより高速な方法は、より多くの numpy を使用します。

img = np.array(img)
colour_mask = img == 1  # or whichever colour you want
per_col_count = colour_mask.sum(axis=0)
std = np.std(per_col_count)

colour_maskブール値のマスクであり、軸 0 に沿って合計すると、Trueすべての列のすべての値が合計されます。これははるかに高速になるはずであり、その差は画像のサイズに応じて大きくなります。

于 2013-03-28T20:44:25.763 に答える
2

あなたの辞書には、あなたが望むリストがすでにあります。

bdict.values()

したがって、これを呼び出すことができますstd

np.std(bdict.values())

ただし、カウントのバージョンを使用する代わりに、画像をすぐにnumpy配列に変換し、1つの軸に沿ってヒストグラムを作成することをお勧めします.

from PIL import Image
i = Image.open('imfile.png')
a = np.array(i)
c = 1   # or whatever color you want
b = 256 # bit depth of image, so histogram bins are 1 color / bin

hists = np.array([ np.histogram(row, bins=b)[0] for row in a ])
s = hists[:,c].std()
于 2013-03-28T20:44:32.430 に答える