问候,
我目前正在尝试学习一些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,因为数据的表格性和易于访问。但是我有什么办法可以把它包含在我的Api中。
~Timo Willemsen
答案 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。