【问题标题】:How to save DICOM in same series using pydicom [duplicate]如何使用 pydicom 在同一系列中保存 DICOM [重复]
【发布时间】:2021-10-04 17:10:09
【问题描述】:

我已经将预处理的 DICOM 保存在一个文件夹中,总共 300 个 .dcm 文件,但是当我在 RadiANT DICOM Viewer 中打开这个 DICOM 文件夹路径时,只显示一个切片,这是我的代码,你能帮我怎么做显示整个扫描。我认为图像位置和切片位置的主要问题


import os
import numpy as np
import matplotlib.pyplot as plt
import pydicom
from pydicom.encaps import encapsulate
from pydicom.uid import JPEG2000
from imagecodecs import jpeg2k_encode
basepath="/home/hammad/AssementTask/DICOM/"
des_path="/home/hammad/AssementTask/g/"
file_list = [f.path for f in os.scandir(basepath)]
ds = pydicom.dcmread(file_list[0])
for i in range(imgs_after_resamp.shape[0]):
  
        out = imgs_after_resamp[i,:,:]
        #Need to copy() to meet jpeg2k_encodes C contiguous requirement
        arr_crop = out.copy() 
        out = out.astype(np.int16)
        # jpeg2k_encode to perform JPEG2000 compression
        arr_jpeg2k = jpeg2k_encode(arr_crop)
        # convert from bytearray to bytes before saving to PixelData
        arr_jpeg2k = bytes(arr_jpeg2k)
        ds.Rows = arr_crop.shape[0]
        ds.Columns = arr_crop.shape[1]
        ds[0x0018, 0x0050].value=np.round(spacing[0])
        ds[0x0028, 0x0030].value=[np.round(spacing[1]),np.round(spacing[2])]
        ds.InstanceNumber = i
        ds.PixelData = encapsulate([arr_jpeg2k])
        ds.save_as((des_path + str(i) + '.dcm'.format(i)))

【问题讨论】:

  • 注意:帖子关闭者提供的链接并不能完全反映我回答的各个方面

标签: python image-processing dicom pydicom


【解决方案1】:

我不熟悉python。但有些事情对我来说似乎很明显,所以我会尝试一个答案:

ds = pydicom.dcmread(file_list[0])
    for i in range(imgs_after_resamp.shape[0]):
       [...]

您正在阅读一个文件并将其用作所有重新采样文件的模板。至少,您必须为您保存的每个文件创建一个新的SOP Instance UID (0008,0018)。这很可能是查看器只显示一张图像的原因。 SOP Instance UID 唯一标识图像。如果所有重新采样的图像都具有相同的 SOP 实例 UID,这将告诉查看器一遍又一遍地加载相同的图像。 IE。新加载的图像被认为是重复的。

是的,要更新几何信息,需要将更多属性设置为适当的值。这部分取决于图像(SOP Class UID, 0008,0016) 的类型。但这里是主要嫌疑人:

  • 图像定位患者 (0020,0032)
  • 图像定向患者 (0020,0037)
  • 切片位置 (0020,1041)

此外,确保Frame Of Reference UID (0020,0052) 仅在两个图像集使用相同的坐标系时才保留在原始图像中(即重新采样堆栈中的图像位置患者必须参考与原始图像中相同的原点)。如有疑问,请分配一个新的 FOR-UID。堆栈中的所有图像都必须相同。

最后一点:这更多地取决于 SOP 类,所以我只能给你一个一般性的提示。重采样是根据 DICOM 派生的,因此 Image Type (0008,0008) 在第二个组件中必须是“DERIVED”。根据 SOP 等级,这会引发大量其他要求。通常,您必须描述派生的类型并引用您从中派生重采样图像的图像。

并非所有这些都是在查看器中正确显示图像所必需的。但是如果你打算在产品质量方面编写你的实现,你需要考虑它们。查看 DICOM 第 3 部分中 IOD 的模块表,作为更新标头信息的起点。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2022-01-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-02-19
    • 1970-01-01
    相关资源
    最近更新 更多