pytorch

三维图像语义分割:肝脏

2022-11-28  本文已影响0人  午字横

1 什么是.nii文件

NIFTI(Neuroimaging Informatics Technology Initiative)神经成像信息技术计划.
标准NIFTI图像的扩展名是.nii,也包含了头文件及图像资料。由于NIFTI格式和Analyze格式的关系,因此NIFTI格式也可使用独立的图像文件(.img)和头文件(.hdr)。单独的.nii格式文件的优势就是可以使用标准的压缩软件(如gzip)进行压缩,而且一些分析软件包(比如FSL)可以直接读取和写入压缩的.nii文件(扩展名为.nii.gz)。

2 simpleITK
这是使用最多的一种图像处理工具

import SimpleITK as sitk
from matplotlib import pyplot as plt
 
def showNii(img):
    for i in range(img.shape[0]):
        plt.imshow(img[i,:,:],cmap='gray')
        plt.show()
 
itk_img = sitk.ReadImage('./Brats18_2013_2_1_flair.nii.gz')
img = sitk.GetArrayFromImage(itk_img)
print(img.shape)    # (155, 240, 240) 表示各个维度的切片数量
showNii(img)

3 matplotlib 库图像不显示问题

#添加这两句
import matplotlib
matplotlib.use('TkAgg')

# 读取图像,如.mhd .nii .nrrd等
ct=sitk.ReadImage(r'D:\pythonSpace\data\3D\batchImage\segmentation-124.nii')
# 将sitk图像转换成数组
ct_array=sitk.GetArrayFromImage(ct)
print(ct_array.shape) #(463, 512, 512) 代表有463张图像
img=ct_array[250,:,:]
print(type(img))
img_pic=Image.fromarray(img)
print(type(img_pic))
plt.imshow(img_pic,cmap='gray')
plt.show() #最后添加这一句调用

4 np.unique() 介绍与使用

对于[一维数组]或者列表,np.unique() 函数去除其中重复的元素 ,并按元素由小到大
返回一个新的无元素重复的元组或者列表。
numpy.unique(arr, return_index, return_inverse, return_counts)
arr:输入数组,如果不是一维数组则会展开
return_index:如果为 true,返回新列表元素在旧列表中的位置(下标),并以列表形式存储。
return_inverse:如果为true,返回旧列表元素在新列表中的位置(下标),并以列表形式存储。
return_counts:如果为 true,返回去重数组中的元素在原数组中的出现次数。

5 np.stack()函数详解

stack为堆叠的意思,这个函数主要有两个参数,
第一个是需要堆叠的多个数组,采用列表的形式输入,
例如:np.stack([arrays1,array2,array3],axis=0)。
第二个参数是axis,
这个参数表示从哪一个维度进行堆叠以及堆叠的内容,
这个维度是相对于堆叠的数组来说的。整个函数的输出为一个新数组。
注意进行堆叠的数组形式必须一致

glob.glob() 函数

import glob

#获取指定目录下的所有图片
print (glob.glob(r"/home/qiaoyunhao/*/*.png"),"\n")#加上r让字符串不转义

#获取上级目录的所有.py文件
print (glob.glob(r'../*.py')) #相对路径

Python中next()函数、iter()以及next(iter())函数的用法详解

描述:

next() 返回迭代器的下一个项目。
next() 函数要和生成迭代器的iter() 函数一起使用。

next(iterable[, default])
参数说明:
iterable – 可迭代对象
default – 可选,用于设置在没有下一个元素时返回该默认值,如果不设置,又没有下一个元素则会触发 StopIteration 异常。

备注:
list、tuple等都是可迭代对象,我们可以通过iter()函数获取这些可迭代对象的迭代器。然后,我们可以对获取到的迭代器不断使⽤next()函数来获取下⼀条数据。
iter()函数实际上就是调⽤了可迭代对象的 iter ⽅法。

a=[1,2,3,4]
a=iter(a)
print(next(iter(a)))
print(next(iter(a)))
print(next(iter(a)))

nn.BatchNorm2d()

通常来说,数据标准化预处理对于浅层模型就足够有效了:处理后的任意一个特征在数据集中所有样本上的均值为0、标准差为1。标准化处理输入数据使各个特征的分布相近:这往往更容易训练出有效的模型。但对深层神经网络来说,即使输入数据已做标准化,训练中模型参数的更新依然很容易造成靠近输出层输出的剧烈变化。这种计算数值的不稳定性通常令我们难以训练出有效的深度模型。

批量归一化利用小批量上的均值和标准差,不断调整神经网络中间输出,从而使整个神经网络在各层的中间输出的数值更稳定。


上一篇 下一篇

猜你喜欢

热点阅读