コード例 #1
0
        private void sendDeleteImageMessage(DicomImageObject obj)
        {
            RTObjectDeletedMessage <DicomImageObject> msg = new RTObjectDeletedMessage <DicomImageObject>(obj);

            this.MessengerInstance.Send <RTObjectDeletedMessage <DicomImageObject> >(msg);
            GC.Collect();
        }
コード例 #2
0
ファイル: FileOpener.cs プロジェクト: yt876/rt-dtools
        public async void BeginOpenImagesAsync()
        {
            string[] files;
            if ((files = getFileNames("Open Dicom Image(s)", true)) != null)
            {
                var pi       = ProgressService.CreateNew("Loading Dicom Image(s)...", false);
                var progress = new Progress <double>(x => { pi.ProgressAmount = (int)x; });

                DicomImageObject openedObject = null;
                await Task.Run(async() =>
                {
                    try
                    {
                        openedObject = await DicomLoader.LoadDicomImageAsync(files, progress);
                    }
                    catch (Exception e)
                    {
                        Messenger.Default.Send(new NotificationMessage("Could not open file: " + e.Message));
                    }
                });

                if (openedObject != null)
                {
                    Messenger.Default.Send(new RTDicomViewer.Message.RTObjectAddedMessage <DicomImageObject>(openedObject));
                }

                ProgressService.End(pi);
            }
        }
コード例 #3
0
ファイル: Beam.cs プロジェクト: aomiit/rt-dtools
        public void CalculateSSD(DicomImageObject img, float threshold)
        {
            var p1 = new Point3d(Isocenter.Position.X, Isocenter.Position.Y - SAD, Isocenter.Position.Z);
            RTCoordinateTransform T = new RTCoordinateTransform();

            T.CollimatorAngle = CollimatorAngle;
            T.CouchAngle      = CouchAngle;
            T.GantryAngle     = GantryStart;

            Point3d sourcePosn = new Point3d();

            T.Transform(p1, Isocenter.Position, sourcePosn);

            //Unit vector in direction from source position to isocentre with a length of sampleLength mm
            double sampleLength = 2;
            double totalLength  = (Isocenter.Position - sourcePosn).Length();
            int    n            = (int)totalLength / (int)sampleLength; // the number of steps to sample in the image
            var    u            = sampleLength * ((Isocenter.Position - sourcePosn) / totalLength);
            double ssd          = 0;

            for (int i = 0; i < n; i++)
            {
                var p  = sourcePosn + u * i;
                var hu = img.Grid.Interpolate(p);
                if (hu.Value > threshold)
                {
                    ssd = i * sampleLength;
                    break;
                }
            }
            this.SSD = ssd;
        }
コード例 #4
0
 private void removeImage(DicomImageObject img)
 {
     for (int i = 0; i < Images.Count; i++)
     {
         if (Images[i].Value.Image == img)
         {
             Images.RemoveAt(i);
         }
     }
 }
コード例 #5
0
ファイル: DicomLoader.cs プロジェクト: aomiit/rt-dtools
        public static async Task <DicomImageObject> LoadDicomImageAsync(string[] fileNames, IProgress <double> progress)
        {
            var files = await getFilesAsync(fileNames);

            var loader = new DicomImageLoader();
            var img    = new DicomImageObject();

            loader.Load(files, img, progress);
            return(img);
        }
コード例 #6
0
        public void Load(DicomFile[] files, DicomImageObject dicomObject)
        {
            var gridLoader = new SliceBasedStructureDicomLoader();

            dicomObject.Grid = gridLoader.Load(files);

            try
            {
                dicomObject.Window = files[0].Dataset.Get <int>(DicomTag.WindowWidth);
                dicomObject.Level  = files[0].Dataset.Get <int>(DicomTag.WindowCenter);
            }catch (Exception e)
            {
                //Here we should try to set to the median pixel or something
            }
        }
コード例 #7
0
        private RenderableImage FromImage(DicomImageObject image, BlendMode blendMode, Rectd screenRect)
        {
            if (image == null)
            {
                return(new RenderableImage());
            }
            Random r = new Random();

            return(new RenderableImage()
            {
                Grid = image.Grid,
                Alpha = 0.5f,
                BlendMode = blendMode,
                Name = image.Grid.Name,
                LUT = image.LUT,
                Scaling = 1,
                Units = "HU",
                ScreenRect = screenRect
            });
        }
コード例 #8
0
ファイル: DicomImageLoader.cs プロジェクト: yt876/rt-dtools
        public void Load(DicomFile[] files, DicomImageObject dicomObject, IProgress <double> progress)
        {
            base.Load(files, dicomObject, progress);

            var gridLoader = new GridBasedStructureDicomLoader();

            dicomObject.Grid = gridLoader.Load(files, progress);
            dicomObject.Grid.DefaultPhysicalValue = -1024;
            dicomObject.Grid.Scaling   = 1;
            dicomObject.Grid.ValueUnit = Geometry.Unit.HU;
            dicomObject.Grid.Name      = dicomObject.Modality + ": " + dicomObject.PatientName;

            try
            {
                dicomObject.LUT.Window = files[0].Dataset.Get <int>(DicomTag.WindowWidth);
                dicomObject.LUT.Level  = files[0].Dataset.Get <int>(DicomTag.WindowCenter);
            }catch (Exception e)
            {
                //Here we should try to set to the median pixel or something
            }
        }
コード例 #9
0
ファイル: DicomImageLoader.cs プロジェクト: aomiit/rt-dtools
        public void Load(DicomFile[] files, DicomImageObject dicomObject, IProgress <double> progress)
        {
            base.Load(files, dicomObject, progress);

            var gridLoader = new GridBasedStructureDicomLoader();

            dicomObject.Grid = gridLoader.Load(files, progress);
            dicomObject.Grid.DefaultPhysicalValue = -1024;
            dicomObject.Grid.Scaling   = 1;
            dicomObject.Grid.ValueUnit = Geometry.Unit.HU;
            dicomObject.Grid.Name      = dicomObject.Modality + ": " + dicomObject.PatientName;

            try
            {
                dicomObject.LUT.Window = files[0].Dataset.GetSingleValueOrDefault <int>(DicomTag.WindowWidth, 2048);
                dicomObject.LUT.Level  = files[0].Dataset.GetSingleValueOrDefault <int>(DicomTag.WindowCenter, 1024);
#pragma warning disable CS0168 // The variable 'e' is declared but never used
            }catch (Exception e)
#pragma warning restore CS0168 // The variable 'e' is declared but never used
            {
                //Here we should try to set to the median pixel or something
            }
        }
コード例 #10
0
        public ImagePreviewObject(DicomImageObject img)
        {
            Image        = img;
            ImagePreview = new WriteableBitmap(50, 50, 96, 96, PixelFormats.Bgr32, null);
            var wbContext = new WriteableBitmapRenderContext(ImagePreview);

            wbContext.Resize(ImagePreview, 50, 50);
            var imgRenderer = new ImageRenderer();
            var camera      = new Camera();

            camera.SetAxial();
            camera.SetFOV(512, 512);
            camera.MoveTo(img.Grid.XRange.GetCentre(), img.Grid.YRange.GetCentre(), img.Grid.ZRange.GetCentre());
            var renderableImage = new RenderableImage();

            renderableImage.LUT        = img.LUT;
            renderableImage.ScreenRect = new RT.Core.Utilities.RTMath.Rectd(0, 0, 1, 1);
            renderableImage.Scaling    = img.Grid.Scaling;
            renderableImage.Grid       = img.Grid;
            renderableImage.Units      = "HU";
            imgRenderer.BeginRender(renderableImage.ScreenRect, wbContext);
            imgRenderer.Render(renderableImage, camera, wbContext);
            imgRenderer.EndRender(renderableImage.ScreenRect, wbContext);
        }
コード例 #11
0
 public void SetSecondaryImage(DicomImageObject image)
 {
     SecondaryImage = image;
 }
コード例 #12
0
 public void SetPrimaryImage(DicomImageObject image)
 {
     PrimaryImage = image;
     ResetCameraToImageCentre();
 }
コード例 #13
0
 private void addImage(DicomImageObject img)
 {
     Images.Add(new SelectableObject <ImagePreviewObject>(new ImagePreviewObject(img)));
 }