private void sendDeleteImageMessage(DicomImageObject obj) { RTObjectDeletedMessage <DicomImageObject> msg = new RTObjectDeletedMessage <DicomImageObject>(obj); this.MessengerInstance.Send <RTObjectDeletedMessage <DicomImageObject> >(msg); GC.Collect(); }
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); } }
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; }
private void removeImage(DicomImageObject img) { for (int i = 0; i < Images.Count; i++) { if (Images[i].Value.Image == img) { Images.RemoveAt(i); } } }
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); }
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 } }
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 }); }
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 } }
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 } }
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); }
public void SetSecondaryImage(DicomImageObject image) { SecondaryImage = image; }
public void SetPrimaryImage(DicomImageObject image) { PrimaryImage = image; ResetCameraToImageCentre(); }
private void addImage(DicomImageObject img) { Images.Add(new SelectableObject <ImagePreviewObject>(new ImagePreviewObject(img))); }