如何使用 dcm4che 从 Ginkgo PACS(或任何其他)进行 DICOM 查询和检索

How can I do a DICOM query and retrieve from a Ginkgo PACS (or any other) using dcm4che

我正在编写一个“简单的”HL7 侦听器,然后使用 dcm4che 二进制实用程序 movescu 从远程 PACS

进行查询和检索操作

我需要从 HL7 数据中检索一个研究并且我有 (00080050) AccessionNumber,然后我执行以下操作:

./movescu -b LOCALAET@{local_ip}:044 -c REMOTEAET@{remote_ip}:104 --dest LOCALAET@{local_ip}:104 -m 00080050={known_accession_number}

使用远程 PACS 我得到这个:

(0000,0002) UI [1.2.840.10008.5.1.4.1.2.2.2] AffectedSOPClassUID
(0000,0100) US [32801] CommandField
(0000,0120) US [1] MessageIDBeingRespondedTo
(0000,0800) US [257] CommandDataSetType
(0000,0900) US [49152] Status
(0000,0902) LO [Error querying db (ImageRetrieve)] ErrorComment
(0000,1020) US [0] NumberOfRemainingSuboperations
(0000,1021) US [0] NumberOfCompletedSuboperations
(0000,1022) US [0] NumberOfFailedSuboperations
(0000,1023) US [0] NumberOfWarningSuboperations

我得到了当地的银杏:

17:12:58,906 DEBUG - LOCALAET->REMOTEAET(1): enter state: Sta6 - Association established and ready for data transfer
17:12:58,946 INFO  - LOCALAET->REMOTEAET(1) >> A-ABORT[source: 0 - service-user, reason: 0]
17:12:58,946 INFO  - LOCALAET->REMOTEAET(1): close Socket[addr=/XXX.XXX.X.XX,port=8080,localport=36105]
17:12:58,947 DEBUG - LOCALAET->REMOTEAET(1): enter state: Sta1 - Idle
movescu: Sta1 - Idle
org.dcm4che3.net.AssociationStateException: Sta1 - Idle
    at org.dcm4che3.net.State.writeAReleaseRQ(State.java:223)
    at org.dcm4che3.net.Association.release(Association.java:326)
    at org.dcm4che3.tool.movescu.MoveSCU.close(MoveSCU.java:331)
    at org.dcm4che3.tool.movescu.MoveSCU.main(MoveSCU.java:268)

(在 Ginkgo 上使用不同的端口)

那我错过了什么?

我不知道 Ginkgo PACS,但很可能您的检索失败是因为您的请求格式不正确。

参见 PS3.4,C.4.2.1.4.1 请求标识符结构

您的请求必须包含属性查询检索级别 (0008,0052),我认为在您的情况下该属性将是“研究”,因为入藏号是研究级别的属性。

此外还必须包含

"Unique Key Attributes, which may include Patient ID (0010,0020), Study Instance UIDs (0020,000D), Series Instance UIDs (0020,000E), and the SOP Instance UIDs (0008,0018)"

也就是说,您必须通过为要移动的 patient/study/series/image(s) 提供唯一标识符来指定检索请求的范围 - 仅此而已!

因此,入藏号可用于查询(C-FIND)您需要用于 C-MOVE 的相应研究实例 UID。但是在C-MOVE-Request中是不允许的。

注意:您是否必须在 C-MOVE 请求中包含或省略 Patient-ID (0010,0020) 取决于您在期间协商的信息模型关联建立,并且您 select 通过为您的消息选择表示上下文。您必须将其包含在 Patient Root 中,不得将其包含在 Study Root 中。