javadicomdcm4che

How to read DICOM string value with backslash (VR=LO, Value="0.4323\0.2325")?


Our C++ software use ITK to write DICOM files. In it we have a Private Tag with LO (Long String) as VR and 2 decimal values as value like 0.3234\0.34223.

The LO choice is inherent to ITK.

In other java application, I use dcm4che3 to read/write them. Since it respects the DICOM protocol, backslash are forbidden, and dcm4che interpret the value as "0.3234" and never reach the second value.

All DICOM viewer applications I use can display this value.

So my question is: Is there a trick in dcm4che to read this complete value as a string "0.3234\0.34223" despite the presence of a backslash?

Below, the code I use:

     public DicomInfo uploadFile(MultipartFile file) throws IOException, ParseException {

       DicomInfo infos = new DicomInfo();

       Attributes attrs = readDicomAttributes(file);
       infos.setTags(toAttributesObject(attrs).toString());
    }

    private static JsonObject toAttributesObject(Attributes targetSeriesAttrs) 
    {
       StringWriter strWriter = new StringWriter();
       JsonGenerator gen = Json.createGenerator(strWriter);
       JSONWriter writer = new JSONWriter(gen);
       writer.write(targetSeriesAttrs);
       gen.flush();
       gen.close();
       return Json.createReader(new 
          StringReader(strWriter.toString())).readObject();
  }
  
  public Attributes readDicomAttributes(MultipartFile file) throws IOException 
  {
    DicomInputStream dis = new DicomInputStream(file.getInputStream());
    Attributes dataSet = dis.readDataset(-1, Tag.PixelData);
    Attributes fmi = dis.readFileMetaInformation();
    dis.close();

    fmi.addAll(dataSet);

    return fmi;
  }

In the JSON I get for this tag:

\"00110013\":{\"vr\":\"LO\",\"Value\":[\"0.4323\"]},

As you can see it is LO and the second part is already lost.

The method I use to get the specific attribute:

attr.getStrings(0x00110013)

send back a table with only one value, 0.4323.

The problem happens during the readDataSet function.

When I open tags with software like free dicom viewer, I have the complete data, so data is here.


Ok I found the source of the problem... It is the addAll fmi.addAll(dataSet);

In dataSet, getStrings works perfectly. In fmi after addAll, the attributes lost the second value.

So my problem is to solve this addAll issue now: dcm4che3 java lib: Attributes.addAll method seems to lost multiple LO values


Solution

  • The solution of this problem is to write

    dataSet.addAll(fmi);
    return dataSet;
    

    instead of

    fmi.AddAll(dataSet);
    return fmi;
    

    since the addAll methods lost multiple values of private LO