CT图像使用transforms.Normalize()函数的计算过程

利用pytorch对CT图像做深度学习的时候需要使用pytorch的图像处理的工具包transform,但是我看在CT图像上通常使用的是transform.ToTensor()将图像转换到[0,1],自然图像常常会使用transforms.Normalize()来将图像转换到[-1,1],对此查询了一下CT图像是否需要使用transforms.Normalize()很少有资料,抱着试一试的心态,自己钻研了一下怎么来使用这个函数

在此如果有人比较了解CT图像是否需要Normalize请指正。

网上查到的方法对transforms.Normalize()应用需要先使用transform.ToTensor()将图像转换到[0,1],然后再根据数据集的mean,std分别对数据集进行Normalize();

以下是计算我的数据集的mean,std的代码:

from torchvision.transforms import ToTensor
import numpy as np
from PIL import Image
import tqdm
import os
import torch

img_dir = "./training_dataset/"   #数据集路径
    # 使用assert 判断数据集路径是否存在,若存在程序继续向下执行,若不存在,最抛出异常:“image dir: '{img_dir}' does not exist.”
assert os.path.exists(img_dir), f"image dir: '{img_dir}' does not exist." 

img_name_list=[]

for root ,sub, files in os.walk(img_dir):  #遍历数据集
    #print(os.path.splitext(os.path.basename(root)))
    want_pngs = ['DegradePhase1','DegradePhase2','DegradePhase3','DegradePhase4',  #筛选自己需要的数据集
           'DegradePhase5','DegradePhase6','DegradePhase7','DegradePhase8','DegradePhase9','DegradePhase10']
    for want_png in want_pngs:
        if want_png in os.path.splitext(os.path.basename(root)):
                print('OK')
                for file in files:
                        if file.endswith(".png"):
                                file_name = os.path.join(root, file)
                                img_name_list.append(file_name)


print(len(img_name_list)) #总共25080张png图片 ,DegradePhase相关的图片11400张
cumulative_mean = torch.zeros(1)  #CT图像是单通道,所以最后指建了一维tensor
cumulative_std = torch.zeros(1)
x_transform = ToTensor()          #normalize之前需要ToTensor
print(f"INFO: {len(img_name_list)} imgs in total")
for img_name in tqdm.tqdm(img_name_list,total=len(img_name_list)): 
        
        img = np.array(Image.open(img_name))   #打开图像
        img = x_transform(img)                 #转化成tensor并归一到[0,1]
        C,H,W = img.shape[:3]                  #获取通道C,高H,宽W
        img = img.view(C,-1)                   #将H,展平
        #print(img.shape,img.dtype)
        #print(img.mean())
    
        cumulative_mean += img.mean(1)   # 分别将将所有图片的每一个通道的值求均值再求和
        cumulative_std += img.std(1)     #分别将将所有图片的每一个通道的值求均标准差再求和

mean = cumulative_mean / len(img_name_list)
std = cumulative_std / len(img_name_list)
print(f"总数据量:{len(img_name_list)}")
print(f"mean: {mean}")
print(f"std: {std}")

最后输出:

ps:注意如果训练的时候改写transform的话,利用训练好的模型做预测的使用也需要使用与训练时一样的transform,不然会的到非常奇怪的结果

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

zlbbme_

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值