2017-02-01 4 views
1

У меня есть массив оттенков серого. Форма массиваСреднее вычитание пикселей для массива numpy

imgs.shape 
(100, 1, 300, 300) 

, который представляет 100 изображений оттенков серого (1 канал) и размера 300x300.

Я хочу сделать вычитание пикселей для этого массива. Это означает, что я хочу вычесть средний пиксель из всех изображений.

Я хочу, чтобы среднее значение для всех изображений.

Для одного изображения, которое было бы что-то вроде этого:

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

Как я могу сделать это для моего массива?

+0

Вы хотите * значит * над * все * изображения, или среднее для каждого * * изображение отдельно. –

+0

@WillemVanOnsem среднее значение для всех изображений – spore234

ответ

1

Если его среднее из одного изображения в то время, мы могли бы вычислить среднее поперек последних двух осей, сохраняя размеры (что облегчает вверх код для вычитания позже) и просто вычесть из исходного входа, например, так -

imgs -= imgs.mean(axis=(-2,-1),keepdims=1) 

Если его среднее по всем изображениям, включают первую ось тоже -

imgs -= imgs.mean(axis=(0,-2,-1),keepdims=1) 

Обратите внимание, что значения mean будет по умолчанию в качестве значений с плавающей точкой. Итак, если imgs не имеет тип float, нам нужно сделать копию imgs как float dtype, а затем вычесть из нее или преобразовать значения 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') 
+0

это среднее значение для всех изображений? – spore234

+0

@ spore234 Среднее на изображение, а затем вычитается из каждого изображения. – Divakar

+0

это должно быть: 1. вычислить среднее из всех изображений 2. вычесть это среднее из каждого изображения. Извините за то, что я не понимаю. – spore234