背景:
前段时间着重从dcmtk和fo-dicom(mDCM)源码角度进行剖析,期望加深对DICOM协议的理解。知其然,知其所以然。如果“所以然”很不好懂,那我们还是先多多“知其然”吧。搞清楚原理的目的不也是为了更好的运用于实践么?所以理论和实践应该彼此交错进行,理论搞不动了就搞搞应用,应用久了就钻研钻研理论。
以前上DCMTK官网仅仅是浏览关于开源库中各个类的设计模式、依赖关系。最近在打开DCMTK官网的wiki时,才发现OFFIS对DCMTK的介绍是如此的详细。正值国庆假日,就不深挖DCMTK源码了,那就按照DCMTK wiki中给出的介绍来实际体验分析一下DCMTK,从实践角度来学习一下。
PACSDebugging with DCMTK
前几篇博文分别介绍了worklist查询服务(DICOM医学图像处理:基于DCMTK工具包学习和分析worklist、DICOM医学图像处理:利用fo-dicom发送C-Find查询Worklist)、C-STORE服务(DICOM医学图像处理:storescp.exe与storescu.exe源码剖析,学习C-STORE请求、DICOM医学图形处理:storescp.exe与storescu.exe源码剖析,学习C-STORE请求(续))和C-MOVE服务(DICOM医学图像处理:AETitle在C-FIND和C-MOVE请求中的设置问题)。此次参考wiki中的说明利用DCMTK中的工具来讲解一下如何调试PACS系统。
下文中会用到的工具有以下两类
服务端 |
dcmqrscp |
客户端 |
echoscu、storescu、findscu、movescu |
PACS是什么?在DICOM标准中并没有明确的定义,DICOM协议大多是通过定义SOP来描述相关网络服务。但是几乎每一个PACS系统会包含以下几种SOP类,
Verification SOP Class |
又称为DICOM ECHO服务,用于查明网络对端系统(即PACS)是否符合DICOM标准(即talks DICOM),以便双方按照DICOM标准进行对话。 |
Storage SOP Classes |
将一个或多个DICOM对象存储到PACS服务器。一个PACS系统往往需要支持多种Storage SOP Classes,用以存储不同设备的图像数据(如CT、US、MR等)。 |
Query SOP Classes |
根据指定的关键字查询PACS数据库。但是并不下载图像,仅仅是查询图像有关的信息。 |
Retrieve SOP Classes |
根据Query SOP Classes的结果找到目标图像后,利用Retrieve SOP Classes服务从PACS服务器下载图像到本地。 |
Storage Commitment SOP Classes |
客户通过该服务确认PACS服务端已经成功完成了图像的归档。 |
因此可以简单的理解为PACS就是提供了上述多种服务的服务端。在DCMTK工具包中给我们提供了一个PACS模拟工具——dcmqrscp,该工具提供了上表中的所有服务(Storage Commitment SOP Classes除外,该部分并未包含在DCMTK开源包中,而需要购买商用版本)。
下面就利用dcmqrscp与其他的dcmtk工具来模拟调试一下客户端与