我尝试从某些图像中获取一些静力学,当我尝试执行直方图均衡时,我感到困惑。
因为我试过这个:
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
答案 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条件处理这两种情况)。
只是别的:你可以删掉分号。