1

我在 Debian Linux 上使用 Python 2.7 以及 matplotlib、Numpy 和 Scipy 以及 PIL。我可以使用提到的代码为图像的 HS 和 I 参数生成直方图。我打算对 HS 和 I 直方图应用直方图均衡,然后将其转换回结果图像,以便我可以比较变化。有人可以帮助我提供直方图均衡所需的代码并将均衡直方图转换回图像。

import scipy
from scipy import ndimage
import matplotlib.pyplot as plt
import matplotlib.colors as colors
import numpy as np
from scipy import misc
import scipy.misc

img = scipy.misc.imread("/home/subhradeep/Desktop/testc.jpg")
array=np.asarray(img)
arr=(array.astype(float))/255.0
img_hsv = colors.rgb_to_hsv(arr[...,:3])

lu1=img_hsv[...,0].flatten()
plt.subplot(1,3,1)
plt.hist(lu1*360,bins=360,range=(0.0,360.0),histtype='stepfilled', color='r', label='Hue')
plt.title("Hue")
plt.xlabel("Value")
plt.ylabel("Frequency")
plt.legend()

lu2=img_hsv[...,1].flatten()
plt.subplot(1,3,2)                  
plt.hist(lu2,bins=100,range=(0.0,1.0),histtype='stepfilled', color='g', label='Saturation')
plt.title("Saturation")   
plt.xlabel("Value")    
plt.ylabel("Frequency")
plt.legend()

lu3=img_hsv[...,2].flatten()
plt.subplot(1,3,3)                  
plt.hist(lu3*255,bins=256,range=(0.0,255.0),histtype='stepfilled', color='b', label='Intesity')
plt.title("Intensity")   
plt.xlabel("Value")    
plt.ylabel("Frequency")
plt.legend()
plt.show()

我需要在python中实现eq(4)

算法描述

4

1 回答 1

0

据我所知,您只需将直方图均衡应用于 HSV 变换的值分量即可均衡图像:

def histeq(im,nbr_bins=256):
    """  Histogram equalization of a grayscale image. 
         From http://programmingcomputervision.com/"""

    # get image histogram
    imhist,bins = np.histogram(im.flatten(),nbr_bins,normed=True)
    cdf = imhist.cumsum() # cumulative distribution function
    cdf = 1 * cdf / cdf[-1] # normalize (value component max is 1.0)

    # use linear interpolation of cdf to find new pixel values
    im2 = np.interp(im.flatten(),bins[:-1],cdf)

    return im2.reshape(im.shape), cdf

#equalise the intensity component
img_hsv[:,:,2], cdf = histeq(img_hsv[:,:,2])

#then convert back to RGB space
img_eq = colors.hsv_to_rgb(img_hsv)

曝光不足的输入图像:

曝光不足的图像

直方图均衡输出图像:

均衡图像

当然,如果您希望查看输出的样子,您可以将上述内容应用于 HSV 变换的每个通道。不过,我不确定这样做会取得什么成果。

于 2013-11-11T15:56:18.557 回答