【问题标题】:How does the SCU receive dcm images from Dicom Server with C-GET?SCU 如何使用 C-GET 从 Dicom Server 接收 dcm 图像?
【发布时间】:2020-02-21 08:55:19
【问题描述】:

我已经看过官方的 pynetdicom 文档,但我在接收图像时没有正确的事件处理程序(用于 SCU)。

首先,我创建了所需的 .dcm 文件数据集并使用了 C-GET 命令,它实际上应该为我提供 .dcm 文件,但我还没有指定我的图像在 SCU 上的存储位置。我需要使用 C-MOVE 命令来实际获取图像还是我的代码不完整(从某种意义上说,没有为 SCU onReceiveStore 指定事件处理程序)?

from pydicom.dataset import Dataset
import pydicom

from pynetdicom import (
    AE, evt, build_role,
    PYNETDICOM_IMPLEMENTATION_UID,
    PYNETDICOM_IMPLEMENTATION_VERSION
)

from pynetdicom.sop_class import (
    PatientRootQueryRetrieveInformationModelGet,
    CTImageStorage
)


ae = AE()

ae.add_requested_context(PatientRootQueryRetrieveInformationModelGet)
ae.add_requested_context(CTImageStorage)

role = build_role(CTImageStorage, scp_role=True)

ds = Dataset()
ds.QueryRetrieveLevel = 'SERIES'
ds.PatientID = '0009703828'
ds.StudyInstanceUID = '1.3.46.670589.5.2.10.2156913941.892665384.993397'
ds.SeriesInstanceUID = '1.3.46.670589.5.2.10.2156913941.892665339.860724'

assoc = ae.associate('127.0.0.1', 5678)

if assoc.is_established:

responses = assoc.send_c_get(ds, PatientRootQueryRetrieveInformationModelGet)
for (status,dataset) in responses:
    if status:
        print('C-GET query status: 0x{0:04x}'.format(status.Status))
        # If the status is 'Pending' then `identifier` is the C-GET response
        if status.Status in (0x0000, 0x1022):
            print(dataset)
        else:
            print('Connection timed out, was aborted or received invalid response') 

    assoc.release()
else:
    print('Association rejected, aborted or never connected')

我希望 .dcm 是从 DICOM 服务器(在我的例子中是 ConQuest 服务器)发送的,但我只收到 DICOM 标签,确认该数据集(作为对 ConQuest 服务器的查询)存在!我想确切地知道如何使用此应用程序实体 (ae) 在我的 SCU 上接收图像

这是来自 ConQuest 服务器的响应

[CONQUESTSRV1] UPACS THREAD 11: STARTED AT: Fri Oct 25 06:56:23 2019
[CONQUESTSRV1]  Calling Application Title : "PYNETDICOM      "
[CONQUESTSRV1]  Called Application Title : "ANY-SCP         "
[CONQUESTSRV1]  Application Context : "1.2.840.10008.3.1.1.1", PDU length: 16382
[CONQUESTSRV1]  Presentation Context 0 "1.2.840.10008.5.1.4.1.2.1.3" 1
[CONQUESTSRV1]  Presentation Context 1 "1.2.840.10008.5.1.4.1.1.2" 1
[CONQUESTSRV1] Number of images to send: 2
[CONQUESTSRV1] Sending file : c:\users\sagar\onedrive\desktop\dicomserver1419d1\data\0009703828\1.3.46.670589.5.2.10.2156913941.892665339.860724_0001_002000_14579035620000.dcm
[CONQUESTSRV1] [recompress]: recompressed with mode = un (strip=1)
[CONQUESTSRV1] C-Get (PatientRoot)
[CONQUESTSRV1] UPACS THREAD 11: ENDED AT: Fri Oct 25 06:56:23 2019
[CONQUESTSRV1] UPACS THREAD 11: TOTAL RUNNING TIME: 0 SECONDS

ConQuest Server 正在发送文件,但 SCU 无法接收!

【问题讨论】:

    标签: python python-3.x dicom pynetdicom


    【解决方案1】:

    我是否需要使用 C-MOVE 命令来实际获取图像

    是的; C-MOVE 或 C-GET 中的任何一个都可以正常工作;使用哪一种取决于您的要求。 C-MOVE 将建立新的连接(角色将被颠倒),实例将在新建立的连接上发送。 C-GET 将在相同的连接上工作。

    或者我的代码不完整(在某种意义上没有为 SCU onReceiveStore 指定事件处理程序)?

    我不知道编程语言和工具包。所以我可能不会对此发表评论。

    我希望 .dcm 是从 DICOM 服务器(即我的情况下的 ConQuest 服务器)发送的,但我只收到 DICOM 标记,确认此数据集(作为对 ConQuest 服务器的查询)存在!

    很可能,您在此处收到 C-FIND 响应。这不包含图像实例。详情请参考this答案。

    我想知道如何使用此应用程序实体 (ae) 在我的 SCU 上接收图像

    在收到 C-FIND 响应时,使用其中的标识符,您应该进一步发出 C-MOVE/C-GET 命令/请求。响应此请求,您将获得实际的图像实例。您的 C-FIND SCU 在这里变成 C-STORE SCP;通常称为角色反转。详情请参考this答案。

    我还建议您阅读以下 Roni 的文章:

    【讨论】:

      【解决方案2】:

      C-GET 和 C-MOVE 都会导致 SCP 向您的设备发送回包含数据集的 C-STORE 命令。

      C-GET 和 C-MOVE 之间的区别在于 C-MOVE 将尝试打开与您设备的连接(它还必须充当 SCP 才能接收 C-STORE),而 C-GET 将发送在您的设备协商的同一连接上的 C-STORE。

      C-GET 和 C-MOVE 的响应只包含操作的状态。

      【讨论】:

        【解决方案3】:

        您需要将一个可调用的处理函数绑定到evt.EVT_C_STORE,如this example 所示。

        【讨论】:

        • scaramillion 提到的例子对我有用,当 scp 服务器启动时,提供完整的 ip、端口和 aetitle 集,如下所示:scp = ae.start_server((scp_peer["ipv4"],scp_peer["port"]), block=False, evt_handlers=handlers, ae_title=ownae) 使用默认值让(征服)服务器声称请求实例“不接受连接”。
        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2017-05-16
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多