【问题标题】:Usage of foDicom Dicom Anonymizer with Security profilefoDicom Dicom Anonymizer 与安全配置文件的使用
【发布时间】:2018-05-17 20:56:24
【问题描述】:

鉴于我对 C# 非常天真并使用 fo-dicom 包,我一直在寻找如何为 DicomAnonymizer 使用不同安全配置文件的挑战,如下所示:https://fo-dicom.github.io/html/fff31967-d92f-28da-3106-d4ab34b9b65b.htm

我尝试了以下但不起作用:

DicomAnonymizer.SecurityProfile SecurityProfile = 1;
var anony = new DicomAnonymizer();
anony.Anonymize(testfile);

我想测试每个安全配置文件如何影响 dicom 标头。同样,我也在摆弄使用这个的语法? 有人可以分享任何示例代码吗?

【问题讨论】:

    标签: c# class constructor


    【解决方案1】:

    我在您的代码中看到的另一个问题:DicomDataset DicomAnonymizer.Anonymize(DicomDataset) 将 DicomDataset 作为参数并返回一个新的匿名副本。如果您不希望修改原始 DicomDataset,建议这样做。但是因此您考虑在内存中复制大量数据。 另一种方法是void DicomAnonymizer.AnonymizeInPlace(DicomDataset),直接操作DicomDataset中的数据。

    您上面的代码使用了第一种方法,但没有将返回的匿名 DicomDataset 存储到变量中,因此立即将其释放到垃圾收集器。

    呼叫 var anonymizedTestfile = anony.Anonymize(testfile); 或者 anony.AnonymizeInPlace(testfile);

    【讨论】:

      【解决方案2】:

      需要先使用静态方法 LoadProfile 创建安全配置文件对象,然后在 DicomAnonymizer 构造函数中使用如下:

      var profile = DicomAnonymizer.SecurityProfile.LoadProfile(null, DicomAnonymizer.SecurityProfileOptions.CleanGraph);
      var anony = new DicomAnonymizer();
      

      【讨论】:

      • 我使用如下。 var profile = DicomAnonymizer.SecurityProfile.LoadProfile(null, DicomAnonymizer.SecurityProfileOptions.BasicProfile | DicomAnonymizer.SecurityProfileOptions.RetainUIDs ); var dicomAnonymizer = new DicomAnonymizer(profile);
      • 调用 just DicomAnonymizer.SecurityProfile.LoadProfile(...) before 创建 DicomAnonymizer 类的实例, 似乎没有任何作用LoadProfile(...) 方法,恕我直言,名称错误,因为它建议以某种静态方式加载配置文件。 LoadProfile(...) 方法返回的 SecurityProfile 类实例必须传递给 DicomAnonymizer.ctor(...) ,否则它将被替换为仅使用 DicomAnonymizer.SecurityProfileOptions.BasicProfile 标志的默认值。
      【解决方案3】:

      如果您查看枚举 SecurityProfileOptions 的定义,您会发现枚举被标记为 [Flags] 并且定义了以下值:

      BasicProfile = 1,
      RetainSafePrivate = 2,
      RetainUIDs = 4,
      RetainDeviceIdent = 8,
      RetainPatientChars = 16, // 0x0010
      RetainLongFullDates = 32, // 0x0020
      RetainLongModifDates = 64, // 0x0040
      CleanDesc = 128, // 0x0080
      CleanStructdCont = 256, // 0x0100
      CleanGraph = 512, // 0x0200
      

      简短回答您的问题:您可以使用 [Flags] 属性通过使用 按位或 一次存储多个枚举值操作数如下:

      SecurityProfileOptions.BasicProfile | SecurityProfileOptions.RetainDeviceIndent
      

      我强烈建议你看看this question

      回到您的具体问题,您应该使用的配置文件如下:

      DicomAnonymizer.SecurityProfile securityProfile = DicomAnonymizer.SecurityProfile.LoadProfile(null, DicomAnonymizer.SecurityProfileOptions.BasicProfile | DicomAnonymizer.SecurityProfileOptions.CleanDesc |... [add as many as you want from that enum]);
        DicomAnonymizer dicomAnonymizer = new DicomAnonymizer(securityProfile);
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2019-04-15
        • 2016-06-03
        • 1970-01-01
        • 2018-12-30
        • 2020-06-01
        • 2011-09-16
        • 2015-09-06
        • 2013-04-19
        相关资源
        最近更新 更多