我想搜索 DICOM 服务器。例如,如果用户输入一个患者 id 进行搜索,那么我的应用程序会使用与该 id 相关的所有元数据填充一个表,例如 id、姓名、入藏号等。如果 dicom 服务器中存在学习 ID,如何使用 dcm4chee 套件完成此操作。–
2 回答
您可以使用dcm4che3工具dcm4che-tool-findscu
。此代码向您展示如何针对 PACS(或任何将 C-FIND 实现为 SCP)执行 C-FIND。
FindSCU.java
很清楚,花点时间不要错过通过 Apache Commons CLI 代码来理解来自控制台的输入。大部分 CLI 管理代码不在本项目中,但可以在dcm4che3工具dcm4che-tool-common
项目org.dcm4che3.tool.common.CLIUtils.java
类中找到。
考虑以下因素:
- 指定查询/检索的搜索级别。您可以使用多个搜索级别将属性匹配到 PACS。如果您查看第 260:265 行
FindSCU.java
,您将看到您可以管理四个不同的级别:PATIENT|STUDY|SERIES|IMAGE
.这将指示 C-FIND SCP 如何搜索匹配的属性。 - 告诉 C-FIND SCP 你想检索什么属性。如果要搜索稍后检索的研究,则必须要求提供
0020, 000D
StudyInstanceUID标签。- 当然,添加要填充表的所有属性。
- 使用检索到的
0020, 000D
StudyInstanceUID标签值进行 C-GET/C-MOVE 操作。
您可以看到如何将属性键配置为 C-FIND SCU 到作为dcm4che3工具项目CLIUtils.java
一部分的类中。见。dcm4che-tool-common
CLIUtils.addAttributes(Attributes, String[])
希望能帮助到你!
编辑
由于您评论您正在使用 dcm4che2 并且您已经拥有DicomObject
搜索结果,如果您想从中获取元数据,DicomObject
您必须先解析它,使用DicomInputStream
,然后您可以使用getXXXX(Tag)
from BasiDicomObject
,如下所示:
DicomObject dcmObj;
DicomInputStream dis = null;
dis = new DicomInputStream(file);
dcmObj = dis.readDicomObject();
String someVar = dcmObj.getString(Tag.SeriesInstanceUID);
请记住,某些属性在序列内部,因此您必须先搜索它。
你也可以看一下dcm4che-tool-dcm2txt
,你会看到Dcm2Txt.java
在第 170 行等等,有如何解析整个 dicom 对象。
如果您需要有关 DICOM 网络协议的一般描述,您可以阅读“使用 Orthanc 了解 DICOM ”指南,更具体地说,是有关 C-Find 的部分。