这篇教程深度学习训练时利用python处理nii文件写得很实用,希望能帮到您。
利用python处理nii文件
python处理主要是利用nibabel这个包。首先我个人的各种包的版本为:
- nibabel 2.2.1
- tensorflow-gpu 1.2.0
- tensorlayer 1.8.3
- numpy 1.14.1
一开始我在使用nibabel包中的函数的时候,发现使用
nib.load(img_path).get_data()
一直出现错误:
raise ValueError('w2 should be positive, but is %e' % w2) ValueError: w2 should be positive, but is -6.401211e-07 而且更要命的是这个错误在网上找了好久没有找到解决办法,最后在一篇博客的最后找到了解决相似的问题:
上面解释说:python3.6/site-packages/nibabel/quaternions.py可能w2_thresh阈值太过于严格,所以我们需要放松一下条件。
解决:我们只需要在程序开头加上这样一句代码,原来数字是3现在将他改成10,松弛一下条件就不会出错了!
nib.Nifti1Header.quaternion_threshold = - np.finfo(np.float32).eps * 10 # 注意是负号哦
参考程序(python版本)
import tensorlayer as tl
import numpy as np
import os
import nibabel as nib
import threading
import tensorflow as tf
import matplotlib.pyplot as plt
import scipy
from tensorlayer.prepro import *
import skimage.measure
nib.Nifti1Header.quaternion_threshold = - np.finfo(np.float32).eps * 10
training_data_path = "Training_100"
preserving_ratio = 0.25
f_train = tl.files.load_file_list(path=training_data_path,
regx='.*.gz',
printable=False)
X_train = []
for fi, f in enumerate(f_train):
img_path = os.path.join(training_data_path, f)
img = nib.load(img_path).get_data()
img_3d_max = np.amax(img)
img = img / img_3d_max * 255
for i in range(img.shape[2]):
img_2d = img[:, :, i]
if float(np.count_nonzero(img_2d)) / img_2d.size >= preserving_ratio:
img_2d = img_2d / 127.5 - 1
img_2d = np.transpose(img_2d, (1, 0))
X_train.append(img_2d)
X_train = np.asarray(X_train, dtype=np.float32)
X_train = X_train[:, :, :, np.newaxis] Python画图 plt.plot()函数细节颜色字符,风格字符,和标记字符 python使用SimpleITK 和 Nibabel 读取医学图像 nii 数据并保存为图片 |