numpy中颜色通道的标准化

时间:2017-05-23 21:44:37

标签: python numpy neural-network normalization

我有一个(10000,32,32,3)(10000个图像,32个像素×32个像素,3个颜色通道)的numpy数组,我试图分别对最后三个通道中的每个通道进行标准化。

要使用

尝试在红色通道上进行标准化
testX[:,:,:,0] = (testX[:,:,:,0]-np.mean(testX[:,:,:,0]))/np.std(testX[:,:,:,0])

但不是沿着红色列生成标准化输出,例如:(这是其中一个图像中的最后一行像素)

[[
      ...,
    [[-1.78, 108,  94],
     [ 0.54,  37,  21],
     [ 0.12, 136, 127],
     ..., 
     [-0.68, 172, 114],
     [ 0.97, 204, 141],
     [ 1.20, 182, 118]]]]

它将所有红色单元格设置为0,1或255

[[
     ...,
    [[  0, 108,  94],
     [255,  37,  21],
     [  0, 136, 127],
     ..., 
     [  0, 172, 114],
     [  0, 204, 141],
     [  1, 182, 118]]]]

我对这个切片功能缺少什么?

有没有更好的方法来实现这一目标?

因为我试图将其标准化,所以做一些更简单的事情而不是通过颜色进行标准化会更有意义吗?如

testX = testX/255

1 个答案:

答案 0 :(得分:0)

我想知道这是否可能是由于最终的numpy数组的数据类型设置为int而不是float。请参阅以下示例,其中“x”是图像数据:

redchannel = x[:,:,:,0]   
greenchannel = x[:,:,:,1]
bluechannel = x[:,:,:,2]
a = 0.0
b = 1.0
imgdata_min = 0
imgdata_max = 255

normalized_redchannel = a + ((( redchannel - imgdata_min)*(b - a))/(imgdata_max - imgdata_min))

# merge channels
x_with_normalized_red = np.stack((normalized_redchannel,greenchannel,bluechannel), axis=3)
print(x_with_normalized_red.astype('int32')) # prints 0/1 values
print(x_with_normalized_red.astype('float32')) # prints floating point values