PACS系统 中 dicom 文件在mysql 8.0 数据库中的 存储和读取(pydicom 库使用)

本文涉及的产品
RDS MySQL Serverless 基础系列,0.5-2RCU 50GB
云数据库 RDS MySQL,集群系列 2核4GB
推荐场景:
搭建个人博客
云数据库 RDS PostgreSQL,集群系列 2核4GB
简介: PACS系统 中 dicom 文件在mysql 8.0 数据库中的 存储和读取(pydicom 库使用)

PACS系统中dicom文件在mysql 8.0 数据库中的存储和读取 (pydicom 库使用)


前言

突然对 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 数据库

pip install pydicom 
pip install matplotlib
pip install pymysql


二、使用步骤

1.找到 .dcm 的文件

当你安装好 pydicom 库后,会有一些dcm文件提供你测试

如果是默认安装的话 具体在

C:\Users\kc\AppData\Roaming\Python\Python38\site-packages\pydicom\data\test_filess
kc 就是你的windows 用户名


可以看到 dcm 文件很多,大家可以用于测试

J2K_pixelrep_mismatch.dcm

2.python 将 dcm文件 存入数据库

建表 ,注意这里使用的是 longblob 这个类型 主要用于存2进制文件

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 文件存入数据库

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文件 从数据库中读取并显示·

    # 连接到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.运行

最后运行程序

py dicom.py

总结

以上是 PACS系统 中 dicom 文件在mysql 8.0 数据库中的 存储和读取, 虽然没有真正接触过生产中的PACS系统,但是存储在数据库的中的基本都是2进制的。希望对小伙伴有帮忙。谢谢!



相关实践学习
如何快速连接云数据库RDS MySQL
本场景介绍如何通过阿里云数据管理服务DMS快速连接云数据库RDS MySQL,然后进行数据表的CRUD操作。
全面了解阿里云能为你做什么
阿里云在全球各地部署高效节能的绿色数据中心,利用清洁计算为万物互联的新世界提供源源不断的能源动力,目前开服的区域包括中国(华北、华东、华南、香港)、新加坡、美国(美东、美西)、欧洲、中东、澳大利亚、日本。目前阿里云的产品涵盖弹性计算、数据库、存储与CDN、分析与搜索、云通信、网络、管理与监控、应用服务、互联网中间件、移动服务、视频服务等。通过本课程,来了解阿里云能够为你的业务带来哪些帮助     相关的阿里云产品:云服务器ECS 云服务器 ECS(Elastic Compute Service)是一种弹性可伸缩的计算服务,助您降低 IT 成本,提升运维效率,使您更专注于核心业务创新。产品详情: https://www.aliyun.com/product/ecs
目录
相关文章
【02】Java+若依+vue.js技术栈实现钱包积分管理系统项目-商业级电玩城积分系统商业项目实战-ui设计图figmaUI设计准备-figma汉化插件-mysql数据库设计-优雅草卓伊凡商业项目实战
【02】Java+若依+vue.js技术栈实现钱包积分管理系统项目-商业级电玩城积分系统商业项目实战-ui设计图figmaUI设计准备-figma汉化插件-mysql数据库设计-优雅草卓伊凡商业项目实战
56 14
【02】Java+若依+vue.js技术栈实现钱包积分管理系统项目-商业级电玩城积分系统商业项目实战-ui设计图figmaUI设计准备-figma汉化插件-mysql数据库设计-优雅草卓伊凡商业项目实战
MySQL底层概述—4.InnoDB数据文件
本文介绍了InnoDB表空间文件结构及其组成部分,包括表空间、段、区、页和行。表空间是最高逻辑层,包含多个段;段由若干个区组成,每个区包含64个连续的页,页用于存储多条行记录。文章还详细解析了Page结构,分为通用部分(文件头与文件尾)、数据记录部分和页目录部分。此外,文中探讨了行记录格式,包括四种行格式(Redundant、Compact、Dynamic和Compressed),重点介绍了Compact行记录格式及其溢出机制。最后,文章解释了不同行格式的特点及应用场景,帮助理解InnoDB存储引擎的工作原理。
MySQL底层概述—4.InnoDB数据文件
【01】Java+若依+vue.js技术栈实现钱包积分管理系统项目-商业级电玩城积分系统商业项目实战-需求改为思维导图-设计数据库-确定基础架构和设计-优雅草卓伊凡商业项目实战
【01】Java+若依+vue.js技术栈实现钱包积分管理系统项目-商业级电玩城积分系统商业项目实战-需求改为思维导图-设计数据库-确定基础架构和设计-优雅草卓伊凡商业项目实战
55 13
【01】Java+若依+vue.js技术栈实现钱包积分管理系统项目-商业级电玩城积分系统商业项目实战-需求改为思维导图-设计数据库-确定基础架构和设计-优雅草卓伊凡商业项目实战
MySQL补充性文件
通过以上内容,您可以全面了解和掌握 MySQL 补充性文件的配置、查看及其作用,从而提升数据库管理的效率和质量。
62 36
数据库数据恢复—MongoDB数据库迁移过程中丢失文件的数据恢复案例
某单位一台MongoDB数据库由于业务需求进行了数据迁移,数据库迁移后提示:“Windows无法启动MongoDB服务(位于 本地计算机 上)错误1067:进程意外终止。”
MySQL原理简介—5.存储模型和数据读写机制
本文介绍了MySQL中InnoDB存储引擎的物理存储结构和读写机制。主要内容包括: 1. 为什么不能直接更新磁盘上的数据 2. 数据页的概念 3. 一行数据的存储 4. 数据头的内容 5. 行溢出和溢出页 6. 数据页的物理结构 7. 表空间的物理结构 8. InnoDB存储模型及读写机制总结 这些机制共同确保了InnoDB在高并发场景下的高效运行和数据一致性。
基于SpringBoot+Vue实现的大学生就业服务平台设计与实现(系统源码+文档+数据库+部署等)
面向大学生毕业选题、开题、任务书、程序设计开发、论文辅导提供一站式服务。主要服务:程序设计开发、代码修改、成品部署、支持定制、论文辅导,助力毕设!
63 6
基于SpringBoot+Vue的班级综合测评管理系统设计与实现(系统源码+文档+数据库+部署等)
✌免费选题、功能需求设计、任务书、开题报告、中期检查、程序功能实现、论文辅导、论文降重、答辩PPT辅导、会议视频一对一讲解代码等✌
40 4
基于SpringBoot+Vue实现的大学生体质测试管理系统设计与实现(系统源码+文档+数据库+部署)
面向大学生毕业选题、开题、任务书、程序设计开发、论文辅导提供一站式服务。主要服务:程序设计开发、代码修改、成品部署、支持定制、论文辅导,助力毕设!
37 2
亚太唯一,阿里云连续5年位居Gartner®云数据库管理系统报告「领导者」
Gartner®公布2024年度《云数据库管理系统魔力象限》报告,阿里云成为亚太区唯一入选该报告“领导者(LEADERS)”象限的科技公司,同时也是唯一一家连续5年位居“领导者”象限的中国企业。

推荐镜像

更多
AI助理

你好,我是AI助理

可以解答问题、推荐解决方案等