问题:
pytorch框架下,写datasets类的时候,需要对输入图像进行一些频域分解与处理。一开始写的demo函数是在numpy基础上写的,所以实际写datasets的时候对数据做了以下处理
- Image.open()读取图像
- np.array()转换图像
- 频域处理
- Image.fromarray()转换为Image格式
- transforms_ 转tensor格式
然后在visdom可视化的时候发现自己的输入数据和我想的完全不一样 debug之后发现在于Image.fromarray()这一步导致我的图像失真
左图为ndaarray 右图为Image.fromarray()结果
具体原因
ndarray是float32格式,image.fromarray(),输出格式为uint8格式,丢了很多信息
解决方案 1
def float2int(fig):
fig = np.array(fig)
fig = np.uint8(np.interp(fig, (fig.min(), fig.max()), (0, 255)))
fig = Image.fromarray(fig)
return fig
转Image格式前先把数据映射在0-255之间