• 读取.nrrd和.dcm文件格式医学图片可视化与预处理


    nrrd数据格式

    MITK默认会将医学图像保存为格式为NRRD的图像,在这个数据格式中包含:

    1、一个单个的数据头文件:为科学可视化和医学图像处理准确地表示N维度的栅格信息。
    2、既能分开又能合并的图像文件。

    nrrd_options输出
    {u’dimension’: 3, # 维度
    u’encoding’: ‘raw’, # 编码方式
    u’endian’: ‘little’, #
    u’keyvaluepairs’: {},
    u’kinds’: [‘domain’, ‘domain’, ‘domain’], # 三个维度的类型
    u’sizes’: [30, 30, 30], #三个维度的大小
    u’space’: ‘left-posterior-superior’, # 空间信息
    u’space directions’: [[‘1’, ‘0’, ‘0’], [‘0’, ‘1’, ‘0’], [‘0’, ‘0’, ‘1’]],
    u’space origin’: [‘0’, ‘0’, ‘0’],
    u’type’: ‘short’}

    dcm数据格式

    DICOM(DigitalImaging andCommunications inMedicine)是指医疗数字影像传输协定,是用于医学影像处理、储存、打印、传输的一组通用的标准协定。
    DCM格式的文件会存储其各类重要信息。其中,常用到
    (1)Patient ID : 患者ID (一般与患者的文件夹命名一致);
    (2)Series Number : 属于同一三维数据的该序号应当是一样的,例如都是同一CT图像中的某张切片,那么该值是一样,通过该值判断是不是属于同一个三维数据(可能一个患者拍了多张CT图像);
    (3)Image Position :该切片左上角像素点的空间位置。简而言之,利用Series Number找出患者文件夹下的所有属于同一三维图像的所有切片,然后利用Image Position对这些切片进行排序并重构成三维数据。

    这里仅展示二维读取

    代码实现

    import nrrd
    import pydicom
    import numpy as np
    import matplotlib.pyplot as plt
    
    # dicom文件
    path = ".dcm"
    ds = pydicom.dcmread(path,force=True)
    data = np.array(ds.pixel_array)
    plt.figure()
    plt.imshow(data,cmap='gray')
    plt.axis('off')
    plt.show()
    
    
    #nrrd文件
    nrrd_filename = '.nrrd'
    nrrd_data, nrrd_options = nrrd.read(nrrd_filename)
    print(nrrd_data.shape)
    data =nrrd_data[:,:,50]#取切片
    def WLww(image,WL,WW):
        min_v = (2 * WL - WW) / 2.0 
        max_v = (2 * WL + WW) / 2.0
        img1= (image-min_v)/WW
        img1[img1>1]  = 1
        img1[img1<0]  = 0
        img1=img1*255
        return img1
    data = WLww(data,20,400)
    plt.figure()
    plt.imshow(data,cmap='gray')
    plt.axis('off')
    plt.show()
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34

    结果展示

    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述

  • 相关阅读:
    linux进程间通信之共享内存
    Ubuntu使用dense_flow提取视频图像的光流图像
    2022-09-08 mysql/stonedb-慢SQL-出现问题的SQL-Q2
    Git用法
    ReactNative进阶(五):React Native与原生通信
    我的Compose开源项目《出行防疫App》已发布
    【数据结构】原来你叫“带头结点的双向循环链表”啊
    Day2--使用ESP32双核、U8G2 OLED任务、任务以绝对频率运行、任务内存优化
    C++ Tutorials: C++ Language: Compound data types: Arrays
    yml避坑,yml配置使用map,如果key中包含某些符号会消失不见
  • 原文地址:https://blog.csdn.net/fcxgfdjy/article/details/133394632