0

问候,

我目前正在尝试学习一些Java编程。为此,我试图让一些东西真正有用。因为我正在学习医学成像,所以我会用 Java 编写自己的 Dicom Api。

Dicom 标准的一部分是包含在 Dicom 文件中使用的属性的数据字典。这些属性必须具有以下属性。

(,元素)描述

例如:
(0x0002,0x0000) 长度
(0x0002,0x0002) MediaStoredSOPClassUID
(0x0002,0x0010) TransferSyntaxUID
(0x0003,0x0003) 长度

我想知道我应该如何在我的 API 中实现这些。我想到的选项是:

  • 枚举,问题在于唯一属性可能具有相同的描述。

enum Attributes{ Length(0x0002,0x0000), Length(0x0003,0x0000, }

  • 一个静态类,只有一些包含属性的常量。名称的问题也存在。
  • 包含此数据的 xml 文件。

我真的很想为此使用 xml,因为数据的表格性和易于访问。但是有什么办法可以将它包含在我的 Api 中。

~蒂莫·威廉森

4

4 回答 4

2

为了便于访问,应该将 XML 文件放在类路径中,以便您可以ClassLoader#getResource()通过ClassLoader#getResourceAsStream().

要使用标准 API 读取/评估/写入 XML 文件,我可以推荐StAX。如果 XML 文件比较大(几十兆以上),那么我可以更推荐VTD-XML

或者,如果文件不是很大并且它是纯键值对,那么您也可以考虑属性文件,您可以使用java.util.Properties基本上扩展的 API轻松管理这些文件Map

于 2009-12-31T13:54:49.740 回答
1

地图最适合您,定义一个包含 dicom 条目的类:

public class DicomEntry
{
private: 
    private string group;
    private string element;
    private string vr;
    private string name;

    public string  key() { return String.format("(%s,%s)",group,element); } 
}

还创建一个包含所有条目的地图

Map<string,DicomEntry> mp=new HashMap<string, DicomEntry>();

将字典文件中的每一行读入条目类对象 de后,将其添加到地图

 mp.put(de.key(), de)

由于 group 和 element 的组合是独一无二的,因此您会遇到任何碰撞

于 2009-12-31T13:51:13.163 回答
1

您可能还想研究其他DICOM源。特别是PixelMed包含一个基于 XML 和 XSLT 的验证器。ImageJ有几个DICOM 插件可用。

于 2009-12-31T14:40:35.240 回答
1

这是 GDCM 中使用的 XML 格式的 PS 3.6-2008:

http://gdcm.svn.sf.net/viewvc/gdcm/trunk/Source/DataDictionary/Part6.xml?view=markup

如上所述,我还将添加 VM 和 Retired 标志:

 public class DicomEntry {  private: 
     private ushort group;
     private ushort element;
     private string vr;
     private string vm;
     private boolean retired;
     private string name;
     public string  key() { return String.format("(%s,%s)",group,element);
 } }
于 2010-01-04T11:55:12.260 回答