0

我想修改 DICOM 的标题并设置两个标签。这可行,但是当我想将它保存在一个新文件中时,我得到了这个异常:

NullReferenceException: Object reference not set to an instance of an object
Dicom.Network.NetworkManager.get_MachineName ()
Dicom.DicomFileMetaInformation.CreateSourceApplicationEntityTitle ()
Dicom.DicomFileMetaInformation..ctor (Dicom.DicomFileMetaInformation metaInfo)
Dicom.DicomFile.PreprocessFileMetaInformation ()
Dicom.DicomFile.Save (System.String fileName,   
Dicom.IO.Writer.DicomWriteOptions options)
DICOMConverter.addMaxMin () (at Assets/Scripts/DICOMConverter.cs:67)

我的 DICOMConverter.addMaxMin() 代码是:

 var dicomFile = DicomFile.Open(DICOMFilePath);
 var dicomImage = new DicomImage(dicomFile.Dataset);
 var header = DicomPixelData.Create(dicomImage.Dataset);

 var pixelData = PixelDataFactory.Create(header, 0);

 for (int x = 0; x < Convert.ToInt32(dicomFile.Dataset.Get<string>(DicomTag.Columns)); x++)
 {
    for (int y = 0; y < Convert.ToInt32(dicomFile.Dataset.Get<string>(DicomTag.Rows)); y++)
    {
         if (pixelData.GetPixel(x, y) < minValue)
                    minValue = pixelData.GetPixel(x, y);
         if (pixelData.GetPixel(x, y) > maxValue)
                    maxValue = pixelData.GetPixel(x, y);
     }
  }

  dicomFile.Dataset.AddOrUpdate(DicomTag.LargestImagePixelValue, Convert.ToString(maxValue));
  dicomFile.Dataset.AddOrUpdate(DicomTag.SmallestImagePixelValue, Convert.ToString(minValue));

  dicomFile.Save(@"newDicom"); 

当我尝试使用 Save() 方法时,它总是抛出异常。我为此使用了https://github.com/fo-dicom/fo-dicom
中的文件操作示例,但它不能正常工作。

有人有更好的保存解决方案的想法,或者我能解释一下我所缺少的吗?

4

1 回答 1

1

发生此异常是因为由于某种原因您的应用程序没有正确设置 NetworkManager 的平台特定实现。这发生在 NetworkManager 类的静态构造函数中。但是您可以随时通过 NetworkManager.SetImplementation(..) 手动设置它。如果没有任何进一步的信息,很难说为什么没有初始化实例,但是在 fo-dicom 的下一个版本中会有另一个解决方案:

将文件写入磁盘时,fo-dicom 设置 SourceApplicationEntityTile (0002,0016),因此尝试访问 NetworkManager.LocalMachineName。如果文件不是新创建的而是从其他文件克隆的,因此这个拉取请求想要重用 SourceApplicationEntityTitle,因此已经有一个 SourceApplicationEntityTitle。这将解决您的问题。仔细看看https://github.com/fo-dicom/fo-dicom/pull/615

于 2018-03-14T21:25:23.960 回答