在DICOM服务器中搜索元数据

时间:2015-10-03 19:45:25

标签: dicom dcm4che

我想搜索DICOM服务器。例如,如果用户输入患者ID以进行搜索,那么我的应用程序将填充一个表格,其中包含与该ID相关的所有元数据,例如id,name,登录号e.tc.如果在dicom服务器中存在研究ID,如何使用dcm4chee工具包完成。 -

2 个答案:

答案 0 :(得分:5)

您可以使用 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中。如果你看一下FindSCU.java的第260:265行,你会看到你可以管理四个不同的级别: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-common类中。请参阅CLIUtils.addAttributes(Attributes, String[])

希望它有所帮助!

修改

由于您发表评论,您使用的是dcm4che2,并且您已经拥有搜索结果DicomObject,如果您想从此DicomObject获取元数据,则必须先使用{{1}解析它然后你可以使用DicomInputStream中的getXXXX(Tag),如下所示:

BasiDicomObject

请记住,某些属性是序列内部,因此您必须先搜索它。

您还可以查看DicomObject dcmObj; DicomInputStream dis = null; dis = new DicomInputStream(file); dcmObj = dis.readDicomObject(); String someVar = dcmObj.getString(Tag.SeriesInstanceUID); ,您将看到dcm4che-tool-dcm2txt,在第170行等等,还有如何解析整个dicom对象。

答案 1 :(得分:0)

如果您需要有关DICOM网络协议的一般说明,可以阅读“Understanding DICOM with Orthanc”指南,更具体地说是section about C-Find