- nii可视化为png
import numpy as np
import os # 遍历文件夹
import nibabel as nib # nii格式一般都会用到这个包
import imageio # 转换成图像
def nii_to_image(niifile):
filenames = os.listdir(filepath) # 读取nii文件夹
slice_trans = []
for f in filenames:
# 开始读取nii文件
img_path = os.path.join(filepath, f)
img = nib.load(img_path) # 读取nii
img_fdata = img.get_fdata().astype(np.uint8) # 将float64转为uint8否则报错
fname = f.replace('.nii', '') # 去掉nii的后缀名
img_f_path = os.path.join(imgfile, fname)
# 创建nii对应的图像的文件夹
if not os.path.exists(img_f_path):
os.mkdir(img_f_path) # 新建文件夹
# 开始转换为图像
(x, y, z) = img.shape
for i in range(z): # z是图像的序列
silce = img_fdata[i, :, :] # 选择哪个方向的切片都可以
imageio.imwrite(os.path.join(img_f_path, '{}.png'.format(i)), silce)
# 保存图像
if __name__ == '__main__':
filepath = 'E:/BraTS19_2013_0_1_seg.nii' # nii文件夹
imgfile = 'E:/imagepng' # 转换后存放的位置
nii_to_image(filepath)
- h5可视化为png
import cv2
import h5py
from PIL import Image
import numpy as np
# from scipy.misc import imsave
from skimage import transform
# 这个也可以用
# hr_dataset = h5py.File('E:/wsj/hand_segmention/data/BraTS2019/data/BraTS19_2013_0_1.h5')['label'] #h5文件路径
# # label = h5py.File('data-train.h5')['train_set_1_tip']
# # lenght = len(hr_dataset)
# for i in range(len(hr_dataset)):
# y = hr_dataset[i]
# res = Image.fromarray(y.astype('uint8'), 'RGB')
# # x = label[i]
# cv2.imwrite('E:/wsj/hand_segmention/extra/h5/%s.png'%i, res) #写成png格式
# 取出图像数据
hr_dataset = h5py.File('E:/wsj/SSL4MIS-master/SSL4MIS-master/data/BraTS2019/data/BraTS19_2013_0_1.h5')['image']
# 取出标签数据
label = h5py.File('E:/wsj/SSL4MIS-master/SSL4MIS-master/data/BraTS2019/data/BraTS19_2013_0_1.h5')['label']
for i in range(len(hr_dataset)):
y = hr_dataset[i]
x = label [i]
cv2.imwrite(str(i)+"_img.png",y)
cv2.imwrite(str(i)+"_label.png",x)
# hdf = h5py.File("E:/wsj/hand_segmention/data/BraTS2019/data/BraTS19_2013_0_1.h5",'r')
# array = hdf["image"][:]
# img = Image.fromarray(array.astype('uint8'), 'RGB')
# img.save("E:/wsj/hand_segmention/extra/h5", "png")
# img.show()
注:
h5文件也有一个可视化工具叫做vitables,感兴趣的可以去搜索一下如何安装,它的使用界面如下图所示,可以比较清晰的看到h5文件的维度等信息
- png转为h5
众所周知,深度学习需要大量的数据,而将将图片转为h5文件写入读取速度更快,实现方法如下:
import os
import numpy as np
import cv2
import h5py
img_list = []
label_list = []
img_path = './handdata1980/image'
img_file = os.listdir(img_path)
label_path = './handdata1980/unlabeled'
label_file = os.listdir(label_path)
# (从2开始时方便我自己命名,你可以从0开始)
for i in range(2, 200): # 批量处理,我这里是1980个图片标签,每10张存一个h5文件
img_list = []
label_list = []
for file in img_file[(i-2)*10:(i-1)*10]: # 10张存放一个h5文件
c = os.path.basename(file)
name = img_path + '/' + c
img = cv2.imread(name, 0) # 以灰度图读入
img_list.append(img) # 遍历二级文件每个图片并append信息进数组
for file in label_file[(i - 2) * 10:(i - 1) * 10]: # 10张存放一个h5文件
c = os.path.basename(file)
name = label_path + '/' + c
label = cv2.imread(name, 0)
label_list.append(label) # 遍历二级文件每个图片并append信息进数组
img_np = np.array(img_list)
label_np = np.array(label_list)
print(label_np.shape)
#'a' ,如果已经有这个名字的h5文件存在将不会打开,目的为了防止误删信息。
#‘w' ,如果有同名文件也能打开,但会覆盖上次的内容。
# for i in range(2, 200):
filename = 'E:/wsj/hand_segmention/data/BraTS2019/data/unlabeled' + str(i+1) + '.h5'
with h5py.File(filename, 'w') as f:
f.create_dataset('image', data=img_np) #创建两个数据集,分别为image
f.create_dataset('label', data=label_np) #和label的数组集
f.close()