# pyDicom基本使用操作DICOM文件
## 一、DICOM文件簡介
DICOM(Digital Imaging and Communications in Medicine)是醫學數字成像和通信的國際標準格式,廣泛應用于放射影像、超聲、內窺鏡等醫療設備。每個DICOM文件不僅包含圖像數據,還存儲了患者信息、檢查參數等豐富的元數據。
## 二、pyDicom庫安裝
```python
pip install pydicom
安裝完成后可通過以下命令驗證:
import pydicom
print(pydicom.__version__)
import pydicom
# 讀取DICOM文件
ds = pydicom.dcmread("example.dcm")
# 顯示元數據
print(ds)
# 患者信息
patient_name = ds.PatientName
patient_id = ds.PatientID
# 圖像信息
rows = ds.Rows
cols = ds.Columns
pixel_data = ds.pixel_array # 獲取像素數據
ds.PatientName = "Anonymous"
ds.PatientID = "123456"
import numpy as np
from pydicom.pixel_data_handlers.util import apply_modality_lut
# 應用模態LUT轉換
hu_values = apply_modality_lut(ds.pixel_array, ds)
# 簡單窗寬窗位調整
def apply_window(image, window_center, window_width):
min_val = window_center - window_width/2
max_val = window_center + window_width/2
return np.clip(image, min_val, max_val)
import matplotlib.pyplot as plt
plt.imshow(ds.pixel_array, cmap='gray')
plt.title(f"CT Image - Patient: {ds.PatientName}")
plt.axis('off')
plt.show()
# 保存修改后的文件
ds.save_as("modified.dcm")
# 可選:設置文件元數據
ds.file_meta.TransferSyntaxUID = pydicom.uid.ImplicitVRLittleEndian
if hasattr(ds, 'NumberOfFrames') and ds.NumberOfFrames > 1:
for frame in range(ds.NumberOfFrames):
frame_data = ds.pixel_array[frame]
# 處理單幀數據...
from pydicom.dataset import Dataset
def anonymize(ds):
new_ds = Dataset()
# 保留必要字段
new_ds.PatientID = "ANONYMIZED"
new_ds.PatientName = "ANONYMIZED"
# 復制圖像數據
new_ds.PixelData = ds.PixelData
return new_ds
import os
dicom_dir = "DICOM_Series/"
output_dir = "Processed/"
os.makedirs(output_dir, exist_ok=True)
for filename in os.listdir(dicom_dir):
if filename.endswith('.dcm'):
ds = pydicom.dcmread(os.path.join(dicom_dir, filename))
# 處理邏輯...
ds.save_as(os.path.join(output_dir, filename))
pyDicom作為Python處理DICOM文件的核心庫,提供了從基礎讀取到高級處理的完整功能鏈。通過本文介紹的方法,開發者可以快速實現: - 醫學影像數據的解析與可視化 - DICOM元數據的編輯與轉換 - 批量自動化處理流程
對于更復雜的需求,還可以結合SimpleITK、VTK等專業醫學影像處理庫共同使用。
提示:實際臨床環境使用時,建議先在小規模測試數據上驗證代碼邏輯。 “`
文章結構說明: 1. 從基礎安裝到高級功能循序漸進 2. 包含代碼示例和實際應用場景 3. 強調醫療數據處理的特殊注意事項 4. 保持了850字左右的篇幅要求 5. 使用Markdown格式呈現代碼塊和章節結構
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。