当前位置: 首页 > article >正文

DICOM服务中的C-STORE、 C-FIND、C-MOVE、C-GET、Worklist

DICOM服务说明

DICOM(Digital Imaging and Communications in Medicine)是一种用于处理、存储、打印和传输医学影像的标准。DICOM定义了多种服务类,其中C-STORE、C-FIND、C-MOVE和C-GET是与影像数据查询和检索相关的四个主要服务类:

C-STORE

用于存储一个DICOM对象实例到远程DICOM应用实体。这意味着可以将图像或其它类型的DICOM数据发送到服务器进行存储。

C-FIND

用于执行匹配查询,即在远程DICOM应用实体中查找符合特定条件的DICOM对象实例。

C-MOVE

允许用户请求从一个AE(Application Entity)向另一个AE传输指定的DICOM对象实例。它通常用于请求影像从服务器传输到本地系统或其他指定位置。

C-MOVE是DICOM标准中Query/Retrieve Service Class的一部分,主要用于在DICOM兼容设备之间请求和转移医学图像数据。当使用C-MOVE时,客户端(比如一个工作站)可以向服务器(如PACS系统)发送一个请求,要求服务器将特定的DICOM对象复制到另一个指定的目标节点。以下是C-MOVE操作的基本步骤:

  1. 查询: 客户端首先查询服务器以找到满足特定条件的DICOM对象。
  2. 移动请求: 然后,客户端发送一个C-MOVE请求给服务器,指定了目标节点(即接收数据的另一台机器)以及想要获取的数据集。
  3. 数据传输: 服务器接收到C-MOVE请求后,会主动将指定的数据集发送到目标节点。

这种机制非常适合于医院内部或医疗机构之间的影像数据共享,因为它允许用户从远程位置请求并接收所需的影像资料,而无需手动下载和上传文件。

C-GET

类似于C-MOVE,但不同之处在于C-GET请求的数据直接返回给请求者,而不是由服务器推送到另一个目的地。

Worklist获取(Modality Worklist)

这不是一种DICOM传输服务,而是一种查询服务,用于从RIS(Radiology Information System)或医院信息系统(HIS)中获取患者信息和检查计划列表,以供成像设备使用。这有助于减少手动输入错误并提高效率。

 

DICOM服务C#基本示例

//C-STORE 示例
using FellowOakDicom;
using FellowOakDicom.Network;
using System.Threading.Tasks;public class StoreExample
{public async Task StoreImageAsync(string filePath, string remoteAETitle, string remoteHost, int remotePort){var file = DicomFile.Open(filePath);var client = new DicomClient();await client.AddRequestAsync(new DicomCStoreRequest(file){OnSuccess = (request, response) =>{// 成功回调return Task.CompletedTask;},OnError = (request, response) =>{// 错误回调return Task.CompletedTask;}});await client.SendAsync(remoteAETitle, remoteHost, remotePort);}
}//C-FIND 示例
using FellowOakDicom.Network;
using System.Threading.Tasks;public class FindExample
{public async Task QueryStudiesAsync(string remoteAETitle, string remoteHost, int remotePort){var client = new DicomClient();var request = new DicomCFindRequest(DicomPriority.Low){SOPClassUID = DicomUID.StudyRootQueryRetrieveInformationModelFIND};request.Dataset.AddOrUpdate(DicomTag.PatientName, "*");request.OnResponseReceived = (req, res) =>{// 处理响应return Task.CompletedTask;};await client.AddRequestAsync(request);await client.SendAsync(remoteAETitle, remoteHost, remotePort);}
}//C-MOVE 示例:C-MOVE请求用于从一个AE(Application Entity)向另一个AE传输指定的DICOM对象实例。
using FellowOakDicom.Network;
using System.Threading.Tasks;public class MoveExample
{public async Task MoveImagesAsync(string remoteAETitle, string remoteHost, int remotePort, string destinationAETitle){var client = new DicomClient();var request = new DicomCMoveRequest(DicomUID.StudyRootQueryRetrieveInformationModelMOVE, destinationAETitle){SOPInstanceUID = "*",StudyInstanceUID = "1.2.840.113619.2.1.9999.7556.1234567890", // 示例Study Instance UIDOnResponseReceived = (req, res) =>{// 处理响应return Task.CompletedTask;}};await client.AddRequestAsync(request);await client.SendAsync(remoteAETitle, remoteHost, remotePort);}
}//C-GET 示例:C-GET请求直接从查询/检索模型获取匹配的DICOM实例并将其返回给请求者。
using FellowOakDicom.Network;
using System.Threading.Tasks;public class GetExample
{public async Task GetImagesAsync(string remoteAETitle, string remoteHost, int remotePort){var client = new DicomClient();var request = new DicomCGetRequest(DicomUID.StudyRootQueryRetrieveInformationModelGET){StudyInstanceUID = "1.2.840.113619.2.1.9999.7556.1234567890", // 示例Study Instance UIDOnResponseReceived = (request, response) =>{// 处理每个接收到的DICOM文件if (response.Dataset != null){var file = new DicomFile(response.Dataset);// 保存或处理DICOM文件}return Task.CompletedTask;},OnCompleted = () =>{// 所有数据接收完毕后的处理return Task.CompletedTask;}};await client.AddRequestAsync(request);await client.SendAsync(remoteAETitle, remoteHost, remotePort);}
}

 

 

相关文章:

DICOM服务中的C-STORE、 C-FIND、C-MOVE、C-GET、Worklist

DICOM服务说明 DICOM(Digital Imaging and Communications in Medicine)是一种用于处理、存储、打印和传输医学影像的标准。DICOM定义了多种服务类,其中C-STORE、C-FIND、C-MOVE和C-GET是与影像数据查询和检索相关的四个主要服务类&#xff…...

C++发展

目录 ​编辑C 的发展总结:​编辑 1. C 的早期发展(1979-1985) 2. C 标准化过程(1985-1998) 3. C 标准演化(2003-2011) 4. C11(2011年) 5. C14(2014年&a…...

vue3中 组合式~测试深入组件:事件 与 $emit()

一、语法(props) 第一步&#xff1a;在组件模板表达式中&#xff0c;可以直接用$emit()方法触发自定义事件&#xff0c; <!-- MyComponent --> <button click"$emit(someEvent)">Click Me</button> 第二步父组件可以通过 v-on (缩写为 ) 来监听…...

动态规划/贪心算法

一、动态规划 动态规划 是一种用于解决优化问题的算法设计技术&#xff0c;尤其适用于具有重叠子问题和最优子结构性质的问题。它通过将复杂问题分解为更简单的子问题&#xff0c;并保存这些子问题的解以避免重复计算&#xff0c;从而提高效率。 动态规划的核心思想 最优子结…...

python全栈-Linux基础

python全栈-Linux基础 文章目录 Linux安装/配置网络配置配置Linux远程登录配置虚拟机内部ip配置真机的ip安装XShell和Xftp目录结构用户和用户组用户管理添加用户useradd查看用户id修改用户usermod (选项)(参数)用户密码设置passed (选项)(参数)删除用户userdel [选项] 用户名 用…...

基于https虚拟主机配置

一、https介绍 http 明文&#xff0c;80/tcp https 密文&#xff0c;443/tcp 二、安全性保障 1、数据安全性 数据加密 2、数据完整性 3、验证身份的真实性、有效性 三、数据安全性 手段&#xff1a;加密 发送方加密数据&#xff0c;接收方解密数据 对称加密算法 加密、解密数据…...

Kmeans算法来实现RFM指标计算步骤

K-Means&#xff08;K均值&#xff09;是一种经典的无监督聚类算法&#xff0c;主要用于将数据集划分为 KKK 个不同的簇&#xff08;Cluster&#xff09;。 它基于最小化簇内样本的平方误差&#xff0c;即最小化数据点与簇中心的距离之和。 1. K-Means 算法原理 (1) 主要步骤 …...

LeetCode 1745.分割回文串 IV:动态规划(用III或II能直接秒)

【LetMeFly】1745.分割回文串 IV&#xff1a;动态规划&#xff08;用III或II能直接秒&#xff09; 力扣题目链接&#xff1a;https://leetcode.cn/problems/palindrome-partitioning-iv/ 给你一个字符串 s &#xff0c;如果可以将它分割成三个 非空 回文子字符串&#xff0c;…...

Vue2-3 优雅的在子组件修改父组件传递过来的v-model

在子组件修改父组件传递过来的v-model&#xff0c;这样会破坏单向数据流&#xff0c;造成屎山代码&#xff0c;为了避免这个问题&#xff0c;需要给一个中间层来相对舒服的使用v-model。方法就是用computed去拦截v-model,然后在computed 里面去触发 emit 事件来修改父组件传来的…...

threejs:用着色器给模型添加光带扫描效果

第一步&#xff1a;给模型添加光带 首先创建一个立方体&#xff0c;不进行任何缩放平移操作&#xff0c;也不要set position。 基础代码如下&#xff1a; 在顶点着色器代码里varying vec3 vPosition;vPosition position;获得threejs自动计算的顶点坐标插值&#xff08;也就…...

1.从0搭建前端Vue项目工程

我们通过vue官方提供的脚手架Vue-cli来快速生成一个Vue的项目模板。 **注意&#xff1a;**需要先安装NodeJS&#xff0c;然后才能安装Vue-cli。 环境准备好了&#xff0c;接下来我们需要通过Vue-cli创建一个vue项目&#xff0c;然后再学习一下vue项目的目录结构。Vue-cli提供了…...

开放鸿蒙OpenHarmony 5.0.0 Release 兼容性测试实战经验分享

OpenHarmony 5.0版本的发布时间是2024年12月20日至21日。这个版本带来了许多新特性和改进。现在5.0出了两个release 版本&#xff0c;分别是5.0.0和5.0.1。 就在5.0版本发布不到2周的时间内&#xff0c;2025年01月01日起&#xff0c;不支持新产品基于老分支&#xff08;OpenHar…...

Chromium_src源码

Chromium_src源码 码云上有一个OpenHarmony-TPC/chromium_src项目&#xff0c;目前已经停止维护了&#xff0c;迁移到GitCode上了&#xff0c;源代码项目地址为&#xff1a;openharmony-tpc/chromium_chrome 特此记录一下老的项目的相关软件架构 Chromium 简介 软件架构 软…...

深度学习的正则化深入探讨

文章目录 一、说明二、学习目标三、什么是机器学习中的正则化四、了解过拟合和欠拟合五、代价函数的意义六、什么是偏差和方差&#xff1f;七、机器学习中的正则化&#xff1f; 一、说明 在训练机器学习模型时&#xff0c;模型很容易过拟合或欠拟合。为了避免这种情况&#xf…...

《OpenCV》——dlib(人脸应用实例)

文章目录 dlib库dlib库——人脸应用实例——表情识别dlib库——人脸应用实例——疲劳检测 dlib库 dlib库的基础用法介绍可以参考这篇文章&#xff1a;https://blog.csdn.net/lou0720/article/details/145968062?spm1011.2415.3001.5331&#xff0c;故此这篇文章只介绍dlib的人…...

tauri2+typescript+vue+vite+leaflet等的简单联合使用(一)

项目目标 主要的目的是学习tauri。 流程 1、搭建项目 2、简单的在项目使用leaflet 3、打包 准备项目 环境准备 废话不多说&#xff0c;直接开始 需要有准备能运行Rust的环境和Node&#xff0c;对于Rust可以参考下面这位大佬的文章&#xff0c;Node不必细说。 Rust 和…...

本地部署阿里万象2.1文生视频模型(Wan2.1-T2V)完全指南

在生成式AI技术爆发式发展的今天,阿里云开源的万象2.1(Wan2.1)视频生成模型,为创作者提供了从文字/图像到高清视频的一站式解决方案。本文针对消费级显卡用户,以RTX 4060 Ti 16G为例,详解本地部署全流程与性能调优方案,涵盖环境配置、多模型选择策略、显存优化技巧及实战…...

# [Linux] [Anaconda]解决在 WSL Ubuntu 中安装 Anaconda 报错问题

在 Windows 10 中安装了 WSL&#xff08;Windows Subsystem for Linux&#xff09;并使用 Ubuntu 后&#xff0c;你可能会下载 Anaconda 的 Linux 版本进行安装。但在安装过程中&#xff0c;可能会遇到 tar (child): bzip2: Cannot exec: No such file or directory 这样的错误…...

ES怎么查询大于10000条数据

在Elasticsearch&#xff08;ES&#xff09;中&#xff0c;默认情况下&#xff0c;查询结果的最大返回条数是10,000条。如果你需要查询超过10,000条数据&#xff0c;可以通过以下几种方式来实现&#xff1a; 1. 使用 scroll API scroll API 适用于需要处理大量数据的场景&…...

【Vue CLI脚手架开发】——3.组件交互props配置

文章目录 前言一、props数据接收方式二、代码实现1. 父组件2.子组件 三、分析 前言 提示&#xff1a;这里可以添加本文要记录的大概内容&#xff1a; 例如&#xff1a;随着人工智能的不断发展&#xff0c;机器学习这门技术也越来越重要&#xff0c;很多人都开启了学习机器学习…...

FPGA之USB通信实战:基于FX2芯片的Slave FIFO回环测试详解

FPGA之Usb数据传输 Usb 通信 你也许会有疑问&#xff0c;明明有这么多通信方式和数据传输&#xff08;SPI、I2C、UART、以太网&#xff09;为什么偏偏使用USB呢? 原因有很多&#xff0c;如下&#xff1a; 1. 高速数据传输能力 高带宽&#xff1a;USB接口提供了较高的数据传…...

【Office-Word】如何自动生成中英文目录

1.目录介绍 Word这个自动生成目录非常强大&#xff0c;涉及的功能很琐碎&#xff0c;想要完美的生成目录不仅仅是只会目录这么简单&#xff0c;前后涉及到的大纲级别、目标样式和域代码等操作是比较头疼的。 下面就一步一步开始介绍 2.多级标题级别编号设置 目录想要设置好…...

Oracle删除重复数据保留其中一条

Oracle删除重复数据保留其中一条 在Oracle数据库中&#xff0c;要删除重复数据并保留其中一条记录&#xff0c;可以使用多种方法。这里介绍两种常见的方法&#xff1a;使用ROWID或使用ROW_NUMBER()窗口函数。 方法1&#xff1a;使用ROWID ROWID是Oracle中用来唯一标识表中每…...

CentOS 7 安装Nginx-1.26.3

无论安装啥工具、首先认准了就是官网。Nginx Nginx官网下载安装包 Windows下载&#xff1a; http://nginx.org/download/nginx-1.26.3.zipLinxu下载 wget http://nginx.org/download/nginx-1.26.3.tar.gzLinux安装Nginx-1.26.3 安装之前先安装Nginx依赖包、自行选择 yum -y i…...

家政预约小程序用例图分析

在和客户进行需求沟通的时候&#xff0c;除了使用常规的问答的形式&#xff0c;我还使用图形化工具更深入的沟通。比如借助UML的用例图来开展系统分析&#xff0c;并且按照角色详细拆解了家政预约小程序的各个用例。在分析阶段思考的越多&#xff0c;沟通的越多&#xff0c;在系…...

112页精品PPT | DeepSeek行业应用实践报告

这份文件是一份关于DeepSeek行业应用实践的报告&#xff0c;以PPT形式呈现&#xff0c;共112页&#xff0c;详细介绍了DeepSeek及其核心产品DeepSeek-R1的技术特点、市场表现、应用路径以及在多领域的实践案例。报告展示了DeepSeek在市场上的快速崛起&#xff0c;包括其日活用户…...

计算机毕业设计SpringBoot+Vue.js航空机票预定系统(源码+文档+PPT+讲解)

温馨提示&#xff1a;文末有 CSDN 平台官方提供的学长联系方式的名片&#xff01; 温馨提示&#xff1a;文末有 CSDN 平台官方提供的学长联系方式的名片&#xff01; 温馨提示&#xff1a;文末有 CSDN 平台官方提供的学长联系方式的名片&#xff01; 作者简介&#xff1a;Java领…...

C语言学习笔记-初阶(27)操作符详解1:位操作

1. 操作符的分类 上述的操作符&#xff0c;我们已经学过算术操作符、赋值操作符、逻辑操作符、条件操作符和部分的单目操作符&#xff0c;今天继续介绍⼀部分&#xff0c;操作符中有一些操作符和二进制有关系&#xff0c;我们先铺垫一下二进制的和进制转换的知识。 2. 二进制、…...

网络安全需要学多久才能入门?

网络安全是一个复杂且不断发展的领域&#xff0c;想要入行该领域&#xff0c;我们需要付出足够多的时间和精力好好学习相关知识&#xff0c;才可以获得一份不错的工作&#xff0c;那么网络安全需要学多久才能入门?我们通过这篇文章来了解一下。 学习网络安全的入门时间因个人的…...

20250304学习记录

第一部分&#xff0c;先来了解一下各种论文期刊吧&#xff0c;毕竟也是这把岁数了&#xff0c;还什么都不懂呢 国际期刊&#xff1a; EI收集的主要有两种&#xff0c; JA&#xff1a;EI源刊 CA&#xff1a;EI会议 CPCI也叫 ISTP 常说的SCI分区是指&#xff0c;JCR的一区、…...