DICOM的Worklist服务
看 DICOM 标准有一段时间了,前面几篇也介绍了一下 DIMSE-C 消息服务,具体参看Dicom 学习笔记-Dicom 消息服务(DIMSE-C/DIMSE-N),本文就介绍一下 DICOM 标准中的一个重要服务- Worklist 服务。
Worklist 服务简介
首先来看一下 DICOM 标准中的说明:
A worklist is the structure to present information related to a particular set of tasks. It specifies particular details for each task. The information supports the selection of the task to be performed first, and supports the performance of that task.
意思是 Worklist 是呈现与特定任务组相关信息的结构。它指定每个任务的具体细节。这个信息支持首先要执行的任务的选择,并支持该任务的执行。
这样理解起来感觉很困难,那么我们根据实际场景来一步一步的讲解这个服务具体是干什么的。我们就以医院拍片(DR)的场景来讲,临床医生给患者开具处方单(DR 检查)后,患者拿着就诊卡和这张处方单到达放射科,先要去登记处登记,登记的这个过程是将患者的信息录入到 RIS 系统,通过就诊卡卡号从 HIS 系统中获取患者信息,然后患者就到候诊区等待叫号,检查设备通过 Worklist 服务从工作流系统获取待检查列表,然后通过叫号系统呼叫患者进行检查。Worklist 服务在这里的作用是避免检查技师在设备上手动输入患者的信息,避免了信息输入错误的情况,同时减少了技师的工作量。
Worklist 的流程图如下:
Worklist 请求
Worklist 其实就是一个 C-Find 请求,不过这个 C-Find 请求指定了 SOP Class UID 为 【1.2.840.10008.5.1.4.31】,这个 SOP Class 就指定了当前的 C-Find 请求是查询 Worklist,下图是 Worklist 信息模型的实体关系图
有关 Worklist 请求的参数构造可详见 DICOM 标准 PS 3.4 中 Table K.6-1. Attributes for the Modality Worklist Information Model(P219),这里面定义了必填和可选参数:
- Scheduled Procedure Step Model 中,必需的参数有 :
- ScheduledProcedureStepSequence(0040,0100),这个 TAG 里面必填的 TAG 有:
1.1 设备的 AE Title【Scheduled Station AE Title(0040,0001)】;
1.2 计划程序步骤的开始日期和开始时间【Scheduled Procedure Step Start Date(0040,0002)、Scheduled Procedure Step Start Time(0040,0003)】;
1.3 设备【Modality(0008,0060)】(DR、CT etc.);
1.4 执行医师名称【Scheduled Performing Physician's Name(0040,0006)】;
- Patient Identification 中,有两个参数必需:
- 患者姓名【Patient's Name(0010,0010)】;
- 患者 ID【Patient ID(0010,0020)】;
其他的参数均为可选参数。
在实际查询中,这些必需的参数也可以做模糊匹配查询,具体匹配的规则有设备方和 Worklist SCP 方互相定义遵循即可;
在实际场景中,有指定查询某一个患者的,即传准确的患者姓名和患者 ID,Scheduled Procedure Step Model 做模糊匹配;有通过Scheduled Procedure Step Start Date 和 Scheduled Procedure Step Start Time 结合设备的 AE Title 查询的;还有通过 Scheduled Procedure Step Start Date 和 Scheduled Procedure Step Start Time 结合 Modality 或执行医师名称查询的,具体可以参看下图:
Worklist SCU
结合开源 DICOM 库 fo-dicom 可以非常容易的构造一个 Worklist SCU,fo-dicom 已经在 DicomCFindRequest.cs 中封装好了创建查询 Worklist 的条件,只需要如下的代码即可实现 Worklist SCU。
using Dicom.Network;
using System;
using System.Collections.Generic;
var worklistItems = new List<DicomDataset>();
var cfind = DicomCFindRequest.CreateWorklistQuery(); // no filter, so query all awailable entries
cfind.OnResponseReceived = (DicomCFindRequest rq, DicomCFindResponse rp) =>
{
var dicomDataset = rp.Dataset;
if (dicomDataset != null)
{
Console.WriteLine("Study UID: {0}", dicomDataset.GetSingleValue<string>(DicomTag.StudyInstanceUID));
worklistItems.Add(rp.Dataset);
}
};
var client = new DicomClient();
client.AddRequest(cfind);
client.SendAsync(serverIP, serverPort, false, clientAET, serverAET).GetAwaiter().GetResult();
return worklistItems;
Worklist SCP
Worklist SCP 其实就是一个 C-Find SCP,可以通过派生 DicomService 服务类来实现 Dicom 服务的基本框架,然后实现 IDicomServiceProvider 和 IDicomCFindProvider 接口来实现,但要注意的是在实现 IDicomServiceProvider 接口的 OnReceiveAssociationRequestAsync 方法时需要根据请求发送的 SOP Class UID 过滤,只有值为【1.2.840.10008.5.1.4.31】的请求才同意在建立 Association 连接后接受 C-Find 请求。具体代码可以参考这里。
Worklist 过程分析
Worklist 请求的交互过程和 C-Find 请求的一样,都是先通过 A-Associate 请求建立 Association 连接,然后发送 C-Find 请求,最后通过 A-Release 请求释放 Association 连接。我主要介绍一下它们的区别,一个最主要的区别就是请求中传输的 Affected SOP Class UID 不一样,普通 C-Find 请求中根据查询的层级 Affected SOP Class UID 分为患者级【Patient Root Query Retrieve Information Model FIND(1.2.840.10008.5.1.4.1.2.1.1)】和检查级【1.2.840.10008.5.1.4.1.2.2.1(Study Root Query Retrieve Information Model FIND)】,而 Worklist 请求中 C-Find 请求的 Affected SOP Class UID 是【Modality Worklist Information Model FIND(1.2.840.10008.5.1.4.31)】,详见下图:
作者:Statmoon
链接:https://www.jianshu.com/p/2bc57d1bc0cb
来源:简书
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。
DICOM的Worklist服务的更多相关文章
- DICOM:C-GET服务
背景: 之前博文对照过多次C-MOVE与C-GET服务的差别,两者最大的差别在于C-GET是基于单个TCP连接的点对点的双方服务.而C-MOVE是基于两个TCP连接的三方服务(详情參见:<DIC ...
- DICOM worklist工作原理
一.关于Worklist 在RIS与PACS的系统集成中.Wordlist的连接为其主要工作之一.Wordlist成像设备工作列表,它是DICOM协议中众多服务类别中的一个.它的功能是实现设备操作台与 ...
- DICOM医学图像处理:Orthanc Plugin SDK实现WADO服务
背景: Orthanc是博主发现的一个很完美的DICOM和HTTP服务端开源软件,前几篇分别介绍了Orthanc的基本使用.Orthanc从0.8.0版本之后给出了Plugin SDK,通过该SDK可 ...
- DICOM医学图像处理:storescp.exe与storescu.exe源码剖析,学习C-STORE请求
转载:http://blog.csdn.net/zssureqh/article/details/39213817 背景: 上一篇专栏博文中针对PACS终端(或设备终端,如CT设备)与RIS系统之间w ...
- DICOM:DICOM3.0网络通信协议(续)
转载:http://blog.csdn.net/zssureqh/article/details/44278693 题记: 近一年来一直坚持周末写博客,整理工作和闲暇之余的点点滴滴.对于新知识点.新技 ...
- DICOM:DICOM3.0网络通信协议
转载:http://blog.csdn.net/zssureqh/article/details/41016091 背景: 专栏取名为DICOM医学图像处理原因是:博主是从医学图像处理算法研究时开始接 ...
- DICOM医学图像处理:DIMSE消息发送与接收“大同小异”之DCMTK fo-dicom mDCM
背景: 从DICOM网络传输一文开始,相继介绍了C-ECHO.C-FIND.C-STORE.C-MOVE等DIMSE-C服务的简单实现,博文中的代码给出的实例都是基于fo-dicom库来实现的,原因只 ...
- DICOM:DICOM3.0网络通信协议(延续)
题记: 在过去的一年中一直坚持周末博客,整理工作与休闲比的点点滴滴. 新知识点.新技术的涉猎会单独成文,对于与DICOM相关的知识统一放在了DICOM医学图像处理 专栏里,事实上DICOM英文全称是D ...
- DICOM医学图像处理:WEB PACS初谈四,PHP DICOM Class
背景: 预告了好久的几篇专栏博文一直没有整理好,主要原因是早前希望搭建的WML服务器计划遇到了问题.起初以为参照DCMTK的官方文档wwwapp.txt结合前两天搭建的WAMP服务器可以顺利的实现WM ...
随机推荐
- 【代码学习】PYTHON 函数
一.定义函数 def 函数名(): 代码 二.函数调用 #定义函数 def printme(str): print str return #调用函数 printme("SQYY1" ...
- 解决mysql和navicat乱码问题
1,首先进入mysql的my.ini文件,进行编码修改,全部改成utf8编码(这里就不赘述了,网上一搜一堆) 2,最重要的一点,把原先navicat创建的连接断开,重新创建新连接,在该新连接下创建库, ...
- 搭建一个ssm框架的maven项目需要配置的文件
单独功能需要的配置文件: 1,mybatis配置文件 mybatis-config.xml2,spring配置文件 spring-context.xml ......3,we ...
- linux Shell(待学)
2. Shell 2.1 简介 shell脚本执行方式Shell 是一个用 C 语言编写的程序,通过 Shell 用户可以访问操作系统内核服务.它类似于 DOS 下的 command 和后来的 cmd ...
- 刷题62. Unique Paths
一.题目说明 题目62. Unique Paths,在一个m*n矩阵中,求从左上角Start到右下角Finish所有路径.其中每次只能向下.向右移动.难度是Medium! 二.我的解答 这个题目读读题 ...
- Day11 - Q - A Multiplication Game HDU - 1517
题目链接 本题很像bash博弈,但又有些许不同,因为这里是乘法,我们可以列出前几项可能 若n=2-9,那么first可以一次取完 若n=10-18,无论first怎么取,second都能一次取完 若n ...
- 【网摘自CSDN网站】当文本内容过多,展开更多 (css控制,)
<div class="more"><p class="btn">显示全部内容</p></div> .more ...
- nginx 的提升多个小文件访问的性能模块
阿里开源的第三方模块下载地址:https://github.com/alibaba/nginx-http-concat 下载模块 git clone https://github.com/alibab ...
- HDU1029 简单DP
"OK, you are not too bad, em... But you can never pass the next test." feng5166 says. &quo ...
- Spring Boot + MyBatis + PostgreSql
Maven构建项目 1.访问http://start.spring.io/ 2.选择构建工具Maven Project.Spring Boot版本1.3.6以及一些工程基本信息,点击“Switch t ...