我有一个(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
答案 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