1. 为什么需要将普通图像转为DICOM格式
第一次接触医学影像处理时,我也被DICOM这个"行业黑话"搞得一头雾水。简单来说,DICOM就像是医疗影像界的普通话,所有专业设备都只认这个语言。普通JPG/PNG就像方言,虽然能表达意思,但进了医院系统就寸步难行。
举个例子,去年我帮某三甲医院开发肺部结节检测系统时,算法团队给的都是公开数据集里的PNG图像。结果部署时才发现,医院的CT机、PACS系统根本不认这些"野路子"数据。就像带着方言浓重的普通话去参加新闻联播,再好的内容也播不出去。
DICOM的强大之处在于它不只是图像,更是个信息集装箱。除了像素数据,它还包含:
- 患者信息(姓名、ID、出生日期)
- 检查信息(设备型号、扫描参数)
- 临床数据(诊断结论、医生备注)
- 空间信息(像素间距、切片厚度)
这些元数据对AI模型训练至关重要。比如像素间距决定了结节的实际大小,没有这个信息,算法算出的3mm结节可能是30mm也可能是0.3mm。
需要模型API调用? 免费领10W Token,多模型网关一键接入 Claude、DeepSeek 等主流模型。
2. 准备工作:搭建Python环境
工欲善其事,必先利其器。推荐用Anaconda创建专属环境,避免库版本冲突:
bash复制conda create -n dicom_converter python=3.8
conda activate dicom_converter
核心依赖就两个:
- pydicom:DICOM处理的瑞士军刀
- Pillow:图像处理必备
安装命令:
bash复制pip install pydicom pillow
验证安装是否成功:
python复制import pydicom
from PIL import Image
print(pydicom.__version__, Image.__version__)
遇到过最坑的版本问题是pydicom 2.0+的API变动。如果遇到hasattr()报错,可以回退到1.4版本:
bash复制pip install pydicom==1.4.2
3. 基础转换:从像素到DICOM
先看一个最小可行方案,把PNG转为基本DICOM:
python复制import pydicom
from pydicom.dataset import FileDataset
from PIL import Image
def simple_convert(input_path, output_path):
# 读取图像并转为灰度
img = Image.open(input_path).convert('L')
# 创建DICOM骨架
ds = FileDataset(output_path, {}, file_meta=
