如何在图像直方图上显示超出范围的值?

时间:2016-07-07 17:31:22

标签: python numpy image-processing histogram rgb

我想使用numpy.histogram绘制图像的RGB直方图。

(参见下面我的函数draw_histogram

适用于常规范围[0,255]:

import numpy as np
import matplotlib.pyplot as plt

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

Bulbasaur.jpeg Histogram_Bulbasaur

我想做什么:

我希望我使用的图像超出范围值。有时他们会超出范围,有时不会。我想使用RGB直方图来分析值超出范围的程度。

假设我希望在区间[-512,512]中值最差。我仍然希望直方图在正确的位置显示范围内的强度,并使未填充的范围部分留空。例如,如果我再次绘制Bulbasaur.jpeg的直方图但范围为[-512,512],我希望看到相同的直方图,但沿着“x”轴收缩(在下面的直方图中的两条虚线之间) )。

问题:

当我尝试绘制不规则范围的直方图时,出现问题:

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

问题

有没有人知道如何正确绘制具有不规则范围的RGB直方图?

1 个答案:

答案 0 :(得分:1)

您应该将x值传递给' plt.plot'

我改变了:

String configFileName = (args[0] == 0) ? persistenceDev.xml: persistenceQA.xml;

到此:

plt.plot(hist, color=col)

通过此更改,图表开始正常显示。从本质上讲,plt.plot试图从0开始绘制你从np.hist开始给出的y值。当你的预期范围从0开始,但是当你想要包含负数时,plt.plot不应该&#39 ; t从0开始,相反,它应该从最小值开始,因此使用np.range手动分配x值可以解决问题。

enter image description here