我有一个形状为(32,32,32,3)的图像阵列, (批量大小,高度,宽度,通道)。
值在-1到1之间,我希望将整个数组归一化/转换为0255。
我尝试了以下解决方案:
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))
任何对此的帮助将不胜感激。
答案 0 :(得分:0)
这里唯一棘手的部分是,当您从浮点数组转换回整数数组时,必须注意如何将浮点数映射到整数。对于您的情况,您需要确保所有浮点数都四舍五入到最接近的整数,然后就可以了。这是使用您的第一种方法的有效示例:
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()