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