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 ...
随机推荐
- HTML 入门第一课
HTML 简单认识 HTML(HyperText Markup Language)即超文本标记语言,是一种用来制作超文本文档的简单标记语言,也是制作网页的最基本的语言,它可以直接由浏览器执行. 1.H ...
- ANSYS 瞬态热分析---零件在水中冷却
目录 1. 案例 2. APDL分析 1. 案例 一个温度为300℃的铜环和一个温度为200℃的铁环,放置到22℃的水中进行淬火.水桶为铁质的圆形.分析中忽略水的流动. 材料参数 热性能 铜 铁 水 ...
- CF908D 【New Year and Arbitrary Arrangement】
蒟蒻渣渣禹小心翼翼发布题解.... 这道题,嗯,期望,dp,好,我们有思路了.... however, 主要问题在于字符串无限延伸,so,我们需要考虑记录前缀的关键量来为DP设置终止状态. 我们不妨设 ...
- 【SSM 下载】下载文件
111111111 /** * 导出客户数据 */ @RequestMapping("exportCustomer") public ResponseEntity<Objec ...
- PSP第二次总结
项目计划总结: 姓名:李志强 日期:2017/12/06 听课 编程 阅读课本 准备考试 日总计 周日11.26 周一 100 100 周二 ...
- 一次从Github向Gitee迁库踩坑记录
先上结论:gitee的lfs功能收费,直接从github迁移包含lfs管理的文件会出错,配置lfs.url即可解决问题 Q: 为什么要迁库呢? A: github访问太慢了,不然我也不想费这个功夫! ...
- Ubuntu将Python3软连接到Python
sudo ln -s /usr/bin/python3 /usr/bin/python
- 吴裕雄--天生自然PythonDjangoWeb企业开发:解决Pythonno module named "XX"问题
在项目中加入 sys.path.append('你的django项目路径') sys.path.append('python的site-packages路径')
- 吴裕雄 Bootstrap 前端框架开发——Bootstrap 排版:引导主体副本
<!DOCTYPE html> <html> <head> <meta charset="utf-8"> <title> ...
- leetcode #980 不同路径||| (java)
在二维网格 grid 上,有 4 种类型的方格: 1 表示起始方格.且只有一个起始方格.2 表示结束方格,且只有一个结束方格.0 表示我们可以走过的空方格.-1 表示我们无法跨越的障碍.返回在四个方向 ...