Python读取dicom文件

Python读取dicom文件

by HPC_ZY

由于工程需要,学习了python读取dicom和nii格式文件,这里分享利用SimpleITK和pydicom读取dicom文件的方法。

SimpleITK

## read a single dicom by simpleitk

import numpy as np 
import SimpleITK as sitk 
import matplotlib.pyplot as plt
%matplotlib inline


# read a dicom file
dicom = sitk.ReadImage(r"C:\data\1.dcm")

# show some infomation
print(dicom.GetSize())
print(dicom.GetOrigin())
print(dicom.GetSpacing())
print(dicom.GetDirection())

# get image array
image = np.squeeze(sitk.GetArrayFromImage(dicom)) 

# show image
plt.imshow(image,"gray")
plt.show()

## read a series dicom files by simpleitk

import numpy as np 
import SimpleITK as sitk 
import matplotlib.pyplot as plt
%matplotlib inline


filesPath = r"C:\data"


reader = sitk.ImageSeriesReader()
dicomFiles = reader.GetGDCMSeriesFileNames(filesPath)

reader.SetFileNames(dicomFiles)
dicom = reader.Execute()
image = sitk.GetArrayFromImage(dicom) # z,y,x

# show
for idx in range(0,5):
    plt.imshow(image[idx,:,:],"gray")
    plt.show()

pydicom

## read a single dicom by pydicom

import pydicom
import matplotlib.pyplot as plt
from matplotlib import pylab 


PRINTFLAG = [0,0,0,0,0,0]
filePath = r"C:\data\1.dcm"

# read a dicom file
dicom = pydicom.read_file(filePath)

# show some tags
if PRINTFLAG[0]:  # print all dicom tags
    print(dicom.dir()) 

if PRINTFLAG[1]:  # print all dicom tags with 'patient'
    print(dicom.dir('patient')) 

if PRINTFLAG[2]:  # print specified dicom tags
    print(dicom.PatientName, dicom.PatientSex, dicom.PatientID, dicom.PatientBirthDate, dicom.PatientAge)

if PRINTFLAG[3]:  # print a complete tag,include(Group, Element),VR, Value
    print(dicom.data_element('PatientName')) 

if PRINTFLAG[4]:  # print a specified element of a tag
    print(dicom.data_element('PatientID').VR, dicom.data_element('PatientID').value)

if PRINTFLAG[5]:  # get pixel element
    pixelBytes = dicom.PixelData

# get the dicom image array
image = dicom.pixel_array

# show image
plt.imshow(image, cmap=pylab.cm.bone) 
plt.show() 

## read a series dicom files by pydicom

import os  
import pydicom
import numpy as np
import matplotlib.pyplot as plt


filesPath = r"C:\data"

# get files name list
dicomFilesList = []
for root, dirs, files in os.walk(filesPath):
    for filename in files: # default that all files are dicom
        dicomFilesList.append(os.path.join(root, filename)) # append to list
    
# Use the first picture as a reference
ref = pydicom.read_file(dicomFilesList[0])
dicomSize = (int(ref.Rows), int(ref.Columns), len(dicomFilesList)) 
print(dicomSize) # size
voxelSize = (float(ref.PixelSpacing[0]), float(ref.PixelSpacing[1]), float(ref.SliceThickness))
print(voxelSize) # spacing(mm) Parameters required for reconstruction

# init 3D volumn
image = np.zeros(dicomSize, dtype=ref.pixel_array.dtype)

# read dicom series
for filenameDCM in dicomFilesList:
    ds = pydicom.read_file(filenameDCM)
    image[:, :, dicomFilesList.index(filenameDCM)] = ds.pixel_array

# show image
plt.imshow(image[:, :, 19]) # horizontal 
plt.show() 

plt.imshow(ArrayDicom[:, 90, :]) # frontal 
plt.show()

plt.imshow(ArrayDicom[220, :, :]) # sagittal
plt.show()

其他

  1. 由于需求,只能用英文备注
  2. 后面还会分享读取nii的方法
  • 11
    点赞
  • 47
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值