PACS系统中dicom文件在mysql 8.0 数据库中的存储和读取

前言

突然对 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进制的。希望对小伙伴有帮忙。谢谢!

相关推荐
Python×CATIA工业智造31 分钟前
Frida RPC高级应用:动态模拟执行Android so文件实战指南
开发语言·python·pycharm
onceco1 小时前
领域LLM九讲——第5讲 为什么选择OpenManus而不是QwenAgent(附LLM免费api邀请码)
人工智能·python·深度学习·语言模型·自然语言处理·自动化
狐凄2 小时前
Python实例题:基于 Python 的简单聊天机器人
开发语言·python
悦悦子a啊3 小时前
Python之--基本知识
开发语言·前端·python
Piper蛋窝3 小时前
深入 Go 语言垃圾回收:从原理到内建类型 Slice、Map 的陷阱以及为何需要 strings.Builder
后端·go
笑稀了的野生俊4 小时前
在服务器中下载 HuggingFace 模型:终极指南
linux·服务器·python·bash·gpu算力
Naiva4 小时前
【小技巧】Python+PyCharm IDE 配置解释器出错,环境配置不完整或不兼容。(小智AI、MCP、聚合数据、实时新闻查询、NBA赛事查询)
ide·python·pycharm
路来了5 小时前
Python小工具之PDF合并
开发语言·windows·python
蓝婷儿5 小时前
Python 机器学习核心入门与实战进阶 Day 3 - 决策树 & 随机森林模型实战
人工智能·python·机器学习
六毛的毛5 小时前
Springboot开发常见注解一览
java·spring boot·后端