在DICOM服务器中搜索元数据

Asa*_*Ali 1 dicom dcm4che

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

mal*_*una 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 CLIUtils.java作为dcm4che3工具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);
Run Code Online (Sandbox Code Playgroud)

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

您还可以查看dcm4che-tool-dcm2txt,您将看到Dcm2Txt.java并在第170行等等,有如何解析整个dicom对象.