深度学习||医学图像处理||dicom2nii||nii2img||img2nii

医学图像领域,数据往往有多种格式读取,这里提供一些自己常用的几个代码块

dimcom2nii

import dicom2nifti

if __name__ == '__main__':
    dicom_path = "dicom/DICOM/"
    dicom2nifti.convert_directory(dicom_path, './data/nii/')

nii2img

# nii文件另存为png图片
import numpy as np
import os  # 遍历文件夹
import nibabel as nib  # nii格式一般都会用到这个包
import imageio  # 转换成图像
from sklearn import preprocessing
from PIL import Image

np.set_printoptions(threshold=np.inf)


def nii_to_image(niifile):
    return 0


filepath = './data/nii/'  # 读取本代码同个文件夹下所有的nii格式的文件
filenames = os.listdir(filepath)
imgfile = './data/img/'

slice_trans = []

for f in filenames:  # 开始读取nii文件
    s = f[-7:]
    # 取出来是nii
    print(s)

    if s != '.nii.gz':
        continue
    s1 = f[:-7]
    print(s1)
    imgfile_path = imgfile + s1
    print("imgfile_path:" + imgfile_path)
    img_path = os.path.join(filepath, f)
    # ./data/nii/18.nii
    # print(img_path)
    img = nib.load(img_path)  # 读取nii
    #print("img: ", img)
    img_fdata = img.get_fdata()

    fname = f.replace('.nii', '')  # 去掉nii的后缀名
    img_f_path = os.path.join(imgfile, fname)
    if not os.path.exists(img_f_path):
        os.makedirs(img_f_path)

    # 创建nii对应的图像的文件夹
    # # if not os.path.exists(img_f_path):
    # os.mkdir(img_f_path) #新建文件夹
    # #开始转换为图像
    if '.gz' in s1:
        (x, y, z) = img.shape[:3]
        print("img2:")
        print(img.shape)
    else:
        (x, y, z) = img.shape[:3]
        print("img3:")
        print(img.shape)

    for i in range(z):  # z是图像的序列 #遇到bug就修改一下
        silce = img_fdata[:, :, i]  # 选择哪个方向的切片都可以
        #min_max_scaler = preprocessing.MinMaxScaler()
        #slice_MinMax = min_max_scaler.fit_transform(silce)
        imageio.imwrite(os.path.join(img_f_path, '{}_mask.png'.format(i)), silce)
        img = Image.open(os.path.join(img_f_path, '{}_mask.png'.format(i)))
        img.save(os.path.join(img_f_path, '{}_mask.png'.format(i)))

img2nii

"""
用于将文件夹的灰度图合成为一个numpy格式的
"""
import cv2
import os
import numpy as np
import medpy.io as mio
import torch
result='./201/gray_heatmap/'
filename= os.listdir(result)
list =[]
for i in range(0,192):
    print(i)
    img = cv2.imread(result + str(i) + '_mask.png',0)

    # print(result + str(i) + '_mask.png')
    list.append(img)

    # print(list)

cmbtest, h = mio.load('201/cmb0.nii.gz')
list=torch.tensor(list)
list= list.permute(1,2,0)
list = np.array(list, dtype=np.float32)
mio.save(list,'mask.nii.gz' , hdr=h)
print('done!')

nii以及nii.gz可以通过代码直接读写,也可以通过现有的软件进行读取。
这里给出一种读取nii的方式

import matplotlib

matplotlib.use('TkAgg')

from matplotlib import pylab as plt
import nibabel as nib
from nibabel import nifti1
from nibabel.viewers import OrthoSlicer3D

#example_filename = 'sub-101_space-T2S_desc-masked_T2S.nii.gz'
example_filename = "sub-305_space-T2S_T2S.nii.gz"

img = nib.load(example_filename)
print(img)
print(img.header['db_name'])  # 输出头信息

# 由文件本身维度确定,可能是3维,也可能是4维
width, height, queue = img.dataobj.shape

OrthoSlicer3D(img.dataobj).show()

num = 1
for i in range(0, queue, 10):
    img_arr = img.dataobj[:, :, i]
    plt.subplot(5, 4, num)
    plt.imshow(img_arr, cmap='gray')
    num += 1

plt.show()
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值