1

次のコード行を使用して、特定の画像の RGB ヒストグラムを出力します。全体的な結果は良好ですが、3 つのヒストグラムを gimp で取得したものと比較すると、ヒストグラム内のいくつかのビンが欠落していることに気付きました。これは、関連するピクセルの 0 とは異なる数があるはずの白い値があることを意味します。調子。

ここに私のコードがあります:

im = np.array(Image.open('myimage.jpg'))

plt.figure()
plt.hist(im[:,:,0].flatten(), 256, color='red', label='Histogram Red')

plt.figure()
plt.hist(im[:,:,1].flatten(), 256, color='green', label='Histogram Green')

plt.figure()
plt.hist(im[:,:,2].flatten(), 256, color='blue', label='Histogram Blue')

plt.show()
4

1 に答える 1

3

質問に答えるのに十分な情報を提供していませんが、ビンのエッジに問題があると思います。あなたがしたようにビンの数を与えると、データの範囲が 256 ビンに分割されますが、データの範囲が [12,230] (つまりnp.min(img[:,:0]) == 12np.max(img[:,:,0]) == 230) の場合、ビンの幅は 1 未満になり、奇妙なエイリアシング。代わりに使用します

 plot.hist(...,bins=arange(0,257) - .5,...)

使用するビンのエッジを明示的に渡します(データは8ビット整数であると推測しています)。これにより、整数を中心とした 256 本のバーが得られます。

lw=0美的な理由から、各バーの周りの黒い輪郭を取り除くためにも追加します.

于 2013-01-18T15:47:20.760 に答える