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); } }
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."); }
public static DicomTagCollection UpdateUidsForNewImage(DicomTagCollection tags) { if (tags == null) { return(null); } tags.ImageUid.Values = new[] { GenerateNewImageUid() }; return(tags); }
/// <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(); }
public static DicomTagCollection UpdateUidsForNewSeries(DicomTagCollection tags) { if (tags == null) { return(null); } tags.SeriesInstanceUid.Values = new[] { GenerateNewSeriesUid() }; tags = UpdateUidsForNewImage(tags); return(tags); }
/// <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); } }
/// <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); }
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))); }
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); }
///// <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); }
/// <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(); }