一张三通道的图片的tensor类型的数据的标准差和平均值的计算,为Normalize()函数的归一化做准备

文章介绍了如何使用Python和相关库(如PIL、Numpy和torchvision)从一张普通照片中提取RGB通道的均值和标准差,通过`ToTensor()`函数转换图像并进行统计分析。
摘要由CSDN通过智能技术生成

我在看小土堆的视频的时候发现它在Normalize()中的参数都是0.5,于是我自己用python写了一段代码自己计算了一下一张手机拍摄的普通的照片的标准差和均值,以下是源代码,代码的每一步都写好了

这里讲一下思路,就是将一张图片先用PIL打开,然后转化成数组类型。然后用shape方法获得遍历的次数,通过数组的切片获得每一个通道的矩阵,注意这里的普通的图片的通道是在最后面的用shape查看,tensor类型的通道是在最前面的用size查看,切片之后,储存在字典里面,key值是遍历的次数,value是数组矩阵,这里为什么选用字典而不是列表储存是因为,列表中如果储存了列表是没法通过索引列表的下标将列表中的储存的列表索引出来的,然后就是,np的std方法是不支持给tensor类型的数据计算标准差的,但是python中的自带的mean方法是可以计算tensor类型的数据的

from torchvision import transforms
from PIL import Image
import numpy as np

class Get_picture_value():
    def __init__(self,path):
        self.path=path#导入图片路径
        self.image=Image.open(self.path)#打开图片
        self.images=np.array(self.image)#将图片转化为数组

    def get_picture_tensor(self):
        t=transforms.ToTensor()
        print("获得图片了")
        arr_shapes=self.images.shape[2]#获得遍历数值
        shapes={}
        tensor_shapes={}
        for i in range(arr_shapes):#索引出每个图片的维度的值,用于遍历,将图片的每个矩阵拿出来,并保存在字典
            shapes[i]=self.images[:,:,i]
        for i in shapes:
            tensor_shapes[i]=t(shapes.get(i))
        return tensor_shapes

    def get_mean(self,tensor_shapes):
        means=[]
        for i in tensor_shapes:
            a=tensor_shapes.get(i).mean()#mean方法可以直接用于tensor类型数据的计算
            means.append(a)
        print("获得平均值了")
        return means


    def get_std(self,tensor_shapes):
        stds=[]
        for i in tensor_shapes:#np的std方法不支持计算tensor类型数据,所以要妆化为数组类型
            a=np.array(tensor_shapes.get(i))
            a1=np.std(a)
            stds.append(a1)
        print("获得标准差了")
        return stds

img_path="E:/Jupyter/pycharm/data/train/ants_image/0013035.jpg"
g=Get_picture_value(img_path)
tensor_picture=g.get_picture_tensor()
means=g.get_mean(tensor_picture)
stds=g.get_std(tensor_picture)
print("平均值是:",means,"\n","标准差是:",stds)

运行结果

获得图片了
获得平均值了
获得标准差了
平均值是: [tensor(0.6895), tensor(0.6893), tensor(0.6939)] 
 标准差是: [0.23430397, 0.22955546, 0.23049147]

  • 18
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值