The Filter example demonstrates how DCF builds and executes filters.
Classes
Class | Description | |
---|---|---|
Program |
Simple Filter example to demonstrate filtering DICOM datasets.
|
Remarks
Supported OS Platforms:
- Windows - .Net Framework 4.7.2 64-bit and 32-bit
- Windows - .Net Core 2.1 64-bit and 32-bit
- Linux - .Net Core 2.1 64-bit
Examples
Filter Sample Code
public class Program { private static readonly ILogger Logger = LogManager.GetCurrentClassLogger(); /// <summary> /// Main entry point for Filter. /// </summary> [STAThread] public static void Main() { try { FilterPatientName(); FindReplaceTagAction(); } catch (Exception e) { Console.WriteLine("Exception caught during execution: {0}", e); Environment.ExitCode = 1; } if (System.Diagnostics.Debugger.IsAttached) { Console.Write("Press any key to continue . . . "); Console.ReadKey(); } } /// <summary> /// Changes the example dataset 'mr-knee.dcm' patient name using a DicomElementFilter. /// </summary> private static void FilterPatientName() { // [ filter_config ] // filter_type = DICOM_ELEMENT_FILTER // filter_sub_type = unknown // create_original_attributes_seq = TRUE // // [ filter_config/elements_to_match ] // 0010,0010 = MINER^STEPHEN // 0008,0060 = MR // // [ filter_config/elements_to_replace ] // 0010,0010 = Doe^John CFGGroup cfg = new CFGGroup("filter_config"); cfg.addAttribute(new CFGAttribute("filter_type", "DICOM_ELEMENT_FILTER")); cfg.addAttribute(new CFGAttribute("filter_sub_type", "unknown")); cfg.addAttribute(new CFGAttribute("create_original_attributes_seq", "TRUE")); CFGGroup elementsToMatchGroup = new CFGGroup("elements_to_match"); elementsToMatchGroup.addAttribute(new CFGAttribute("0010,0010", "MINER^STEPHEN")); elementsToMatchGroup.addAttribute(new CFGAttribute("0008,0060", "MR")); cfg.addGroup(elementsToMatchGroup); CFGGroup elementsToReplace = new CFGGroup("elements_to_replace"); elementsToReplace.addAttribute(new CFGAttribute("0010,0010", "Doe^John")); cfg.addGroup(elementsToReplace); Logger.InfoFormat("Filter Patient's Name Configuration:{0}{1}", Environment.NewLine, cfg); using (DicomFileInput dfi = new DicomFileInput("mr-knee.dcm")) { IDicomInput di = DicomFilterFactory.Instance().CreateFilter(dfi, cfg, new DicomSessionSettings()); DicomDataSet ds = di.ReadDataSet(); Logger.InfoFormat("Filtered Dataset:{0}{1}", Environment.NewLine, ds); } } /// <summary> /// Performs a Find/Replace operation on the original tag value using a FilterAction. /// </summary> private static void FindReplaceTagAction() { // [ data ] // tag = 0010,0010 // find = (.*)\^.*$ // replace = $1^JOHN // regex = true // ignore_case = false CFGGroup cfg = new CFGGroup("data"); cfg.addAttribute(new CFGAttribute(DCF.Filters.FindReplaceTagAction.CFG_TAG, "0010,0010")); cfg.addAttribute(new CFGAttribute(DCF.Filters.FindReplaceTagAction.CFG_FIND, @"(.*)\^.*$")); cfg.addAttribute(new CFGAttribute(DCF.Filters.FindReplaceTagAction.CFG_REPLACE, "$1^JOHN")); cfg.addAttribute(new CFGAttribute(DCF.Filters.FindReplaceTagAction.CFG_REGEX, "true")); cfg.addAttribute(new CFGAttribute(DCF.Filters.FindReplaceTagAction.CFG_IGNORE_CASE, "false")); Logger.InfoFormat("Find/Replace TagAction Configuration:{0}{1}", Environment.NewLine, cfg); using (DicomFileInput dfi = new DicomFileInput("mr-knee.dcm")) { DicomDataSet ds = dfi.ReadDataSetNoPixels(); FindReplaceTagAction action = new FindReplaceTagAction(); List<string> tagsModified = new List<string>(); action.ApplyAction(cfg, new DicomSessionSettings(), delegate (string s) { tagsModified.Add(s); }, ref ds); Logger.InfoFormat("Find/Replace Filtered Dataset:{0}{1}", Environment.NewLine, ds); Logger.InfoFormat("Tags Modified:{0}{1}", Environment.NewLine, tagsModified[0]); } } }