static void Main(string[] args) { try { if (args.Length < 4) { Console.WriteLine("Usage: SimpleElastix <fixedImage> <movingImage> <parameterFile> <output>"); return; } // Instantiate SimpleElastix ElastixImageFilter silx; // Read input ImageFileReader reader = new ImageFileReader(); reader.SetFileName(args[0]); silx.SetFixedImage(reader.Execute()); reader.SetFileName(args[1]); silx.SetMovingImage(reader.Execute()); silx.SetParameterMap(ReadParameterFile(args[2])); // Perform Registration silx.LogToConsoleOn(); silx.Execute(); // Write output image ImageFileWriter writer = new ImageFileWriter(); writer.SetFileName(args[3]); writer.Execute(silx.GetResultImage()); } catch (Exception e) { Console.WriteLine(e); } }
static void Main(string[] args) { try { if (args.Length < 3) { Console.WriteLine("Usage: SimpleGaussian <input> <sigma> <output>"); return; } // Read input image ImageFileReader reader = new ImageFileReader(); reader.SetFileName(args[0]); Image image = reader.Execute(); // Execute Gaussian smoothing filter SmoothingRecursiveGaussianImageFilter gaussian = new SmoothingRecursiveGaussianImageFilter(); gaussian.SetSigma(Double.Parse(args[1])); image = gaussian.Execute(image); // Write output image ImageFileWriter writer = new ImageFileWriter(); writer.SetFileName(args[2]); writer.Execute(image); } catch (Exception ex) { Console.WriteLine(ex); } }
static void Main(string[] args) { try { if (args.Length < 3) { Console.WriteLine("Usage: SimpleGaussian <input> <sigma> <output>"); return; } // Read input image ImageFileReader reader = new ImageFileReader(); reader.SetFileName(args[0]); Image image = reader.Execute(); // Execute Gaussian smoothing filter SmoothingRecursiveGaussianImageFilter gaussian = new SmoothingRecursiveGaussianImageFilter(); gaussian.SetSigma(Double.Parse(args[1])); Image blurredImage = gaussian.Execute(image); // Covert the real output image back to the original pixel type , to // make writing easier , as many file formats don 't support real // pixels . CastImageFilter castFilter = new CastImageFilter(); castFilter.SetOutputPixelType(image.GetPixelID()); Image destImage = castFilter.Execute(blurredImage); // Write output image ImageFileWriter writer = new ImageFileWriter(); writer.SetFileName(args[2]); writer.Execute(destImage); } catch (Exception ex) { Console.WriteLine(ex); } }
public itk.simple.Image NalozObrazy(itk.simple.Image original, itk.simple.Image segmented) { itk.simple.MinimumMaximumImageFilter maxminFilter = new MinimumMaximumImageFilter(); maxminFilter.Execute(original); double max = maxminFilter.GetMaximum(); itk.simple.CastImageFilter caster1 = new CastImageFilter(); caster1.SetOutputPixelType(itk.simple.PixelIDValueEnum.sitkInt16); itk.simple.Image castImg = caster1.Execute(segmented); itk.simple.MultiplyImageFilter multiplyFilter = new MultiplyImageFilter(); itk.simple.Image multiplyImage = multiplyFilter.Execute(castImg, max); itk.simple.MaximumImageFilter maximumFilter = new MaximumImageFilter(); itk.simple.Image maximumImage = maximumFilter.Execute(original, multiplyImage); //itk.simple.IntensityWindowingImageFilter windower = new IntensityWindowingImageFilter(); //windower.SetWindowMinimum(0); //windower.SetWindowMaximum(255); //windower.SetOutputMinimum(0); //windower.SetOutputMaximum(1); //itk.simple.Image window = windower.Execute(maximumImage); itk.simple.ImageFileWriter writer = new ImageFileWriter(); writer.SetFileName("Wynik.dcm"); writer.Execute(maximumImage); return(maximumImage); }
static void Main(string[] args) { try { if (args.Length < 3) { Console.WriteLine("Usage: {0} <input> <variance> <output>", args[0]); return; } // Read input image ImageFileReader reader = new ImageFileReader(); reader.SetFileName(args[0]); Image image = reader.Execute(); // Execute Gaussian smoothing filter DiscreteGaussianImageFilter filter = new DiscreteGaussianImageFilter(); filter.SetVariance(Double.Parse(args[1])); MyCommand cmd = new MyCommand(filter); filter.AddCommand(EventEnum.sitkProgressEvent, cmd); image = filter.Execute(image); // Write output image ImageFileWriter writer = new ImageFileWriter(); writer.SetFileName(args[2]); writer.Execute(image); } catch (Exception ex) { Console.WriteLine(ex); } }
static void Main(string[] args) { try { if (args.Length < 2) { Console.WriteLine("Usage: DicomSeriesReader <input_directory> <output_file>"); return; } Console.WriteLine("Reading Dicom directory: " + args[0]); ImageSeriesReader reader = new ImageSeriesReader(); VectorString dicom_names = ImageSeriesReader.GetGDCMSeriesFileNames(args[0]); reader.SetFileNames(dicom_names); Image image = reader.Execute(); VectorUInt32 size = image.GetSize(); Console.WriteLine("Image size: " + size[0] + " " + size[1] + " " + size[2]); Console.WriteLine("Writing image: " + args[1]); ImageFileWriter writer = new ImageFileWriter(); writer.SetFileName(args[1]); writer.Execute(image); if (Environment.GetEnvironmentVariable("SITK_NOSHOW") == null) { SimpleITK.Show(image, "Dicom Series"); } } catch (Exception ex) { Console.WriteLine("Usage: DicomSeriesReader <input_directory> <output_file>"); Console.WriteLine(ex); } }
static void Main(string[] args) { try { if (args.Length < 3) { Console.WriteLine("Usage: SimpleGaussian <input> <sigma> <output>"); return; } // Read input image ImageFileReader reader = new ImageFileReader(); reader.SetFileName(args[0]); Image image = reader.Execute(); // Execute Gaussian smoothing filter SmoothingRecursiveGaussianImageFilter gaussian = new SmoothingRecursiveGaussianImageFilter(); gaussian.SetSigma(Double.Parse(args[1])); Image blurredImage = gaussian.Execute(image); // Covert the real output image back to the original pixel type , to // make writing easier , as many file formats don 't support real // pixels . CastImageFilter castFilter = new CastImageFilter(); castFilter.SetOutputPixelType(image.GetPixelIDValue()); Image destImage = castFilter.Execute(blurredImage); // Write output image ImageFileWriter writer = new ImageFileWriter(); writer.SetFileName(args[2]); writer.Execute(destImage); } catch (Exception ex) { Console.WriteLine(ex); } }
static void Main(string[] args) { try { if (args.Length < 3) { Console.WriteLine("Usage: SimpleGaussian <input> <sigma> <output>"); return; } ImageFileReader reader = new ImageFileReader(); reader.setFileName(args[0]); SmartPointerImage image = reader.execute(); Console.WriteLine(image.toString()); Gaussian gaussian = new Gaussian(); gaussian.setSigma(Double.Parse(args[1])); image = gaussian.execute(image); Console.WriteLine(image.toString()); ImageFileWriter writer = new ImageFileWriter(); writer.setFileName(args[2]); writer.execute(image); } catch (Exception ex) { Console.WriteLine(ex); } }
public MainWindow() { InitializeComponent(); string[] args = new string[3]; string s = System.AppDomain.CurrentDomain.BaseDirectory; args[0] = s + "Obrazy\\abc.png"; args[1] = "1"; args[2] = s + "Obrazy\\cba.png"; try { if (args.Length < 3) { //Console.WriteLine("Usage: SimpleGausian <imput> <sigma> <output>"); lTest.Content = "Usage: SimpleGausian <imput> <sigma> <output>"; return; } //Read imput image ImageFileReader reader = new ImageFileReader(); reader.SetFileName(args[0]); itk.simple.Image image = reader.Execute(); //Remember format //itk.simple.Image image2 = new itk.simple.Image(image); //PixelIDValueEnum id = PixelIDValueEnum.sitkVectorUInt8; //PixelIDValueEnum id = image2.GetPixelID(); //Execute Gausian smoothing filter //SmoothingRecursiveGaussianImageFilter gausian = new SmoothingRecursiveGaussianImageFilter(); //gausian.SetSigma(Double.Parse(args[1])); //image = gausian.Execute(image); //Convert? //PixelIDValueEnum id = image.GetPixelID(); //SimpleITK.Cast(image, id); //id = image.GetPixelID(); //Write output image ImageFileWriter writer = new ImageFileWriter(); writer.SetFileName(args[2]); writer.Execute(image); lTest.Content = "Chyba się udało, sprwadź :P"; } catch (Exception ex) { //Console.WriteLine(ex); lTest.Content = ex; } }
public void SetInput(string filePath) { string fileName = string.Format("{0}", filePath); sitk.Image inputImage = ImageFileReader.ReadImage(fileName); sitk.Image outputImage = BinaryThinningImageFilter.BinaryThinning(inputImage); string newFileName = string.Format("temporary\\{0}.jpg", Guid.NewGuid().ToString()); ImageFileWriter.WriteImage(outputImage, newFileName); originalBitmap = new Bitmap(Image.FromFile(newFileName)); }
static void example1(string inputImageFileName, string outputImageFileName) { ImageFileReader reader = new ImageFileReader(); reader.SetImageIO("PNGImageIO"); reader.SetFileName(inputImageFileName); Image image = reader.Execute(); ImageFileWriter writer = new ImageFileWriter(); writer.SetFileName(outputImageFileName); writer.Execute(image); }
public HttpResponseMessage GetImage(string id) { byte[] imageByteArray = _imageProviderService.GetImageAsByteArray(UserId, id); if (imageByteArray == null) { return(null); } ImageFileWriter.SaveImageSnapshot(imageByteArray, DateTimeProviderInstance, _snapshotImagePath, Logger, UserId, UserIp); HttpResponseMessage response = CreateImageResponseMessage(imageByteArray); return(response); }
/// <summary> /// Writes the image asynchronous. /// </summary> /// <param name="image">The ITK image.</param> /// <param name="path">The file system location where the image should be written.</param> /// <param name="filename">The name of the file.</param> /// <param name="ct">The cancellation token.</param> /// <returns> /// A <see cref="T:System.Threading.Tasks.Task" /> representing the asynchronous operation. /// </returns> /// <exception cref="ArgumentNullException"> /// image /// or /// path /// or /// filename /// or /// ct /// </exception> public async Task WriteImageAsync(Image image, string path, string filename, CancellationToken ct) { if (image == null) { throw new ArgumentNullException(nameof(image)); } if (string.IsNullOrWhiteSpace(path)) { throw new ArgumentNullException(nameof(path)); } if (string.IsNullOrWhiteSpace(filename)) { throw new ArgumentNullException(nameof(filename)); } if (ct == null) { throw new ArgumentNullException(nameof(ct)); } await Task.Run( () => { using (ImageFileWriter writer = new ImageFileWriter()) { try { ct.Register(() => { writer.Abort(); }); ct.ThrowIfCancellationRequested(); writer.SetUseCompression(true); writer.SetFileName(Path.Combine(path, filename)); writer.Execute(image); } catch (OperationCanceledException e) { throw new AmiException("The writing of the ITK image has been cancelled.", e); } catch (Exception e) { throw new AmiException("The ITK image could not be written.", e); } } }, ct); }
/// <inheritdoc/> public async Task WriteImageAsync(Image image, string path, string filename, CancellationToken ct) { Ensure.ArgumentNotNull(image, nameof(image)); Ensure.ArgumentNotNull(ct, nameof(ct)); if (string.IsNullOrWhiteSpace(path)) { throw new ArgumentNullException(nameof(path)); } if (string.IsNullOrWhiteSpace(filename)) { throw new ArgumentNullException(nameof(filename)); } var fs = fileSystemStrategy.Create(path); if (fs == null) { throw new UnexpectedNullException("Filesystem could not be created based on the provided path."); } using (ImageFileWriter writer = new ImageFileWriter()) { try { ct.Register(() => { writer.Abort(); }); ct.ThrowIfCancellationRequested(); writer.SetUseCompression(true); writer.SetFileName(fs.Path.Combine(path, filename)); writer.Execute(image); await Task.CompletedTask; } catch (OperationCanceledException e) { throw new AmiException("The writing of the ITK image has been cancelled.", e); } catch (Exception e) { throw new AmiException("The ITK image could not be written.", e); } } }
public void zapiszObraz() { try { ImageFileWriter writer = new ImageFileWriter(); string sciezka = Directory.GetCurrentDirectory(); string pathString = Path.Combine(sciezka, nazwaObrazu); if (Directory.Exists(pathString) == false) { Directory.CreateDirectory(pathString); } pathString = Path.Combine(pathString, nazwaObrazu); // writer.SetFileName(p); writer.Execute(obraz, pathString, false); } catch (ArgumentNullException e) { throw new Exception("Przed zapisem wybierz plik"); } }
public void zapiszObraz() { try { ImageFileWriter writer = new ImageFileWriter(); string sciezka = Directory.GetCurrentDirectory(); string pathString = Path.Combine(sciezka, nazwaObrazu); if (Directory.Exists(pathString) == false) { Directory.CreateDirectory(pathString); } pathString = Path.Combine(pathString, nazwaObrazu); // writer.SetFileName(p); writer.Execute(obraz, pathString, false); } catch(ArgumentNullException e) { throw new Exception("Przed zapisem wybierz plik"); } }
public void zapiszObraz(Image obraz1) { try { ImageFileWriter writer = new ImageFileWriter(); string sciezka = Directory.GetCurrentDirectory(); string pathString = Path.Combine(sciezka, "Wyniki"); Random r = new Random(); string e = r.Next(1,100).ToString(); string nazwaPliku1 = "segmentacja" + "_" + e+".dcm"; if (Directory.Exists(pathString) == false) { Directory.CreateDirectory(pathString); } pathString = Path.Combine(pathString, nazwaPliku1); // writer.SetFileName(p); writer.Execute(obraz1, pathString, false); } catch { throw new Exception("Blad podczas zapisu"); } }
public void zapiszObraz(Image obraz1) { try { ImageFileWriter writer = new ImageFileWriter(); string sciezka = Directory.GetCurrentDirectory(); string pathString = Path.Combine(sciezka, "Wyniki"); Random r = new Random(); string e = r.Next(1, 100).ToString(); string nazwaPliku1 = "segmentacja" + "_" + e + ".dcm"; if (Directory.Exists(pathString) == false) { Directory.CreateDirectory(pathString); } pathString = Path.Combine(pathString, nazwaPliku1); // writer.SetFileName(p); writer.Execute(obraz1, pathString, false); } catch { throw new Exception("Blad podczas zapisu"); } }
static void Main(string[] args) { try { if (args.Length < 3) { Console.WriteLine("Usage: SimpleGaussian <input> <sigma> <output>");
public async Task <IActionResult> ClassifyImage(IFormFile imageFile) { if (imageFile.Length == 0) { return(BadRequest()); } //Save the temp image file into the temp-folder IImageFileWriter imageWriter = new ImageFileWriter(); string fileName = await imageWriter.UploadImageAsync(imageFile, _tempImagesFolderPath); string imageFilePath = Path.Combine(_tempImagesFolderPath, fileName); //Convert image stream to byte[] // //byte[] imageData = null; //MemoryStream image = new MemoryStream(); //await imageFile.CopyToAsync(image); //imageData = image.ToArray(); //if (!imageData.IsValidImage()) // return StatusCode(StatusCodes.Status415UnsupportedMediaType); _logger.LogInformation($"Start processing image..."); //Measure execution time var watch = System.Diagnostics.Stopwatch.StartNew(); //Set the specific image data var imageInputData = new ImageInputData { ImagePath = imageFilePath }; //Predict code for provided image ImageLabelPredictions imageLabelPredictions = _predictionEnginePool.Predict(imageInputData); //Stop measuring time watch.Stop(); var elapsedMs = watch.ElapsedMilliseconds; _logger.LogInformation($"Image processed in {elapsedMs} miliseconds"); //try //{ // // DELETE FILE WHEN CLOSED // using (FileStream fs = new FileStream(imageFilePath, FileMode.Open, FileAccess.Read, FileShare.Read, 4096, FileOptions.DeleteOnClose)) // { // // temp file exists // fs.Close(); // } //} //catch (Exception e) //{ // throw e; //} //Predict the image's label (The one with highest probability) ImagePredictedLabelWithProbability imageBestLabelPrediction = FindBestLabelWithProbability(imageLabelPredictions, imageInputData); //return new ObjectResult(result); return(Ok(imageBestLabelPrediction)); }
public itk.simple.Image SegmetacjaSledziony(itk.simple.Image image) { itk.simple.MorphologicalGradientImageFilter gradientFilter = new MorphologicalGradientImageFilter(); gradientFilter.SetKernelType(KernelEnum.sitkCross); gradientFilter.SetKernelRadius(1); itk.simple.Image gradientImage = gradientFilter.Execute(image); itk.simple.SigmoidImageFilter sigmoidFilter = new SigmoidImageFilter(); sigmoidFilter.SetOutputMinimum(0); sigmoidFilter.SetOutputMaximum(1); sigmoidFilter.SetAlpha(1.5); sigmoidFilter.SetBeta(100); itk.simple.Image sigmoidImage = sigmoidFilter.Execute(gradientImage); itk.simple.BinaryThresholdImageFilter threshFilter = new BinaryThresholdImageFilter(); threshFilter.SetLowerThreshold(100); threshFilter.SetUpperThreshold(180); threshFilter.SetOutsideValue(0); threshFilter.SetInsideValue(1); itk.simple.Image threshImage = threshFilter.Execute(image); itk.simple.CastImageFilter castThresh = new CastImageFilter(); castThresh.SetOutputPixelType(itk.simple.PixelIDValueEnum.sitkInt16); itk.simple.Image castThreshImage = castThresh.Execute(threshImage); itk.simple.SubtractImageFilter substractFilter = new SubtractImageFilter(); itk.simple.Image substractImage = substractFilter.Execute(castThreshImage, sigmoidImage); itk.simple.ThresholdImageFilter threshFilter2 = new ThresholdImageFilter(); threshFilter2.SetLower(0); threshFilter2.SetUpper(0); threshFilter2.SetOutsideValue(1); itk.simple.Image threshImage2 = threshFilter2.Execute(substractImage); itk.simple.BinaryErodeImageFilter erodeFilter = new BinaryErodeImageFilter(); erodeFilter.SetForegroundValue(1); erodeFilter.SetBackgroundValue(0); erodeFilter.SetKernelType(itk.simple.KernelEnum.sitkCross); erodeFilter.SetKernelRadius(5); itk.simple.Image erodeImage = erodeFilter.Execute(threshImage2); itk.simple.ConnectedComponentImageFilter connFilter = new ConnectedComponentImageFilter(); connFilter.SetFullyConnected(true); itk.simple.Image connImage = connFilter.Execute(erodeImage); itk.simple.RelabelComponentImageFilter relabelFilter = new RelabelComponentImageFilter(); relabelFilter.SetMinimumObjectSize(5000); itk.simple.Image relabelImage = relabelFilter.Execute(connImage); itk.simple.BinaryThresholdImageFilter threshFilter3 = new BinaryThresholdImageFilter(); threshFilter3.SetInsideValue(1); threshFilter3.SetOutsideValue(0); threshFilter3.SetLowerThreshold(1); threshFilter3.SetUpperThreshold(1); itk.simple.Image threshImage3 = threshFilter3.Execute(relabelImage); itk.simple.DilateObjectMorphologyImageFilter closeReconstructFilter = new DilateObjectMorphologyImageFilter(); closeReconstructFilter.SetKernelType(itk.simple.KernelEnum.sitkCross); closeReconstructFilter.SetKernelRadius(5); itk.simple.Image closeReconstructImage = closeReconstructFilter.Execute(threshImage3); itk.simple.ImageFileWriter writer = new ImageFileWriter(); writer.SetFileName("SegmentujSledzione.dcm"); writer.Execute(closeReconstructImage); return(closeReconstructImage); }
public itk.simple.Image NalozObrazy(itk.simple.Image original, itk.simple.Image segmented) { itk.simple.MinimumMaximumImageFilter maxminFilter = new MinimumMaximumImageFilter(); maxminFilter.Execute(original); double max = maxminFilter.GetMaximum(); itk.simple.CastImageFilter caster1 = new CastImageFilter(); caster1.SetOutputPixelType(itk.simple.PixelIDValueEnum.sitkInt16); itk.simple.Image castImg = caster1.Execute(segmented); itk.simple.MultiplyImageFilter multiplyFilter = new MultiplyImageFilter(); itk.simple.Image multiplyImage = multiplyFilter.Execute(castImg, max); itk.simple.MaximumImageFilter maximumFilter = new MaximumImageFilter(); itk.simple.Image maximumImage = maximumFilter.Execute(original, multiplyImage); //itk.simple.IntensityWindowingImageFilter windower = new IntensityWindowingImageFilter(); //windower.SetWindowMinimum(0); //windower.SetWindowMaximum(255); //windower.SetOutputMinimum(0); //windower.SetOutputMaximum(1); //itk.simple.Image window = windower.Execute(maximumImage); itk.simple.ImageFileWriter writer = new ImageFileWriter(); writer.SetFileName("Wynik.dcm"); writer.Execute(maximumImage); return maximumImage; }
public itk.simple.Image SegmetacjaSledziony(itk.simple.Image image) { itk.simple.MorphologicalGradientImageFilter gradientFilter = new MorphologicalGradientImageFilter(); gradientFilter.SetKernelType(KernelEnum.sitkCross); gradientFilter.SetKernelRadius(1); itk.simple.Image gradientImage = gradientFilter.Execute(image); itk.simple.SigmoidImageFilter sigmoidFilter = new SigmoidImageFilter(); sigmoidFilter.SetOutputMinimum(0); sigmoidFilter.SetOutputMaximum(1); sigmoidFilter.SetAlpha(1.5); sigmoidFilter.SetBeta(100); itk.simple.Image sigmoidImage = sigmoidFilter.Execute(gradientImage); itk.simple.BinaryThresholdImageFilter threshFilter = new BinaryThresholdImageFilter(); threshFilter.SetLowerThreshold(100); threshFilter.SetUpperThreshold(180); threshFilter.SetOutsideValue(0); threshFilter.SetInsideValue(1); itk.simple.Image threshImage = threshFilter.Execute(image); itk.simple.CastImageFilter castThresh = new CastImageFilter(); castThresh.SetOutputPixelType(itk.simple.PixelIDValueEnum.sitkInt16); itk.simple.Image castThreshImage = castThresh.Execute(threshImage); itk.simple.SubtractImageFilter substractFilter = new SubtractImageFilter(); itk.simple.Image substractImage = substractFilter.Execute(castThreshImage, sigmoidImage); itk.simple.ThresholdImageFilter threshFilter2 = new ThresholdImageFilter(); threshFilter2.SetLower(0); threshFilter2.SetUpper(0); threshFilter2.SetOutsideValue(1); itk.simple.Image threshImage2 = threshFilter2.Execute(substractImage); itk.simple.BinaryErodeImageFilter erodeFilter = new BinaryErodeImageFilter(); erodeFilter.SetForegroundValue(1); erodeFilter.SetBackgroundValue(0); erodeFilter.SetKernelType(itk.simple.KernelEnum.sitkCross); erodeFilter.SetKernelRadius(5); itk.simple.Image erodeImage = erodeFilter.Execute(threshImage2); itk.simple.ConnectedComponentImageFilter connFilter = new ConnectedComponentImageFilter(); connFilter.SetFullyConnected(true); itk.simple.Image connImage = connFilter.Execute(erodeImage); itk.simple.RelabelComponentImageFilter relabelFilter = new RelabelComponentImageFilter(); relabelFilter.SetMinimumObjectSize(5000); itk.simple.Image relabelImage = relabelFilter.Execute(connImage); itk.simple.BinaryThresholdImageFilter threshFilter3 = new BinaryThresholdImageFilter(); threshFilter3.SetInsideValue(1); threshFilter3.SetOutsideValue(0); threshFilter3.SetLowerThreshold(1); threshFilter3.SetUpperThreshold(1); itk.simple.Image threshImage3 = threshFilter3.Execute(relabelImage); itk.simple.DilateObjectMorphologyImageFilter closeReconstructFilter = new DilateObjectMorphologyImageFilter(); closeReconstructFilter.SetKernelType(itk.simple.KernelEnum.sitkCross); closeReconstructFilter.SetKernelRadius(5); itk.simple.Image closeReconstructImage = closeReconstructFilter.Execute(threshImage3); itk.simple.ImageFileWriter writer = new ImageFileWriter(); writer.SetFileName("SegmentujSledzione.dcm"); writer.Execute(closeReconstructImage); return closeReconstructImage; }
static void Main(string[] args) { try { if (args.Length < 1) { Console.WriteLine("Usage: RTKFirstReconstruction <output>"); return; } // Defines the RTK geometry object ThreeDCircularProjectionGeometry geometry = new ThreeDCircularProjectionGeometry(); uint numberOfProjections = 360; float firstAngle = 0; float angularArc = 360; float sid = 600; // source to isocenter distance in mm float sdd = 1200; // source to detector distance in mm float isox = 0; // X coordinate on the projection image of isocenter float isoy = 0; // Y coordinate on the projection image of isocenter for (int x = 0; x < numberOfProjections; x++) { float angle = firstAngle + x * angularArc / numberOfProjections; geometry.AddProjection(sid, sdd, angle, isox, isoy); } ConstantImageSource constantImageSource = new ConstantImageSource(); VectorDouble origin = new VectorDouble(3); origin.Add(-127.0); origin.Add(-127.0); origin.Add(-127.0); VectorUInt32 sizeOutput = new VectorUInt32(3); sizeOutput.Add(256); sizeOutput.Add(256); sizeOutput.Add(numberOfProjections); VectorDouble spacing = new VectorDouble(3); spacing.Add(1.0); spacing.Add(1.0); spacing.Add(1.0); constantImageSource.SetOrigin(origin); constantImageSource.SetSpacing(spacing); constantImageSource.SetSize(sizeOutput); constantImageSource.SetConstant(0.0); Image source = constantImageSource.Execute(); RayEllipsoidIntersectionImageFilter rei = new RayEllipsoidIntersectionImageFilter(); VectorDouble semiprincipalaxis = new VectorDouble(3); semiprincipalaxis.Add(50.0); semiprincipalaxis.Add(50.0); semiprincipalaxis.Add(50.0); VectorDouble center = new VectorDouble(3); center.Add(0.0); center.Add(0.0); center.Add(0.0); // Set GrayScale value, axes, center... rei.SetDensity(20); rei.SetAngle(0); rei.SetCenter(center); rei.SetAxis(semiprincipalaxis); rei.SetGeometry(geometry); Image reiImage = rei.Execute(source); // Create reconstructed image ConstantImageSource constantImageSource2 = new ConstantImageSource(); VectorUInt32 sizeOutput2 = new VectorUInt32(3); sizeOutput2.Add(256); sizeOutput2.Add(256); sizeOutput2.Add(256); constantImageSource2.SetOrigin(origin); constantImageSource2.SetSpacing(spacing); constantImageSource2.SetSize(sizeOutput2); constantImageSource2.SetConstant(0.0); Image source2 = constantImageSource2.Execute(); Console.WriteLine("Performing reconstruction"); FDKConeBeamReconstructionFilter feldkamp = new FDKConeBeamReconstructionFilter(); feldkamp.SetGeometry(geometry); feldkamp.SetTruncationCorrection(0.0); feldkamp.SetHannCutFrequency(0.0); Image image = feldkamp.Execute(source2, reiImage); ImageFileWriter writer = new ImageFileWriter(); writer.SetFileName(args[0]); writer.Execute(image); } catch (Exception ex) { Console.WriteLine(ex); } }