Python中如何实现dicom3.0数据转换
有大神用 pydicom 写过程序 类似 Dcm2AsiszImg 这个软件功能的 脚本吗? 可以转换整个文件夹下的 dcm 文件
Python中如何实现dicom3.0数据转换
1 回复
在Python里处理DICOM 3.0数据转换,主要用pydicom库。下面给你几个常见场景的代码示例。
1. 基础读取和查看
import pydicom
# 读取DICOM文件
ds = pydicom.dcmread("example.dcm", force=True)
# 查看基本信息
print(f"患者姓名: {ds.PatientName}")
print(f"模态: {ds.Modality}")
print(f"图像尺寸: {ds.Rows} x {ds.Columns}")
2. 转换为NumPy数组(用于处理)
import numpy as np
# 获取像素数据
pixel_array = ds.pixel_array
# 转换为NumPy数组
image_data = np.array(pixel_array, dtype=np.float32)
print(f"数据类型: {image_data.dtype}, 形状: {image_data.shape}")
3. 转换为常见图像格式(如PNG)
from PIL import Image
import pydicom
def dicom_to_png(dicom_path, png_path):
ds = pydicom.dcmread(dicom_path, force=True)
# 处理像素数据
pixel_array = ds.pixel_array
# 归一化到0-255范围
if pixel_array.dtype != np.uint8:
pixel_array = ((pixel_array - pixel_array.min()) /
(pixel_array.max() - pixel_array.min()) * 255).astype(np.uint8)
# 保存为PNG
if len(pixel_array.shape) == 2:
img = Image.fromarray(pixel_array, mode='L')
else:
img = Image.fromarray(pixel_array)
img.save(png_path)
print(f"已保存为: {png_path}")
# 使用示例
dicom_to_png("input.dcm", "output.png")
4. 批量转换
import os
from pathlib import Path
def batch_convert_dicom_to_png(input_dir, output_dir, target_format="PNG"):
input_path = Path(input_dir)
output_path = Path(output_dir)
output_path.mkdir(exist_ok=True)
for dicom_file in input_path.glob("*.dcm"):
output_file = output_path / f"{dicom_file.stem}.{target_format.lower()}"
dicom_to_png(str(dicom_file), str(output_file))
5. 处理特殊值
def safe_dicom_read(filepath):
ds = pydicom.dcmread(filepath, force=True)
# 处理缺失值
if not hasattr(ds, 'PixelData'):
raise ValueError("DICOM文件缺少像素数据")
# 处理压缩数据
if ds.file_meta.TransferSyntaxUID.is_compressed:
ds.decompress()
return ds
安装依赖:
pip install pydicom numpy pillow
关键点:
- 用
force=True读取可能有问题的文件 - 注意像素数据的位深和颜色空间
- 处理前检查必要的DICOM标签是否存在
用pydicom配合numpy和PIL就能搞定大部分转换需求。

