Нормализация numpy массива изображений от -1, 1 до 0,255

#python #numpy #image-processing #normalize

#python #numpy #обработка изображений #нормализовать

Вопрос:

У меня есть числовой массив изображений с формой (32,32,32,3), являющийся (размер пакета, высота, ширина, канал).

Значения находятся в диапазоне от -1 до 1, я хочу нормализовать / преобразовать их в 0,255 для всего массива.

Я попробовал следующие решения:

 realpics  = ((batch_images - batch_images.min()) * (1/(batch_images.max() - batch_images.min()) * 255).astype('uint8'))


realpics = np.interp(realpics, (realpics.min(), realpics.max()), (0, 255))
  

Любая помощь с этим была бы высоко оценена.

Комментарии:

1. Какую ошибку вы получаете в данный момент?

2. Ошибок нет, изображения отображаются просто в виде белых прямоугольников. В диапазоне от -1 до 1 они отображаются правильно

Ответ №1:

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

 import numpy as np

raw_images = np.random.randint(0, 256, (32, 32, 32, 3), dtype=np.uint8)
batch_images = raw_images / 255 * 2 - 1 # normalize to [-1, 1]
recovered = (batch_images - batch_images.min()) * 255 / (batch_images.max() - batch_images.min())
recovered = np.rint(recovered).astype(np.uint8) # round before casting
assert (recovered == raw_images).all()
  

Комментарии:

1. Спасибо за ваш ответ. Я попробовал ваше решение, и результат больше не белый, а статичный. Это результат i.imgur.com/CT2KgWp.png середина — это то, что создает значение от -1 до 1, слева и справа — код от 0 до 255.

2. Вы нормализуете свое изображение на [-1, 1] другим способом, чем я здесь? Если вы используете этот метод нормализации для своего исходного изображения (т. Е. замените raw_images = ... строку выше на «как бы вы ни получали свои изображения»), утверждение не выполняется?