コード例 #1
0
        public void UpdateDicomHeadersTests()
        {
            var bmpFile = Path.Combine(Helper.GetTestResourcesPath(), "bmp", "test.bmp");
            var dcmFile = Path.Combine(_tmpFolder, "testdicomfile.dcm");

            DicomFileOps.ConvertBmpToDicom(bmpFile, dcmFile);
            DicomTagCollection tags = new DicomTagCollection();

            // Set PatientId
            tags.SetTagValue(tags.PatientId.GetTagValue(), new string[] { "123456" });
            // SetImage UID
            //tags.SetTagValue(tags.ImageUid.GetTagValue(), new string[] { "1.1.1" });
            try
            {
                // Only update patient data (so image data should be updated.
                //DicomFileOps.UpdateDicomHeaders(dcmFile, tags, DicomNewObjectType.NewPatient);
                var nutags = DicomFileOps.GetDicomTags(dcmFile);
                Assert.IsTrue(nutags.PatientId.Values[0].Equals("123456"), "Error reading patient ID tag.");
                // At the moment the tags will be overwritted with a generated UID.
                // I'm not sure if there are cases where we want to modify a file in place
                // (or could this mess with the PACs system?)
                //DicomFileOps.UpdateDicomHeaders(dcmFile, tags, DicomNewObjectType.NewImage);
                //Assert.IsTrue(nutags.ImageUid.Values[0].Equals("1.1.1"), "Error reading ImageUID tag. " + nutags.ImageUid.Values[0]);
            }
            catch (Exception e)
            {
                Assert.Fail("Failed on UpdateDicomHeaders. " + e.Message);
            }
        }
コード例 #2
0
        public void UpdateImagePositionFromReferenceSeriesTests()
        {
            var bmpFile = Path.Combine(Helper.GetTestResourcesPath(), "bmp", "test.bmp");

            FileSystem.DirectoryExistsIfNotCreate(Path.Combine(_tmpFolder, "1"));
            FileSystem.DirectoryExistsIfNotCreate(Path.Combine(_tmpFolder, "2"));
            var dcmFile  = Path.Combine(_tmpFolder, "1", "testdicomfile.dcm");
            var dcmFile2 = Path.Combine(_tmpFolder, "2", "testdicomfile.dcm");

            DicomFileOps.ConvertBmpToDicom(bmpFile, dcmFile);
            DicomFileOps.ConvertBmpToDicom(bmpFile, dcmFile2);
            DicomTagCollection tags = new DicomTagCollection();

            // Setup the basic thing...
            //tags.SetTagValue(tags.SliceLocation.GetTagValue(), new string[] { "somewhere" });
            //DicomFileOps.UpdateDicomHeaders(dcmFile, tags, DicomNewObjectType.NewPatient);
            //tags.SetTagValue(tags.SliceLocation.GetTagValue(), new string[] { "nowhere" });
            //DicomFileOps.UpdateDicomHeaders(dcmFile2, tags, DicomNewObjectType.NewPatient);

            // Check that we set everything up correctly...
            Assert.IsTrue(DicomFileOps.GetDicomTags(dcmFile).SliceLocation.Values[0].Equals("somewhere"), "Failed to setup.");
            Assert.IsTrue(DicomFileOps.GetDicomTags(dcmFile2).SliceLocation.Values[0].Equals("nowhere"), "Failed to setup.");

            // Update things...
            DicomFileOps.UpdateImagePositionFromReferenceSeries(new string[] { dcmFile }, new string[] { dcmFile2 });

            // Check that things were updated.
            Assert.IsTrue(DicomFileOps.GetDicomTags(dcmFile).SliceLocation.Values[0].Equals("nowhere"), "Failed to update.");
        }
コード例 #3
0
 public static DicomTagCollection UpdateUidsForNewImage(DicomTagCollection tags)
 {
     if (tags == null)
     {
         return(null);
     }
     tags.ImageUid.Values = new[] { GenerateNewImageUid() };
     return(tags);
 }
コード例 #4
0
        /// <summary>
        /// Updates the given Dicom headers without trying to be clever.
        /// </summary>
        /// <param name="filepath"></param>
        /// <param name="tags"></param>
        public static void ForceUpdateDicomHeaders(string filepath, DicomTagCollection tags)
        {
            var dcmFile = new ClearCanvas.Dicom.DicomFile(filepath);

            dcmFile.Load(filepath);

            tags.ToList().ForEach(tag => UpdateTag(dcmFile, tag));
            dcmFile.Save();
        }
コード例 #5
0
 public static DicomTagCollection UpdateUidsForNewSeries(DicomTagCollection tags)
 {
     if (tags == null)
     {
         return(null);
     }
     tags.SeriesInstanceUid.Values = new[] { GenerateNewSeriesUid() };
     tags = UpdateUidsForNewImage(tags);
     return(tags);
 }
コード例 #6
0
 /// <summary>
 /// Update the tags for the given files. Files will be given a generated SeriesInstanceUid and ImageUid.
 /// </summary>
 /// <param name="filesPath">List of files to apply the tags to.</param>
 /// <param name="tags">The tags which you'd like to apply to the above files.</param>
 public static void GenerateSeriesHeaderForAllFiles(string[] filesPath, DicomTagCollection tags, int uidpostfix = 1)
 {
     tags.SeriesInstanceUid.Values = new[] { GenerateNewSeriesUid(uidpostfix.ToString()) };
     tags.ImageUid.Values          = new[] { GenerateNewImageUid() };
     foreach (var filepath in filesPath)
     {
         var dcmFile = new ClearCanvas.Dicom.DicomFile(filepath);
         dcmFile.Load(filepath);
         dcmFile = UpdateTags(dcmFile, tags, TagType.Series);
         dcmFile.Save(filepath);
     }
 }
コード例 #7
0
        /// <summary>
        /// Gets the tags for a dicom file.
        /// </summary>
        /// <param name="filePath">The dicom file.</param>
        /// <returns></returns>
        public static DicomTagCollection GetDicomTags(string filePath)
        {
            var dcmFile = new ClearCanvas.Dicom.DicomFile(filePath);

            dcmFile.Load(filePath);
            var tags        = new DicomTagCollection();
            var updatedTags = new DicomTagCollection();

            foreach (var tag in tags.ToList())
            {
                updatedTags.SetTagValue(tag.GetTagValue(), dcmFile.DataSet[tag.GetTagValue()].Values);
            }
            return(updatedTags);
        }
コード例 #8
0
        public void GetPatientIdFromDicomFileTest()
        {
            var bmpFile = Path.Combine(Helper.GetTestResourcesPath(), "bmp", "test.bmp");
            var dcmFile = Path.Combine(_tmpFolder, "testdicomfile.dcm");

            DicomFileOps.ConvertBmpToDicom(bmpFile, dcmFile);
            DicomTagCollection tags = new DicomTagCollection();

            // Set PatientId
            tags.SetTagValue(tags.PatientId.GetTagValue(), new string[] { "123456" });
            //DicomFileOps.UpdateDicomHeaders(dcmFile, tags, DicomNewObjectType.NewPatient);

            Assert.IsTrue("123456".Equals(DicomFileOps.GetPatientIdFromDicomFile(dcmFile)));
        }
コード例 #9
0
 private static DicomFile UpdateTags(
     ClearCanvas.Dicom.DicomFile dcmFile, DicomTagCollection newTags, TagType tagType, bool overwriteIfNotProvided = false)
 {
     if (newTags == null)
     {
         return(dcmFile);
     }
     newTags.ToList().ForEach(tag =>
     {
         if (tag.DicomTagType == tagType)
         {
             dcmFile = UpdateTag(dcmFile, tag, overwriteIfNotProvided);
         }
     });
     return(dcmFile);
 }
コード例 #10
0
        ///// <summary>
        ///// Update tags in dicom file.
        ///// </summary>
        ///// <param name="filepath">The path for the local dicom file.</param>
        ///// <param name="tags">The set of tags to be updated</param>
        ///// <param name="dicomNewObjectType">Essentially a mask to stop updating the wrong tags?</param>
        //public static void UpdateDicomHeaders(
        //   string filepath, DicomTagCollection tags, DicomNewObjectType dicomNewObjectType)
        //{
        //    var dcmFile = new ClearCanvas.Dicom.DicomFile(filepath);
        //    dcmFile.Load(filepath);

        //    switch (dicomNewObjectType)
        //    {
        //        case DicomNewObjectType.Anonymized:
        //            tags = UpdateUidsForNewStudy(tags);
        //            dcmFile = UpdateTags(dcmFile, tags, TagType.Patient, true);
        //            dcmFile = UpdateTags(dcmFile, tags, TagType.Study);
        //            dcmFile = UpdateTags(dcmFile, tags, TagType.Series);
        //            dcmFile = UpdateTags(dcmFile, tags, TagType.Image);
        //            break;
        //        case DicomNewObjectType.SiteDetailsRemoved:
        //            tags = UpdateUidsForNewStudy(tags);
        //            dcmFile = UpdateTags(dcmFile, tags, TagType.Site, true);
        //            break;
        //        case DicomNewObjectType.CareProviderDetailsRemoved:
        //            tags = UpdateUidsForNewStudy(tags);
        //            dcmFile = UpdateTags(dcmFile, tags, TagType.CareProvider, true);
        //            break;
        //        case DicomNewObjectType.NewPatient:
        //            tags = UpdateUidsForNewStudy(tags);
        //            dcmFile = UpdateTags(dcmFile, tags, TagType.Patient);
        //            dcmFile = UpdateTags(dcmFile, tags, TagType.Study);
        //            dcmFile = UpdateTags(dcmFile, tags, TagType.Series);
        //            dcmFile = UpdateTags(dcmFile, tags, TagType.Image);
        //            break;
        //        case DicomNewObjectType.NewStudy:
        //            tags = UpdateUidsForNewStudy(tags);
        //            dcmFile = UpdateTags(dcmFile, tags, TagType.Study);
        //            dcmFile = UpdateTags(dcmFile, tags, TagType.Series);
        //            dcmFile = UpdateTags(dcmFile, tags, TagType.Image);
        //            break;
        //        case DicomNewObjectType.NewSeries:
        //            tags = UpdateUidsForNewSeries(tags);
        //            dcmFile = UpdateTags(dcmFile, tags, TagType.Series);
        //            dcmFile = UpdateTags(dcmFile, tags, TagType.Image);
        //            break;
        //        case DicomNewObjectType.NewImage:
        //            tags = UpdateUidsForNewImage(tags);
        //            dcmFile = UpdateTags(dcmFile, tags, TagType.Image);
        //            break;
        //        case DicomNewObjectType.NoChange:
        //            break;
        //        default:
        //            throw new ArgumentOutOfRangeException(nameof(dicomNewObjectType), dicomNewObjectType, null);
        //    }
        //    dcmFile.Save(filepath);
        //}

        /// <summary>
        /// Creates and returns a collection of tags from a file, based on a given type or types.
        /// </summary>
        /// <param name="filepath"></param>
        /// <param name="types"></param>
        /// <returns></returns>
        public static DicomTagCollection GetTagsByType(string filepath, params TagType[] types)
        {
            var dcmFile = new DicomFile(filepath);

            dcmFile.Load();
            DicomTagCollection tags = new DicomTagCollection();

            var filetags = dcmFile.DataSet;

            foreach (var tag in tags)
            {
                if (types.Contains(tag.DicomTagType))
                {
                    tags.SetTagValue(tag.GetTagValue(), filetags[tag.GetTagValue()].Values);
                }
            }

            return(tags);
        }
コード例 #11
0
        /// <summary>
        /// Replaces the tags in a given Dicom file with those provided, preserving only the pixel data from the original.
        /// </summary>
        /// <param name="file"></param>
        /// <param name="cleanTags"></param>
        public static void UpdateTags(string file, DicomTagCollection cleanTags, bool overwriteIfNotProvided = false)
        {
            DicomFile df = new DicomFile(file);

            df.Load();
            foreach (var tag in df.DataSet)
            {
                // Don't overwrite or remove the pixel data tag.
                if (tag.Tag.TagValue == 0x7FE00010)
                {
                    continue;
                }
                else
                {
                    // Find the updated tag (or null / default)
                    var newTag = cleanTags.FirstOrDefault(t => t.GetTagValue() == tag.Tag.TagValue);
                    // Update the tag, overwriting with an empty value if no tag is present.
                    UpdateTag(df, newTag, overwriteIfNotProvided);
                }
            }

            df.Save();
        }