学习使用DCMTK工具-程序员宅基地

技术标签: DCMTK  新出发 医疗相关  DICOM  

学习使用DCMTK工具

一、了解DICOM

1、DICOM语法

       DICOM维护一个所有标准属性(超过2000个)的列表,即所谓的DICOM数据字典(DICOM Data Dictionary)。DICOM依靠数据字典来保证属性命名和处理的一致性。

       把这些超过2000个的项目按照一定顺序排列,所有项目首先被分成编号的项目组(group)(如果项目内容的大概相似就分为一组)。项目组是由单独的元素组合在一起的。因此,每个项目都有其自己的编号“(项目组,元素)”,这就是所谓的元素“标签(tag)”。 所有进行标签的元素都称作“属性(attribute)”,或 者DICOM“数据元素(data element)” 或简称为DICOM“元素”。项目组和元素都是用十六进制数字编号的,“(项目组,元素)”标签唯一地对应属性名称。

摘录

(Group,Element) tag

(项目组,元素)标

Attribute(data element) name

属性(数据元素)名称

VR

VM

(0008,0001)

Length to End

到结尾的长度

 

 

(0008,0005)

Specific Character Set特定的字符集

CS

1-N

(0010,0010)

Patient Name

病人姓名

PN

 

(0010,0020)

Patient ID

病人ID

LO

1

(0010,0030)

Patient’s Birth Date

病人出生日期

DA

1

(0010,0032)

Patient’s Birth Time

病人出生时间

TM

1

 

 

 

 

 

VR:值表现,DICOM标准在PS 3.5中定义了27个基本数据类型,每个VR都有他自己两个字母的缩写;表示内容的定义;数据中允许出现的字母描述;以及规定的数据长度。

VM:数据元素值多样性。

 

2、DICOM服务命令

处理复合(composite)数据的DIMSE服务称作“DIMSE-C”服务;而处理常规数据的DIMSE服务称为“DIMSE-N”服务。“C”和“N”这种标记经常会作为服务名称的前缀,放在服务名称之前。

例子:

C-Echo:用来校验一个DICOM AE是否与另一个AE建立了连接。

C-Store:承载着要存储的数据。

C-Find:在C-Find服务提供者(如数字归档)那里进行匹配的查询参数。

C-Move:在服务者那边下载匹配参数的文档。

 

3、DICOM通信

       连接建立的两端都成为AE,为了区分服务请求者和服务提供者,DICOM称前者为服务类用户(Service Class Users,SCU),称后者为服务类提供者(Service Class Providers,SCP)。

       请求连接(呼叫)的AE建立并发送一个A-Associate-RQ消息,即向接收(被呼叫)的AE发出请求,要求其开启一个连接。这个消息由多个呈现上下文(我们的名片),以及附加的用户信息数据打包而成,其中用户信息数据描述了AE初始化连接的能力(用户所用的请求AE)。接收AE会查看所有建议的通讯参数,如果连接被接受,它会选择最合适的参数,并返回一个A-Assciate-AC消息。

 

二、了解DCMTK

1、DCMTK编译

http://blog.csdn.net/YiLooks/article/details/7867855

http://blog.csdn.net/ancewer/article/details/74408441

2、DCMTK工具介绍

scu -->  scp  发送dcm文件

scp: storescp.exe  104  –aet myaet

scu: storescu.exe 127.0.0.1 104 C:/DICOM/Source/CT1/CT.dcm

 

storescp.exe是Dcmtk工具包中用于接收DICOM影像并进行保存的服务端程序

-aet myaet中的aet为Application Entity Title

 

scu -->  scp  查询内容

scp: wlmscpfs.exe-dfr -dfp wlistdb 104

scu: findscu 127.0.0.1 104 wlistqry/wlistqry.wl -aec OFFIS

     findscu 192.168.1.7 4007 -aec "myonly" -v -k0008,0052="STUDY" query.dcm -S

         findscu.exe -v -W -k 0008,0060=DR -aecDicomworklist -X 127.0.0.1 3000 worklist.dcm

 

如果需要查多个值,只需要重复写-k 0008,0060=DR 这个参数,当然你需要查出来你所需要的属性所对应的两个4位码。

 

         -k 0010,0020="123456"   PatientID字段为123456的患者数据

        

       -dfr表接受字段不完整的DICOM文件作为查询内容;

 

      -dfpwlistdb 表wlmscpfs.exe搜索的文件夹的路径,可以为绝对路径;

 

      104  为工作列表程序的端口号;

 

scu -->  scp  下载内容

       movescu192.168.1.7 4008 -aec "myonly" -v -k0020,000d="1.2.840.113619.2.67.2158294438.15745010109084247.20000"move.dcm -S

 

 

3、模拟pacs实现上传下载

scp接受多项服务

D:\DCMTK\bin\dcmqrscp.exe -d --configdcmqrscp.cfg   

 

scu:测试是否能连接

D:\DCMTK\bin\echoscu.exe -d localhost 11110-aec ACME_STORE -aet ACME1

D:\DCMTK\bin\echoscu.exe -d 192.168.1.65104 -aec ACME_STORE

 

scu:传输dcm文件

D:\DCMTK\bin\storescu.exe -d localhost11110 D:\CT.dcm -aec ACME_STORE

scu:查询dcm文件

D:\DCMTK\bin\findscu.exe -d 127.0.0.1 11110-k QueryRetrieveLevel=STUDY -k 0010,0010 -k 0010,0020 -k 0020,0010 -aecACME_STORE -v -S

scu:下载

D:\DCMTK\bin\movescu.exe -d 192.168.1.65104 +P 5003 -aec ACME_STORE -k QueryRetrieveLevel=STUDY -k 0010,0020=7637 -odD:\DICOM\Worklist\

 

dcm -->  bmp  转换文件

dcm2pnm.exe +obCT.1.2.840.113704.9.4021.3.1.1.200927949440CT.1.2.840.113704.9.4021.3.1.1.200927949440.bmp

解析数据

dcmdump.exe D:\CT.dcm

 

dcmqrscp.cfg:

NetworkTCPPort  = 104

MaxPDUSize      = 16384

MaxAssociations =16

 

HostTable BEGIN

 

echoscu            = (ECHOSCU, ywu-PC, 5000)

findscu            = (FINDSCU, ywu-PC, 5001)

storescu           = (STORESCU, ywu-PC, 5002)

movescu             = (MOVESCU, ywu-PC, 5003)

acmeCTcompany   = echoscu, findscu, storescu, movescu

HostTable END

 

VendorTable BEGIN

"Acme CTCompany"   = acmeCTcompany

VendorTable END

 

AETable BEGIN

ACME_STORE    D:\DICOM\DcmScuScp   RW (9, 1024mb)   acmeCTcompany

AETable END

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/u014644870/article/details/79527014

智能推荐

oracle 12c 集群安装后的检查_12c查看crs状态-程序员宅基地

文章浏览阅读1.6k次。安装配置gi、安装数据库软件、dbca建库见下:http://blog.csdn.net/kadwf123/article/details/784299611、检查集群节点及状态:[root@rac2 ~]# olsnodes -srac1 Activerac2 Activerac3 Activerac4 Active[root@rac2 ~]_12c查看crs状态

解决jupyter notebook无法找到虚拟环境的问题_jupyter没有pytorch环境-程序员宅基地

文章浏览阅读1.3w次,点赞45次,收藏99次。我个人用的是anaconda3的一个python集成环境,自带jupyter notebook,但在我打开jupyter notebook界面后,却找不到对应的虚拟环境,原来是jupyter notebook只是通用于下载anaconda时自带的环境,其他环境要想使用必须手动下载一些库:1.首先进入到自己创建的虚拟环境(pytorch是虚拟环境的名字)activate pytorch2.在该环境下下载这个库conda install ipykernelconda install nb__jupyter没有pytorch环境

国内安装scoop的保姆教程_scoop-cn-程序员宅基地

文章浏览阅读5.2k次,点赞19次,收藏28次。选择scoop纯属意外,也是无奈,因为电脑用户被锁了管理员权限,所有exe安装程序都无法安装,只可以用绿色软件,最后被我发现scoop,省去了到处下载XXX绿色版的烦恼,当然scoop里需要管理员权限的软件也跟我无缘了(譬如everything)。推荐添加dorado这个bucket镜像,里面很多中文软件,但是部分国外的软件下载地址在github,可能无法下载。以上两个是官方bucket的国内镜像,所有软件建议优先从这里下载。上面可以看到很多bucket以及软件数。如果官网登陆不了可以试一下以下方式。_scoop-cn

Element ui colorpicker在Vue中的使用_vue el-color-picker-程序员宅基地

文章浏览阅读4.5k次,点赞2次,收藏3次。首先要有一个color-picker组件 <el-color-picker v-model="headcolor"></el-color-picker>在data里面data() { return {headcolor: ’ #278add ’ //这里可以选择一个默认的颜色} }然后在你想要改变颜色的地方用v-bind绑定就好了,例如:这里的:sty..._vue el-color-picker

迅为iTOP-4412精英版之烧写内核移植后的镜像_exynos 4412 刷机-程序员宅基地

文章浏览阅读640次。基于芯片日益增长的问题,所以内核开发者们引入了新的方法,就是在内核中只保留函数,而数据则不包含,由用户(应用程序员)自己把数据按照规定的格式编写,并放在约定的地方,为了不占用过多的内存,还要求数据以根精简的方式编写。boot启动时,传参给内核,告诉内核设备树文件和kernel的位置,内核启动时根据地址去找到设备树文件,再利用专用的编译器去反编译dtb文件,将dtb还原成数据结构,以供驱动的函数去调用。firmware是三星的一个固件的设备信息,因为找不到固件,所以内核启动不成功。_exynos 4412 刷机

Linux系统配置jdk_linux配置jdk-程序员宅基地

文章浏览阅读2w次,点赞24次,收藏42次。Linux系统配置jdkLinux学习教程,Linux入门教程(超详细)_linux配置jdk

随便推点

matlab(4):特殊符号的输入_matlab微米怎么输入-程序员宅基地

文章浏览阅读3.3k次,点赞5次,收藏19次。xlabel('\delta');ylabel('AUC');具体符号的对照表参照下图:_matlab微米怎么输入

C语言程序设计-文件(打开与关闭、顺序、二进制读写)-程序员宅基地

文章浏览阅读119次。顺序读写指的是按照文件中数据的顺序进行读取或写入。对于文本文件,可以使用fgets、fputs、fscanf、fprintf等函数进行顺序读写。在C语言中,对文件的操作通常涉及文件的打开、读写以及关闭。文件的打开使用fopen函数,而关闭则使用fclose函数。在C语言中,可以使用fread和fwrite函数进行二进制读写。‍ Biaoge 于2024-03-09 23:51发布 阅读量:7 ️文章类型:【 C语言程序设计 】在C语言中,用于打开文件的函数是____,用于关闭文件的函数是____。

Touchdesigner自学笔记之三_touchdesigner怎么让一个模型跟着鼠标移动-程序员宅基地

文章浏览阅读3.4k次,点赞2次,收藏13次。跟随鼠标移动的粒子以grid(SOP)为partical(SOP)的资源模板,调整后连接【Geo组合+point spirit(MAT)】,在连接【feedback组合】适当调整。影响粒子动态的节点【metaball(SOP)+force(SOP)】添加mouse in(CHOP)鼠标位置到metaball的坐标,实现鼠标影响。..._touchdesigner怎么让一个模型跟着鼠标移动

【附源码】基于java的校园停车场管理系统的设计与实现61m0e9计算机毕设SSM_基于java技术的停车场管理系统实现与设计-程序员宅基地

文章浏览阅读178次。项目运行环境配置:Jdk1.8 + Tomcat7.0 + Mysql + HBuilderX(Webstorm也行)+ Eclispe(IntelliJ IDEA,Eclispe,MyEclispe,Sts都支持)。项目技术:Springboot + mybatis + Maven +mysql5.7或8.0+html+css+js等等组成,B/S模式 + Maven管理等等。环境需要1.运行环境:最好是java jdk 1.8,我们在这个平台上运行的。其他版本理论上也可以。_基于java技术的停车场管理系统实现与设计

Android系统播放器MediaPlayer源码分析_android多媒体播放源码分析 时序图-程序员宅基地

文章浏览阅读3.5k次。前言对于MediaPlayer播放器的源码分析内容相对来说比较多,会从Java-&amp;amp;gt;Jni-&amp;amp;gt;C/C++慢慢分析,后面会慢慢更新。另外,博客只作为自己学习记录的一种方式,对于其他的不过多的评论。MediaPlayerDemopublic class MainActivity extends AppCompatActivity implements SurfaceHolder.Cal..._android多媒体播放源码分析 时序图

java 数据结构与算法 ——快速排序法-程序员宅基地

文章浏览阅读2.4k次,点赞41次,收藏13次。java 数据结构与算法 ——快速排序法_快速排序法