最完善轻量PACS系统,医学影像必备DICOM工具箱

B站影视 2025-01-21 08:32 3

摘要:基于 .NET Core 构建的 DICOM SCP(服务类提供者)服务器,提供全面的 DICOM 服务,涵盖存储、工作列表管理、查询与检索功能、打印服务以及 WADO/DicomWeb 服务。此外,还集成了功能强大的 DICOM 桌面与 Web 查看器,以满

项目特性

基于 .NET Core 构建的 DICOM SCP(服务类提供者)服务器,提供全面的 DICOM 服务,涵盖存储、工作列表管理、查询与检索功能、打印服务以及 WADO/DicomWeb 服务。此外,还集成了功能强大的 DICOM 桌面与 Web 查看器,以满足多样化的影像查看需求。

该项目具备出色的跨平台能力,Windows 用户可直接下载并运行发布的版本,而 Linux 用户则可通过 Docker 轻松部署。值得注意的是,使用 Weasis 查看影像时,需确保客户端电脑已安装该查看器。

为了提升部署效率与更新便捷性,我们强烈推荐使用 Docker 进行部署,镜像会自动推送更新。当然,对于希望获取最新开发进展的用户,也可自行拉取 dev 分支进行构建。发行版将不定期发布,以提供更多稳定与优化的功能。

作为由一位多年医学影像从业者倾力打造的开源项目,我们旨在为中文医学影像领域提供一个轻量级且高效的 DICOM 解决方案。

项目定位清晰,专注于打造一个轻量级的 PACS 系统,主要围绕 DICOM 处理展开,不涉及 RIS 相关内容。

项目特性

功能特性

存储服务 (C-STORE SCP)

按照4个级别的标签入库和归档

按照级别标签自动组织存储目录结构

支持 JPEG、JPEG2000、JPEG-LS、RLE 等压缩

对不标准的字符集中文字符进行乱码处理

工作列表服务 (Worklist SCP)

提供标准 DICOM Modality Worklist 服务

支持多种查询条件(患者ID、检查号、日期等)

支持请求字符集协商自动中英文转换

查询检索服务 (QR SCP)

提供 C-FIND、C-MOVE、C-GET 服务

可配置多个目标节点

支持多种查询级别(Study/Series/Image)

支持JPEG、JPEG2000、JPEG-LS、RLE 传输语法实时转码

打印服务 (Print SCP)

打印任务队列管理

支持多种打印格式

打印任务状态跟踪

归档打印的原始文件和标签

WADOURI 服务 (Web Access to DICOM Objects)

contentType: 返回内容类型 不传默认 image/jpeg

transferSyntax: DICOM 传输语法 UID 不传默认不转码

anonymize: 是否匿名化

application/dicom: 返回 DICOM 格式

image/jpeg: 返回 JPEG 格式

yes: 执行匿名化处理

其他值或不传: 不进行匿名化

requestType: 必须为 "WADO"

studyUID: 研究实例 UID

seriesUID: 序列实例 UID

objectUID: 实例 UID

必需参数

可选参数

完整请求参数例子

http://localhost:5000/wado?requestType=WADO&studyUID=1.2.840.113704.1.111.5096.1719875982.1&seriesUID=1.3.46.670589.33.1.13252761201319485513.2557156297609063016&objectUID=1.3.46.670589.33.1.39304787935332940.2231985654917411587&contentType=application/dicom&transferSyntax=1.2.840.10008.1.2.4.70&anonymize=yes

CSTORE-SCU (CSTORE-SCU)

支持发送DICOM图像到DICOM SCP

可配置多个目标节点

Print-SCU (Print-SCU)

支持将PRINTSCP接收到的图像打印到其他打印机或PRINTSCP服务

构建打印图像会保留原始图像的标签信息

Log Service (日志服务)

支持查看、下载、删除日志

各服务日志独立配置

多日志级别配置

服务预置详细日志 方便对接查找问题

WADO-RS 服务 (Web Access to DICOM Objects - RESTful Services)

支持自定义尺寸

保持图像宽高比

JPEG 格式输出

示例:

/dicomweb/studies/1.2.3/series/4.5.6/thumbnail?size=256/dicomweb/studies/1.2.3/series/4.5.6/thumbnail?viewport=512

size: 指定输出图像大小(可选,默认 128)

viewport: 指定视口大小(可选,与 size 参数互斥)

支持单帧/多帧提取

保持原始像素数据

支持传输语法转换

返回 DICOM JSON 格式

包含完整的 DICOM 标签信息

支持 VR 和 Value 的标准格式

符合 DICOMweb 规范的空值处理

支持原始 DICOM 格式检索

支持传输语法转换

支持 multipart/related 响应

支持 Accept 头指定返回格式

支持检查/序列/实例三个级别的检索

支持 transfer-syntax 参数指定传输语法

实例检索 (Instance Retrieval)

GET /dicomweb/studies/{studyUID}
GET /dicomweb/studies/{studyUID}/series/{seriesUID}
GET /dicomweb/studies/{studyUID}/series/{seriesUID}/instances/{instanceUID}

元数据检索 (Metadata Retrieval)

GET /dicomweb/studies/{studyUID}/series/{seriesUID}/metadata

帧检索 (Frame Retrieval)

GET /dicomweb/studies/{studyUID}/series/{seriesUID}/instances/{instanceUID}/frames/{frames}

缩略图服务 (Thumbnail)

GET /dicomweb/studies/{studyUID}/series/{seriesUID}/thumbnail?size={size}
GET /dicomweb/studies/{studyUID}/series/{seriesUID}/thumbnail?viewport={viewport}

QIDO-RS 服务 (Query based on ID for DICOM Objects - RESTful Services)

支持 SOP 实例 UID 过滤

返回实例详细信息

包含图像参数信息

支持序列 UID 过滤

支持模态过滤 (例如: "CT*" 匹配所有 CT 相关模态)

返回序列详细信息

符合 DICOMweb JSON 格式规范

支持多种查询参数:

支持分页功能(offset/limit)

支持模糊匹配

返回符合 DICOMweb 标准的 JSON 格式

PatientID: 精确匹配或模糊匹配 (例如: "P123*" 匹配所有以 P123 开头的ID)

PatientName: 支持通配符 (例如: "张" 匹配包含"张"的姓名)

StudyDate: 支持日期范围 (例如: "20240101-20240131" 表示1月份的数据)

AccessionNumber: 检查号匹配

StudyInstanceUID: 检查实例 UID 精确匹配

Modality: 检查类型/模态 (例如: "CT" 或 "CT\MR" 支持多值)

fuzzy: 设置为 true 时启用模糊匹配

00100020: 患者 ID

00100010: 患者姓名

00080020: 检查日期

00200010: 检查号

0020000D: 检查实例 UID

00080060: 检查类型/模态

标准 DICOM 标签格式:

友好格式(等效):

研究级查询 (Study Level Query)

# DICOMweb 标准格式
GET /dicomweb/studies?00100020={patientID}&00100010={patientName}&00080020={date}&00200010={accessionNumber}&0020000D={studyUID}&00080060={modality}&offset={offset}&limit={limit}&fuzzy=true

# 友好格式(兼容)
GET /dicomweb/studies?PatientID={patientID}&PatientName={patientName}&StudyDate={date}&AccessionNumber={accessionNumber}&StudyInstanceUID={studyUID}&Modality={modality}&offset={offset}&limit={limit}&fuzzy=true

序列级查询 (Series Level Query)

GET /dicomweb/studies/{studyUID}/series?SeriesInstanceUID={seriesUID}&Modality={modality}

实例级查询 (Instance Level Query)

GET /dicomweb/studies/{studyUID}/series/{seriesUID}/instances?SOPInstanceUID={instanceUID}

Windows 10/11 或 Windows Server 2016+

.NET 8.0 或更高版本

SQLite 3.x

4GB+ RAM

10GB+ 可用磁盘空间

现代浏览器(Chrome/Firefox/Edge)

appsettings.json需要先在宿主机目录下创建好!

docker run -d --name DicomSCP --restart unless-stopped \
-p 5000:5000 \
-p 11112-11115:11112-11115 \
-v /opt/docker/dicomscp/keys:/root/.aspnet/DataProtection-Keys \
-v /opt/docker/dicomscp/logs:/app/logs \
-v /opt/docker/dicomscp/received_files:/app/received_files \
-v /opt/docker/dicomscp/temp_files:/app/temp_files \
-v /opt/docker/dicomscp/appsettings.json:/app/appsettings.json \
-v /opt/docker/dicomscp/db:/app/db \
fightroad/dicomscp:latest
proxy_pass http://127.0.0.1:5000;
proxy_set_header Host $host:$server_port;
proxy_set_header X-Forwarded-Proto $scheme;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header REMOTE-HOST $remote_addr;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection "Upgrade";proxy_http_version 1.1;

后端框架:.NET Core

前端框架:原生 JavaScript

DICOM 处理:fo-dicom、Cornerstone.js

数据库:SQLite

HTTP 客户端:Axios

UI 组件:Bootstrap

20250120

获取(注意空格)

来源:opendotnet

相关推荐