コード例 #1
0
        /// <string>Replaces the content of a UID with a random one</string>
        /// <param name="dataset">Reference to the dataset</param>
        /// <param name="item"></param>
        private void ReplaceUID(DicomDataset dataset, DicomItem item)
        {
            if (!(item is DicomElement))
            {
                return;
            }

            string   rep;
            DicomUID uid;
            var      old = ((DicomElement)item).Get <string>();

            if (ReplacedUIDs.ContainsKey(old))
            {
                rep = ReplacedUIDs[old];
                uid = new DicomUID(rep, "Anonymized UID", DicomUidType.Unknown);
            }
            else
            {
                uid = DicomUIDGenerator.GenerateDerivedFromUUID();
                rep = uid.UID;
                ReplacedUIDs[old] = rep;
            }

            var newItem = new DicomUniqueIdentifier(item.Tag, uid);

            dataset.AddOrUpdate(newItem);
        }
コード例 #2
0
        public void DicomValidation_AddInvalidData()
        {
            var ds         = new DicomDataset();
            var invalidUid = "1.2.315.6666.008965..19187632.1";

            // trying to add this invalidUid should throw exception
            Assert.Throws <DicomValidationException>(() => ds.Add(DicomTag.StudyInstanceUID, invalidUid));

            ds.AutoValidate = false;
            // if AutoValidate is turned off, the invalidUid should be able to be added
            ds.Add(DicomTag.StudyInstanceUID, invalidUid);
            Assert.Equal(invalidUid, ds.GetSingleValue <string>(DicomTag.StudyInstanceUID));

            var tmpFile = Path.GetTempFileName();

            ds.Add(DicomTag.SOPClassUID, DicomUID.SecondaryCaptureImageStorage);
            ds.Add(DicomTag.SOPInstanceUID, DicomUIDGenerator.GenerateNew().UID);
            // save this invalid dicomdataset
            (new DicomFile(ds)).Save(tmpFile);

            // reading of this invalid dicomdataset should be possible
            var dsFile = DicomFile.Open(tmpFile);

            Assert.Equal(invalidUid, dsFile.Dataset.GetSingleValue <string>(DicomTag.StudyInstanceUID));

            // but the validation should still work
            Assert.Throws <DicomValidationException>(() => dsFile.Dataset.Validate());
        }
コード例 #3
0
        public void ConvertGuidToUuidInteger_Iso9834Sample()
        {
            // Sample value of ISO/IEC 9834-8, paragraph 8 and wiki.ihe.net
            var    sampleValue = new Guid("f81d4fae-7dec-11d0-a765-00a0c91e6bf6");
            string actual      = DicomUIDGenerator.ConvertGuidToUuidInteger(ref sampleValue);

            Assert.Equal("2.25.329800735698586629295641978511506172918", actual);
        }
コード例 #4
0
        public void Generate_MultipleInParallel_AllValuesUnique()
        {
            const int n    = 100000;
            var       uids = new string[n];

            Parallel.For(0, n, i => { uids[i] = DicomUIDGenerator.GenerateNew().UID; });
            Assert.Equal(n, uids.Distinct().Count());
        }
コード例 #5
0
        public void ConvertGuidToUuidInteger_RoundTripConversionEmpty()
        {
            var    expected  = new Guid();
            string converted = DicomUIDGenerator.ConvertGuidToUuidInteger(ref expected);
            var    actual    = ConvertDicomUidToGuid(converted);

            Assert.Equal(expected, actual);
        }
コード例 #6
0
        public void ConvertGuidToUuidInteger_RoundTripConversion()
        {
            var    expected  = new Guid("11223344-5566-7788-9900-aabbccddeeff");
            string converted = DicomUIDGenerator.ConvertGuidToUuidInteger(ref expected);
            var    actual    = ConvertDicomUidToGuid(converted);

            Assert.Equal(expected, actual);
        }
コード例 #7
0
 public void GenerateDerivedFromUUID_MultipleValues_AllValuesContainOnlyDigitsAndDecimalDots()
 {
     for (var i = 0; i < 1000; ++i)
     {
         var uid      = DicomUIDGenerator.GenerateDerivedFromUUID();
         var invalids = Regex.Replace(uid.UID, @"[0-9\.]", "");
         Assert.Equal(0, invalids.Length);
     }
 }
コード例 #8
0
        public void Generate_SourceUidKnown_ReturnsMappedDestinationUid()
        {
            var source = DicomUIDGenerator.GenerateNew();

            var generator = new DicomUIDGenerator();
            var expected  = generator.Generate(source);
            var actual    = generator.Generate(source);

            Assert.Equal(expected, actual);
        }
コード例 #9
0
 public DicomFileMetaInformation(DicomDataset dataset)
     : this()
 {
     MediaStorageSOPClassUID = dataset.Get <DicomUID>(DicomTag.SOPClassUID);
     //部分工作站含有DicomTag.SOPInstanceUID但是值为null 需要重新生成
     if (dataset.Contains(DicomTag.SOPInstanceUID) && !string.IsNullOrEmpty(dataset.Get <string>(DicomTag.SOPInstanceUID)))
     {
         MediaStorageSOPInstanceUID = dataset.Get <DicomUID>(DicomTag.SOPInstanceUID);
     }
     else
     {
         DicomUIDGenerator uid = new DicomUIDGenerator();
         dataset.Add <string>(DicomTag.SOPInstanceUID, uid.Generate().ToString());
         MediaStorageSOPInstanceUID = dataset.Get <DicomUID>(DicomTag.SOPInstanceUID);
     }
     TransferSyntax = dataset.InternalTransferSyntax;
 }
コード例 #10
0
        public void AnonymizeInPlace_SequenceToKeep_NestedDatasetsShouldBeParsed()
        {
            const string fileName      = "GH610.dcm";
            var          tag1          = DicomTag.ROIContourSequence;
            var          tag2          = DicomTag.ContourSequence;
            var          tag3          = DicomTag.ContourImageSequence;
            var          generatedUid1 = DicomUIDGenerator.GenerateNew();
            var          generatedUid2 = DicomUIDGenerator.GenerateNew();

#if NETFX_CORE
            var dataset = Dicom.Helpers.ApplicationContent.OpenDicomFileAsync($"Data/{fileName}").Result.Dataset;
#else
            var dataset = DicomFile.Open($"./Test Data/{fileName}").Dataset;
#endif
            dataset.Add(new DicomSequence(tag1, new DicomDataset(
                                              new DicomSequence(tag2, new DicomDataset(
                                                                    new DicomSequence(tag3,
                                                                                      new DicomDataset(
                                                                                          new DicomUniqueIdentifier(DicomTag.ReferencedSOPInstanceUID, generatedUid1.UID),
                                                                                          new DicomIntegerString(DicomTag.ReferencedFrameNumber, 1)
                                                                                          ),
                                                                                      new DicomDataset(
                                                                                          new DicomUniqueIdentifier(DicomTag.ReferencedSOPInstanceUID, generatedUid2.UID),
                                                                                          new DicomIntegerString(DicomTag.ReferencedFrameNumber, 2)
                                                                                          )
                                                                                      ))
                                                                ))
                                          ));

            var anonymizer = new DicomAnonymizer();
            anonymizer.AnonymizeInPlace(dataset);

            Assert.True(dataset.Contains(tag1));

            var sequence1 = dataset.Get <DicomSequence>(tag1);
            var sequence2 = sequence1.Items[0].Get <DicomSequence>(tag2);
            var sequence3 = sequence2.Items[0].Get <DicomSequence>(tag3);
            Assert.NotEqual(sequence3.Items[0].Get <DicomUID>(DicomTag.ReferencedSOPInstanceUID), sequence3.Items[1].Get <DicomUID>(DicomTag.ReferencedSOPInstanceUID));
            Assert.NotEqual(generatedUid1, sequence3.Items[0].Get <DicomUID>(DicomTag.ReferencedSOPInstanceUID));
            Assert.NotEqual(generatedUid2, sequence3.Items[1].Get <DicomUID>(DicomTag.ReferencedSOPInstanceUID));
            Assert.Equal(1, sequence3.Items[0].Get <int>(DicomTag.ReferencedFrameNumber));
            Assert.Equal(2, sequence3.Items[1].Get <int>(DicomTag.ReferencedFrameNumber));
        }
コード例 #11
0
    public void Test_that_a_generator_remembers_generated()
    {
      DicomUIDGenerator generator = new DicomUIDGenerator();
      var a = generator.Generate();
      var b = generator.Generate(a);
      var c = generator.Generate(b);
      var d = generator.Generate(a);
      var e = generator.Generate(b);

      Assert.NotEqual(a, b);
      Assert.NotEqual(a, c);
      Assert.NotEqual(a, d);
      Assert.NotEqual(a, e);
      Assert.NotEqual(b, c);
      Assert.Equal(b, d);
      Assert.NotEqual(b, e);
      Assert.NotEqual(c, d);
      Assert.Equal(c, e);
      Assert.NotEqual(d, e);
    }
コード例 #12
0
    public void Test_RegenerateAll()
    {
      var uidGenerator = new DicomUIDGenerator();
      var dataset = new DicomDataset
                     {
                       new DicomPersonName(
                         DicomTag.PatientName,
                         new[] { "Anna^Pelle", null, "Olle^Jöns^Pyjamas" }),
                       { DicomTag.SOPClassUID, DicomUID.RTPlanStorage },
                       { DicomTag.SOPInstanceUID, uidGenerator.Generate() },
                       { DicomTag.SeriesInstanceUID,
                         new[] { uidGenerator.Generate(), uidGenerator.Generate() } },
                       { DicomTag.FrameOfReferenceUID, uidGenerator.Generate() }
                     };
      dataset.Add(
        DicomTag.ReferencedFrameOfReferenceSequence,
        new[]
          {
            new DicomDataset { { DicomTag.ReferencedFrameOfReferenceUID, uidGenerator.Generate() } },
            new DicomDataset { { DicomTag.ReferencedFrameOfReferenceUID, uidGenerator.Generate() } }
          });

      var clone = this.DeepClone_(dataset);

      uidGenerator.RegenerateAll(clone);

      Assert.Equal(dataset.Get<string>(DicomTag.PatientName), clone.Get<string>(DicomTag.PatientName));
      Assert.Equal(dataset.Get<string>(DicomTag.SOPClassUID), clone.Get<string>(DicomTag.SOPClassUID));
      Assert.NotEqual(dataset.Get<string>(DicomTag.SOPInstanceUID), clone.Get<string>(DicomTag.SOPInstanceUID));
      Assert.NotEqual(dataset.Get<string>(DicomTag.SeriesInstanceUID), clone.Get<string>(DicomTag.SeriesInstanceUID));
      Assert.NotEqual(dataset.Get<string>(DicomTag.FrameOfReferenceUID), clone.Get<string>(DicomTag.FrameOfReferenceUID));
      Assert.NotEqual(
        dataset.Get<DicomSequence>(DicomTag.ReferencedFrameOfReferenceSequence).Items[0].Get<string>(DicomTag.ReferencedFrameOfReferenceUID),
        clone.Get<DicomSequence>(DicomTag.ReferencedFrameOfReferenceSequence).Items[0].Get<string>(DicomTag.ReferencedFrameOfReferenceUID));
      Assert.NotEqual(
        dataset.Get<DicomSequence>(DicomTag.ReferencedFrameOfReferenceSequence).Items[1].Get<string>(DicomTag.ReferencedFrameOfReferenceUID),
        clone.Get<DicomSequence>(DicomTag.ReferencedFrameOfReferenceSequence).Items[1].Get<string>(DicomTag.ReferencedFrameOfReferenceUID));
    }
コード例 #13
0
ファイル: DicomUID.cs プロジェクト: zhaohh1985/fo-dicom
 public static DicomUID Generate()
 {
     return(DicomUIDGenerator.GenerateDerivedFromUUID());
 }
コード例 #14
0
ファイル: DicomUID.cs プロジェクト: ZeryZhang/fo-dicom
		public static DicomUID Generate() {
			var generator = new DicomUIDGenerator();
			return generator.Generate();
		}
コード例 #15
0
		public GenerateUidDicomTransformRule(DicomTag tag, DicomUIDGenerator generator = null) {
			_tag = tag;
			_generator = generator ?? new DicomUIDGenerator();
		}
コード例 #16
0
 public GenerateUidDicomTransformRule(DicomTag tag, DicomUIDGenerator generator = null)
 {
     _tag       = tag;
     _generator = generator ?? new DicomUIDGenerator();
 }
コード例 #17
0
        public static DicomUID Generate()
        {
            var generator = new DicomUIDGenerator();

            return(generator.Generate());
        }