在没有内置函数的情况下实现直方图均衡

时间:2015-04-12 20:26:32

标签: python python-2.7 numpy matplotlib pillow

如何在没有内置函数的情况下对图像实现直方图均衡,即我想通过运行两个来改变孤独中的所有像素:

for x in range(0, im.size[0] ):
     for y in range(0, im.size[1] ):
          ....

1 个答案:

答案 0 :(得分:1)

第一步是建立强度值的直方图。在非常幼稚的类似Python的伪代码中,您可以执行以下操作:

histogram = {}

for each pixel v: # similar to the code in your question
    if v in histogram:
        histogram[v] += 1
    else:
        histogram[v] = 1

为了理解图像处理算法,我认为可以坚持使用NumPy数组并使用skimage.io.imreadscipy.misc.imread读取数据并迭代像素值。

希望这有助于您开始使用。

刚看到pillow标记。因此,为了使其更清晰,我建议您将图像直接读入数据类型uint8的NumPy数组(即范围[0, 255]中的值),如下所示:

from skimage.io import imread
image = imread('image.png')

或者如果您没有安装scikit-image,那么

from scipy.misc import imread
image = imread('image.png')

访问像素值就像

一样简单
pixel_intensity = image[10, 20]

请注意,直方图均衡假定为灰度图像,或者您正在处理彩色图像的单个通道。最好只使用灰度图像开始,以保​​持简单。