Python numpy阵列的平均像素减法

Python numpy阵列的平均像素减法,python,numpy,Python,Numpy,我有一组灰度图像。阵列的形状是 imgs.shape (100, 1, 300, 300) 它代表100个灰度图像(1个通道),大小为300x300 我想对这个数组进行平均像素减法。 这意味着我要从所有图像中减去平均像素 我想要所有图像的平均值 对于单个图像,可能是这样的: X_mean = X.mean(0) X -= X_mean 对于我的数组,我该怎么做呢?如果它是一次一个图像的平均值,我们可以计算最后两个轴上的平均值,保持尺寸不变(这简化了以后的减法代码),然后简单地从原始输入中减法

我有一组灰度图像。阵列的形状是

imgs.shape
(100, 1, 300, 300)
它代表100个灰度图像(1个通道),大小为300x300

我想对这个数组进行平均像素减法。 这意味着我要从所有图像中减去平均像素

我想要所有图像的平均值

对于单个图像,可能是这样的:

X_mean = X.mean(0)
X -= X_mean

对于我的数组,我该怎么做呢?

如果它是一次一个图像的平均值,我们可以计算最后两个轴上的平均值,保持尺寸不变(这简化了以后的减法代码),然后简单地从原始输入中减法,就像这样-

imgs -= imgs.mean(axis=(-2,-1),keepdims=1)
如果它的平均值跨越所有图像,也包括第一个轴-

imgs -= imgs.mean(axis=(0,-2,-1),keepdims=1)
请注意,
平均值
值默认为浮点值。因此,如果
imgs
不是浮点类型,我们需要将
imgs
复制为浮点数据类型,然后从中减去,或者将
mean
值转换为与
imgs
相同的数据类型,然后减去

样本运行-

In [188]: imgs = np.random.randint(0, 255,(10,1,30,30))

In [189]: out = imgs - imgs.mean(axis=(0,-2,-1),keepdims=1)

In [190]: out.shape
Out[190]: (10, 1, 30, 30)

In [191]: out.dtype
Out[191]: dtype('float64')

您是要所有图像的平均值,还是要分别计算每个图像的平均值。@WillemVanOnsem所有图像的平均值就是所有图像的平均值?@spore234它是每个图像的平均值,然后从每个图像中减去。它应该是:1。计算所有图像的平均值2。从每张图像中减去这个平均值。对不起,没有说清楚。对不起,我认为这是错误的。例如,
x=np.random.randint(11,99,(100,1300300))
,那么这两种解决方案都会导致错误的形状。形状应该保留,只有值应该“居中”@spore234不确定我是否正确理解该注释。所以,当
imgs-=imgs.mean(轴=(0,-2,-1),keepdims=1)
时,
imgs
的形状会是错误的吗?或者
imgs.mean(轴=(0,-2,-1),keepdims=1)
基本上是
imgs的标量:
(100,1300,300)
是错误的吗?