在深度学习图像分类、物体检测等过程中,首先要对图像进行归一化和标准化。
原理:
归一化:
在这里插入图片描述
式中,input表示输入的图像像素值;max()、min()分别表示输入像素的最大值和最小值。output为输出图像像素值。经过归一化,图像像素被调整到[0,1]区间内。
标准化:
在这里插入图片描述
式中,input表示输入的图像像素值;mean(input)表示输入图像的像素均值。std表示输入图像像素的标准差。经过标准化,图像像素被调整到[-1,1]区间内。

代码实现:

import torchvision.transforms as transforms
from PIL import Image
import numpy as np
 
img_path = "/dog.jpg"
 
# 图像归一化
transform_GY = transforms.ToTensor()#将PIL.Image转化为tensor,即归一化。
# 注:shape 会从(H,W,C)变成(C,H,W)
 
 
# 图像标准化
transform_BZ= transforms.Normalize(
    mean=[0.5, 0.5, 0.5],# 取决于数据集
    std=[0.5, 0.5, 0.5]
)

# transform_compose
transform_compose= transforms.Compose([
# 先归一化再标准化
    transform_GY ,
    transform_BZ
])
 
img = Image.open(img_path)
# (H, W, C)变为(C, H, W)
img_transform = transform_compose(img)

# 输出变换后图像,需要将图像格式调整为PIL.Image形式
img_after = img_transform .numpy()
# 通道变换,(1,2,0)表示将(C,H,W)按此顺序变换为(H,W,C)
img_after = np.transpose(img_after, (1, 2, 0))

print("img_after = ", img_after)
# 输出
img_after =  [[[-0.23921567  0.3803922  -0.34117645]
  [-0.09019607  0.5372549  -0.2235294 ]
  [-0.35686272  0.254902   -0.54509807]
  ...
  ...
  ...
  [-0.3960784   0.05882359 -0.54509807]
  [-0.10588235  0.28627455 -0.2862745 ]
  [-0.49019605 -0.12156862 -0.67058825]]]
Logo

旨在为数千万中国开发者提供一个无缝且高效的云端环境,以支持学习、使用和贡献开源项目。

更多推荐