1

我想搜索 DICOM 服务器。例如,如果用户输入一个患者 id 进行搜索,那么我的应用程序会使用与该 id 相关的所有元数据填充一个表,例如 id、姓名、入藏号等。如果 dicom 服务器中存在学习 ID,如何使用 dcm4chee 套件完成此操作。–

4

2 回答 2

6

您可以使用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 Study​InstanceUID标签。
    • 当然,添加要填充表的所有属性。
  • 使用检索到的0020, 000D Study​InstanceUID标签值进行 C-GET/C-MOVE 操作。

您可以看到如何将属性键配置为 C-FIND SCU 到作为dcm4che3工具项目CLIUtils.java一部分的类中。见。dcm4che-tool-commonCLIUtils.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 对象。

于 2015-10-04T07:52:12.507 回答
0

如果您需要有关 DICOM 网络协议的一般描述,您可以阅读“使用 Orthanc 了解 DICOM ”指南,更具体地说,是有关 C-Find 的部分

于 2015-10-05T05:54:46.627 回答