Numpy - нормализует набор изображений RGB - PullRequest
0 голосов
/ 05 февраля 2019

Мой набор данных - это массив Numpy с размерами (N, W, H, C), где N - количество изображений, H и W - высота и ширина соответственно, а C - количество каналов.

Я знаю, что существует множество инструментов, но я бы хотел нормализовать изображения только с помощью Numpy.

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

Предположим, у нас есть два изображения внабор данных и первый канал этих двух изображений выглядит следующим образом:

x=array([[[3., 4.],
          [5., 6.]],

          [[1., 2.],
          [3., 4.]]])

Вычислить среднее значение:

numpy.mean(x[:,:,:,0])
= 3.5

Вычислить стандартное значение:

numpy.std(x[:,:,:,0])
= 1.5

Нормализовать первый канал:

x[:,:,:,0] = (x[:,:,:,0] - 3.5) / 1.5

Это правильно?

Спасибо!

1 Ответ

0 голосов
/ 05 февраля 2019

Выглядит хорошо, но есть некоторые вещи, которые NumPy может сделать лучше.Я предполагаю, что вы хотите нормализовать каждый канал отдельно.

Например, обратите внимание, что x имеет метод mean, поэтому мы можем написать x[..., 0].mean() вместо np.mean(x[:, :, :, 0]).Кроме того, метод mean принимает ключевое слово аргумент axis, которое мы можем использовать следующим образом:

means = x.mean(axis=(0, 1, 2)) # Take the mean over the N,H,W axes
means.shape # => will evaluate to (C,)

Затем мы можем вычесть средства из всего набора данных следующим образом:

centered = x - x.mean(axis=(0,1,2), keepdims=True)

Обратите внимание, что здесь нам пришлось использовать keepdims.

Также существует x.std, который работает таким же образом, поэтому мы можем выполнить всю нормализацию в 1 строке:

z = (x - x.mean(axis=(0,1,2), keepdims=True)) / x.std(axis=(0,1,2), keepdims=True)

Проверьте документы для numpy.ndarray.mean и np.ndarray.std для получения дополнительной информации.Методы np.ndarray.method - это то, что вы нажимаете, когда вызываете x.method вместо использования np.method(x) вместо

.
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...