2016-07-07 20 views
2

numpy.histogramを使って画像のRGBヒストグラムをプロットしたいとします。私が何をしたいかイメージヒストグラムに範囲外の値を表示するにはどうすればよいですか?

import numpy as np 
import matplotlib.pyplot as plt 

im = plt.imread('Bulbasaur.jpeg') 
draw_histogram(im, minimum=0., maximum=255.) 

Bulbasaur.jpegHistogram_Bulbasaur

それは[0、255]の通常の範囲に適しています(私の機能以下draw_histogramを参照してください)

私が使用している画像が範囲外の値を持つことが予想されます。時々、彼らは範囲外になることがあります。 RGBヒストグラムを使用して、値が範囲外であるかどうかを分析したいと思います。

たとえば、区間[-512,512]で値が最悪であると想定します。私はまだヒストグラムが正しいスポットで範囲内の強度を表示し、空白のない範囲のセクションを残すようにします。例えば、Bulbasaur.jpegのヒストグラムを再度描いても、範囲[-512,512]で同じヒストグラムを見ることができますが、「x」軸に沿って収縮します(下のヒストグラムの2つの破線の間)。

問題:

私はunregular範囲のヒストグラムを描画しようとすると、何かがうまくいかない:

import numpy as np 
import matplotlib.pyplot as plt 

im = plt.imread('Bulbasaur.jpeg') 
draw_histogram(im, minimum=-512., maximum=512.) 

enter image description here

draw_histogram()のための私のコード:

def draw_histogram(im, minimum, maximum): 

    fig = plt.figure() 
    color = ('r','g','b') 

    for i, col in enumerate(color): 
     hist, bins = np.histogram(im[:, :, i], int(maximum-minimum), (minimum, maximum)) 
     plt.plot(hist, color=col) 
     plt.xlim([int(minimum), int(maximum)]) 

    # Draw vertical lines to easily locate the 'regular range' 
    plt.axvline(x=0, color='k', linestyle='dashed') 
    plt.axvline(x=255, color='k', linestyle='dashed') 

    plt.savefig('Histogram_Bulbasaur.png') 
    plt.close(fig) 

    return 0 

質問

誰が正しくunregular範囲でRGBヒストグラムを描画する方法を知っていますか?

+0

削除されたコメントは、問題が何であるかを認識しました。 –

答えて

1

あなたは、私が変わっ 'plt.plot'

へのxの値を渡す必要があります。これに

plt.plot(hist, color=col) 

を:

plt.plot(np.arange(minimum,maximum),hist, color=col) 

この変更により、グラフが正常に表示されるようになりました。基本的に、plt.plotはnp.histから与えたy値を0からプロットしようとしていました。これは期待される範囲が0から始まるときに機能しますが、負の数を含めるときはplt.plotは0から開始します。むしろ、最小値から開始する必要があります。したがって、np.rangeを使用してx値を手動で割り当てると問題が解決されます。

enter image description here

関連する問題