Exemplo n.º 1
0
        public void Transform(DicomDataset dataset, DicomDataset modifiedAttributesSequenceItem = null)
        {
            dataset.CopyTo(modifiedAttributesSequenceItem, _tag);
            var uid = dataset.GetSingleValue <DicomUID>(_tag);

            dataset.AddOrUpdate(_tag, _generator.Generate(uid));
        }
Exemplo n.º 2
0
		public void Transform(DicomDataset dataset, DicomDataset modifiedAttributesSequenceItem = null) {
			var remove = dataset.EnumerateMasked(_mask).Select(x => x.Tag).ToList();
			foreach (DicomTag tag in remove) {
				dataset.CopyTo(modifiedAttributesSequenceItem, tag);
				dataset.Remove(tag);
			}
		}
Exemplo n.º 3
0
 public PresentationLut(DicomUID sopInstance, DicomDataset dataset)
 {
     if (dataset == null)
     {
         throw new ArgumentNullException("dataset");
     }
     dataset.CopyTo(this);
 }
Exemplo n.º 4
0
 public PresentationLut(DicomUID sopInstance, DicomDataset dataset)
 {
     if (dataset == null)
     {
         throw new ArgumentNullException("dataset");
     }
     dataset.CopyTo(this);
 }
Exemplo n.º 5
0
 public void Transform(DicomDataset dataset, DicomDataset modifiedAttributesSequenceItem = null)
 {
     if (dataset.Contains(_src))
     {
         dataset.CopyTo(modifiedAttributesSequenceItem, _dst);
         dataset.AddOrUpdate(_dst, dataset.GetDicomItem <DicomElement>(_src).Buffer);
     }
 }
Exemplo n.º 6
0
 public void Transform(DicomDataset dataset, DicomDataset modifiedAttributesSequenceItem = null)
 {
     if (_match.Match(dataset))
     {
         dataset.CopyTo(modifiedAttributesSequenceItem, _match.Tag);
         dataset.AddOrUpdate(_match.Tag, _value);
     }
 }
Exemplo n.º 7
0
 public void Transform(DicomDataset dataset, DicomDataset modifiedAttributesSequenceItem = null)
 {
     if (dataset.Contains(_tag))
     {
         dataset.CopyTo(modifiedAttributesSequenceItem, _tag);
         var value = dataset.GetString(_tag);
         dataset.AddOrUpdate(_tag, value.ToLower());
     }
 }
Exemplo n.º 8
0
 public void Transform(DicomDataset dataset, DicomDataset modifiedAttributesSequenceItem = null)
 {
     if (dataset.Contains(_tag))
     {
         dataset.CopyTo(modifiedAttributesSequenceItem, _tag);
         var value = dataset.GetString(_tag);
         value = Regex.Replace(value, _pattern, _replacement);
         dataset.AddOrUpdate(_tag, value);
     }
 }
Exemplo n.º 9
0
        public void Transform(DicomDataset dataset, DicomDataset modifiedAttributesSequenceItem = null)
        {
            var remove = dataset.EnumerateMasked(_mask).Select(x => x.Tag).ToList();

            foreach (DicomTag tag in remove)
            {
                dataset.CopyTo(modifiedAttributesSequenceItem, tag);
                dataset.Remove(tag);
            }
        }
Exemplo n.º 10
0
        /// <summary>
        /// Add or updates a Dicom tag at the top level of Dicom tags.
        /// </summary>
        /// <param name="dicomDatasetDeAnonymized">The dicom dataset de anonymized.</param>
        /// <param name="referenceDicomDataset">The reference dicom dataset.</param>
        /// <param name="addOrUpdateTag">The tag to add or update.</param>
        public static void SimpleTopLevelAddOrUpdate(DicomDataset dicomDatasetDeAnonymized, DicomDataset referenceDicomDataset, DicomTag addOrUpdateTag)
        {
            referenceDicomDataset    = referenceDicomDataset ?? throw new ArgumentNullException(nameof(referenceDicomDataset));
            dicomDatasetDeAnonymized = dicomDatasetDeAnonymized ?? throw new ArgumentNullException(nameof(dicomDatasetDeAnonymized));

            if (referenceDicomDataset.Contains(addOrUpdateTag))
            {
                referenceDicomDataset.CopyTo(dicomDatasetDeAnonymized, addOrUpdateTag);
            }
        }
Exemplo n.º 11
0
        public static DicomDataset GetDefaultSeriesQuery( )
        {
            DicomDataset ds = new DicomDataset( )
            {
                AutoValidate = false
            };

            _seriesDs.CopyTo(ds);

            return(ds);
        }
Exemplo n.º 12
0
 public void Transform(DicomDataset dataset, DicomDataset modifiedAttributesSequenceItem = null)
 {
     if (dataset.Contains(_tag))
     {
         dataset.CopyTo(modifiedAttributesSequenceItem, _tag);
         var      value = dataset.GetString(_tag);
         string[] parts = value.Split(_seperators);
         value = string.Format(_format, parts);
         dataset.AddOrUpdate(_tag, value);
     }
 }
Exemplo n.º 13
0
        public static DicomDataset GetDefaultInstanceQuery( )
        {
            DicomDataset ds = new DicomDataset( )
            {
                AutoValidate = false
            };

            _instanceDs.CopyTo(ds);

            return(ds);
        }
Exemplo n.º 14
0
        /// <summary>
        /// Construct new film session for specified SOP instance UID
        /// </summary>
        /// <param name="sopClassUID">Film session SOP Class UID</param>
        /// <param name="sopInstance">Film session SOP instance UID</param>
        /// <param name="dataset">Film session dataset</param>
        /// <param name="isColor">Color images?</param>
        public FilmSession(DicomUID sopClassUID, DicomUID sopInstance, DicomDataset dataset, bool isColor = false)
            : this(sopClassUID, sopInstance, isColor)
        {
            if (dataset == null)
            {
                throw new ArgumentNullException(nameof(dataset));
            }
            dataset.CopyTo(this);

            InternalTransferSyntax = dataset.InternalTransferSyntax;
        }
Exemplo n.º 15
0
        /// <summary>
        /// Construct new film session for specified SOP instance UID
        /// </summary>
        /// <param name="sopInstance">Film session SOP instance UID</param>
        /// <param name="dataset">Film session dataset</param>
        public FilmSession(DicomUID sopClassUID, DicomUID sopInstance, DicomDataset dataset, bool isColor = false)
            : this(sopClassUID, sopInstance)
        {
            if (dataset == null)
            {
                throw new ArgumentNullException("dataset");
            }
            dataset.CopyTo(this);

            this.InternalTransferSyntax = dataset.InternalTransferSyntax;
            IsColor = isColor;
        }
Exemplo n.º 16
0
        static public unsafe void GetAverageValue(this DicomDataset original, IDicomCodec codec, out double average, out double dispersion, out ushort min, out ushort max)
        {
            DicomDataset dataset = new DicomDataset();

            original.CopyTo(dataset);

            DicomPixelData pixelData       = DicomPixelData.Create(dataset, true);
            DicomPixelData pixelDataSource = DicomPixelData.Create(original, false);

            codec.Decode(pixelDataSource, pixelData, new DicomJpegParams {
            });
            GetAverageValue(dataset, out average, out dispersion, out min, out max);
        }
Exemplo n.º 17
0
        static public unsafe void GetAverageValue(this DicomDataset original, byte[] bytes, int size, out double average, out double dispersion, out ushort min, out ushort max)
        {
            DicomDataset dataset = new DicomDataset();

            original.CopyTo(dataset);

            DicomPixelData pixelData = DicomPixelData.Create(dataset, true);

            if (pixelData.BytesAllocated != 2 || pixelData.SamplesPerPixel != 1)
            {
                throw new Exception();
            }
            double sum = 0.0;

            min = ushort.MaxValue;
            max = ushort.MinValue;
            fixed(byte *floorPointer = &bytes[0])
            {
                byte *roofPointer = floorPointer + size;

                for (ushort *pointer = (ushort *)floorPointer; pointer != roofPointer; pointer++)
                {
                    ushort value = *pointer;
                    sum += value;
                    if (value < min)
                    {
                        min = value;
                    }
                    if (value > max)
                    {
                        max = value;
                    }
                }
            }

            average = sum / (pixelData.Width * pixelData.Height);
            sum     = 0.0;
            fixed(byte *floorPointer = &bytes[0])
            {
                byte *roofPointer = floorPointer + size;

                for (ushort *pointer = (ushort *)floorPointer; pointer != roofPointer; pointer++)
                {
                    double temp = *pointer - average;
                    sum += temp * temp;
                }
            }

            dispersion = Math.Sqrt(sum / (pixelData.Width * pixelData.Height - 1));
        }
Exemplo n.º 18
0
        static public DicomDataset Compress(this DicomDataset original, DicomTransferSyntax dicomTransferSyntax, IDicomCodec codec, DicomCodecParams jpegParams)
        {
            DicomDataset dataset = new DicomDataset(dicomTransferSyntax);

            original.CopyTo(dataset);

            DicomPixelData pixelData = DicomPixelData.Create(dataset, true);

            DicomPixelData pixelDataSource = DicomPixelData.Create(original, false);

            codec.Encode(pixelDataSource, pixelData, jpegParams);

            return(dataset);
        }
        public IList <TestInstanceInfo> Save(string destDir, string filenamePrefix, DicomTransferSyntax transferSyntax, int instancesToGenerate = 1, string sopClassUid = "1.2.840.10008.5.1.4.1.1.11.1")
        {
            Console.Write("Generating test files.");
            if (!Directory.Exists(destDir))
            {
                Directory.CreateDirectory(destDir);
            }

            var dataset = new DicomDataset();

            baseDataset.CopyTo(dataset);
            dataset.AddOrUpdate(DicomTag.SOPClassUID, sopClassUid);

            var dicomFile = new DicomFile(dataset);

            if (transferSyntax != dicomFile.Dataset.InternalTransferSyntax)
            {
                var transcoder = new DicomTranscoder(dicomFile.Dataset.InternalTransferSyntax, transferSyntax, outputCodecParams: new DicomJpegParams()
                {
                    Quality = 100, ConvertColorspaceToRGB = true
                });
                dicomFile = transcoder.Transcode(dicomFile);
            }

            var instancesCreated = new List <TestInstanceInfo>();

            for (int i = 0; i < instancesToGenerate; i++)
            {
                Console.Write(".");
                var sopInstanceUid = DicomUIDGenerator.GenerateDerivedFromUUID();
                var filePath       = Path.Combine(destDir, $"{filenamePrefix}-{i:00000}.dcm");
                dicomFile.Dataset.AddOrUpdate(DicomTag.SOPInstanceUID, sopInstanceUid);
                dicomFile.FileMetaInfo.AddOrUpdate(DicomTag.MediaStorageSOPInstanceUID, sopInstanceUid);
                dicomFile.FileMetaInfo.AddOrUpdate(DicomTag.MediaStorageSOPClassUID, sopClassUid);

                dicomFile.Clone().Save(filePath);

                instancesCreated.Add(new TestInstanceInfo
                {
                    PatientId         = dicomFile.Dataset.GetSingleValue <string>(DicomTag.PatientID),
                    StudyInstanceUid  = dicomFile.Dataset.GetSingleValue <string>(DicomTag.StudyInstanceUID),
                    SeriesInstanceUid = dicomFile.Dataset.GetSingleValue <string>(DicomTag.SeriesInstanceUID),
                    SopInstanceUid    = dicomFile.Dataset.GetSingleValue <string>(DicomTag.SOPInstanceUID),
                    FilePath          = filePath
                });
            }
            Console.WriteLine(".");
            return(instancesCreated);
        }
Exemplo n.º 20
0
        static public DicomDataset Uncompress(this DicomDataset original, IDicomCodec codec)
        {
            DicomDataset dataset = new DicomDataset();

            original.CopyTo(dataset);

            DicomPixelData pixelData = DicomPixelData.Create(dataset, true);

            DicomPixelData pixelDataSource = DicomPixelData.Create(original, false);

            codec.Decode(pixelDataSource, pixelData, new DicomJpeg2000Params {
            });

            return(dataset);
        }
Exemplo n.º 21
0
        /// <summary>
        /// Initializes a new instance of the <see cref="PresentationLut"/> class.
        /// </summary>
        /// <param name="sopInstance">SOP Instance UID associated with the Presentation LUT information object. If <code>null</code>,
        /// a UID will be automatically generated.</param>
        /// <param name="dataset">Dataset presumed to contain Presentation LUT data.</param>
        public PresentationLut(DicomUID sopInstance, DicomDataset dataset)
        {
            if (dataset == null)
            {
                throw new ArgumentNullException(nameof(dataset));
            }
            dataset.CopyTo(this);

            if (!dataset.Contains(DicomTag.PresentationLUTSequence))
            {
                CreateLutSequence();
            }

            SopInstanceUid = string.IsNullOrEmpty(sopInstance?.UID) ? DicomUID.Generate() : sopInstance;
            AddOrUpdate(DicomTag.SOPInstanceUID, SopInstanceUid);
        }
Exemplo n.º 22
0
 public void Transform(DicomDataset dataset, DicomDataset modifiedAttributesSequenceItem = null)
 {
     if (dataset.Contains(_tag))
     {
         dataset.CopyTo(modifiedAttributesSequenceItem, _tag);
         var value = dataset.GetString(_tag);
         if (_totalLength < 0)
         {
             value = value.PadLeft(-_totalLength, _paddingChar);
         }
         else
         {
             value = value.PadRight(_totalLength, _paddingChar);
         }
         dataset.AddOrUpdate(_tag, value);
     }
 }
Exemplo n.º 23
0
 public void Transform(DicomDataset dataset, DicomDataset modifiedAttributesSequenceItem = null)
 {
     if (dataset.Contains(_tag))
     {
         dataset.CopyTo(modifiedAttributesSequenceItem, _tag);
         var      value = dataset.GetString(_tag);
         string[] parts = value.Split('\\');
         for (int i = 0; i < parts.Length; i++)
         {
             if (parts[i].Length > _length)
             {
                 parts[i] = parts[i].Substring(0, _length);
             }
         }
         value = string.Join("\\", parts);
         dataset.AddOrUpdate(_tag, value);
     }
 }
Exemplo n.º 24
0
 public void Transform(DicomDataset dataset, DicomDataset modifiedAttributesSequenceItem = null)
 {
     if (dataset.Contains(_tag))
     {
         dataset.CopyTo(modifiedAttributesSequenceItem, _tag);
         var value = dataset.GetString(_tag);
         if (_position == DicomTrimPosition.Both)
         {
             if (_trim != null)
             {
                 value = value.Trim(_trim);
             }
             else
             {
                 value = value.Trim();
             }
         }
         else if (_position == DicomTrimPosition.Start)
         {
             if (_trim != null)
             {
                 value = value.TrimStart(_trim);
             }
             else
             {
                 value = value.TrimStart();
             }
         }
         else
         {
             if (_trim != null)
             {
                 value = value.TrimEnd(_trim);
             }
             else
             {
                 value = value.TrimEnd();
             }
         }
         dataset.AddOrUpdate(_tag, value);
     }
 }
Exemplo n.º 25
0
        private void PopulateData()
        {
            var templateDS = DicomHelper.GetDicomDataset(0);
            var modalities = new string[] { "CT", "MR", "XA" };

            for (int studyIndex = 0; studyIndex < TotalNumberOfStudies; studyIndex++)
            {
                var studyDs = new DicomDataset( );


                templateDS.CopyTo(studyDs);

                studyDs.AddOrUpdate(DicomTag.StudyInstanceUID, string.Format("std.{0}", studyIndex));

                for (int seriesIndex = 0; seriesIndex < NumberOfSeriesInStudy; seriesIndex++)
                {
                    var seriesDs = new DicomDataset( );


                    studyDs.CopyTo(seriesDs);

                    seriesDs.AddOrUpdate(DicomTag.SeriesInstanceUID, string.Format("std.{0}.ser.{1}", studyIndex, seriesIndex));
                    seriesDs.AddOrUpdate(DicomTag.Modality, modalities[studyIndex % modalities.Length]);

                    for (int instanceIndex = 0; instanceIndex < NumberOfInstancesInSeries; instanceIndex++)
                    {
                        var instanceDs = new DicomDataset( );


                        seriesDs.CopyTo(instanceDs);

                        instanceDs.AddOrUpdate(DicomTag.SOPInstanceUID, string.Format("std.{0}.ser.{1}.inst.{2}", studyIndex, seriesIndex, instanceIndex));

                        StoreService.StoreDicom(instanceDs, new DataAccess.InstanceMetadata());
                    }
                }
            }
        }
Exemplo n.º 26
0
 public void Transform(DicomDataset dataset, DicomDataset modifiedAttributesSequenceItem = null)
 {
     if (dataset.Contains(_tag))
     {
         dataset.CopyTo(modifiedAttributesSequenceItem, _tag);
         var value = dataset.GetString(_tag);
         if (_position == DicomTrimPosition.Start || _position == DicomTrimPosition.Both)
         {
             while (value.StartsWith(_trim))
             {
                 value = value.Substring(_trim.Length);
             }
         }
         if (_position == DicomTrimPosition.End || _position == DicomTrimPosition.Both)
         {
             while (value.EndsWith(_trim))
             {
                 value = value.Substring(0, value.Length - _trim.Length);
             }
         }
         dataset.AddOrUpdate(_tag, value);
     }
 }
Exemplo n.º 27
0
		public void Transform(DicomDataset dataset, DicomDataset modifiedAttributesSequenceItem = null) {
			if (dataset.Contains(_tag)) {
				dataset.CopyTo(modifiedAttributesSequenceItem, _tag);
				var value = dataset.Get<string>(_tag, -1, String.Empty);
				if (_totalLength < 0)
					value = value.PadLeft(-_totalLength, _paddingChar);
				else
					value = value.PadRight(_totalLength, _paddingChar);
				dataset.Add(_tag, value);
			}
		}
Exemplo n.º 28
0
		public void Transform(DicomDataset dataset, DicomDataset modifiedAttributesSequenceItem = null) {
			if (dataset.Contains(_tag)) {
				dataset.CopyTo(modifiedAttributesSequenceItem, _tag);
				var value = dataset.Get<string>(_tag, -1, String.Empty);
				value = Regex.Replace(value, _pattern, _replacement);
				dataset.Add(_tag, value);
			}
		}
Exemplo n.º 29
0
        public virtual void ReadData(string tableName, string columnName, object value)
        {
            var column    = SchemaProvider.GetColumn(tableName, columnName);
            var dicomTags = column.Tags;


            if (IsDBNullValue(value))
            {
                return;
            }

            if (column.IsKey)
            {
                CurrentData.KeyValue = value.ToString( );
            }

            if (column.IsForeign)
            {
                string keyString = value.ToString( );

                KeyToDataSetCollection resultSet = null;

                if (ResultSets.TryGetValue(column.Table.Parent, out resultSet))
                {
                    DicomDataset foreignDs = (DicomDataset)resultSet[keyString];

                    if (QueryLevelTableName == column.Table.Name)
                    {
                        foreignDs.Merge(CurrentData.CurrentDs);

                        //resultSet[keyString] = CurrentData.CurrentDs ;
                    }
                    else
                    {
                        if (column.Table.IsSequence)
                        {
                            DicomSequence sq   = (DicomSequence)CurrentData.ForeignDs.Get <DicomSequence> (CurrentData.ForeignTagValue);
                            DicomDataset  item = new DicomDataset( );

                            sq.Items.Add(item);

                            CurrentData.CurrentDs.Merge(item);

                            CurrentData.CurrentDs = item;
                        }
                        else if (column.Table.IsMultiValue)
                        {
                            CurrentData.CurrentDs = foreignDs;
                        }
                        else
                        {
                            CurrentData.CurrentDs.Merge(foreignDs);

                            foreignDs.CopyTo(CurrentData.CurrentDs);     //TODO: check if above merge is still necessary with this new CopyTo method
                        }
                    }
                }
            }

            if (null == dicomTags)
            {
                return;
            }

            ReadTags(columnName, value, dicomTags);
        }
Exemplo n.º 30
0
        public void Transform(DicomDataset dataset, DicomDataset modifiedAttributesSequenceItem = null)
        {
            IDbConnection connection = null;

            try
            {
                if (_dbType == DatabaseType.Odbc) connection = new OdbcConnection(_connectionString);
                else if (_dbType == DatabaseType.MsSql) connection = new SqlConnection(_connectionString);

                using (IDbCommand command = connection.CreateCommand())
                {
                    command.Connection = connection;
                    command.CommandText = _query;

                    for (int i = 0; i < _params.Count; i++)
                    {
                        var str = dataset.Get<string>(_params[i], -1, String.Empty);
                        SqlParameter prm = new SqlParameter(String.Format("@{0}", i), str);
                        command.Parameters.Add(prm);
                    }

                    connection.Open();

                    if (_output.Count == 0)
                    {
                        command.ExecuteNonQuery();
                    }
                    else
                    {
                        using (IDataReader reader = command.ExecuteReader())
                        {
                            if (reader.Read())
                            {
                                for (int i = 0; i < _output.Count; i++)
                                {
                                    dataset.CopyTo(modifiedAttributesSequenceItem, _output[i]);
                                    string str = reader.GetString(i);
                                    dataset.Add(_output[i], str);
                                }
                            }
                        }
                    }

                    connection.Close();

                    connection = null;
                }
            }
            finally
            {
                if (connection != null)
                {
                    if (connection.State == ConnectionState.Closed || connection.State == ConnectionState.Broken) connection.Close();
                    connection.Dispose();
                }
            }
        }
Exemplo n.º 31
0
		public void Transform(DicomDataset dataset, DicomDataset modifiedAttributesSequenceItem = null) {
			dataset.CopyTo(modifiedAttributesSequenceItem, _tag);
			dataset.Add(_tag, _value);
		}
Exemplo n.º 32
0
        static internal unsafe void Start(string[] args)
        {
            DicomFile file            = new DicomFile();
            var       z               = file.Dataset.InternalTransferSyntax;
            string    sourceDirectory = Environment.GetEnvironmentVariable("SOURCE_DIRECTORY");
            string    fontDirectory   = Environment.GetEnvironmentVariable("FONT_DIRECTORY");


            System.Drawing.Bitmap w = new System.Drawing.Bitmap(100, 100, System.Drawing.Imaging.PixelFormat.Format24bppRgb);
            w.Save(System.IO.Path.Combine(sourceDirectory, "image.png"));
            var d = System.Drawing.Image.FromFile(System.IO.Path.Combine(sourceDirectory, "image.png"), false);
            // string filePath = System.IO.Path.Combine(sourceDirectory, "DICOM/SikorskayaN.M/1.2.840.113681.3232266507.1433317480.4724.262");
            // string filePath = System.IO.Path.Combine(sourceDirectory, "DICOM/Topina V A/1.2.840.113681.169869557.1534493190.4808.47144");
            // string filePath = System.IO.Path.Combine(sourceDirectory, "DICOM/!Test/ИС Флюорография/ФЛЮ для показа/Пациент001/Пациент001.dcm");
            // string filePath = System.IO.Path.Combine(sourceDirectory, "1");
            // string filePath = System.IO.Path.Combine(sourceDirectory, "DICOM/Fluorography/Emias Compressed/1.871.3.2050448135.34720.20335.72851334.2248937210.1.1.1");
            // string filePath = System.IO.Path.Combine(sourceDirectory, "DICOM/Fluorography/Emias Compressed/1.871.3.1778880733.53108.19741.3386264761.3888045999.1.1.1");
            // string filePath = System.IO.Path.Combine(sourceDirectory, "DICOM/Fluorography/Emias Compressed/1.871.3.3958735481.62656.17963.4096047274.351950500.1.1.1");
            string filePath = System.IO.Path.Combine(sourceDirectory, "/media/nikolaev_ov/CEFE3C54FE3C36D5/DICOM/ComputerTomography/Covid/SE0  (3)/IM0");
            // string filePath = System.IO.Path.Combine(sourceDirectory, "SE000001/IM000000");

            // string filePath = System.IO.Path.Combine(sourceDirectory, "SC_R_CC.dcm");
            // string[] files = Directory.GetFiles("/media/nikolaev_ov/CEFE3C54FE3C36D5/DICOM/ComputerTomography/3000566.000000-03192/");
            DicomFile    dicomFile = DicomFile.Open(filePath);
            DicomDataset dataset   = dicomFile.Dataset;
            // var t = dataset.InternalTransferSyntax;
            // dataset = Compress(dataset, DicomTransferSyntax.JPEGProcess1, new DicomJpegProcess1Codec());
            // dicomFile = new DicomFile(dataset);
            // dicomFile.Save(System.IO.Path.Combine(sourceDirectory, "1"));

            // dataset.AddOrUpdate(DicomTag.WindowCenter, 32767.0);
            // dataset.AddOrUpdate(DicomTag.WindowWidth, 65534.0);
            // dicomFile.Save(System.IO.Path.Combine(sourceDirectory, "1"));

            // PullDicom(dataset);
            // GetAverageValue(dataset, out double average, out double dispersion, out ushort min, out ushort max);
            // GetAverageValue(dataset, new DicomJpegLsLosslessCodec(), out double average, out double dispersion, out ushort min, out ushort max);
            // GetAverageValue(dataset, new JpegLosslessDecoderWrapperProcess14SV1(), out double average, out double dispersion, out ushort min, out ushort max);
            var    bitsAllocated             = dataset.GetSingleValue <string>(DicomTag.BitsAllocated);
            var    BitsStored                = dataset.GetSingleValue <string>(DicomTag.BitsStored);
            var    samplesPerPixel           = dataset.GetSingleValue <string>(DicomTag.SamplesPerPixel);
            var    photometricInterpretation = dataset.GetSingleValue <string>(DicomTag.PhotometricInterpretation);
            var    PixelRepresentation       = dataset.GetSingleValue <string>(DicomTag.PixelRepresentation);
            double windowCenter              = dataset.GetValue <double>(DicomTag.WindowCenter, 0);
            double windowWidth               = dataset.GetValue <double>(DicomTag.WindowWidth, 0);

            byte[] pixelData;
            using (FileStream readStream = new FileStream(filePath, FileMode.Open, FileAccess.Read))
                pixelData = DicomDatasetExtensions.DecodeImage(readStream, out _).PixelData;
            // using FileStream stream1 = new FileStream("/media/nikolaev_ov/CEFE3C54FE3C36D5/pixelData.bin", FileMode.OpenOrCreate, FileAccess.ReadWrite);
            // pixelData = new byte[stream1.Length];
            // stream1.Read(pixelData, 0, pixelData.Length);
            // GetAverageValue(dataset, pixelData, pixelData.Length, out double average, out double dispersion, out ushort min, out ushort max);

            DicomImage image = new DicomImage(dataset);

            image.RenderImage().AsSharedBitmap().Save(System.IO.Path.Combine(sourceDirectory, "image.png"));
            DicomPixelData sdsd = DicomPixelData.Create(dataset);

            // pixelData = sdsd.GetFrame(0).Data;
            fixed(byte *p = &pixelData[0])
            {
                //                 var bitmap2 = new System.Drawing.Bitmap(image.Width, image.Height, System.Drawing.Imaging.PixelFormat.Format24bppRgb);

                // stream1.SetLength(0);
                //                 for (int x = 0; x != bitmap2.Width; x++)
                //                     for (int y = 0; y != bitmap2.Height; y++)
                //                     {
                //                         byte value = pixelData[y * bitmap2.Width + x];
                //                         bitmap2.SetPixel(x, y, System.Drawing.Color.FromArgb(value));
                //                         stream1.WriteByte(value);
                //                     }
                //                     stream1.Close();
                //                 bitmap2.Save("/media/nikolaev_ov/CEFE3C54FE3C36D5/image.png");
                //                 var img = new SixLabors.ImageSharp.Image<L8>(image.Width, image.Height);
                //                 for (int y = 0; y < image.Height; y++)
                //                 {
                //                     Span<L8> span = img.GetPixelRowSpan(y);
                //                     for (int x = 0; x < image.Width; x++)
                //                         span[x] = new L8(pixelData[y * image.Width + x]);
                //                 }
                // var img = Image.LoadPixelData<L8>(new ReadOnlySpan<L8>(p, pixelData.Length), image.Width, image.Height);
                var img = Image.LoadPixelData <L16>(new ReadOnlySpan <L16>(p, pixelData.Length / 2), image.Width, image.Height);

                img.Mutate(a =>
                {
                    // Color whiteColor = new Color(new Rgba64(ushort.MaxValue & 0x0FFF, ushort.MaxValue & 0x0FFF, ushort.MaxValue & 0x0FFF, ushort.MaxValue & 0x0FFF));
                    Color whiteColor = new Color(new Rgba64(ushort.MaxValue, ushort.MaxValue, ushort.MaxValue, ushort.MaxValue));
                    Color blackColor = new Color(new Rgba64(ushort.MinValue, ushort.MinValue, ushort.MinValue, ushort.MinValue));
                    a.Draw(Pens.Solid(whiteColor, 10), new EllipsePolygon(new PointF(image.Width * 0.5F, image.Height * 0.5F), 200F));
                    FontCollection fontCollection = new FontCollection();
                    fontCollection.Install(System.IO.Path.Combine(fontDirectory, "fonts/TIMES.TTF"));
                    string text = "ТОЛЬКО ДЛЯ ИССЛЕДОВАТЕЛЬСКИХ ЦЕЛЕЙ";
                    Font font   = new Font(fontCollection.Families.First(), 64, FontStyle.Regular);
                    FontRectangle fontRectangle = TextMeasurer.Measure(text, new RendererOptions(font));
                    PointF textPoint            = new PointF(image.Width * 0.5F - fontRectangle.Width * 0.5F, image.Height * 0.5F - 200F - fontRectangle.Height);
                    a.DrawText(text, font, blackColor, new PointF(textPoint.X + 5, textPoint.Y + 5));
                    a.DrawText(text, font, whiteColor, textPoint);
                });
                using FileStream stream = new FileStream(System.IO.Path.Combine(sourceDirectory, "image.jpg"), FileMode.OpenOrCreate, FileAccess.Write);
                img.Save(stream, new JpegEncoder()
                {
                    Quality = 100, Subsample = JpegSubsample.Ratio444
                });
                for (int y = 0; y < image.Height; y++)
                {
                    Span <L16> span = img.GetPixelRowSpan(y);

                    fixed(L16 *p2 = &span[0])
                    Buffer.MemoryCopy(p2, p + y * image.Width * 2, image.Width * 2, image.Width * 2);
                }
            }

            DicomDataset dataset2 = new DicomDataset();

            dataset.CopyTo(dataset2);
            dataset   = dataset2;
            dicomFile = new DicomFile(dataset);
            DicomPixelData dicomPixelData = DicomPixelData.Create(dataset, true);

            dicomPixelData.AddFrame(new MemoryByteBuffer(pixelData));
            // dicomFile.Save(Path.Combine(sourceDirectory, "1");
            // GetAverageValue(dataset, out average, out dispersion, out min, out max);

            windowCenter = dataset.GetSingleValue <double>(DicomTag.WindowCenter);
            windowWidth  = dataset.GetSingleValue <double>(DicomTag.WindowWidth);
            // string VOILUTFunction = dataset.GetSingleValue<string>(DicomTag.VOILUTFunction);
            // dataset = GenerateUncompressedDicomDataset(dataset);
            dataset = dataset.Compress(DicomTransferSyntax.JPEGLSLossless, new DicomJpegLsLosslessCodec(), new DicomJpegParams {
            });
            // GetAverageValue(dataset, new DicomJpegLsLosslessCodec(), out average, out dispersion, out min, out max);
            // dataset = Uncompress(dataset, new DicomJpegLsLosslessCodec());
            // GetAverageValue(dataset, out average, out dispersion, out min, out max);
            dicomFile = new DicomFile(dataset);

            // dataset.AddOrUpdate(DicomTag.WindowCenter, 255.0 * 0.5);
            // dataset.AddOrUpdate(DicomTag.WindowWidth, 255.0);
            dataset.Remove(DicomTag.WindowCenter);
            dataset.Remove(DicomTag.WindowWidth);
            // CheckDicomTransferSyntax(dataset);
            // PullDicom(dataset);

            dicomFile.Save(System.IO.Path.Combine(sourceDirectory, "1"));
        }
Exemplo n.º 33
0
		public void Transform(DicomDataset dataset, DicomDataset modifiedAttributesSequenceItem = null) {
			if (dataset.Contains(_src)) {
				dataset.CopyTo(modifiedAttributesSequenceItem, _dst);
				dataset.Add(_dst, dataset.Get<IByteBuffer>(_src));
			}
		}
Exemplo n.º 34
0
		public void Transform(DicomDataset dataset, DicomDataset modifiedAttributesSequenceItem = null) {
			if (dataset.Contains(_tag)) {
				dataset.CopyTo(modifiedAttributesSequenceItem, _tag);
				var value = dataset.Get<string>(_tag, -1, String.Empty);
				string[] parts = value.Split('\\');
				for (int i = 0; i < parts.Length; i++) {
					if (parts[i].Length > _length)
						parts[i] = parts[i].Substring(0, _length);
				}
				value = String.Join("\\", parts);
				dataset.Add(_tag, value);
			}
		}
Exemplo n.º 35
0
        // static private void StartGdcm()
        // {
        //     var s = new gdcm.Reader();
        //     s.SetFileName("/mnt/c/Users/nikol/Desktop/CR.1.871.3.1522049724.50292.18240.95439262.3570939512.1.1.1");
        //     bool b = s.CanRead();
        //     bool d = s.Read();
        // }

        static private unsafe void Main(string[] args)
        {
            // ComparingDicomFiles.Start(args);
            // return;
            // StartGdcm();

            Dicom.Imaging.Codec.TranscoderManager.SetImplementation(new NativeTranscoderManager());
            ImageManager.SetImplementation(WinFormsImageManager.Instance);
            const string filePath   = "/mnt/d/DICOM/Fluorography/favorite/jpeg-process14-1/sources/1.871.3.2050448135.34720.20335.72851334.2248937210.1.1.1";
            DicomFile    dicomFile  = DicomFile.Open(filePath);
            DicomDataset dataset    = dicomFile.Dataset;
            DicomImage   dicomImage = new DicomImage(dataset, 0);
            var          image      = dicomImage.RenderImage(0);
            var          bitmap     = image.AsSharedBitmap();

            bitmap.Save("/mnt/c/Users/nikol/Desktop/image-new.png");

            byte[] pixelData;
            Dictionary <string, string> meta;

            using (FileStream readStream = new FileStream(filePath, FileMode.Open, FileAccess.Read))
                pixelData = DicomDatasetExtensions.DecodeImage(readStream, out meta).PixelData;
            // using (FileStream readStream = new FileStream(sc, FileMode.Open, FileAccess.Read))
            //     pixelData = DicomDatasetExtensions.DecodeImage(readStream, out meta).PixelData;
            ushort width  = dataset.GetValue <ushort>(DicomTag.Columns, 0);
            ushort height = dataset.GetValue <ushort>(DicomTag.Rows, 0);

            byte[] pixelData2   = new byte[pixelData.Length / 2 * 3];
            double windowCenter = dataset.GetValue <double>(DicomTag.WindowCenter, 0);
            double windowWidth  = dataset.GetValue <double>(DicomTag.WindowWidth, 0);

            fixed(byte *pPixelData = &pixelData[0])
            for (int pixelIndex = 0; pixelIndex != pixelData.Length / 2; pixelIndex++)
            {
                int rowIndex = pixelIndex / width;

                pixelData2[pixelIndex * 3 + (int)(rowIndex / (double)height * 3)] = (byte)(Math.Clamp((*(((ushort *)pPixelData) + pixelIndex) - windowCenter + windowWidth * 0.5), 0.0, windowWidth) / windowWidth * 255.0);
            }

            meta = new Dictionary <string, string>();
            foreach (var item in dataset)
            {
                try
                {
                    string value = dataset.GetValue <string>(item.Tag, 0);
                    int    count = dataset.GetValueCount(item.Tag);
                    for (int valueIndex = 1; valueIndex != count; valueIndex++)
                    {
                        value += $"\\{dataset.GetValue<string>(item.Tag, valueIndex)}";
                    }
                    meta.Add(item.Tag.ToString().Replace("(", string.Empty).Replace(")", string.Empty).Replace(',', '|'), value);
                }
                catch
                {
                }
            }

            fixed(byte *p = &pixelData2[0])
            {
                var im = itk.simple.SimpleITK.ImportAsUInt8(new IntPtr(p), new itk.simple.VectorUInt32(new uint[] { width, height }), new itk.simple.VectorDouble(new double[] { 1, 1 }), new itk.simple.VectorDouble(new double[] { 0, 0 }), new itk.simple.VectorDouble(new double[] { 1, 0, 0, 1 }), 3);

                itk.simple.ImageFileWriter writer = new itk.simple.ImageFileWriter();
                writer.SetFileName("/mnt/c/Users/nikol/Desktop/rewritten.dcm");
                writer.KeepOriginalImageUIDOff();
                foreach (var pair in meta)
                {
                    im.SetMetaData(pair.Key, pair.Value);
                }
                writer.SetImageIO("GDCMImageIO");
                writer.UseCompressionOff();
                writer.Execute(im);
                writer.Dispose();
                im.Dispose();
            }

            // dicomFile = DicomFile.Open("/mnt/c/Users/nikol/Desktop/CR.1.871.3.1522049724.50292.18240.95439262.3570939512.1.1.dcm");
            // dicomFile.Dataset.AddOrUpdate<string>(DicomTag.StudyInstanceUID, dicomFile.Dataset.GetSingleValue<string>(DicomTag.StudyInstanceUID));
            // dicomFile.Save("/mnt/c/Users/nikol/Desktop/CR.1.871.3.1522049724.50292.18240.95439262.3570939512.1.2.dcm");
            DicomDataset dataset2 = new DicomDataset();

            dataset.CopyTo(dataset2);
            dataset = dataset2;
            DicomPixelData dicomPixelData = DicomPixelData.Create(dataset, true);

            dicomPixelData.AddFrame(new MemoryByteBuffer(pixelData2));
            dataset.AddOrUpdate(DicomTag.StudyInstanceUID, DicomUIDGenerator.GenerateDerivedFromUUID());
            dataset.AddOrUpdate(DicomTag.SeriesInstanceUID, DicomUIDGenerator.GenerateDerivedFromUUID());
            dataset.AddOrUpdate(DicomTag.SOPInstanceUID, DicomUIDGenerator.GenerateDerivedFromUUID());
            dataset.AddOrUpdate(DicomTag.BitsAllocated, (ushort)8);
            dataset.AddOrUpdate(DicomTag.BitsStored, (ushort)8);
            dataset.AddOrUpdate(DicomTag.HighBit, (ushort)7);
            dataset.AddOrUpdate(DicomTag.PixelRepresentation, (ushort)0);
            dataset.AddOrUpdate(DicomTag.SamplesPerPixel, (ushort)3);
            dataset.AddOrUpdate(DicomTag.PlanarConfiguration, (ushort)0);
            dataset.AddOrUpdate(DicomTag.PhotometricInterpretation, PhotometricInterpretation.Rgb.Value);
            dataset.AddOrUpdate(DicomTag.WindowCenter, 127.5);
            dataset.AddOrUpdate(DicomTag.WindowWidth, 255.0);

            dicomFile = new DicomFile(dataset);
            dicomFile.Save("/mnt/c/Users/nikol/Desktop/efferent-no-compression.dcm");

            var j2000lossy = dataset.Compress(DicomTransferSyntax.JPEGLSLossless, new DicomJpegLsLosslessCodec(), new Dicom.Imaging.Codec.DicomJpegLsParams());

            j2000lossy.AddOrUpdate(DicomTag.StudyInstanceUID, DicomUIDGenerator.GenerateDerivedFromUUID());
            j2000lossy.AddOrUpdate(DicomTag.SeriesInstanceUID, DicomUIDGenerator.GenerateDerivedFromUUID());
            j2000lossy.AddOrUpdate(DicomTag.SOPInstanceUID, DicomUIDGenerator.GenerateDerivedFromUUID());
            dicomFile = new DicomFile(j2000lossy);
            dicomFile.Save("/mnt/c/Users/nikol/Desktop/efferent-ls-lossless.dcm");

            var j2000lossless = dataset.Compress(DicomTransferSyntax.JPEGLSNearLossless, new DicomJpegLsNearLosslessCodec(), new Dicom.Imaging.Codec.DicomJpegLsParams());

            j2000lossless.AddOrUpdate(DicomTag.StudyInstanceUID, DicomUIDGenerator.GenerateDerivedFromUUID());
            j2000lossless.AddOrUpdate(DicomTag.SeriesInstanceUID, DicomUIDGenerator.GenerateDerivedFromUUID());
            j2000lossless.AddOrUpdate(DicomTag.SOPInstanceUID, DicomUIDGenerator.GenerateDerivedFromUUID());
            dicomFile = new DicomFile(j2000lossless);
            dicomFile.Save("/mnt/c/Users/nikol/Desktop/efferent-ls-near-lossless.dcm");

            // RemovePixelDataProgram.Start(args);
            // ItkSimpleTestProgram.Start(args);
            // ImageTestProgram.Start(args);
            // CheckImageAttributesProgram.Start(args);
            // TestDicom48bpp.Start(args);
            // Testing3D.Start(args);
            // TestingWindowPresets.Start(args);
            // TestingMultiImageDicom.Start(args);
            // ComparingDicomFiles.Start(args);
            // PresentationState.Start(args);
            // PresentationStateAnalyzer.Start(args);
        }
Exemplo n.º 36
0
 public FilmBox(FilmSession filmSession, DicomUID sopInstance, DicomDataset dataset)
     : this(filmSession, sopInstance, dataset.InternalTransferSyntax)
 {
     dataset.CopyTo(this);
     this.InternalTransferSyntax = dataset.InternalTransferSyntax;
 }
Exemplo n.º 37
0
		public void Transform(DicomDataset dataset, DicomDataset modifiedAttributesSequenceItem = null) {
			dataset.CopyTo(modifiedAttributesSequenceItem, _tag);
			var uid = dataset.Get<DicomUID>(_tag);
			dataset.Add(_tag, _generator.Generate(uid));
		}
Exemplo n.º 38
0
		public void Transform(DicomDataset dataset, DicomDataset modifiedAttributesSequenceItem = null) {
			if (dataset.Contains(_tag)) {
				dataset.CopyTo(modifiedAttributesSequenceItem, _tag);
				var value = dataset.Get<string>(_tag, -1, String.Empty);
				dataset.Add(_tag, value.ToLower());
			}
		}
Exemplo n.º 39
0
		public void Transform(DicomDataset dataset, DicomDataset modifiedAttributesSequenceItem = null) {
			if (dataset.Contains(_tag)) {
				dataset.CopyTo(modifiedAttributesSequenceItem, _tag);
				var value = dataset.Get<string>(_tag, -1, String.Empty);
				string[] parts = value.Split(_seperators);
				value = String.Format(_format, parts);
				dataset.Add(_tag, value);
			}
		}
Exemplo n.º 40
0
		public void Transform(DicomDataset dataset, DicomDataset modifiedAttributesSequenceItem = null) {
			if (dataset.Contains(_tag)) {
				dataset.CopyTo(modifiedAttributesSequenceItem, _tag);
				var value = dataset.Get<string>(_tag, -1, String.Empty);
				if (_position == DicomTrimPosition.Start || _position == DicomTrimPosition.Both)
					while (value.StartsWith(_trim))
						value = value.Substring(_trim.Length);
				if (_position == DicomTrimPosition.End || _position == DicomTrimPosition.Both)
					while (value.EndsWith(_trim))
						value = value.Substring(0, value.Length - _trim.Length);
				dataset.Add(_tag, value);
			}
		}
Exemplo n.º 41
0
		public void Transform(DicomDataset dataset, DicomDataset modifiedAttributesSequenceItem = null) {
			if (dataset.Contains(_tag) && dataset.Get<string>(_tag, -1, String.Empty) == _match) {
				dataset.CopyTo(modifiedAttributesSequenceItem, _tag);
				dataset.Add(_tag, _value);
			}
		}
Exemplo n.º 42
0
 public FilmBox(FilmSession filmSession, DicomUID sopInstance, DicomDataset dataset)
     : this(filmSession, sopInstance, dataset.InternalTransferSyntax)
 {
     dataset.CopyTo(this);
     this.InternalTransferSyntax = dataset.InternalTransferSyntax;
 }
Exemplo n.º 43
0
		public void Transform(DicomDataset dataset, DicomDataset modifiedAttributesSequenceItem = null) {
			if (dataset.Contains(_tag)) {
				dataset.CopyTo(modifiedAttributesSequenceItem, _tag);
				var value = dataset.Get<string>(_tag, -1, String.Empty);
				if (_position == DicomTrimPosition.Both) {
					if (_trim != null)
						value = value.Trim(_trim);
					else
						value = value.Trim();
				} else if (_position == DicomTrimPosition.Start) {
					if (_trim != null)
						value = value.TrimStart(_trim);
					else
						value = value.TrimStart();
				} else {
					if (_trim != null)
						value = value.TrimEnd(_trim);
					else
						value = value.TrimEnd();
				}
				dataset.Add(_tag, value);
			}
		}