前言
突然对 PACS系统 dicom 文件存储 感兴趣, 主要是这个很有趣dicom 文件会包含 患者的年龄,名字等。
在百度百科查到如下 : PACS(picture archiving and communication system)意为影像归档和通信系统。它是应用在医院影像科室的系统,主要的任务就是把日常产生的各种医学影像(包括核磁,CT,超声,各种X光机,各种红外仪、显微仪等设备产生的图像)通过各种接口(模拟,DICOM,网络)以数字化的方式海量保存起来,当需要的时候在一定的授权下能够很快的调回使用,同时增加一些辅助诊断管理功能。它在各种影像设备间传输数据和组织存储数据具有重要作用。
那个Dicom 又是什么 在百度百科查到如下 : DICOM(Digital Imaging and Communications in Medicine)即医学数字成像和通信,是医学图像和相关信息的国际标准(ISO 12052)。它定义了质量能满足临床需要的可用于数据交换的医学图像格式。 DICOM被广泛应用于放射医疗,心血管成像以及放射诊疗诊断设备(X射线,CT,核磁共振,超声等),并且在眼科和牙科等其它医学领域得到越来越深入广泛的应用。在数以万计的在用医学成像设备中,DICOM是部署最为广泛的医疗信息标准之一。当前大约有百亿级符合DICOM标准的医学图像用于临床使用。 自从1985年DICOM标准第一版发布以来,DICOM给放射学实践带来了革命性的改变,X光胶片被全数字化的工作流程所代替。就像Internet成为信息传播应用的全新平台,DICOM使"改变临床医学面貌"的高级医学图像应用成为可能。比如在急诊科中,心脏负荷测试,乳腺癌的检查,DICOM为医生和病人服务,是医学成像有效工作的标准。
一、前期准备
本文不适合初学者 请先安装 python 3.8 以上版本 请先安装 mysql8.0 数据库
powershell
pip install pydicom
pip install matplotlib
pip install pymysql
二、使用步骤
1.找到 .dcm 的文件
当你安装好 pydicom 库后,会有一些dcm文件提供你测试
如果是默认安装的话 具体在
powershell
C:\Users\kc\AppData\Roaming\Python\Python38\site-packages\pydicom\data\test_files
kc 就是你的windows 用户名
可以看到 dcm 文件很多,大家可以用于测试
J2K_pixelrep_mismatch.dcm
2.python 将 dcm文件 存入数据库
建表 ,注意这里使用的是 longblob 这个类型 主要用于存2进制文件
sql
CREATE TABLE `dicom_files` (
`id` int NOT NULL AUTO_INCREMENT,
`file_name` varchar(255) DEFAULT NULL,
`file_data` longblob,
PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=3 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci;
使用 python 将 DICOM 文件存入数据库
python
import pydicom
from pydicom import dcmread, dcmwrite
from pydicom.data import get_testdata_file
from pydicom.filebase import DicomFileLike
from io import BytesIO
import pymysql
#转换为 2进制
def write_dataset_to_bytes(dataset):
# create a buffer
with BytesIO() as buffer:
# create a DicomFileLike object that has some properties of DataSet
memory_dataset = DicomFileLike(buffer)
# write the dataset to the DicomFileLike object
dcmwrite(memory_dataset, dataset)
# to read from the object, you have to rewind it
memory_dataset.seek(0)
# read the contents as bytes
return memory_dataset.read()
#找到
filename_mismatch = get_testdata_file('J2K_pixelrep_mismatch.dcm')
dataset1 = dcmread(filename_mismatch)
file_name1 = dataset1.SOPInstanceUID
ds_bytes1 = write_dataset_to_bytes(dataset1)
# 连接到MySQL数据库
conn = pymysql.connect(
host='localhost',
user='root',
password = "123456",
db='test',
)
cursor = conn.cursor()
insert_query = "INSERT INTO dicom_files (file_name, file_data) VALUES (%s, %s)"
cursor.execute(insert_query, (file_name1, ds_bytes1))
conn.commit()
cursor.close()
conn.close()
3.将 dcm文件 从数据库中读取并显示·
python
# 连接到MySQL数据库
cursor = conn.cursor()
cursor.execute("select file_data from dicom_files ")
result = cursor.fetchone()
blob_data = result[0]
dataset = dcmread(BytesIO(blob_data))
image_data = dataset.pixel_array
# 显示DICOM图像
plt.imshow(image_data, cmap=plt.cm.gray)
plt.show()
cursor.close()
conn.close()
4.运行
最后运行程序
python
py dicom.py
总结
以上是 PACS系统 中 dicom 文件在mysql 8.0 数据库中的 存储和读取, 虽然没有真正接触过生产中的PACS系统,但是存储在数据库的中的基本都是2进制的。希望对小伙伴有帮忙。谢谢!