零均值和单位差异图像批

时间:2018-04-06 10:34:44

标签: python numpy

我正在努力实施卷积神经网络来对医学图像进行分类,我正在尝试对输入数据(RGB图像)进行零均值和单位变化,然后再将其输入网络。 我的数据形状[num_images,image_width,image_height,image_channels]

我正在使用numpy:

mean_val = np.mean(X_train, axis=0)
std_val = np.std(X_train, axis=0)
normalized_images = (X_train-mean_val)/std_val

然而,图像具有不同的形状,因此我收到以下错误:

Traceback (most recent call last):
File "/Users/TristanSaunders/Desktop/IndividualProject/Amazon_Test.py", line 
162, in <module>
mean_val = np.mean(lab_images, axis=0)
File "/Users/TristanSaunders/anaconda3/lib/python3.6/site- 
packages/numpy/core/fromnumeric.py", line 2909, in mean
out=out, **kwargs)
File "/Users/TristanSaunders/anaconda3/lib/python3.6/site- 
packages/numpy/core/_methods.py", line 70, in _mean
ret = umr_sum(arr, axis, dtype, out, keepdims)
ValueError: operands could not be broadcast together with shapes (767,1022,3) 
(488,744,3) 

仅当图像具有相同形状时才有效。这很好,因为我将图像重新整形为224x224x3,然后将它们送到网络,但为了使图像具有相同的形状,我需要调整大小,然后填充它们以保持图像的纵横比。但是在填充图像上进行零均值和单位方差会导致零值像素(填充)的丰富度使平均值偏斜。

因此,我试图在重塑它们之前对我的图像进行零均值和单位变化,并且我想知道当图像具有不同的形状时是否有解决方案吗?

谢谢!

1 个答案:

答案 0 :(得分:0)

似乎X_train是一个列表。如果列表的所有元素具有相同的形状,则可以在其上调用np.mean()。 如果形状不同,你可以

mean_val = np.mean([np.mean(a) for a in X_train])

这应该计算,但具有小像素数的图像将被过度表示。

所以,为了弥补,你可以做到

total_pixels = np.sum([a.flatten().shape for a in X_train])
mean_val = np.sum([a.flatten().shape * np.mean(a) for a in X_train]) / total_pixels