如何使用pixelmed(java)访问嵌套序列中的dicom属性?
我需要访问BeamSequence属性中每个ControlPointSequence属性中的所有甘特角度值 下面是嵌套的快速可视化如何使用pixelmed(java)访问嵌套序列中的dicom属性?,java,sequence,dicom,pixelmed,Java,Sequence,Dicom,Pixelmed,我需要访问BeamSequence属性中每个ControlPointSequence属性中的所有甘特角度值 下面是嵌套的快速可视化 Beam Sequence ... Control Point Sequence Gantry Angle ... ... Control Point Sequence Gantry Angle ... ... Control Point Sequence
Beam Sequence
...
Control Point Sequence
Gantry Angle
...
...
Control Point Sequence
Gantry Angle
...
...
Control Point Sequence
Gantry Angle
...
如何使用库访问每个机架角度
编辑:
多亏了cnellar的帮助,以下是最终的效果
private ArrayList<Double> getAngles( SequenceAttribute beamSequence ) {
ArrayList<Double> n = new ArrayList<Double>();
Iterator is = beamSequence.iterator();
while (is.hasNext()) {
SequenceItem item = (SequenceItem)is.next();
if (item != null) {
AttributeList itemList = item.getAttributeList();
if (itemList != null) {
SequenceAttribute ctrlPoint = (SequenceAttribute)itemList.get( TagFromName.ControlPointSequence );
//System.out.print(ctrlPoint);
Iterator is1 = ctrlPoint.iterator();
while (is1.hasNext()) {
SequenceItem item1 = (SequenceItem)is1.next();
if (item1 != null) {
AttributeList itemList1 = item1.getAttributeList();
if (itemList1 != null) {
Attribute gantry_angle = itemList1.get( TagFromName.GantryAngle );
if(gantry_angle!=null)
n.add(gantry_angle.getSingleDoubleValueOrDefault(0));
}
}
}
}
}
}
return n;
private ArrayList getAngles(SequenceAttribute-beamSequence){
ArrayList n=新的ArrayList();
迭代器is=beamSequence.Iterator();
while(is.hasNext()){
SequenceItem=(SequenceItem)为.next();
如果(项!=null){
AttributeList itemList=item.getAttributeList();
if(itemList!=null){
SequenceAttribute ctrlPoint=(SequenceAttribute)itemList.get(TagFromName.ControlPointSequence);
//系统输出打印(ctrlPoint);
迭代器is1=ctrlPoint.Iterator();
while(is1.hasNext()){
SequenceItem1=(SequenceItem)为1.next();
如果(item1!=null){
AttributeList itemList1=item1.getAttributeList();
if(itemList1!=null){
属性tangle\u angle=itemList1.get(TagFromName.GantryAngle);
if(机架角度!=null)
n、 添加(龙门架角度。GetSingleDoubleValuerDefault(0));
}
}
}
}
}
}
返回n;
}我希望有这样的事情:
private double[] getAngles( SequenceAttribute beamSequence ) {
Iterator is = beamSequence.iterator();
while (is.hasNext()) {
SequenceItem item = (SequenceItem)is.next();
if (item != null) {
AttributeList itemList = item.getAttributeList();
if (itemList != null) {
Attribute ctrlPoint = itemList.get( TagFromName.ControlPointSequence );
// Do the same sifting through this sequence to get your gantry angle
// and add it to your list of values.
}
}
}
检查一下我刚刚发布的编辑,我想我几乎有了它,“这是打破”不是很描述性。还要注意的是,机架角度的VR为DS,所以你应该使用double而不是float。算了吧。控制点序列中有2组,机架角度仅出现在第一组中,因此它在迭代第一个项目时将其添加,然后在第二个项目上断开。我把最后的代码放在编辑栏里。谢谢