DICOM序列读入其METADATA

#!/usr/bin/env python
# -*- coding: utf-8 -*-
# @Time    : 3/5/2018 1:32 PM
# @Author  : xn LI
# @Site    : 
# @File    : convertDICOM.py
# @Software: PyCharm

from __future__ import print_function

import os
import sys
import numpy as np
import SimpleITK as sitk
import matplotlib.pyplot as plt


def sitk_show(img, title=None, margin=0.05, dpi=40):
    nda = sitk.GetArrayFromImage(img)
    spacing = img.GetSpacing()
    figsize = (1 + margin) * nda.shape[0] / dpi, (1 + margin) * nda.shape[1] / dpi
    extent = (0, nda.shape[1] * spacing[1], nda.shape[0] * spacing[0], 0)
    fig = plt.figure(figsize=figsize, dpi=dpi)
    ax = fig.add_axes([margin, margin, 1 - 2 * margin, 1 - 2 * margin])

    plt.set_cmap("gray")
    ax.imshow(nda, extent=extent, interpolation=None)

    if title:
        plt.title(title)

    plt.show()

def main():
    data_directory = r"C:/Lxn/LUNG/data/CASE36"

    series_reader = sitk.ImageSeriesReader()
    series_IDs = series_reader.GetGDCMSeriesIDs(data_directory)

    if not series_IDs:
        print("ERROR: given directory \"" + data_directory + "\" does not contain a DICOM series.")
        sys.exit(1)

    series_file_names = series_reader.GetGDCMSeriesFileNames(data_directory, series_IDs[0])

    image_reader = sitk.ImageFileReader()
    image_reader.LoadPrivateTagsOn()

    for file_name in series_file_names:
        image_reader.SetFileName(file_name)
        image = image_reader.Execute()

        window_center = image.GetMetaData("0028|1050") if image.HasMetaDataKey("0028|1050") else 0.0
        window_width = image.GetMetaData("0028|1051") if image.HasMetaDataKey("0028|1051") else 0.0
        rescale_interpret = image.GetMetaData("0028|1052") if image.HasMetaDataKey("0028|1052") else 0.0
        rescale_slope = image.GetMetaData("0028|1053") if image.HasMetaDataKey("0028|1053") else 1.0

        data = image[:, :, 0]

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





if __name__ == '__main__':
    main()
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值