コード例 #1
0
        void send_images(List <IPresentationImage> queue)
        {
            AEInformation           destination   = get_server();
            SendSopInstancesRequest image_request = new SendSopInstancesRequest();
            DicomSendServiceClient  sender        = new DicomSendServiceClient();

            if (destination != null)
            {
                image_request.DestinationAEInformation = destination;
                List <string> studyUids    = new List <string>();
                List <string> seriesUids   = new List <string>();
                List <string> imageSopUids = new List <string>();
                foreach (IPresentationImage image in queue)
                {
                    if (image is IImageSopProvider)
                    {
                        ImageSop imageSop = ((IImageSopProvider)image).ImageSop;
                        studyUids.Add(imageSop.StudyInstanceUid);
                        seriesUids.Add(imageSop.SeriesInstanceUid);
                        imageSopUids.Add(imageSop.SopInstanceUid);
                    }
                }
                image_request.StudyInstanceUid  = studyUids[0];
                image_request.SeriesInstanceUid = seriesUids[0];
                image_request.SopInstanceUids   = imageSopUids;
                sender.SendSopInstances(image_request);
                sender.Close();
                LocalDataStoreActivityMonitorComponentManager.ShowSendReceiveActivityComponent(this.Context.DesktopWindow);
            }
        }
コード例 #2
0
        protected override void Dispose(bool disposing)
        {
            if (disposing)
            {
                _frame     = null;
                _dicomFile = null;

                if (_imageSop != null)
                {
                    _imageSop.Dispose();
                    _imageSop = null;
                }

                if (_sopDataSource != null)
                {
                    _sopDataSource.Dispose();
                    _sopDataSource = null;
                }

                if (_filename != null)
                {
                    if (File.Exists(_filename))
                    {
                        File.Delete(_filename);
                    }
                    _filename = null;
                }
            }
            base.Dispose(disposing);
        }
コード例 #3
0
        private List <PresetVoiLut> GetApplicablePresets()
        {
            List <PresetVoiLut> presets = new List <PresetVoiLut>();

            if (this.SelectedPresentationImage is IImageSopProvider)
            {
                //Only temporary until we enable the full functionality in the presets.
                PresetVoiLut autoPreset = new PresetVoiLut(new AutoPresetVoiLutOperationComponent());
                autoPreset.KeyStroke = XKeys.F2;
                presets.Add(autoPreset);

                ImageSop sop = ((IImageSopProvider)this.SelectedPresentationImage).ImageSop;

                PresetVoiLutGroupCollection groups = PresetVoiLutSettings.DefaultInstance.GetPresetGroups();
                PresetVoiLutGroup           group  = CollectionUtils.SelectFirst(groups,
                                                                                 delegate(PresetVoiLutGroup testGroup)
                {
                    return(testGroup.AppliesTo(sop));
                });
                if (group != null)
                {
                    foreach (PresetVoiLut preset in group.Clone().Presets)
                    {
                        if (preset.Operation.AppliesTo(this.SelectedPresentationImage))
                        {
                            presets.Add(preset);
                        }
                    }
                }

                presets.Sort(new PresetVoiLutComparer());
            }

            return(presets);
        }
コード例 #4
0
        protected static IPresentationImage GetImage(ImageKey key)
        {
            string filename = string.Format(_testImagePathFormat, key.ToString().ToLower());

            try
            {
                LocalSopDataSource dataSource = new LocalSopDataSource(filename);
                ImageSop           imageSop   = new ImageSop(dataSource);
                IPresentationImage theOne     = null;
                foreach (IPresentationImage image in PresentationImageFactory.Create(imageSop))
                {
                    if (theOne == null)
                    {
                        theOne = image;
                        continue;
                    }
                    image.Dispose();
                }
                imageSop.Dispose();
                return(theOne);
            }
            catch (Exception ex)
            {
                throw new FileNotFoundException("Unable to load requested test image. Please check that the assembly has been built.", filename, ex);
            }
        }
コード例 #5
0
        private IEnumerable <Frame> GetAcquisitionTimeTestFrames()
        {
            int i = 0;

            foreach (DateTime dateTime in GetAquisitionDateTimes())
            {
                ImageSop sop   = NewImageSop("123", "123", i++);
                Frame    frame = sop.Frames[1];
                DicomMessageSopDataSource dataSource = ((DicomMessageSopDataSource)frame.ParentImageSop.DataSource);

                if (i % 2 == 0)
                {
                    dataSource.SourceMessage.DataSet[DicomTags.AcquisitionDate].SetStringValue(dateTime.Date.ToString(DateParser.DicomDateFormat));
                    dataSource.SourceMessage.DataSet[DicomTags.AcquisitionTime].SetStringValue(dateTime.ToString(TimeParser.DicomFullTimeFormat));
                }
                else
                {
                    dataSource.SourceMessage.DataSet[DicomTags.AcquisitionDatetime].SetStringValue(dateTime.ToString(DateTimeParser.DicomFullDateTimeFormat));
                }

                yield return(frame);

                sop.Dispose();
            }
        }
コード例 #6
0
        public void AddDuplicateImage()
        {
            IImageViewer viewer    = new ImageViewerComponent();
            StudyTree    studyTree = viewer.StudyTree;

            string studyUid1  = DicomUid.GenerateUid().UID;
            string seriesUid1 = DicomUid.GenerateUid().UID;
            string imageUid1  = DicomUid.GenerateUid().UID;

            ImageSop image1 = CreateImageSop("patient1", studyUid1, seriesUid1, imageUid1);
            ImageSop image2 = CreateImageSop("patient1", studyUid1, seriesUid1, imageUid1);

            //The sop has already silently disposed the 2nd data source.
            Assert.IsTrue(ReferenceEquals(image1.DataSource, image2.DataSource));
            studyTree.AddSop(image1);
            studyTree.AddSop(image2);

            Assert.IsTrue(studyTree.Patients["patient1"].Studies[studyUid1].Series[seriesUid1].Sops.Count == 1);

            TestDataSource dataSource = (TestDataSource)image1.DataSource;

            viewer.Dispose();

            Assert.IsTrue(dataSource.IsDisposed);
        }
コード例 #7
0
        protected virtual List <IPresentationImage> CreateImages(KeyImageContentItem item)
        {
            List <IPresentationImage> images = new List <IPresentationImage>();

            ImageSop imageSop = FindReferencedImageSop(item.ReferencedImageSopInstanceUid, item.Source.GeneralStudy.StudyInstanceUid);

            if (imageSop != null)
            {
                int frameNumber = item.FrameNumber.GetValueOrDefault(-1);
                if (item.FrameNumber.HasValue)
                {
                    // FramesCollection is a 1-based index!!!
                    if (frameNumber > 0 && frameNumber <= imageSop.Frames.Count)
                    {
                        images.Add(Create(imageSop.Frames[frameNumber]));
                    }
                    else
                    {
                        Platform.Log(LogLevel.Error, "The referenced key image {0} does not have a frame {1} (referenced in Key Object Selection {2})", item.ReferencedImageSopInstanceUid, frameNumber, item.Source.SopCommon.SopInstanceUid);
                        images.Add(new KeyObjectPlaceholderImage(SR.MessageReferencedKeyImageFrameNotFound));
                    }
                }
                else
                {
                    foreach (Frame frame in imageSop.Frames)
                    {
                        images.Add(Create(frame));
                    }
                }

                Sop presentationStateSop = FindReferencedSop(item.PresentationStateSopInstanceUid, item.Source.GeneralStudy.StudyInstanceUid);
                if (presentationStateSop != null)
                {
                    foreach (IPresentationImage image in images)
                    {
                        if (image is IPresentationStateProvider)
                        {
                            try
                            {
                                IPresentationStateProvider presentationStateProvider = (IPresentationStateProvider)image;
                                presentationStateProvider.PresentationState = DicomSoftcopyPresentationState.Load(presentationStateSop.DataSource);
                            }
                            catch (Exception ex)
                            {
                                Platform.Log(LogLevel.Warn, ex, SR.MessagePresentationStateReadFailure);
                            }
                        }
                    }
                }
            }
            else
            {
                Platform.Log(LogLevel.Warn, "The referenced key image {0} is not loaded as part of the current study (referenced in Key Object Selection {1})", item.ReferencedImageSopInstanceUid, item.Source.SopCommon.SopInstanceUid);
                images.Add(new KeyObjectPlaceholderImage(SR.MessageReferencedKeyImageFromOtherStudy));
            }

            return(images);
        }
コード例 #8
0
        public StoredLayout GetLayout(ImageSop imageSop)
        {
            if (imageSop == null)
            {
                return(this.DefaultLayout);
            }

            return(GetLayout(imageSop.Modality));
        }
コード例 #9
0
        private static void TestVolume(bool signed, VolumeFunction f, IEnumerable <IVolumeSlicerParams> slicerParams, string testName, ImageKernelFunction imageKernel, VolumeKernelFunction volumeKernel)
        {
            const int      FULL_SCALE         = 65535;
            VolumeFunction normalizedFunction = f.Normalize(100);

            using (Volume volume = normalizedFunction.CreateVolume(100, signed))
            {
                float offset = signed ? -32768 : 0;
                foreach (IVolumeSlicerParams slicing in slicerParams)
                {
                    List <double> list = new List <double>();
                    using (VolumeSlicer slicer = new VolumeSlicer(volume, slicing, DicomUid.GenerateUid().UID))
                    {
                        foreach (ISopDataSource slice in slicer.CreateSlices())
                        {
                            using (ImageSop imageSop = new ImageSop(slice))
                            {
                                foreach (IPresentationImage image in PresentationImageFactory.Create(imageSop))
                                {
                                    IImageSopProvider     imageSopProvider     = (IImageSopProvider)image;
                                    IImageGraphicProvider imageGraphicProvider = (IImageGraphicProvider)image;
                                    DicomImagePlane       dip = DicomImagePlane.FromImage(image);

                                    for (int y = 1; y < imageSopProvider.Frame.Rows - 1; y++)
                                    {
                                        for (int x = 1; x < imageSopProvider.Frame.Columns - 1; x++)
                                        {
                                            // pixels on the extreme sides of the volume tend to have more interpolation error due to MPR padding values
                                            Vector3D vector = dip.ConvertToPatient(new PointF(x, y));                                             // +new Vector3D(-0.5f, -0.5f, 0);
                                            if (Between(vector.X, 1, 98) && Between(vector.Y, 1, 98) && Between(vector.Z, 1, 98))
                                            {
                                                float expected = volumeKernel.Invoke(normalizedFunction, vector.X, vector.Y, vector.Z) + offset;
                                                float actual   = imageKernel.Invoke(imageGraphicProvider.ImageGraphic.PixelData, x, y);
                                                list.Add(Math.Abs(expected - actual));
                                            }
                                        }
                                    }

                                    image.Dispose();
                                }
                            }
                            slice.Dispose();
                        }
                    }

                    Statistics stats = new Statistics(list);
                    Trace.WriteLine(string.Format("Testing {0}", testName));
                    Trace.WriteLine(string.Format("\tFunction/Slicing: {0} / {1}", normalizedFunction.Name, slicing.Description));
                    Trace.WriteLine(string.Format("\t       Pixel Rep: {0}", signed ? "signed" : "unsigned"));
                    Trace.WriteLine(string.Format("\t Voxels Compared: {0}", list.Count));
                    Trace.WriteLine(string.Format("\t      Mean Delta: {0:f2} ({1:p2} of full scale)", stats.Mean, stats.Mean / FULL_SCALE));
                    Trace.WriteLine(string.Format("\t    StdDev Delta: {0:f2} ({1:p2} of full scale)", stats.StandardDeviation, stats.StandardDeviation / FULL_SCALE));
                    Assert.Less(stats.Mean, FULL_SCALE * 0.05, "Mean delta exceeds 5% of full scale ({0})", FULL_SCALE);
                    Assert.Less(stats.StandardDeviation, FULL_SCALE * 0.05, "StdDev delta exceeds 5% of full scale ({0})", FULL_SCALE);
                }
            }
        }
コード例 #10
0
        protected internal byte[] GetOverlay(Frame baseFrame, out OverlayFrameParams overlayFrameParams)
        {
            var volume = this.Volume;

            // compute the bounds of the target base image frame in patient coordinates
            var baseTopLeft     = baseFrame.ImagePlaneHelper.ConvertToPatient(new PointF(0, 0));
            var baseTopRight    = baseFrame.ImagePlaneHelper.ConvertToPatient(new PointF(baseFrame.Columns, 0));
            var baseBottomLeft  = baseFrame.ImagePlaneHelper.ConvertToPatient(new PointF(0, baseFrame.Rows));
            var baseFrameCentre = (baseTopRight + baseBottomLeft) / 2;

            // compute the rotated volume slicing basis axes
            var volumeXAxis = (volume.ConvertToVolume(baseTopRight) - volume.ConvertToVolume(baseTopLeft)).Normalize();
            var volumeYAxis = (volume.ConvertToVolume(baseBottomLeft) - volume.ConvertToVolume(baseTopLeft)).Normalize();
            var volumeZAxis = volumeXAxis.Cross(volumeYAxis);

            var @params = new VolumeSlicerParams(volumeXAxis, volumeYAxis, volumeZAxis);

            using (var slice = new VolumeSliceSopDataSource(volume, @params, volume.ConvertToVolume(baseFrameCentre)))
            {
                using (var sliceSop = new ImageSop(slice))
                {
                    using (var overlayFrame = sliceSop.Frames[1])
                    {
                        // compute the bounds of the target overlay image frame in patient coordinates
                        var overlayTopLeft    = overlayFrame.ImagePlaneHelper.ConvertToPatient(new PointF(0, 0));
                        var overlayTopRight   = overlayFrame.ImagePlaneHelper.ConvertToPatient(new PointF(overlayFrame.Columns, 0));
                        var overlayBottomLeft = overlayFrame.ImagePlaneHelper.ConvertToPatient(new PointF(0, overlayFrame.Rows));
                        var overlayOffset     = overlayTopLeft - baseTopLeft;

                        // compute the overlay and base image resolution in pixels per unit patient space (mm).
                        var overlayResolutionX = overlayFrame.Columns / (overlayTopRight - overlayTopLeft).Magnitude;
                        var overlayResolutionY = overlayFrame.Rows / (overlayBottomLeft - overlayTopLeft).Magnitude;
                        var baseResolutionX    = baseFrame.Columns / (baseTopRight - baseTopLeft).Magnitude;
                        var baseResolutionY    = baseFrame.Rows / (baseBottomLeft - baseTopLeft).Magnitude;

                        // compute parameters to register the overlay on the base image
                        var scale  = new PointF(baseResolutionX / overlayResolutionX, baseResolutionY / overlayResolutionY);
                        var offset = new PointF(overlayOffset.X * overlayResolutionX, overlayOffset.Y * overlayResolutionY);

                        //TODO (CR Sept 2010): could this be negative?
                        // validate computed transform parameters
                        Platform.CheckTrue(overlayOffset.Z < 0.5f, "Compute OffsetZ != 0");

                        overlayFrameParams = new OverlayFrameParams(
                            overlayFrame.Rows, overlayFrame.Columns,
                            overlayFrame.BitsAllocated, overlayFrame.BitsStored,
                            overlayFrame.HighBit, overlayFrame.PixelRepresentation != 0 ? true : false,
                            overlayFrame.PhotometricInterpretation == PhotometricInterpretation.Monochrome1 ? true : false,
                            overlayFrame.RescaleSlope, overlayFrame.RescaleIntercept,
                            scale, offset);

                        return(overlayFrame.GetNormalizedPixelData());
                    }
                }
            }
        }
コード例 #11
0
 private static DisposableList <IPresentationImage> CreateImages(DicomFile dicomFile)
 {
     using (var dataSource = new LocalSopDataSource(dicomFile))
     {
         using (var sop = new ImageSop(dataSource))
         {
             return(new DisposableList <IPresentationImage>(PresentationImageFactory.Create(sop)));
         }
     }
 }
コード例 #12
0
        public static void Create(IDesktopWindow desktopWindow, IImageViewer viewer)
        {
            IDisplaySet selectedDisplaySet = viewer.SelectedImageBox.DisplaySet;
            string      name         = String.Format("{0} - Dynamic TE", selectedDisplaySet.Name);
            IDisplaySet t2DisplaySet = new DisplaySet(name, "");

            double currentSliceLocation = 0.0;

            BackgroundTask task = new BackgroundTask(
                delegate(IBackgroundTaskContext context)
            {
                int i = 0;

                foreach (IPresentationImage image in selectedDisplaySet.PresentationImages)
                {
                    IImageSopProvider imageSopProvider = image as IImageSopProvider;

                    if (imageSopProvider == null)
                    {
                        continue;
                    }

                    ImageSop imageSop = imageSopProvider.ImageSop;
                    Frame frame       = imageSopProvider.Frame;

                    if (frame.SliceLocation != currentSliceLocation)
                    {
                        currentSliceLocation = frame.SliceLocation;

                        try
                        {
                            DynamicTePresentationImage t2Image = CreateT2Image(imageSop, frame);
                            t2DisplaySet.PresentationImages.Add(t2Image);
                        }
                        catch (Exception e)
                        {
                            Platform.Log(LogLevel.Error, e);
                            desktopWindow.ShowMessageBox("Unable to create T2 series.  Please check the log for details.",
                                                         MessageBoxActions.Ok);
                            break;
                        }
                    }

                    string message = String.Format("Processing {0} of {1} images", i, selectedDisplaySet.PresentationImages.Count);
                    i++;

                    BackgroundTaskProgress progress = new BackgroundTaskProgress(i, selectedDisplaySet.PresentationImages.Count, message);
                    context.ReportProgress(progress);
                }
            }, false);

            ProgressDialog.Show(task, desktopWindow, true, ProgressBarStyle.Blocks);

            viewer.LogicalWorkspace.ImageSets[0].DisplaySets.Add(t2DisplaySet);
        }
コード例 #13
0
ファイル: ImageBox.cs プロジェクト: itcthienkhiem/ImageViewer
        private void Select()
        {
            if (!this.Selected)
            {
                //Platform.CheckMemberIsSet(this.DisplaySet, "ImageBox.DisplaySet");
                Platform.CheckMemberIsSet(this.ParentPhysicalWorkspace, "ImageBox.ParentPhysicalWorkspace");
                Platform.CheckMemberIsSet(this.ImageViewer, "ImageBox.ImageViewer");

                this.Selected = true;
                _parentPhysicalWorkspace.SelectedImageBox = this;
                this.ImageViewer.EventBroker.OnImageBoxSelected(new ImageBoxSelectedEventArgs(this));

                if (_displaySet != null)
                {
                    _displaySet.Selected = true;
                }
            }
            try
            {
                ImageViewerComponent view = this.ImageViewer as ImageViewerComponent;

                ActionModelNode node = view.ToolbarModel;

                ActionModelNode tempNode = null;
                IAction[]       action   = null;
                foreach (ActionModelNode tempnode in node.ChildNodes)
                {
                    if (tempnode.PathSegment.ResourceKey == "ToolbarSynchronizeStacking")
                    {
                        tempNode = tempnode;
                        break;
                    }
                }
                if (tempNode != null)
                {
                    action = tempNode.GetActionsInOrder();
                }
                if ((action != null) && (action.Count() > 0))
                {
                    ButtonAction ac  = action[0] as ButtonAction;
                    ImageSop     sop = ((IImageSopProvider)this.TopLeftPresentationImage).ImageSop;
                    if (sop.Modality == "DX" || sop.Modality == "CR" || sop.Modality == "RF")
                    {
                        ac.Checked = false;
                    }
                    else
                    {
                        ac.Checked = true;
                    }
                }
            }
            catch (Exception ex)
            {
            }
        }
コード例 #14
0
        private IEnumerable <PresentationImage> NewDicomImages(string studyUID, string seriesUID, int instanceNumber, int numberOfFrames)
        {
            ImageSop sop = NewImageSop(studyUID, seriesUID, instanceNumber, numberOfFrames);

            for (int i = 1; i <= numberOfFrames; ++i)
            {
                yield return(new DicomGrayscalePresentationImage(sop.Frames[i]));
            }

            sop.Dispose();
        }
コード例 #15
0
        protected static void ValidateVolumeSlicePoints(Volumes.Volume volume, IVolumeSlicerParams slicerParams, IList <KnownSample> expectedPoints,
                                                        double xAxialGantryTilt, double yAxialGantryTilt, bool gantryTiltInDegrees)
        {
            if (gantryTiltInDegrees)
            {
                xAxialGantryTilt *= Math.PI / 180;
                yAxialGantryTilt *= Math.PI / 180;
            }

            Trace.WriteLine(string.Format("Using slice plane: {0}", slicerParams.Description));
            using (VolumeSlicer slicer = new VolumeSlicer(volume, slicerParams))
            {
                foreach (ISopDataSource slice in slicer.CreateSliceSops())
                {
                    using (ImageSop imageSop = new ImageSop(slice))
                    {
                        foreach (IPresentationImage image in PresentationImageFactory.Create(imageSop))
                        {
                            IImageGraphicProvider imageGraphicProvider = (IImageGraphicProvider)image;
                            DicomImagePlane       dip = DicomImagePlane.FromImage(image);

                            foreach (KnownSample sample in expectedPoints)
                            {
                                Vector3D patientPoint = sample.Point;
                                if (xAxialGantryTilt != 0 && yAxialGantryTilt == 0)
                                {
                                    float cos = (float)Math.Cos(xAxialGantryTilt);
                                    float sin = (float)Math.Sin(xAxialGantryTilt);
                                    patientPoint = new Vector3D(patientPoint.X,
                                                                patientPoint.Y * cos + (xAxialGantryTilt > 0 ? 100 * sin : 0),
                                                                patientPoint.Z / cos - patientPoint.Y * sin - (xAxialGantryTilt > 0 ? 100 * sin * sin / cos : 0));
                                }
                                else if (yAxialGantryTilt != 0)
                                {
                                    Assert.Fail("Unit test not designed to work with gantry tilts about Y (i.e. slew)");
                                }

                                Vector3D slicedPoint = dip.ConvertToImagePlane(patientPoint);
                                if (slicedPoint.Z > -0.5 && slicedPoint.Z < 0.5)
                                {
                                    int actual = imageGraphicProvider.ImageGraphic.PixelData.GetPixel((int)slicedPoint.X, (int)slicedPoint.Y);
                                    Trace.WriteLine(string.Format("Sample {0} @{1} (SLICE: {2}; PATIENT: {3})", actual, FormatVector(sample.Point), FormatVector(slicedPoint), FormatVector(patientPoint)));
                                    Assert.AreEqual(sample.Value, actual, "Wrong colour sample @{0}", sample.Point);
                                }
                            }

                            image.Dispose();
                        }
                    }
                    slice.Dispose();
                }
            }
        }
コード例 #16
0
        public void Send()
        {
            foreach (IClipboardItem item in this.Context.SelectedClipboardItems)
            {
                string message = String.Format("{0}", item.ToString());
                Platform.Log(LogLevel.Info, message);

                List <IPresentationImage> image_queue = new List <IPresentationImage>();

                // If Display set, then can use send series, else need to make list of images
                // to send individually
                if (item.Item is IDisplaySet)
                {
                    Enqueue(image_queue, (IDisplaySet)item.Item);

                    ImageSop imageSop  = ((IImageSopProvider)image_queue[0]).ImageSop;
                    string   studyUid  = imageSop.StudyInstanceUid;
                    string   seriesUid = imageSop.SeriesInstanceUid;

                    // Check if display set contains all images in series by comparing number of
                    // images in display set with NumberOfFrames in DICOM header
                    int num_images_in_series = imageSop.ParentSeries.Sops.Count;

                    string message2 = String.Format("{0}", num_images_in_series + " ?= " + image_queue.Count);
                    Platform.Log(LogLevel.Info, message2);

                    // Send entire series
                    if (num_images_in_series.Equals(image_queue.Count))
                    {
                        send_series(studyUid, seriesUid);
                    }
                    else
                    {
                        send_images(image_queue);
                    }
                }
                else
                {
                    if (item.Item is IPresentationImage)
                    {
                        Enqueue(image_queue, (IPresentationImage)item.Item);
                    }

                    else if (item.Item is IImageSet)
                    {
                        Enqueue(image_queue, (IImageSet)item.Item);
                    }

                    send_images(image_queue);
                }
            }
        }
コード例 #17
0
        private void ValidateEchoDisplaySet(IDisplaySet displaySet, int echoNumber)
        {
            string seriesInstanceUid = null;

            foreach (IPresentationImage presentationImage in displaySet.PresentationImages)
            {
                ImageSop sop = ((IImageSopProvider)presentationImage).ImageSop;
                seriesInstanceUid = sop.SeriesInstanceUid;
                Assert.AreEqual(echoNumber, sop[DicomTags.EchoNumbers].GetUInt32(0, 0), "Echo number must be {0} for each image in the series", echoNumber);
            }

            Assert.IsNotNull(seriesInstanceUid);
            Assert.AreEqual(String.Format("{0}:Echo{1}", seriesInstanceUid, echoNumber), displaySet.Uid);
        }
コード例 #18
0
        public TestPresentationImage() : base(TestPattern.CreateRGBKCorners(new Size(_width, _height)))
        {
            DicomFile dcf = new DicomFile();

            dcf.DataSet[DicomTags.StudyInstanceUid].SetStringValue("1");
            dcf.DataSet[DicomTags.SeriesInstanceUid].SetStringValue("2");
            dcf.DataSet[DicomTags.SopInstanceUid].SetStringValue("3");
            dcf.DataSet[DicomTags.SopClassUid].SetStringValue(SopClass.SecondaryCaptureImageStorageUid);
            dcf.DataSet[DicomTags.InstanceNumber].SetStringValue("1");
            dcf.DataSet[DicomTags.NumberOfFrames].SetStringValue("1");
            dcf.MetaInfo[DicomTags.TransferSyntaxUid].SetStringValue(TransferSyntax.ImplicitVrLittleEndianUid);
            dcf.MetaInfo[DicomTags.MediaStorageSopClassUid].SetStringValue(SopClass.SecondaryCaptureImageStorageUid);
            dcf.MetaInfo[DicomTags.MediaStorageSopInstanceUid].SetStringValue("3");
            _imageSop = new ImageSop(new TestDataSource(dcf));
        }
コード例 #19
0
        public override bool Start(IMouseInformation mouseInformation)
        {
            if (this.SelectedImageGraphicProvider == null)
            {
                return(false);
            }

            _selectedTile = mouseInformation.Tile as Tile;
            _selectedTile.InformationBox = new InformationBox();
            _selectedImageGraphic        = this.SelectedImageGraphicProvider.ImageGraphic;
            _selectedImageSop            = (this.SelectedPresentationImage as IImageSopProvider).ImageSop;

            Probe(mouseInformation.Location);

            return(true);
        }
コード例 #20
0
        public void Save()
        {
            string path;

            using (FolderBrowserDialog dialog = new FolderBrowserDialog())
            {
                dialog.Description = "Choose destination folder for saving DICOM images";
                if (DialogResult.OK == dialog.ShowDialog())
                {
                    path = dialog.SelectedPath;
                }
                else
                {
                    return;
                }
            }


            foreach (IClipboardItem item in this.Context.SelectedClipboardItems)
            {
                List <IPresentationImage> queue = new List <IPresentationImage>();
                if (item.Item is IPresentationImage)
                {
                    Enqueue(queue, (IPresentationImage)item.Item);
                }
                else if (item.Item is IDisplaySet)
                {
                    Enqueue(queue, (IDisplaySet)item.Item);
                }
                else if (item.Item is IImageSet)
                {
                    Enqueue(queue, (IImageSet)item.Item);
                }


                foreach (IPresentationImage image in queue)
                {
                    if (image is IImageSopProvider)
                    {
                        ImageSop imageSop = ((IImageSopProvider)image).ImageSop;

                        ILocalSopDataSource localsource = (ILocalSopDataSource)imageSop.DataSource;
                        File.Copy(localsource.Filename, path + "\\" + imageSop[DicomTags.SopInstanceUid] + ".dcm");
                    }
                }
            }
        }
コード例 #21
0
        private void TestSortingDisplaySetsBySeriesNumber(bool reverse)
        {
            DisplaySetCollection orderedCollection    = new DisplaySetCollection();
            DisplaySetCollection nonOrderedCollection = new DisplaySetCollection();

            for (int i = 1; i <= 20; ++i)
            {
                string             id         = i.ToString();
                DisplaySet         displaySet = new DisplaySet(id, id);
                ImageSop           sop        = NewImageSop(id, id, i);
                IPresentationImage image      = new DicomGrayscalePresentationImage(sop.Frames[1]);
                sop.Dispose();
                IImageSopProvider         sopProvider = (IImageSopProvider)image;
                DicomMessageSopDataSource dataSource  = ((DicomMessageSopDataSource)sopProvider.ImageSop.DataSource);
                dataSource.SourceMessage.DataSet[DicomTags.SeriesNumber].SetInt32(0, i);

                displaySet.PresentationImages.Add(image);
                orderedCollection.Add(displaySet);
            }

            Randomize(orderedCollection, nonOrderedCollection);

            Debug.WriteLine("Before Sort\n------------------------\n");
            CollectionUtils.ForEach(nonOrderedCollection, delegate(IDisplaySet displaySet) { Debug.WriteLine(String.Format("name: {0}", displaySet.Name)); });

            nonOrderedCollection.Sort(new SeriesNumberComparer(reverse));

            Debug.WriteLine("\nAfter Sort\n------------------------\n");
            CollectionUtils.ForEach(nonOrderedCollection, delegate(IDisplaySet displaySet) { Debug.WriteLine(String.Format("name: {0}", displaySet.Name)); });

            int j = reverse ? 20 : 1;

            foreach (IDisplaySet set in nonOrderedCollection)
            {
                Assert.AreEqual(j.ToString(), set.Name);
                j += reverse ? -1 : 1;
            }

            foreach (DisplaySet set in nonOrderedCollection)
            {
                set.Dispose();
            }
            foreach (DisplaySet set in orderedCollection)
            {
                set.Dispose();
            }
        }
コード例 #22
0
 public static bool IsValid(TreeNode node)
 {
     try
     {
         LocalSopDataSource _dicomDataSource = new LocalSopDataSource(((FileInfo)node.Tag).FullName);
         ImageSop           isop             = new ImageSop(_dicomDataSource);
         //DicomFile dcf = new DicomFile(((FileInfo)node.Tag).FullName);
         //dcf.Load(DicomReadOptions.DoNotStorePixelDataInDataSet);
         //00:00:01.5625000
         //00:00:01.7625000
         //00:00:00.0468750
     }
     catch (Exception ex)
     {
         return(false);
     }
     return(true);
 }
コード例 #23
0
        private static bool IsSamePatient(IEnumerable <ISelectPresentationsInformation> collection)
        {
            string str = null;

            foreach (ISelectPresentationsInformation local in collection)
            {
                ImageSop imageSop = ((IImageSopProvider)local.Image).ImageSop;
                string   str2     = imageSop.PatientId;
                if (str == null)
                {
                    str = str2;
                }
                else if (str != str2)
                {
                    return(true);
                }
            }
            return(false);
        }
コード例 #24
0
        private IEnumerable <ImageSop> GetSliceLocationTestImageSops()
        {
            int i = 0;
            int instanceNumber = 1;

            foreach (ImageOrientationPatient orientation in GetSliceLocationOrientations())
            {
                for (int j = -3; j <= 3; ++j)
                {
                    //we're not testing the study, series etc grouping because the 'instance and frame number one does that'
                    ImageSop sop = NewImageSop("123", "1", instanceNumber++);

                    DicomMessageSopDataSource dataSource = ((DicomMessageSopDataSource)sop.Frames[1].ParentImageSop.DataSource);
                    dataSource.SourceMessage.DataSet[DicomTags.ImagePositionPatient].SetStringValue(GetSliceLocationPosition(i, j).ToString());
                    dataSource.SourceMessage.DataSet[DicomTags.ImageOrientationPatient].SetStringValue(orientation.ToString());
                    yield return(sop);
                }

                ++i;
            }
        }
コード例 #25
0
ファイル: ImageSetGroupsTests.cs プロジェクト: hksonngan/Xian
        private IImageSet CreateImageSet(string patientId, string description)
        {
            string studyInstanceUid  = DicomUid.GenerateUid().UID;
            string seriesInstanceUid = DicomUid.GenerateUid().UID;
            string sopInstanceUid    = DicomUid.GenerateUid().UID;

            ImageSop sop = CreateImageSop(patientId, studyInstanceUid, seriesInstanceUid, sopInstanceUid);
            DicomGrayscalePresentationImage img = new DicomGrayscalePresentationImage(sop.Frames[1]);

            sop.Dispose();

            DisplaySet displaySet = new DisplaySet(patientId, seriesInstanceUid);

            displaySet.PresentationImages.Add(img);
            ImageSet imageSet = new ImageSet();

            imageSet.PatientInfo = description;
            imageSet.DisplaySets.Add(displaySet);

            return(imageSet);
        }
コード例 #26
0
        public MockDicomPresentationImage(string filename) : base(new GrayscaleImageGraphic(10, 10))
        {
            if (Path.IsPathRooted(filename))
            {
                _filename = filename;
            }
            else
            {
                _filename = Path.Combine(Environment.CurrentDirectory, filename);
            }

            _dicomFile = new DicomFile();
            _dicomFile.DataSet[DicomTags.SopClassUid].SetStringValue(SopClass.SecondaryCaptureImageStorageUid);
            _dicomFile.DataSet[DicomTags.SopInstanceUid].SetStringValue(DicomUid.GenerateUid().UID);
            _dicomFile.MetaInfo[DicomTags.MediaStorageSopClassUid].SetStringValue(_dicomFile.DataSet[DicomTags.SopClassUid].ToString());
            _dicomFile.MetaInfo[DicomTags.MediaStorageSopInstanceUid].SetStringValue(_dicomFile.DataSet[DicomTags.SopInstanceUid].ToString());
            _dicomFile.Save(_filename);
            _sopDataSource = new LocalSopDataSource(_dicomFile);
            _imageSop      = new ImageSop(_sopDataSource);
            _frame         = new MockFrame(_imageSop, 1);
        }
コード例 #27
0
        public DicomElement(string filePath)
        {
            this.FilePath = filePath;

            DicomFile = new DicomFile(filePath);
            DicomFile.Load();

            ImageSop = new ClearCanvas.ImageViewer.StudyManagement.LocalImageSop(filePath);

            PresentationImage =
                PresentationImageFactory.Create(ImageSop.Frames[1]);

            int width  = ImageSop.Frames[1].Columns;
            int height = ImageSop.Frames[1].Rows;

            this.Bitmap = PresentationImage.DrawToBitmap(width, height);
            if (DicomFile.DataSet[DicomTags.InstanceNumber] == null)
            {
                throw new Exception("Tag 'Instance Number' not found!");
            }
            this.InstanceNumber = DicomFile.DataSet[DicomTags.InstanceNumber].GetInt32(0, 1);
        }
コード例 #28
0
        public void AddDuplicateImage()
        {
            IImageViewer viewer    = new ImageViewerComponent();
            StudyTree    studyTree = viewer.StudyTree;

            string studyUid1  = DicomUid.GenerateUid().UID;
            string seriesUid1 = DicomUid.GenerateUid().UID;
            string imageUid1  = DicomUid.GenerateUid().UID;

            ImageSop image1 = CreateImageSop("patient1", studyUid1, seriesUid1, imageUid1);
            ImageSop image2 = CreateImageSop("patient1", studyUid1, seriesUid1, imageUid1);

            Assert.IsTrue(studyTree.AddSop(image1));
            Assert.IsFalse(studyTree.AddSop(image2));

            Assert.IsTrue(studyTree.Patients["patient1"].Studies[studyUid1].Series[seriesUid1].Sops.Count == 1);

            TestDataSource dataSource = (TestDataSource)image1.DataSource;

            viewer.Dispose();

            Assert.IsTrue(dataSource.IsDisposed);
        }
コード例 #29
0
        private static DynamicTePresentationImage CreateT2Image(ImageSop imageSop, Frame frame)
        {
            DicomFile pdMap = FindMap(imageSop.StudyInstanceUID, frame.SliceLocation, "PD");

            pdMap.Load(DicomReadOptions.Default);

            DicomFile t2Map = FindMap(imageSop.StudyInstanceUID, frame.SliceLocation, "T2");

            t2Map.Load(DicomReadOptions.Default);

            DicomFile probMap = FindMap(imageSop.StudyInstanceUID, frame.SliceLocation, "CHI2PROB");

            probMap.Load(DicomReadOptions.Default);

            DynamicTePresentationImage t2Image = new DynamicTePresentationImage(
                frame,
                (byte[])pdMap.DataSet[DicomTags.PixelData].Values,
                (byte[])t2Map.DataSet[DicomTags.PixelData].Values,
                (byte[])probMap.DataSet[DicomTags.PixelData].Values);

            t2Image.DynamicTe.Te = 50.0f;
            return(t2Image);
        }
コード例 #30
0
        internal static AuditedInstances GetAuditedInstances(IEnumerable <ISelectPresentationsInformation> collection)
        {
            AuditedInstances instances = new AuditedInstances();
            IEnumerator <ISelectPresentationsInformation> enumerator1 = collection.GetEnumerator();

            using (IEnumerator <ISelectPresentationsInformation> enumerator = enumerator1)
            {
                while (enumerator.MoveNext())
                {
                    ISelectPresentationsInformation selectitem = enumerator.Current;
                    IPresentationImage image    = selectitem.Image;
                    IImageSopProvider  provider = image as IImageSopProvider;
                    if (provider != null)
                    {
                        ImageSop   imageSop         = provider.ImageSop;
                        PersonName patientsName     = imageSop.PatientsName;
                        string     studyInstanceUid = imageSop.StudyInstanceUid;
                        instances.AddInstance(imageSop.PatientId, patientsName.ToString(), studyInstanceUid);
                    }
                }
            }
            return(instances);
        }