如何在我自己的API中实现Dicom属性字典

时间:2009-12-31 13:23:02

标签: java attributes dicom

问候,

我目前正在尝试学习一些Java编程。要做到这一点,我试图让一些实际有用的东西。因为我正在学习医学影像,我虽然会用Java编写自己的Dicom Api。

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

元素描述

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

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

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

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

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

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

~Timo Willemsen

4 个答案:

答案 0 :(得分:2)

为了简化访问,应将XML文件放在类路径中,以便按ClassLoader#getResource()ClassLoader#getResourceAsStream()的内容获取其位置。

要使用标准API读取/评估/编写XML文件,我可以推荐StAX。如果XML文件相对较大(超过数十兆字节),那么我可以推荐VTD-XML更多。

或者,如果文件不是很大并且它是纯键值对,那么您也可以考虑properties files,您可以使用java.util.Properties API轻松管理,基本上扩展{{1} }}

答案 1 :(得分: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)

因为组和元素的组合是唯一的,所以你伤口有任何碰撞

答案 2 :(得分:1)

这是PS 3.6-2008,就像GDCM中使用的XML一样:

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);
 } }

答案 3 :(得分:0)

您可能还想学习其他DICOM来源。特别是PixelMed包含基于XML和XSLT的验证器。 DICOM plugins可以使用多个ImageJ