MR图像预处理(3)——nii文件拆分成2d图像

一,nii文件拆分成2d图像

前面解决了如何建造nii文件,现在来把nii图像重新拆分成需要的2d图像(已经在构造整体的代码了,所以封装成了函数)

函数对图像进行归一化后*255输出,由于ITK-SNAP在做标签的时候,没标签的位置为0,不同颜色的标签分别是1-6,所以我mask并没有*255(*255会导致每个分类的灰度都是255,从而无法辨别),而是乘了40

import numpy as np
import nibabel as nib
from PIL import Image
import os
import shutil
import imageio
import cv2

'''
funtion name:nii2mask2d
input:img_addr,label_addr,target_folder(患者图像nii地址,3dmask的nii地址,处理好的对比图像存放地址)
output:none
将患者图像nii,3dmask的nii匹配,输出图像到target_folder
'''
def nii2mask2d(img_addr,label_addr,target_folder):
    img_addr_n = nib.load(img_addr)
    label_addr_n = nib.load(label_addr)
    # Convert them to numpy format,
    data = img_addr_n.get_fdata()
    label_data = label_addr_n.get_fdata()

    # clip the images within [-125, 275],
    data_clipped = np.clip(data, -125, 275)

    # normalize each 3D image to [0, 1], and
    data_normalised = (data_clipped - (-125)) / (275 - (-125))

    split_root = img_addr.split('\\')  # 通过\\来进行截断
    print(split_root)
    # extract 2D slices from 3D volume for training cases while
    # e.g. slice 000
    for i in range(data_clipped.shape[2]):
        formattedi = "{:03d}".format(i)
        slice000 = data_normalised[:, :, i] * 255
        # np.savetxt(r"label.txt", label_data[:, :, 6], delimiter=',', fmt='%5s')
        label_slice000 = label_data[:, :, i]* 40 #标注像素是3,4,放到0-255的变化范围内



        print(slice000.shape, type(slice000))

        image = Image.fromarray(slice000)
        image = image.convert("L")
        image = image.transpose(Image.Transpose.FLIP_LEFT_RIGHT)

        label = Image.fromarray(label_slice000)
        # print(type(label))
        # label = cv2.normalize(label, dst=None, alpha=0, beta=255, norm_type=cv2.NORM_MINMAX, dtype=cv2.CV_8U)
        np.savetxt(r".\test\masknoL" + str(i + 1) + ".txt", label)
        # imageio.imsave(r".\test\mask_new" + str(i + 1) + ".png", label)
        label = label.convert("L")
        label = label.rotate(270)
        np.savetxt(r".\test\mask" + str(i + 1) + ".txt", label)
        #已验证分类结果没消失

        image.save(target_folder + split_root[-2]+"T2W_TSE_" + str(i+1) + ".png")
        label.save(target_folder + "T2W_TSE_" + str(i+1) + "_label.png")
if __name__ == '__main__':
    img_addr = r"C:\Users\22495\Desktop\project_folder\mr_data.nii.gz"
    label_addr = r"C:\Users\22495\Desktop\myomagroup3a\Untitled.nii.gz"
    target_folder = "./test/"

nii2mask2d(img_addr, label_addr, target_folder)#单患者放在test观察

为了患者隐私名称就打码了

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值