从numpy阵列到DICOM

2024-04-26 10:10:35 发布

您现在位置:Python中文网/ 问答频道 /正文

我的代码读取一个DICOM文件,将像素信息带到numpy数组中,然后修改numpy数组。它使用列表,因为im试图同时操作多个DICOM文件。 我还没有找到任何关于如何将修改后的numpy数组再次变成DICOM文件以便在Python之外使用它的信息。在

#IMPORT
import cv2
import numpy as np
from matplotlib import pyplot as plt
import matplotlib.pyplot as plt
import SimpleITK as sitk  
from glob import glob
import pydicom as dicom

data_path = "C:\\Users\\oliva\\Desktop\\Py tesis\\dicom\\"
output_path = working_path = "C:\\Users\\oliva\\Desktop\\Py tesis\\dicom1\\"
path = glob(data_path + '/*.dcm')

#Checks if we are in the correct path
print ("Total of %d DICOM images.\nFirst 5 filenames:" % len(path))
print ('\n'.join(path[:14]))

data_set = []
for element in path:
    imagen=sitk.ReadImage(element) 
    #imagen = cv2.imread(element)
    array_imagen = sitk.GetArrayViewFromImage(imagen)
    array2_imagen=array_imagen[0] 
    imagen_array_norm = np.uint8(cv2.normalize(array2_imagen, None, 0, 255, cv2.NORM_MINMAX))
    data_set.append(imagen_array_norm)     
#Check
print(len(data_set))    
print(type(data_set[1]))
plt.imshow(data_set[4], cmap=plt.cm.gray)


#Equalization
data_set_eq = equal(data_set)
print(len(data_set_eq))    
print(type(data_set_eq[6]))
plt.imshow(data_set_eq[7], cmap=plt.cm.gray)

#Filtering
data_set_m = median(data_set)
print(len(data_set_m))    
print(type(data_set_m[6]))
plt.imshow(data_set_m[8], cmap=plt.cm.gray)




#Functions
def equal(data):
    data_set_eq = []
    for element in data_set:
    imagen_array_eq = cv2.equalizeHist(element)
    data_set_eq.append(imagen_array_eq)
    return data_set_eq

def median(data):
    data_set_m = []
    for element in data_set:
        imagen_array_m =cv2.medianBlur(element,5)
        data_set_m.append(imagen_array_m)
    return data_set_m

我想要一些关于如何从修改过的numpy数组生成DICOM文件的启示。在


Tags: 文件pathimportnumpydataaspltelement
1条回答
网友
1楼 · 发布于 2024-04-26 10:10:35

您可以将numpy数组转换回SimpleITK映像,然后将其写成Dicom。代码如下所示:

for x in data_set:
    img = sitk.GetImageFromArray(x)
    sitk.WriteImage(img, "your_image_name_here.dcm")

从文件名后缀来看,SimpleITK知道写Dicom。在

请注意,您正在进行的过滤可以在SimpleITK中完成。你不需要使用OpenCV。在SimpleITK中查看以下过滤器:IntensityWindowingImageFilter、adaptivehistoragequalizationfilter和MedianImageFilter。在

https://itk.org/SimpleITKDoxygen/html/classitk_1_1simple_1_1IntensityWindowingImageFilter.htmlhttps://itk.org/SimpleITKDoxygen/html/classitk_1_1simple_1_1AdaptiveHistogramEqualizationImageFilter.htmlhttps://itk.org/SimpleITKDoxygen/html/classitk_1_1simple_1_1MedianImageFilter.html

相关问题 更多 >