精华内容
下载资源
问答
  • pydicom pydicom是用于处理文件的纯Python软件包。 它使您能够以简单的“ pythonic”方式读取,修改和写入DICOM数据。 作为一个纯Python程序包, pydicom可以在没有任何其他要求的Python运行环境中运行,尽管如果...
  • pydicom_rtstruct_contour_mapping 我可以使用pydicom打开包含CT扫描的DICOM文件。 我可以使用DICOM查看器工具(如dicompyler或MiM)查看轮廓。 但是,我无法在pydicom中查看上述轮廓。 pydicom_rtstruct_contour_...
  • pydicom-seg 使用作为DICOM序列化/反序列化库来读取和写入医学图像分割存储文件。 有关支持的功能和用法的详细说明,请参阅。 动机 项目在一段时间内将DICOM-SEG文件转换为ITK兼容的数据格式(通常用于研究)成为...
  • Pydicom用法简介

    2017-08-22 10:11:35
    对Python操作DICOM文件进行介绍
  • Pydicom用法简介.pdf

    2021-05-05 12:41:54
    Pydicom用法简介.pdf
  • pydicom是一个用于处理DICOM文件的纯python包。 它用于以简单的“pythonic”方式检查和修改DICOM数据。 可以将修改再次写入新文件。
  • pydicom库详解-English.pdf

    2021-05-05 12:39:23
    pydicom库详解-English.pdf
  • pydicom

    2021-04-25 16:27:16
    p y d i c o m pydicom pydicom https://github.com/pydicom/pydicom 医学影像(Medical Imaging),是指利用某种介质(例如X射线、电磁、超声波等等)与人体相互作用,从而以影像方式将人体内部组织器官的结构和密度...

    p y d i c o m pydicom pydicom

    https://github.com/pydicom/pydicom


    医学影像(Medical Imaging),是指利用某种介质(例如X射线、电磁、超声波等等)与人体相互作用,从而以影像方式将人体内部组织器官的结构和密度表现出来,然后提供给医生进行判断并对人体健康状况得出结论的一门科学。


    医学影像仪器主要包含:

    1. X光影像仪器
    2. CT(Computerized Tomography Computed Tomography)
    3. 超声(分B超、彩色多普勒超声、心脏彩超、三维彩超)
    4. 核磁共振成像(MRI)

    DICOM(医学数字成像和通讯),英文全称Digital Imaging and Communications in Medicine,是ACR(美国放射协会)和NAMA(美国国家电子制造商协会)联合开发医学数字成像和通讯的一个通用标准。


    Dicom官方文档:https://www.dicomstandard.org/current/


    患者的医学图像以DICOM文件格式进行存储,其中包含了图像信息以及患者的PHI(protected health information,即姓名、性别、年龄等),以及产生图像的设备的相关信息。如下图所示,以dcm后缀结尾的文件即DICOM文件,其存储的信息为二进制格式


    DICOM文件的内容一般由一个DICOM文件头和一个DICOM数据集组成

    每个DICOM文件都必须包含文件头,主要信息:

    1. 文件导言
    2. DICOM前缀
    3. 文件元信息元素

    DICOM数据集是DICOM文件的主要组成部分

    1. TAG号
    2. 值表示
    3. 值长度
    4. 值域

    基于DICOM3.0标准,每一张图都携带大量的信息,可以细分为以下四类:

    • Patient
    • Study
    • Series
    • Image

    每一项信息都可以用DICOM TAG来标识,DICOM TAG由两个十六进制数组成,即(Group,Element)

    每一项信息被包装成最基本的单元:Data Element(数据元素)。每个Data Element 由四部分组成:

    • DICOM TAG :存储该项信息的标识
    • VR(Value Representation):存储描述该项信息的数据类型
    • value length :存储描述该项信息的数据长度
    • value:存储描述该项信息的数据值

    处理DICOM文件的现成库

    • C++:DCMTK
    • Java:dcm4che
    • Python:pydicom

    安装pydicom

    pip install -i https://pypi.tuna.tsinghua.edu.cn/simple pydicom
    

    pydicom数据的读取


    pydicom数据的处理


    pydicom数据保存为JPG图像


    展开全文
  • 使用Jupyter使用Python代码读取,修改和写入DICOM文件的基本和中间示例-要安装Jupyter-https://jupyter.org/install ======所有示例均基于Pydicom。 开源库-https://pydicom.github.io/
  • TDDICOM 加载DICOM图像文件的TouchDesigner组件。 基于PYDICOM项目。
  • 初识DICOM以及pydicom的基础操作

    千次阅读 多人点赞 2020-07-02 22:10:10
    初始DICOM以及pydicom的基础操作 Author:Labyrinthine Leo  Init_time:2020.06.30 Key Words:DICOM、pydicom库、dicom文件转jpg图片 1、引言 1.1、背景介绍   由于导师推荐入门的研究项目涉及医疗图像识别...

    初识DICOM以及pydicom的基础操作


    Author:Labyrinthine Leo  Init_time:2020.06.30


    Index Words:DICOMpydicom库dicom文件转jpg图片


    1、引言

    1.1、背景介绍

      由于导师推荐入门的研究项目涉及医疗图像识别,这就离不开DICOM文件的基础知识了,因此在这里同大家分享DICOM学习心得,其中包括使用pydicom库将dicom文件转为jpg图片的操作。

    1.2、文章结构

    1. 引言
      1.1 背景介绍
      1.2 文章结构

    2. 医学影像
      2.1 医学影像
      2.2 医学仪器

    3. DICOM
      3.1 DICOM简介
      3.2 DICOM文件格式详解

    4. DICOM文件转为JPG图片
      4.1 处理DICOM文件的现成库
      4.2 pydicom的使用

    2、医学影像

    2.1、医学影像

      医学影像(Medical Imaging),是指利用某种介质(例如X射线、电磁、超声波等等)与人体相互作用,从而以影像方式将人体内部组织器官的结构和密度表现出来,然后提供给医生进行判断并对人体健康状况得出结论的一门科学。

    2.2、医学仪器

      医学影像仪器主要包含:

    1. X光影像仪器
    2. CT(Computerized Tomography  Computed Tomography)
    3. 超声(分B超、彩色多普勒超声、心脏彩超、三维彩超)
    4. 核磁共振成像(MRI)
    

    3、DICOM

    3.1、DICOM简介

      DICOM医学数字成像和通讯),英文全称Digital Imaging and Communications in Medicine,是ACR美国放射协会)和NAMA美国国家电子制造商协会)联合开发医学数字成像和通讯的一个通用标准。随着X线断层造影技术和其他数字诊断模式的产生,以及计算机的使用在临床应用中的增长,为实现在不同制造商生产的设备之间传输图像和联合信息的标准方法—DICOM标准,在1985年应运而生并不断的改版升级,现在主要是3.0版本1
      对于医学专业的同学如要了解更多的相关背景知识,可以参考Dicom官方文档。由于笔者是非医学专业,在此只简述我们所需要的知识。DICOM顾名思义,关键点在于D-igital I-magingC-ommunications,标准主要由三个部分组成:

    1. a file format for images and reports
    2. a set of defined services
    3. a network protocol
    

    即通过网络协议使用服务进行创建、存储和交换文件的若干标准2

    3.2、DICOM文件格式详解

      前面已经大概了解了DICOM标准,接下来需要知道DICOM标准的使用,其通常通过DICOM格式文件进行体现。DICOM文件是标记的图像文件,包含图像和有关图像的数据集合,其能够在两个以DICOM格式接收患者数据和图像的实体之间进行交流3
      通俗的理解就是:患者的医学图像以DICOM文件格式进行存储,其中包含了图像信息以及患者的PHI(protected health information,即姓名、性别、年龄等),以及产生图像的设备的相关信息。如下图所示,以dcm后缀结尾的文件即DICOM文件,其存储的信息为二进制格式。

      DICOM文件的内容一般由一个DICOM文件头和一个DICOM数据集组成,结构图如下所示:

    [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-0bZ9QAKx-1593698384628)(初识DICOM_002.png)]

    1、DICOM文件头包含了标识数据集合的相关信息,每个DICOM文件都必须包含文件头,主要信息:

    • 文件导言:由128个字节组成,描述文件的相关导言信息。
    • DICOM前缀:由4个字节组成,用于判断其字符串值是否为"DICOM"从而判断是否为DICOM文件,可以理解为一个标志信息。
    • 文件元信息元素

    2、 DICOM数据集是DICOM文件的主要组成部分,其由DICOM数据元素按照指定的顺序排列。数据元素最基本的数据单元是数据元,按照TAG从小到大顺序排列,即一个数据元表示一个TAG。数据元主要由4个部分组成:

    • TAG号:由4个字节组成,包括2字节的组号和2字节的元素号(例如:0010 0040 表示患者性别,其中的组号:0002描述设备通讯信息、0008描述特征参数、0010描述患者信息、0028描述图像信息参数)。我们后期所需要的DICOM文件相关数据时,就是根据TAG来获取。
    • 值表示VR,value representation):由两个字节的字符组成,存储描述该项数据元信息的数据类型,包含例如:LO(Long String,长字符串)、IS(Interger String,整型字符串),DA(data,日期)等等共27种数据类型。
    • 值长度(value length):存储描述该项信息的数据长度
    • 值域(value):存储描述该项信息的数据值

    3、 其中数据元信息可以根据信息的不同,分为4类:

    • Patient
    • Study
    • Series
    • Image

      可以理解为一个患者(patient)可以做多次检查(study),一次检查包含多个检查部位(series),而每个检查部位都有一张或多张相应的影像图像(image)。常见的TAG如下4

    • Patient Tag
      在这里插入图片描述
    • Study Tag
      在这里插入图片描述
    • Series Tag
      在这里插入图片描述
    • Image Tag
      在这里插入图片描述
      在这里插入图片描述

    4、Dicom文件转为jpg图片

    4.1 处理DICOM文件的现成库

      现在有许多现成的解析DICOM标准的第三方库,在工程中引入它们能够高效的进行项目开发,而不需要使用者了解过多底层的解析操作。常见的库如下:

    • C++DCMTK
    • Javadcm4che
    • Pythonpydicom

      本文主要讲解基于python中的pydicom库处理dicom文件的一些常规操作。

    4.2 pydicom的使用

      pydicom简介:pydicom是一个python中的第三方库,用于DICOM文件,主要为了以一种简单的"python式"方式检查和修改dicom数据而设计,可以提供给使用者轻松的修改,读写文件并转换成显式图像图片。
    1、由于pydicom是第三方库,所以使用之前需要下载,这里推荐python的pip指令进行下载,在cmd中输入如下指令进行下载:

    pip install pydicom
    

    如果下载速度慢,可以添加清华镜像源:

    pip install -i https://pypi.tuna.tsinghua.edu.cn/simple pydicom
    

    2、文件的读取以及数据元的获取:

    import pydicom
    import os
    
    info = {}
    # 读取dicom文件
    dcm = pydicom.read_file("test.dcm")
    # 通过字典关键字来获取图像的数据元信息(当然也可以根据TAG号)
    # 这里获取几种常用信息
    info["PatientID"] = dcm.PatientID               # 患者ID
    info["PatientName"] = dcm.PatientName           # 患者姓名
    info["PatientBirthData"] = dcm.PatientBirthData # 患者出生日期
    info["PatientAge"] = dcm.PatientAge             # 患者年龄
    info['PatientSex'] = dcm.PatientSex             # 患者性别
    info['StudyID'] = dcm.StudyID                   # 检查ID
    info['StudyDate'] = dcm.StudyDate               # 检查日期
    info['StudyTime'] = dcm.StudyTime               # 检查时间
    info['InstitutionName'] = dcm.InstitutionName   # 机构名称
    info['Manufacturer'] = dcm.Manufacturer         # 设备制造商
    info['StudyDescription']=dcm.StudyDescription   # 检查项目描述
    print(info)
    

    3、获取图像Tag中的像素矩阵并保存为JPG图片(其中使用matplotlib库进行绘图以及numpy进行矩阵操作,同理需要pip安装):

    import pydicom
    import matplotlib.pyplot as plt
    import numpy as np
    import os
    
    filename = "test.dcm"
    jpgname = "test.jpg"
    # 读取dicom文件
    dcm = pydicom.read_file(filename)
    # 获取图像唯一标识符UID
    uid = dcm.SOPInstanceUID
    # 获取像素矩阵
    img_arr = dcm.pixel_array
    # 打印矩阵大小
    print(img_arr.shape)
    # 获取像素点个数
    lens = img_arr.shape[0]*img_arr.shape[1]
    # 获取像素点的最大值和最小值
    arr_temp = np.reshape(img_arr,(lens,))
    max_val = max(arr_temp)
    min_val = min(arr_temp)
    # 图像归一化
    img_arr = (img_arr-min_val)/(max_val-min_val)
    # 绘制图像并保存
    plt.figure(figsize=(12,12),dpi=250) # 图像大小可以根据文件不同进行设置
    plt.imshow(img_arr,cmap=plt.cm.bone)
    plt.title("UID:{}".format(uid))
    plt.savefig(jpgname)
    plt.close()
    

    效果如图所示:
    在这里插入图片描述
    4、批量将DICOM文件转换为JPG图像(多进程、高效率):

    # coding  : utf-8
    # DICOM文件读取及JPG格式图片展示
    # @Author : Labyrinthine Leo
    # @Time   : 2020.06.16
    """
    
    import pydicom
    import matplotlib.pyplot as plt
    import numpy as np
    import os
    import multiprocessing
    import threading
    import time
    
    def extractDicomFileInfo(filename):
    	"""
    	提取Dicom文件的tag信息
    	input :文件名
    	output:相关信息
    	"""
    	info = {}
    	dcm = pydicom.read_file(filename)
    	info["PatientID"] = dcm.PatientID               # 患者ID
    	info["PatientName"] = dcm.PatientName           # 患者姓名
    	info["PatientBirthData"] = dcm.PatientBirthData # 患者出生日期
    	info["PatientAge"] = dcm.PatientAge             # 患者年龄
    	info['PatientSex'] = dcm.PatientSex             # 患者性别
    	info['StudyID'] = dcm.StudyID                   # 检查ID
    	info['StudyDate'] = dcm.StudyDate               # 检查日期
    	info['StudyTime'] = dcm.StudyTime               # 检查时间
    	info['InstitutionName'] = dcm.InstitutionName   # 机构名称
    	info['Manufacturer'] = dcm.Manufacturer         # 设备制造商
    	info['StudyDescription']=dcm.StudyDescription   # 检查项目描述
    	return info
    
    def saveAsJPGImage(img_array,jpg_path,uid,lens):
    	"""
    	格式转换函数
    	input : 像素矩阵,图片保存路径,uid,lens
    	output: 
    	"""
    	plt.figure(figsize=(12,6),dpi=80)                 # 绘制画板
    	arr_temp = np.reshape(img_array,(lens,))
    	max_val = max(arr_temp)                           # 获取像素极大值
    	min_val = min(arr_temp)                           # 获取像素极小值
    	img_array = (img_array-min_val)/(max_val-min_val) # 像素值归一化
    	plt.imshow(img_array,cmap=plt.cm.bone)
    	plt.title("UID:{}".format(uid))
    	# print("saving image:{}".format(jpg_path.split('JPG图像/')[1]))
    	plt.savefig(jpg_path)
    	plt.close()
    
    def getDicomFile(dicom_dir,jpg_dir):
    	"""
    	获取dicom文件的参数信息
    	input : dicom_dir,jpg_dir
    	output: args_list
    	"""
    	# 定位绝对路径
    	all_file_list = os.listdir(dicom_dir)
    	# 初始化args_list
    	args_list = []
    	for f in all_file_list:
    		dicom_file_path = os.path.join(dicom_dir,f)
    		# dicom_info = extractDicomFileInfo(dicom_file_path) # 提取tag信息备用
    		jpg_name = jpg_dir+f.split('.d')[0]+'.jpg'           # 新建jpg文件名
    		# print(jpg_name)
    		dcm = pydicom.read_file(dicom_file_path)             # 读取dicom文件
    		img_array = dcm.pixel_array                          # 获取图像像素矩阵
    		lens = img_array.shape[0]*img_array.shape[1]         # 获取像素矩阵大小
    		uid = dcm.SOPInstanceUID                             # 获取图像uid
    		args_tuple = (img_array,jpg_name,uid,lens)           # 添加参数tuple
    		args_list.append(args_tuple)
    	return args_list
    
    def main():
    	"""
    	main function
    	"""
        # 存放DICOM文件的文件夹
    	dicom_dir = "../dicom数据集/DICOM/"
        # 存放转换后的JPG图片的文件夹
    	jpg_dir = "../dicom数据集/JPG图像/"
    	begin_time = time.time()                      # 开始时间
    	pool = multiprocessing.Pool(processes=5)      # 创建进程池
    	args_list = getDicomFile(dicom_dir,jpg_dir)   # 获取参数list
    	pool.starmap(saveAsJPGImage,args_list)        # 多进程保存jpg文件
    	pool.close()                                  # 关闭进程
    	end_time = time.time()                        # 结束时间
    	print("耗时:{}s".format(round(end_time-begin_time,4))) # 打印耗时
    
    
    if __name__ == '__main__':
    	main()
    
    

    References


    临渊羡鱼不如退而结网
    如果觉得这篇文章对你有用,可以点个赞,也算是对笔者的支持和激励!同时订阅微信公众号:Leo的博客城堡
    公众号原文初识DICOM以及pydicom的基础操作
    在这里插入图片描述


    展开全文
  • 注意:我安装了pydicom之后需要安装gdcm依赖,但我不能成功import gdcm,所以在下面的代码中都可能同时(混合)使用了pydicom和SimpleITK包读取的图像数据来做预处理。 可以成功import gdcm的同学请直接移步参考:...

    注意我安装了pydicom之后需要安装gdcm依赖,但我不能成功import gdcm,所以在下面的代码中都可能同时(混合)使用了pydicom和SimpleITK包读取的图像数据来做预处理。

    可以成功import gdcm的同学请直接移步参考:https://www.kaggle.com/gzuidhof/full-preprocessing-tutorial

    (一)简介与可视化

    对于医学CT图像来说,每个人有若干张(切片).dcm类型的图像存入同一个文件夹中,分别是不同角度/部位的医学成像,可以用mango/小赛之类的看图软件看一下,也可以用matlab可视化:

    clear all;
    clc;
    close all;
    file_path='.\images\001\';
    img_path_list=dir(strcat(file_path,'*.dcm'));%获取该文件夹中所有dcm格式的图像
    img_num=length(img_path_list);%获取图像总数量
    imagename=img_path_list(1).name;%图像名
    imagemax=dicominfo(strcat(file_path,imagename));  %读取图像
    imweigth=imagemax.Rows;     %DICOM水平像素数量
    imhigh=imagemax.Columns;    %DICOM垂直像素数量
    imagemax1=dicomread(strcat(file_path,imagename));  %读取图像
    I=imagemax1;
    
    for j=2:img_num;  %逐一读取图像
        imagename=img_path_list(j).name;%图像名
        imagemax=dicomread(strcat(file_path,imagename));  %读取图像
        j
                I=imfuse(imagemax,I); %投影图像对应点取两幅图像合成值
    end
    I=rgb2gray(I);
    m=max(max(I));
    imshow(I,[]); %显示投影图像
    imwrite(I,'001.png','png'); %保存投影图像

    (二)读取

    3D的CT不像2D图像可以直接读取 预处理 使用,可以借助python中的pydicom或者SimpleITK包来处理dicom。

    SimpleITK

    首先要将每个人的CT存储为一个大小为N*W*H的3D数组,其中N是这个人的.dcm切片图像数量,W*H是每张图的尺寸。

    import SimpleITK as sitk
    
    directorypath = './images/001/'#
    def get_img_array(directorypath):
        reader = sitk.ImageSeriesReader()
        reader.MetaDataDictionaryArrayUpdateOn()
        reader.LoadPrivateTagsOn()
        series_IDs = sitk.ImageSeriesReader.GetGDCMSeriesIDs(directorypath)
        series_ID = series_IDs[0]
        dicom_names = reader.GetGDCMSeriesFileNames(directorypath,series_ID)
        reader.SetFileNames(dicom_names)
        image3D = reader.Execute()
        imgArray = sitk.GetArrayFromImage(image3D)
        return image3D, imgArray 

    如果想要获取某个切片slice_index的详细信息:

    slice_index = 1 # for example
    key = reader.GetMetaDataKeys(slice_index)
    print(key)
    for key in reader.GetMetaDataKeys(slice_index):
        value = reader.GetMetaData(slice_index,key)
        print("({0}) = = \"{1}\"".format(key, value))

    pydicom

    (1)如果使用pydicom读取目录中的多个文件(它们都是DICOM文件),不能直接:

    dicom.read_dicomdir(CT_files_dir)

    这样会报错:

    PermissionError: [Errno 13] Permission denied:

    参考:https://github.com/pydicom/pydicom/issues/322

    dirname = '/some/path'
    files = os.listdir(dirname)
    ds_list = [dicom.read_file(os.path.join(dirname, filename)) for filename in files]

    (2)如果缺失提示meta information,读取时使用“,force=True”:

    ds_list = [dicom.read_file(os.path.join(dirname, filename), force=True) for filename in files]

    (3)如果有的图像缺失部分meta info,则无法获取ImagePositionPatient。

    此时可以注释掉第二行#slices.sort(key = lambda x: float(x.ImagePositionPatient[2])):

    def load_scan(path):
        slices = [pydicom.read_file(path + '/' + s,force=True) for s in os.listdir(path)]
        #slices.sort(key = lambda x: float(x.ImagePositionPatient[2]))
        try:
            slice_thickness = np.abs(slices[0].ImagePositionPatient[2] - slices[1].ImagePositionPatient[2])
        except:
            slice_thickness = np.abs(slices[0].SliceLocation - slices[1].SliceLocation)
        for s in slices:
            s.SliceThickness = slice_thickness     
        return slices

    (三)预处理

    (1)将dcm图像的值转换为HU值

    CT扫描的测量单位是亨斯菲尔德单位(HU),这是一种辐射密度的测量。CT扫描仪经过仔细校准,以准确地测量这一点。

    HU(Hounsfiled Unit)值,反映了组织对X射线吸收程度。以水的吸收程度作为参考,即水的HU=0,衰减系数大于水的为正,小于水的为负值。并以骨皮质和空气的HU值为上限和下限。

    为了站在医生的角度看问题,所以必须将dcm图像的值转换为HU值。

    def get_pixels_hu(slices):
        image = np.stack([s.pixel_array for s in slices])
        # Convert to int16 (from sometimes int16), 
        # should be possible as values should always be low enough (<32k)
        image = image.astype(np.int16)
    
        # Set outside-of-scan pixels to 0
        # The intercept is usually -1024, so air is approximately 0
        image[image == -2000] = 0
        
        # Convert to Hounsfield units (HU)
        for slice_number in range(len(slices)):
            
            intercept = slices[slice_number].RescaleIntercept
            slope = slices[slice_number].RescaleSlope
            
            if slope != 1:
                image[slice_number] = slope * image[slice_number].astype(np.float64)
                image[slice_number] = image[slice_number].astype(np.int16)
                
            image[slice_number] += np.int16(intercept)
        
        return np.array(image, dtype=np.int16)

    因为我安装之后无法成功import gdcm,所以采用迂回战术,即同时使用SimpleITK和pydicom读取的图像sitkarrayslices

    def get_pixels_hu(sitkarray, slices):
        #sys.exit(0)
        print(np.array(slices).shape) #maybe different from 'num'
        [num,w,h] = sitkarray.shape
        #print(sitkarray[0])
        image = np.stack([sitkarray[i] for i in range(num)])
        # Convert to int16 (from sometimes int16), 
        # should be possible as values should always be low enough (<32k)
        image = image.astype(np.int16)
        # Set outside-of-scan pixels to 0
        # The intercept is usually -1024, so air is approximately 0
        image[image == -2000] = 0
        # Convert to Hounsfield units (HU)
        for slice_number in range(num): 
            #print(slices[slice_number].RescaleIntercept,slice_number)  
            intercept = slices[slice_number].RescaleIntercept
            slope = slices[slice_number].RescaleSlope 
            if slope != 1:
                image[slice_number] = slope * image[slice_number].astype(np.float64)
                image[slice_number] = image[slice_number].astype(np.int16)    
            image[slice_number] += np.int16(intercept)
        return np.array(image, dtype=np.int16)

    (2)重采样

    扫描的像素间距如果是[2.5,0.5,0.5],这表示切片之间的距离为2.5毫米。对于不同的扫描,这项参数可能是不同的。

    处理这一问题的一种常见方法是将整个数据集重新采样到一定的各向同性分辨率。

    重采样到一个同构分辨率1mm *1mm *1mm,以消除扫描仪分辨率的差异:

    def resample(sitk_img3D, image, scan, new_spacing=[1,1,1]):
        # Determine current pixel spacing
        #spacing = np.array(sitk_img3D.GetSpacing())
        spacing = np.array([scan[0].SliceThickness] + scan[0].PixelSpacing, dtype=np.float32) 
        #print(spacing)
        #spacing = np.array([scan[0].SliceThickness] + scan[0].PixelSpacing, dtype=np.float32)
        resize_factor = spacing / new_spacing
        new_real_shape = image.shape * resize_factor
        new_shape = np.round(new_real_shape)
        real_resize_factor = new_shape / image.shape
        new_spacing = spacing / real_resize_factor
        image = scipy.ndimage.interpolation.zoom(image, real_resize_factor, mode='nearest')
        return image, new_spacing

    (3)归一化

    两个优点:

    1)加快了梯度下降求最优解的速度;

    2)有可能提高精度。

    MIN_BOUND = -1000.0
    MAX_BOUND = 400.0
    
    def normalize(image):
        image = (image - MIN_BOUND) / (MAX_BOUND - MIN_BOUND)
        image[image>1] = 1.
        image[image<0] = 0.
        return image

    (4)中心化(零均值化)

    意义:数据中心化和标准化在回归分析中是取消由于量纲不同、自身变异或者数值相差较大所引起的误差。
    原理:数据标准化:是指数值减去均值,再除以标准差;

    数据中心化:是指变量减去它的均值。

    目的:通过中心化和标准化处理,得到均值为0,标准差为1的服从标准正态分布的数据。

    PIXEL_MEAN = 0.25 # To determine this mean you simply average all images in the whole dataset. If that sounds like a lot of work, we found this to be around 0.25 in the LUNA16 competition.
    def zero_center(image):
        image = image - PIXEL_MEAN
        return image

     

    函数调用:

    sitk_img3D, sitk_img = get_img_array(directorypath)
    dicom_img = load_scan(directorypath)
    img_pixels = get_pixels_hu(sitk_img, dicom_img)
    pix_resampled, spacing = resample(sitk_img3D, img_pixels, dicom_img, [1,1,1])

    参考:

    https://www.cnblogs.com/jxblog/p/12010354.html

    https://github.com/pydicom/pydicom/issues/322

    https://www.jianshu.com/p/f98635abac65

    https://www.kaggle.com/gzuidhof/full-preprocessing-tutorial

    https://blog.csdn.net/weixin_37536336/article/details/109386431

    https://blog.csdn.net/csdnxiekai/article/details/109448128

    展开全文
  • pydicom修改tag

    2021-10-18 13:19:58
    import pydicom import os def alter_tag_save(infile: str, outfile: str): # file_dir = r'' # dcm = pydicom.read_file(file_dir + r'\D0001.dcm') dcm = pydicom.read_file(infile) # print(type(dcm....
    import pydicom
    import os
    
    
    def alter_tag_save(infile: str, outfile: str):
        # file_dir = r''
        # dcm = pydicom.read_file(file_dir + r'\D0001.dcm')
        dcm = pydicom.read_file(infile)
        # print(type(dcm.SpecificCharacterSet))
        # print(dcm.SpecificCharacterSet)
        # print(dcm.PatientName)
        name = "Zhang^DaMao=张^大毛="
        dcm.PatientName = name
        dcm.SpecificCharacterSet = 'GB2312'
        # save_dir = r''
        dcm.save_as(outfile)
    
        # dcm1 = pydicom.read_file(file_dir + r'\GB2312.dcm')
        # print('------------after alter-------------')
        # print(dcm.SpecificCharacterSet)
        # print(dcm.PatientName)
    
    
    root_dir = r''
    save_root_dir = r""
    file_list = os.listdir(root_dir)
    for file in file_list:
        in_path = os.path.join(root_dir, file)
        out_path = os.path.join(save_root_dir, file)
        alter_tag_save(in_path, out_path)
    
    展开全文
  • https://pydicom.github.io/pydicom/stable/old/pydicom_user_guide.html
  • pydicom图像数据的保存

    2021-04-26 08:16:48
    pydicom数据的保存pydicom数据的保存pydicom数据的保存 获取图像Tag中的像素矩阵并保存为JPG图片 import os import pydicom # 调用本地的 dicom file folder_path = r"D:\project" file_name = "IM62.dcm" file_...
  • Pydicom是一个用于处理DICOM格式文件的Python包,可以处理包括如医学图像(CT等)、报告等。 Pydicom支持DICOM格式的读取:可以将dicom文件读入python结构,同时支持修改后的数据集可以再次写入DICOM格式文件。但...
  • pydicom数据的处理

    2021-04-26 08:16:08
    pydicom数据的处理pydicom数据的处理pydicom数据的处理 读取Dicom文件后,可以借助Numpy以及图像处理库(如PIL.Image)来进行简单的处理. import numpy as np data = np.array(ds.pixel_array) 可视化 from matplotlib...
  • pydicom数据的读取

    2021-04-26 08:14:42
    pydicom数据的读取pydicom数据的读取pydicom数据的读取
  • 问题:pydicom解析dcm文件,在dcm.pixel_array 生成数组时程序运行错误,想知道这样的异常怎么解决? 环境:PyCharm+python+win10 文件名称格式:1123243.3234432.a.342.dcm 问题说明:只是部分图片无法...
  • import pydicom import os def loadFileInformation(filename): information = {} ds = pydicom.read_file(filename) information['PatientID'] = ds.PatientID information['PatientName'] = ds....
  • pycharm 安装 pydicom

    千次阅读 2020-04-27 14:45:04
    首先查看一下我们的解释器里有没有 pydicom: 如果没有,就如下点击: 等待一段时间以后,出现成功安装 现在就装好了。 如果你用别的途径安装的,但是安装的文件不在当前解释器搜索范围里,就不会搜索到...
  • 前言:已知用pydicom读取一类Dicom图像时会报错,报错信息大致如下:OSError: cannot identify image file During handling of the above exception, another exception occured:AttributeError: ‘OSError’ object...
  • pydicom----用法一

    千次阅读 2020-03-23 18:01:49
    pydicom-易学教程 DICOM “.dcm”数据基本操作方法(python) pydicom的官方documents参考 https://pydicom.github.io/pydicom/stable/getting_started.html Python对DICOM图像进行阈值分割 1、...
  • 在网上没有找到特别好的示例,pydicom的也不是非常全面。 DICOM标准 在网上找到一个较为详细的DICOM标准相关资料网页。包含DICOM标准、字段解释等很详细的信息。 大家可以根据目录找自己感兴趣的信息 相关字段的查询...
  • import pydicom as dicom dicom_path = r'xxxx\0501506\I3Y2F1PE\SW3LNJ3W\I1000000' dcm = dicom.read_file(dicom_path,force=True) print("PatientID:",dcm.PatientID)#病人id print("StudyInstanceUID:",dcm....
  • 下载pydicom pip install pydicom Code import pydicom import numpy as np # 使用PIL.Image提取出来的图片会很暗 from matplotlib import pyplot as plt import os # dicom文件路径 dicom_path = './1.dicom' # ...
  • DICOM数据信息解析及Pydicom简单处理

    千次阅读 2019-10-14 10:43:06
    2、pydicom具体代码(画图需要额外导入库) import pydicom #导入所需要的库 import pylab #读取该dcm文件,两者都可以,亲测有效 ds = pydicom . read_file ( "dicom/image/000001.dcm" ) ds ...
  • I want to treat some DICOM files, so I'm testing pydicom for my work, which I think is considerably useful.And now I want to load existing DICOM files, replace the pixel data array with another pixel ...
  • Pydicom读取dcm格式视频

    2020-06-14 00:36:33
    Pydicom读取dcm格式视频,格式转换 写本文的初衷是不想用dicom的付费软件格式转换,此处特指RadiAnt dicom viewer,找到的免费软件又没有这功能。 dicom文件的相关处理是小众需求,这两天毕业设计需要处理dcm视频,...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 904
精华内容 361
关键字:

pydicom