赞
踩
概念:图像的像素值通常为[0,255],归一化是指把所有像素都除以255,将其转换到[0,1]之间。
作用:
概念:通过将图片减去均值和除以标准差的方式,使图像像素分布符合正态分布,即像素均值为0,标准差为1。
作用:
说明:超声图像是灰度图像,在处理的时候直接读取成灰度图再进行归一化和标准化即可得到想要的效果。
如果的自然图像,需要读取成三通道图像,并分别计算每个通道的均值和标准差,然后分别标准化。
这里没搞懂的问题是,我将单通道的超声图像读取成三通道图像,每个通道的像素值都一样,使用相同的均值和方差计算后,再组合到一起显示出的图像(图1)和直接读取单通道图像计算后的结果(图2)差别很大,不知道为什么?
# 定义dataset class my_original_Seg(Dataset): def __init__(self, list_path): self.list_path = list_path self.img_list = [line.strip().split() for line in open(list_path)] self.files = self.read_files() def read_files(self): # 这里是自己添加的读取数据路径的方法,可以根据自己的情况修改 files = [] for item in self.img_list: image_path = item name = os.path.splitext(os.path.basename(image_path[0]))[0] files.append({ "img": image_path[0], "name": name, }) return files def __getitem__(self, index): item = self.files[index] image_path = "..." # 读成自己的路径 image = cv2.imread(image_path,0) return image def __len__(self): return len(self.img_list) mean_dataset = my_original_Seg(list_path=dataset_list_pat) mean_loader = torch.utils.data.DataLoader( mean_dataset, batch_size=32, shuffle=False, pin_memory=False) # 初始化通道平均值和标准差(这里计算的是三通道的,可以根据情况改成只计算单通道的) means = torch.zeros(3) stds = torch.zeros(3) for i_iter, batch in enumerate(mean_loader, 0): # print(batch.shape) batch = batch.float() for c in range(3): means[c] += batch[:, :, :, c].mean() stds[c] += batch[:, :, :, c].std() means = means / len(mean_loader) stds = stds / len(mean_loader) print(means / 255) print(stds / 255)
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。