直方图均衡滑雪

时间:2017-11-05 01:00:01

标签: python image-processing rgb scikit-image

我尝试从某些图像中获取一些静力学,当我尝试执行直方图均衡时,我感到困惑。

因为我试过这个:

img = io.imread(file);
img = exposure.equalize_hist(img);

我收到警告warn("This might be a color image. The histogram will be "

然后我尝试在每个频道中执行均衡:

img = io.imread(file);
#img = exposure.equalize_hist(img);    
height, width = len(img), len(img[0]);
r1 = [];
g1 = [];
b1 = [];
for i in range(height):
    for j in range(width): 
        pixel = img[i, j];
        r1.append(pixel[0]);
        g1.append(pixel[1]);
        b1.append(pixel[2]);    
r = exposure.equalize_hist(r1);        
g = exposure.equalize_hist(g1);
b = exposure.equalize_hist(b1);

我收到错误

AttributeError: 'list' object has no attribute 'shape'

那么我应该如何在带有颜色的图像中进行直方图均衡,如果我想在HSV或CIELAB中的图像中进行,那么它是否也是一样的?! histogram equalization

1 个答案:

答案 0 :(得分:1)

分别均衡每个频道:

from skimage import io, exposure


img = io.imread(img_path)

for channel in range(img.shape[2]):  # equalizing each channel
    img[:, :, channel] = exposure.equalize_hist(img[:, :, channel])

那是因为img[:, :, channel]已经为您提供了equalize_hist支持的2d图像数组,因此您不需要创建三个列表(顺便说一下,这可能效率相当低)。代码假设您在最后一个维度上有一个带有通道的图像(3d数组)(如果使用skimage.io.imread加载它就是这种情况)。

此外,它应该与RGB,HSV of Lab一样(skimage转换将在最后一个维度上保留频道)。例如img = color.rgb2hsv(img)img = color.rgb2lab(img)

如果您加载了灰度图像(已经是2d数组),那么您的注释行应该可以工作(您可以使用简单的if条件处理这两种情况)。

只是别的:你可以删掉分号。