使用 python 将图像转换为 Dicom [已关闭]

问题描述 投票:0回答:1

我在尝试将 BMP 图像转换为 DICOM 时遇到问题。我的 Python 脚本列出了目录中的所有 BMP 文件并将它们转换为 Dicom 数据集。我可以运行代码,但得到一个奇怪的结果。我不知道问题是什么,这是我第一次从事图像处理工作。请帮助我,我正在学习:(

def convert_bmps_to_dicoms(bmp_dir, dicom_output_dir):
# Create output directory if it doesn't exist
if not os.path.exists(dicom_output_dir):
    os.makedirs(dicom_output_dir)

# List all BMP files in the directory
bmp_files = [f for f in os.listdir(bmp_dir) if f.endswith('.bmp')]

if not bmp_files:
    print("No BMP files found in the directory.")
    return

for bmp_file in bmp_files:
    # Load BMP image
    bmp_path = os.path.join(bmp_dir, bmp_file)
    image = Image.open(bmp_path)
    image_array = np.array(image)

    # Create DICOM dataset
    ds = FileDataset(os.path.join(dicom_output_dir, f"{os.path.splitext(bmp_file)[0]}.dcm"), {},
                     file_meta=Dataset())
    ds.Modality = 'OT'
    ds.PatientName = "Test^Firstname"
    ds.PatientID = "123456"
    ds.PatientBirthDate = "20000101"
    ds.PatientSex = "F"
    ds.StudyInstanceUID = pydicom.uid.generate_uid()  # Random Study Instance UID
    ds.SeriesInstanceUID = "1.2.826.0.1.3680043.9.3813.1.1.222222"
    ds.SOPInstanceUID = pydicom.uid.generate_uid()
    ds.SamplesPerPixel = 1
    ds.PhotometricInterpretation = "MONOCHROME2"
    ds.Rows = 512  # Set rows to 512
    ds.Columns = 512  # Set columns to 512
    ds.BitsAllocated = 8
    ds.BitsStored = 8
    ds.HighBit = 7
    ds.PixelRepresentation = 0
    ds.PixelData = image_array.tobytes()

    # Add custom attribute for BMP file name
    ds.BMPFileName = bmp_file

    # Write DICOM dataset to file
    ds.save_as(os.path.join(dicom_output_dir, f"{os.path.splitext(bmp_file)[0]}.dcm"))
    print(f"DICOM file {bmp_file}.dcm saved successfully in {dicom_output_dir}.")
dicom bmp pydicom
1个回答
0
投票

我可以确认阿米特·乔希斯的评论。您添加的属性太少,无法构成有效的 DICOM 对象。不,dcmtk 不会自动添加任何内容。

粗略地说,您应该首先决定对象的类型,然后遵循 DICOM 第 3 部分中的 IOD。我猜您会选择辅助捕获图像(对属性的要求非常低,所以这里是您的参考:辅助捕获 IOD

您至少需要添加 UID:SOP 类、SOP 实例、研究实例和系列实例。

图像数据也不足以被观看者解读。例如。 DICOM 中有许多不同的颜色支持模型,因此其他属性变得很重要。请参阅图像像素模块了解所需内容。

您可能很幸运找到一个可以显示图像的查看器,但它距离“符合 DICOM 标准”还很远

您可能想查看 DCMTK 的 dcmiod 模块,而不是使用“原始”DICOM 数据集 (dcmdata) 接口。它提供了更方便的 API,为您提供有关如何构建有效的 DICOM 对象的更多指导。

我认为这些提示应该可以帮助您朝着正确的方向前进。属性及其值的完整列表太冗长了。 DICOM 不仅仅是一种图像格式。这是关于工作流程的。因此,像素数据只是构建 DICOM 对象时需要正确处理的许多重要方面之一。

© www.soinside.com 2019 - 2024. All rights reserved.