1

我正在尝试来自pynetdicom的查询/检索示例 (qrscu.py),但在我们搜索时它与患者姓名配合得很好。但是我需要根据studyDate和studyTime来搜索study。

注意:这里有一些DICOM 的 SOP可用。所以我尝试使用StudyRootFindSOPClass

我尝试使用:

print "DICOM FindSCU ... ",
d = Dataset()
d.StudyDate = args.searchstring
d.QueryRetrieveLevel = "STUDY"
d.StudyID = "*"
study = [x[1] for x in assoc.StudyRootFindSOPClass.SCU(d, 1)][:-1]
print 'done with status "%s"' % st
print "\n\n\n Cont...", study

但它给出了错误

Request association
Association response received
DICOM Echo ...  done with status "Success "
DICOM FindSCU ... 
Traceback (most recent call last):
  File "studyqrscu.py", line 104, in <module>
    study = [x[1] for x in assoc.StudyRootFindSOPClass.SCU(d, 1)][:-1]
  File "/usr/local/lib/python2.7/dist-packages/pynetdicom-0.8.1-py2.7.egg/netdicom/applicationentity.py", line 90, in __getattr__
    raise Exception("SOP Class %s not supported as SCU" % attr)
Exception: SOP Class StudyRootFindSOPClass not supported as SCU

请帮助我使用研究日期和时间获取研究。

4

1 回答 1

1

我对 python 和您使用的特定 DICOM 工具包都不是很熟悉。我敢回答,因为异常似乎很清楚——该工具包似乎不支持 Study Root Query Information 模型。

DICOM 查询有四种类型,称为信息模型:

  • 模态工作清单(那是另一回事)
  • 患者根
  • 学习根
  • 仅限患者研究(在商业产品中不太受欢迎,已退役)

来源:DICOM PS3.4

顾名思义,Patient- 和 Study Root 的区别在于您在后续查询中开始向下搜索层次结构(Patient -> Study -> Series -> Image)的根元素是什么。患者根从患者级别开始,因此您首先在患者级别搜索标准并获得患者级别结果。使用从结果中获得的患者 ID,您可以进入研究级别以查询特定患者的研究。

Study Root 将患者级别属性视为次要研究属性,即您正在请求研究并且您收到每个研究属于每个研究的患者的属性(这意味着您可能会为不同的研究接收相同的患者两次,这会产生差异到患者根)。

我同意研究根是您想要为您的用例提供的,但不幸的是,您使用的工具包显然只支持患者根。根据错误消息,这是客户端(SCU)方面的问题,所以 dcm4chee 不是罪魁祸首。

如何解决这个问题?

您可能会发现支持 StudyRoot 的不同工具包。实际上,对我来说,Study Root 支持的缺失让我对实际使用的适用性产生了疑问。

您可能想采取肮脏的方式并尝试在 Patient Root中形成一个不符合 DICOM的查询,如下所示:

 - Q/R-Level = "STUDY"
 - Patient-ID = "*" or empty
 - Study Date = <your date range>

这很有可能会起作用,但是请记住,它不符合 DICOM,因此它取决于 SCP 实施,并且可能因不同产品而异。

为了完整起见:您可以在患者级别上进行查询,并为收到的每位患者在研究级别上进行后续查询,将患者 ID 和您的研究日期范围作为匹配标准。值得一提的是,这将因性能问题而失败,但这将是解决问题的 DICOM 一致性方法。

于 2016-08-12T06:20:36.210 回答