SCU如何使用C-GET从Dicom Server接收dcm图像?

问题描述 投票:2回答:2

我已经看过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 Server的查询)!我想确切地知道如何使用此应用程序实体(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 pydicom
2个回答
1
投票

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

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

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

我不知道编程语言和工具包。因此,我对此不作评论。

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

[很可能,您在这里得到C-FIND响应。这不包含图像实例。有关更多详细信息,请参考this答案。

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

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

我也建议您阅读以下罗尼的文章:


0
投票

C-GET和C-MOVE都将使SCP将包含数据集的C-STORE命令发送回您的设备。

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

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

© www.soinside.com 2019 - 2024. All rights reserved.