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

У меня есть массив изображений с формой (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 Ответ

0 голосов
/ 19 марта 2019

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

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()
...