一个用于检索DICOM图像的基本movescu示例

3
我正在尝试使用dcm4che从免费的http://www.dicomserver.co.uk/下载图像。我已经克隆并检出了5.13.2版本,并使用 mvn install 构建了它。现在,当我进入 dcm4che-assembly / target / dcm4che-5.13.2-bin / dcm4che-5.13.2 / bin 目录并尝试下载StudyInstanceUID时:
./movescu -c DCMQRSCP@www.dicomserver.co.uk:104 -m StudyInstanceUID=1.2.826.0.1.3680043.11.105 --dest STORESCP

我收到了错误:

...
(0000,0902) LO [Unknown Move Destination: STORESCP] ErrorComment
...

错误提示表明无法连接到接收器。我尝试运行:
./storescp -b STORESCP:11112

我尝试过运行dcmqrscp,但没有太大的成功。 我也尝试了运行movescu,但结果类似。

我的谦虚请求:请提供movescu的工作示例。


详情

我可以轻松使用findscu,例如:

./findscu -c DCMQRSCP@www.dicomserver.co.uk:104 -m StudyInstanceUID=1.2.826.0.1.3680043.11.105 -r PatientID

给出:

(0008,0005) CS [] SpecificCharacterSet
(0008,0052) CS [STUDY] QueryRetrieveLevel
(0008,0054) AE [DCMQRSCP] RetrieveAETitle
(0010,0020) LO [PAT004] PatientID
(0020,000D) UI [1.2.826.0.1.3680043.11.105] StudyInstanceUID

同样,getscu 命令似乎也可以工作:

>./getscu -c DCMQRSCP@www.dicomserver.co.uk:104 -m StudyInstanceUID=1.2.826.0.1.3680043.11.105

创建以下DICOM文件:

ls 1* -lh

-rw-rw-r-- 1 max max  12M jul  7 12:16 1.2.276.0.7230010.3.1.4.39332053.7432.1527748041.31
-rw-rw-r-- 1 max max 150K jul  7 12:17 1.2.276.0.7230010.3.1.4.8323329.11391.1527939718.955155
-rw-rw-r-- 1 max max 6,0M jul  7 12:17 1.2.826.0.1.3680043.9.6384.2.2087.20180322152557.400.100
-rw-rw-r-- 1 max max 6,0M jul  7 12:17 1.2.826.0.1.3680043.9.6384.2.2087.20180322152557.400.104
-rw-rw-r-- 1 max max 6,0M jul  7 12:17 1.2.826.0.1.3680043.9.6384.2.2087.20180322152557.400.108
-rw-rw-r-- 1 max max 6,0M jul  7 12:17 1.2.826.0.1.3680043.9.6384.2.2087.20180322152557.400.112
-rw-rw-r-- 1 max max 6,0M jul  7 12:16 1.2.826.0.1.3680043.9.6384.2.2087.20180322152557.400.80
-rw-rw-r-- 1 max max 6,0M jul  7 12:17 1.2.826.0.1.3680043.9.6384.2.2087.20180322152557.400.84
-rw-rw-r-- 1 max max 6,0M jul  7 12:17 1.2.826.0.1.3680043.9.6384.2.2087.20180322152557.400.88
-rw-rw-r-- 1 max max 6,0M jul  7 12:17 1.2.826.0.1.3680043.9.6384.2.2087.20180322152557.400.92
-rw-rw-r-- 1 max max 6,0M jul  7 12:17 1.2.826.0.1.3680043.9.6384.2.2087.20180322152557.400.96

最后,如果这个问题被归类为重复,请原谅。在 StackOverflow 或 dcm4che-forum 上花了几天时间都没有找到可用的 movescu 示例,我已经放弃搜索。目标是有一个示例供我使用,以便我可以修改底层 Java 代码以满足自己的需求。如果您对整个 movescu 转储感兴趣,请告诉我。


更新

Tarmo 的有用提示后,我尝试了 (1) 使用正确的 AE 和端口以及 (2) 切换到 Orthanc。不幸的是,我仍然无法从 dicomserver.co.uk 检索图像,但 Orthanc 解决方案起作用了。

以下是结果摘要:

备选方案 1:端口和端口兼容性

看起来我的问题部分与 RTFM 相关:

使用任何你喜欢的调用和被调用 AE 标题(使它们特定于您将有助于检查日志),但如果您希望使用 C-MOVE,请确保调用和目标 AET 相同,并且您监听 104 端口

我的第一次尝试是对齐两个 AE 标题:

./movescu -c STORESCP@www.dicomserver.co.uk:104 -m StudyInstanceUID=1.2.826.0.1.3680043.11.105 --dest STORESCP

这不起作用,结果发现目标端口是随机的。在两端(服务器日志+本地)都可以找到端口:
14:23:47,539 INFO  - MOVESCU->APA(1): close Socket
  [addr=www.dicomserver.co.uk/88.202.185.144,port=104,localport=57985]

localport 在每次尝试中都会更改。 我已经尝试过的事情如下:

  • --dest 的变体:(1) STORESCP:104,(2) STORESCP$localhost:104,(3) 其他 AE-titles
  • 通过 sudo ./dcmqrscp -b STORESCP:104 --dicomdir /home/max/tmp/dcm 启动 SCP,并仅使用 AE-title 作为 dest 进行调用
  • 与上述相同,但使用了 -b 选项:./movescu -c STORESCP@www.dicomserver.co.uk:104 -b STORESCP@localhost:104 -m StudyInstanceUID=1.2.826.0.1.3680043.11.105 --dest STORESCP
  • 没有 SCP 并且使用我的本地 IP/外部 IP(未进行防火墙更改)的与上述相同
  • 我还尝试通过手机进行 USB 持续以规避路由器,但是手机操作在 IPv6 而不是 v4 上运行

希望知道如何设置这个,因为它可能非常有用。我猜想由于C-MOVE将原始IP地址提供给dicom服务器,因此需要将104端口转发到当前计算机。作为DICOM协议的新手,我发现许多功能有些神秘...

备选方案2:本地Orthanc服务器(有效!)

以下是完整的设置步骤,供任何想要建立测试系统的人使用(使用Ubuntu 18.04):

  1. sudo apt install orthanc & 检查服务是否已启动 systemsctl status orthanc.service
  2. /etc/orthanc/orthanc.json中取消注释以下行:"sample" : [ "STORESCP", "localhost", 2000 ],然后重启服务器 systemsctl restart orthanc.service
  3. 转到http://localhost:8042(除非您已更改/etc/orthanc/orthanc.json中的Web端口)
  4. 进入上传并查找要上传的dcm文件(您可以在此处找到要下载的dcm文件:https://www.dicomlibrary.com/或者您可以使用上面提到的getscu
  5. 将dcm文件拖放到http://localhost:8042/app/explorer.html#upload中+点击“开始上传”
  6. 进入患者并获取上传图像的新StudyInstanceUID
  7. 使用在/etc/orthanc/orthanc.json中允许的STORESCP2000端口启动SCP服务,例如:./dcmqrscp -b STORESCP:2000 --dicomdir /home/max/tmp/dcm
  8. 使用上述SCP的新StudyInstanceUID(为便于阅读下面进行了缩写)调用movescu-b,例如:

    ./movescu -c ORTHANC@localhost:4242 -m StudyInstanceUID=1.2.826.0.1.3680043.8..... -b STORESCP@localhost:2000 --dest STORESCP

就是这样!


你是否将104端口从路由器转发到本地计算机的104端口?如果没有这样做,那么路由器将无论如何阻止来自dicomserver.co.uk的任何传入尝试。为了使C-MOVE正常工作,服务器必须能够打开一条直接连接回您的通道,这意味着您必须允许它通过防火墙并在路由器上进行端口转发,除非您的工作站本身具有公共IP地址。PS.您在日志中看到的随机端口不是问题,一切都是应该的。基本的TCP/IP网络正在发挥作用。 - Tarmo R
@tarmor 是的,我忘记了路由器进行的端口洗牌。由于它目前与Orthanc一起工作,所以我暂停了端口转发,如果我有时间更新,我会更新帖子的。再次感谢您的帮助! - Max Gordon
1个回答

3
请再次查看http://www.dicomserver.co.uk/主页上的C-MOVE信息,了解如何设置您的查询。您的命令语法是正确的,但有些细节是错误的。
基本上您需要两件事情:
1.您的调用AE标题必须与目标AE标题相同。目前它们不同。
2.您的storescp必须通过公共网络在与连接到dicomserver.co.uk相同的端口上可访问,在您的示例中为104。他们的服务器需要建立一个新的TCP连接返回到您的计算机才能正常工作。
我认为在本地安装轻量级PACS(如Orthanc)来测试您的应用程序会更容易。在我的看法中,让DICOM C-MOVE在公共互联网上运行是很麻烦的。

谢谢!我仍然无法让dicomserver检索工作,但Orthanc可以。我不确定为什么dcm4che的movescu示例没有指定-b选项,因为我在没有该选项的情况下无法使其工作。同样,--dest目的很奇怪,在Association::cmove -> Association::invoke之后我就迷失在低级别的东西中了(由于某种原因它出现在cmd中)。 - Max Gordon
如果您不使用 -b 选项,则 movescu 将使用其默认值。--dest 用于定义服务器应将图像发送到的目标位置。需要理解的是,客户端 A 可以向服务器 B 发出 C-MOVE 命令,将图像发送到被标识为目标 C 的第三个系统。A 绝不需要要求将图像发送到自己。另一个需要理解的是,C-MOVE 需要分别建立连接才能工作。C-ECHOC-FINDC-GET 只需要单个连接即可工作,因此实现起来更简单。 - Tarmo R

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接