本文由Markdown语法编辑器编辑完成。

1. 问题提出:

近日在运用C-Find从PACS服务器拉取数据的时候,发现同样的代码,在拉取跨越午夜的数据时,出现了拉取不到数据的问题。举个例子:
比如医院在2019-06-13 23:00:00,新产生了一个检查数据。而我通过C-Find要拉取数据时,C-Find的指令如下:
./bin/dcmtk3.6.3/findscu --study -aet TEST -aec DCM4CHEE -v 127.0.0.1 11112 -k 08,52=STUDY -k StudyInstanceUID= -k StudyDate=20190613-20190614 -k StudyTime=180000-080000.
根据C-Find的指令,释义应该是:
查询STUDY级别,2019-06-13 18:00:00 ~ 2019-06-14 08:00:00这14个小时范围内的数据。那么23:00:00是在这个查询时间范围内的,应该能够查询到这个检查。
但是,实际上,在terminal中执行这条指令后,却并没有查询到期望的记录。

2. dicom标准说明:

当遇到类似的问题时,最好的办法当然是去读dicom的相关标准了。因此,通过在网上用相应的关键词搜索,得到了关于findscu,在运用StudyDate和StudyTime参数进行查找时的一些说明,具体的网页链接如下所示:
http://dicom.nema.org/medical/dicom/current/output/chtml/part04/sect_C.2.2.2.5.html
摘录一些关键的内容如下:

C.2.2.2.5.2 Range Matching of Attributes of VT of TM
All comparison specified in the following shall be based on a direct comparison of times within a day. “Prior” includes all times starting from midnight of the same day to the specified time. “Subsequent” includes all times starting with the specified time until any time prior to midnight of the following day. Range matching crossing midnight is not supported.
No offset from Universal Coordinated Time is permitted in the TM VR values. If Timezone Offset From UTC (0008,0201) is present in the query identifier, the specified time values and the definition of midnight are in the specified timezone.
上文中加粗的部分是重点,意思是:以下定义的所有的时间的比较,应该是基于一天内的时间比较。时间范围如果跨越午夜是不被支持的。

当读完该内容后,就知道为什么跨越午夜是查找不到图像的。
但是,如果在实际运行环境中,必然会出现跨越午夜的情况,应该怎么办呢?那就是,人为地将时间拆成两个时间段。
比如:2019-06-13 18:00:00 ~ 2019-06-14 08:00:00,我可以将这个区间区分为两个阶段:
阶段一:2019-06-13 18:00:00~23:59:59;
阶段二:2019-06-14 00:00:00~08:00:00.

如果查询的时间不仅跨越午夜,还跨一个整天以上,则可以将时间拆分为三段来处理:
比如:2019-06-11 18:00:00 ~ 2019-06-14 08:00:00,可以拆分为:
阶段一:2019-06-11 18:00:00~23:59:59
阶段二:2019-06-12 ~ 2019-06-13 (这是两个整天,不需要studyTime)
阶段三:2019-06-14 00:00:00~08:00:00

3. 解决方案:


from datetime import timedeltadef days_between(d1, d2):""":param 年-月-日 d1:param 年-月-日 d2return: 返回两个天数的差异 type int"""d1 = datetime.strptime(d1, "%Y-%m-%d")d2 = datetime.strptime(d2, "%Y-%m-%d")return abs((d2 - d1).days)# 注:findscu()是一个封装好的函数,主要是用于实现dicom的cfind指令。由于这里是查询检查,因此在findscu时,query_level需要设置为"08,52=STUDY", 查询后返回的数据模型,也是"--study"级别.因此实际运行时的指令为:./dcmtk3.6.3/findscu --study -aet TEST -aec DCM4CHEE -v 127.0.0.1 11112 -k 08,52=STUDY -k StudyInstanceUID=  -k StudyDate=20190613-20190614 -k StudyTime=180000-080000.
# 关于findscu的详细参数,见链接:https://support.dcmtk.org/docs/findscu.html
def findStudyUIDByDateTime(start, end):#start, end为传入的查询区间的时间值.extract_keys = ['StudyInstanceUID']   results = list()if int(start.strftime('%Y%m%d')) == int(end.strftime('%Y%m%d')):results = findscu({'StudyInstanceUID': '','StudyDate':start.strftime('%Y%m%d') + '-' + end.strftime('%Y%m%d'),'StudyTime':start.strftime('%H%M%S') + '-' + end.strftime('%H%M%S'),}, extract_keys)elif int(start.strftime('%Y%m%d')) < int(end.strftime('%Y%m%d')):studyTime_before_midnight = start.strftime('%H%M%S') + '-' + '235959'studyTime_after_midnight = '000000' + '-' + end.strftime('%H%M%S')results_yesterday = findscu({'StudyInstanceUID': '','StudyDate': start.strftime('%Y%m%d'),'StudyTime': studyTime_before_midnight,}, extract_keys)results_today = findscu({'StudyInstanceUID': '','StudyDate': end.strftime('%Y%m%d'),'StudyTime': studyTime_after_midnight,}, extract_keys)date_interval = days_between(start.strftime('%Y-%m-%d'), end.strftime('%Y-%m-%d')) - 1results_interval = list()if date_interval > 0:interval_start = start + timedelta(days=1)interval_end = end - timedelta(days=1)results_interval = findscu({'StudyInstanceUID': '','StudyDate': interval_start.strftime('%Y%m%d') + '-' +interval_end.strftime('%Y%m%d'),}, extract_keys)results = results_yesterday + results_today + results_intervalstudyInfo_list = \[studyInfo(study_uid=result['StudyInstanceUID'])for result in results]

参考链接:

DICOM标准:Query/Retrieve Service Class: Range Matching.
http://dicom.nema.org/medical/dicom/current/output/chtml/part04/sect_C.2.2.2.5.html
Findscu指令:
https://support.dcmtk.org/docs/findscu.html

DICOM标准中关于C-Find,运用StudyTime进行查找时无法查找到数据的问题相关推荐

  1. 【转】000.DICOM:DICOM标准学习路线图(初稿)!!!!!!!!!!!!

    转自:https://zssure.blog.csdn.net/article/details/49231303 题记: DICOM医学图像处理专栏撰写已有两个年头,积累了近百篇文章. 起初 只是用于 ...

  2. DICOM:DICOM标准学习路线图(初稿)

    题记: DICOM医学图像处理专栏撰写已有两个年头,积累了近百篇文章. 起初 只是用于记录自己科研.工作中遇到的疑难问题,专注于图像处理(主要是医学图像,这也正是专栏名称最初的由来):后来逐渐延伸到了 ...

  3. DICOM标准及应用——第一讲 DICOM标准概述

    一 什么是DICOM? DICOM是Digital Imaging and COmmunication of Medicine的缩写,是美国放射学会(American College of Radio ...

  4. 【转】dicom通讯的工作方式及dicom标准简介!!

    转自:dicom通讯的工作方式及dicom标准简介 - assassinx - 博客园 本文主要讲述dicom标准及dicom通讯的工作方式.dicom全称医学数字图像与通讯 其实嘛就两个方面 那就是 ...

  5. [医疗信息化][DICOM教程]DICOM标准简介

    [医疗信息化][DICOM教程]DICOM标准简介 使用OsiriX的DICOM标准简介 内容 介绍 什么是DICOM 医院系统内的图像传输 了解DICOM服务 OsiriX提供的DICOM服务 其他 ...

  6. dicom通讯的工作方式及dicom标准简介

    转自:http://www.cnblogs.com/assassinx/p/3223460.html 本文主要讲述dicom标准及dicom通讯的工作方式.dicom全称医学数字图像与通讯 其实嘛就两 ...

  7. 医学数字影像和通讯(DICOM)---DICOM标准3.0 第一部分:介绍和概述

    前言 ACR(美国放射学会)和NAMA(国家电子制造商协会)组成了一个联合委员会来开发一个医学数字成像和通讯的标准----DICOM.这个标准按照NEMA的程序制定. 这个标准通过与其他标准化组织的交 ...

  8. DICOM协议中有关打印的内容

    打印管理服务类 H.1 范围 打印管理服务类定义了应用级的服务类,此类简化了在硬拷贝介质上图像和图像相关数据的打印. H.2 打印管理模型 H.2.1 打印管理数据流程模型 H.2.1.1 全局数据流 ...

  9. 视频采集-非DICOM影像设备转DICOM标准的解决方案

    现在大多数影像设备都支持DICOM标准了,好多医院都在建设PACS,也有的为了使用干式DICOM像机而需要改造不支持DICOM的影像设备,用我的医网联影像工作站3.0(ProDicom Worksta ...

最新文章

  1. 在C#中使用代理的方式触发事件 (委托和事件 ) (转)
  2. 网站收录上不去估计是这几个方面出了问题
  3. 修改UISearchBar背景
  4. intellij idea 2018 license 可用无废话
  5. 新增字段赋值_微服务】155:商品新增业务(完)
  6. VS11在Win8上的Metro应用
  7. jzoj3462-休息【归并排序,逆序对】
  8. 同包类 和 其他类 java_关于继承:为什么Java中的“protected”修饰符允许访问同一个包中的其他类?...
  9. DRILLNET 2.0------第十八章 起下钻水力参数计算模型
  10. Activity与Fragment间的通信
  11. 批处理bat命令快速截图
  12. MySQL图形化管理工具
  13. Windows下安装Ruby及配置镜像源
  14. XeLaTeX-中文排版解决方案
  15. html5shiv不起作用,HTML5shiv不会对IE8
  16. Selenium + C# 实现模拟百度贴吧签到 1
  17. C语言求三角形斜边长
  18. 科技爱好者周刊(第 108 期):阵地战与奇袭战
  19. 一个简单的OPPO商城页面
  20. English--五大基本句型基本概念

热门文章

  1. Genome Assembly as Shortest Superstring
  2. 什么是集群?集群分为哪几类?
  3. 原生js实现九宫格抽奖
  4. 加州大学圣克鲁兹分校计算机科学,加州大学圣克鲁兹分校专业设置详细介绍!...
  5. 2021-2027全球与中国物联网网关设备市场现状及未来发展趋势
  6. 孙俪邓超港籍身份曝光揭明星卯足劲加入港籍
  7. UCanCode发布领先的大型组态建模仿真CAD与GIS开源套件2019版本
  8. 无需破解,官网安装Visual Studio 2013社区版
  9. 如何使用Tableau进行预测分析
  10. 软件测试基础知识大全【乐搏TestPRO】