pip3 install pipreqs

pipreqs .

pip3 install -r requirements.txt

pip3 install opencv-python

 

dicom2mha.py

# -*- coding: utf-8 -*-
import cv2
import os
import pydicom
import numpy
import SimpleITK
import sys
 
src = sys.argv[1]
PathDicom = src
SaveRawDicom = "./"
lstFilesDCM = []
 
file_list = []
 
class DcmFile:
    filename = ''
    ds = None
 
 
for dirName, subdirList, fileList in os.walk(PathDicom):
    for filename in fileList:
        if ".dcm" in filename.lower():
            #print(filename)
            lstFilesDCM.append(os.path.join(dirName, filename))
 
 
i = 0
for filenameDCM in lstFilesDCM:
    ds = pydicom.read_file(filenameDCM)
    print('InstanceNumber:',ds.InstanceNumber)
 
    dcmfile = DcmFile()
    dcmfile.filename = filenameDCM
    dcmfile.ds = ds
    file_list.append(dcmfile)
 
    #ArrayDicom[:, :, lstFilesDCM.index(filenameDCM)] = ds.pixel_array
    #cv2.imwrite("out_" + str(i) + ".png", ArrayDicom[:, :, lstFilesDCM.index(filenameDCM)])
    i += 1
 
ref_ds_any = pydicom.read_file(lstFilesDCM[0])
ConstPixelDims = (int(ref_ds_any.Rows), int(ref_ds_any.Columns), len(lstFilesDCM))
#ArrayDicom = numpy.zeros(ConstPixelDims, dtype=ref_ds_any.pixel_array.dtype)  # array is a numpy array
ArrayDicom = numpy.zeros(ConstPixelDims, dtype=int)  # array is a numpy array
 
#sorted_file_list = sorted(file_list, key=lambda x: x.ds.InstanceNumber)
sorted_file_list = sorted(file_list, key=lambda x: x.ds.InstanceNumber,reverse=True)
i = 0
ImagePositionPatientZ = []
for item in sorted_file_list:
    print('new InstanceNumber:',item.ds.InstanceNumber, 'index:',sorted_file_list.index(item),'i:',i)
    print('new InstanceNumber:',item.ds.InstanceNumber, 'ImagePosition:',item.ds.ImagePositionPatient,'i:',i)
    ImagePositionPatientZ.append(item.ds.ImagePositionPatient[2])
    #ArrayDicom[:, :, i] = item.ds.pixel_array
    ArrayDicom[:, :, sorted_file_list.index(item)] = item.ds.pixel_array
    i += 1
 
zSpacing = float(ImagePositionPatientZ[1]) - (ImagePositionPatientZ[0])
print('ImagePositionPatientZ[0]=',ImagePositionPatientZ[0])
print('ImagePositionPatientZ[1]=',ImagePositionPatientZ[1])
print('zSpacing=',zSpacing)
RefDs = sorted_file_list[0].ds
ConstPixelSpacing = (float(RefDs.PixelSpacing[0]), float(RefDs.PixelSpacing[1]), zSpacing)
Origin = RefDs.ImagePositionPatient
print('arry type:',ref_ds_any.pixel_array.dtype)
 
ArrayDicom = numpy.transpose(ArrayDicom, (2, 0, 1))
 
sitk_img = SimpleITK.GetImageFromArray(ArrayDicom, isVector=False)
sitk_img.SetSpacing(ConstPixelSpacing)

sitk_img.SetOrigin(Origin)
#mhd or mha, useCompression=True
SimpleITK.WriteImage(sitk_img, os.path.join(SaveRawDicom, "sample" + ".mha"),True)

 

python3 dicom2mha.py folder

Logo

CSDN联合极客时间,共同打造面向开发者的精品内容学习社区,助力成长!

更多推荐