gpt4 book ai didi

python - SCU 如何使用 C-GET 从 Dicom 服务器接收 dcm 图像?

转载 作者:太空宇宙 更新时间:2023-11-04 04:00:07 24 4
gpt4 key购买 nike

我看过官方的 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 无法接收!

最佳答案

Do I need to use the C-MOVE command to actually get images

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

or my code is incomplete (in a sense that no event handlers are specified for SCU onReceiveStore)?

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

I expected the .dcm be sent from the DICOM server (i.e ConQuest server in my case) ,but I'm only receving the DICOM tag confirming that this Dataset (given as a query to the ConQuest Server) is present!

您很可能会在此处收到 C-FIND 响应。这不包含图像实例。请引用this回答更多详情。

I want to know exactly how do I receive the images on my SCU using this Application Entity (ae)

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

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

关于python - SCU 如何使用 C-GET 从 Dicom 服务器接收 dcm 图像?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58551159/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com