4

我正在使用 PyNetDicom 从 PACS 服务器下载(C-MOVE)图像。我已经实现了一个向 PACS 发送 C-MOVE 请求的 SCU,以及一个接收 C-STORE 请求的 SCP。

我下载整个研究,这意味着一次有几千张 DICOM 图像。由于某种原因,我没有收到其中一些。我从 C-MOVE 请求中得到的响应显示了成功发送的图像数量和失败的图像数量(以及正在进行的数量,以及任何警告)。

我不仅想知道有多少失败,还想知道哪些失败,这意味着我想获得失败的 SOP 实例 UID 列表。这是我的代码的相关部分:

# Not shown: Implementation of association (assoc) and making a dataset to query PACS (query_dataset)
responses = assoc.send_c_move(query_dataset, b'NAME_OF_STORAGE_SCP', StudyRootQueryRetrieveInformationModelMove)

for (status, identifier) in responses: 
    # This works
    remaining_operations = status.NumberOfRemainingOperations
    completed_operations = status.NumberOfCompletedOperations
    failed_operations = status.NumberOfFailedOperations
    warning_operations = status.NumberOfWarningOperations

    if identifier: 
        failed_UID_list = identifier.FailedSOPInstanceUIDList   # This does not work

这不起作用,标识符始终 None为,即使status.Status显示操作失败。我做错了什么,还是我关联的 PACS 不符合 DICOM?

4

1 回答 1

3

当您充当 C-MOVE SCU 时,无法获取失败实例的标识符(SOP 实例 UID)。

  1. 您可以使用 C-MOVE SCP 单独获取详细信息/日志(从 DICOM 中获取)。
  2. 如果故障发生在您的C-STORE SCP 上,请检查那里的日志或详细信息。如果故障发生在 C-STORE SCU(其他系统)上,这可能没有帮助,您需要再次使用它们。

不完全是一个解决方案,但您可以在 C-MOVE 之前执行 SERIES 级别查询 (C-FIND) 并获取NumberOfSeriesRelatedInstances要提前提取的实例数 ()。但这只是一个计数;不是标识符。STUDY 和 PATIENT 级别的查询也是如此。

在这种情况下,存储承诺可能没有用,因为您的系统上不存在实例;你不知道标识符。

使用 IMAGE 级别查询 (C-FIND),您可以传递系列实例 UID 并获取该系列的实例列表。但是,我遇到了一些也强制 SOP Instance UID 的系统。如果您的情况下的其他系统支持此功能,您可以执行以下操作:

  • 逐步进行患者、研究、系列和图像级别查询 (C-FIND)。您可以参考这个答案以获取更多详细信息。
  • 将输出存储在某处(内存列表或数据库或其他)。
  • 执行常规 C-MOVE 并将收到的实例与存储的列表进行比较。无论缺少什么,都是您要查找的列表。

要回答您的评论:

我错过了Failed SOP Instance UID List (0008,0058)标签。

C.4.2.1.4.2 响应标识符结构
失败的 SOP 实例 UID 列表 (0008,0058) 指定 C-MOVE 操作失败的 C-STORE 子操作 SOP 实例的 UID 列表。C-MOVE 响应中的标识符应有条件地包含基于 C-MOVE 响应状态值的失败 SOP 实例 UID 列表 (0008,0058)。如果没有 C-STORE 子操作失败,失败的 SOP 实例 UID 列表 (0008,0058) 不存在,因此不应在 C-MOVE 响应中发送数据集。
参考:DICOM PS3.4 2020e - 服务等级规范

看来它应该做你的工作。但坦率地说,我从未遇到(或没有注意到)发送此类失败实例列表的 C-MOVE SCP。从您的代码中,您也没有收到数据。我会建议不要依赖它。

于 2020-12-22T04:40:48.330 回答