/// <summary> /// Interpolate image by interpolation type and output pixel type. /// </summary> /// <param name="img"></param> /// <param name="interpolator"></param> /// <param name="pixelIDValueEnum"></param> /// <returns>interpolated image</returns> public static sitk.Image InterpolateImage(sitk.Image img, sitk.InterpolatorEnum interpolator, sitk.PixelIDValueEnum pixelIDValueEnum, double defaultPixelType = 0.0) { sitk.ResampleImageFilter resampleImageFilter = new sitk.ResampleImageFilter(); resampleImageFilter.SetSize(img.GetSize()); resampleImageFilter.SetOutputOrigin(img.GetOrigin()); resampleImageFilter.SetOutputDirection(img.GetDirection()); resampleImageFilter.SetOutputSpacing(img.GetSpacing()); resampleImageFilter.SetInterpolator(interpolator); resampleImageFilter.SetOutputPixelType(pixelIDValueEnum); resampleImageFilter.SetDefaultPixelValue(defaultPixelType); return(resampleImageFilter.Execute(img)); }
public Bitmap konwertujObraz(Image obraz1, int przekroj = 0) { uint r = obraz1.GetWidth(); // VectorUInt32 w = new VectorUInt32(new[] { r, 512, 4 + 1 }); VectorInt32 start = new VectorInt32(new[] { 0, 0, 0 }); VectorInt32 size1 = new VectorInt32(new[] { 512, 512, 1 }); obraz1 = WybierzPrzekroj(obraz1, przekroj); IntensityWindowingImageFilter normalize = new IntensityWindowingImageFilter(); normalize.SetOutputMinimum(0); normalize.SetOutputMaximum(255); obraz1 = normalize.Execute(obraz1); PixelIDValueEnum u = PixelIDValueEnum.sitkFloat32; int len = 1; Image input = SimpleITK.Cast(obraz1, u); VectorUInt32 size = input.GetSize(); for (int dim = 0; dim < input.GetDimension(); dim++) { len *= (int)size[dim]; } IntPtr buffer = input.GetBufferAsFloat(); float bufferPtr = (float)buffer.ToInt32(); float[] bufferAsArray = new float[len]; float[,] newData = new float[size[0], size[1]]; Marshal.Copy(buffer, bufferAsArray, 0, len); obrazBitmap = new Bitmap(Convert.ToInt32(size[0]), Convert.ToInt32(size[1])); for (int j = 0; j < size[1]; j++) { for (int i = 0; i < size[0]; i++) { var bur = bufferAsArray[j * size[1] + i]; System.Drawing.Color newColor = System.Drawing.Color.FromArgb((int)bur, 0, 0, 0); obrazBitmap.SetPixel(j, i, newColor); } } Color s = obrazBitmap.GetPixel(34, 56); return(obrazBitmap); }
public static int[] fGetDatasetLength() { Class.manageImg managerView = HttpContext.Current.Session["managerView"] as Class.manageImg; String sPath = managerView.sCurrentImageFolder[0]; String[] sFilenames; if (sPath == null) { throw new ArgumentException("path variable in manageImg is not specified!"); } else { sFilenames = (System.IO.Directory.EnumerateFiles(sPath, "*.*", SearchOption.AllDirectories).Where(s => Constant.lsExtensions.Any(e => s.EndsWith(e)))).ToArray(); int[] iSize = new int[] { 0, 0, 0 }; // get dataset length and set hiddenfield itk.simple.Image itkImage = SimpleITK.ReadImage(sFilenames[0]); // Es wird nur das erste Listenelement ausgelesen? VectorUInt32 UInt32Size = itkImage.GetSize(); iSize[0] = unchecked ((int)UInt32Size[0]); iSize[1] = unchecked ((int)UInt32Size[1]); iSize[2] = unchecked ((int)UInt32Size[2]); return(iSize); } }
static void Main(string[] args) { if (args.Length < 1) { Console.WriteLine("Usage: SimpleGaussian <input>"); return; } // Read input image itk.simple.Image input = SimpleITK.ReadImage(args[0]); // Cast to we know the the pixel type input = SimpleITK.Cast(input, PixelId.sitkFloat32); // calculate the number of pixels VectorUInt32 size = input.GetSize(); int len = 1; for (int dim = 0; dim < input.GetDimension(); dim++) { len *= (int)size[dim]; } IntPtr buffer = input.GetBufferAsFloat(); // Note: C# also has a GetConstBufferAs... methods which do not // implicitly call MakeUnique. // There are two ways to access the buffer: // (1) Access the underlying buffer as a pointer in an "unsafe" block // (note that in C# "unsafe" simply means that the compiler can not // perform full type checking), and requires the -unsafe compiler flag // unsafe { // float* bufferPtr = (float*)buffer.ToPointer(); // // Now the byte pointer can be accessed as per Brad's email // // (of course this example is only a 2d single channel image): // // This is a 1-D array but can be access as a 3-D. Given an // // image of size [xS,yS,zS], you can access the image at // // index [x,y,z] as you wish by image[x+y*xS+z*xS*yS], // // so x is the fastest axis and z is the slowest. // for (int j = 0; j < size[1]; j++) { // for (int i = 0; i < size[0]; i++) { // float pixel = bufferPtr[i + j*size[1]]; // // Do something with pixel here // } // } // } // (2) Copy the buffer to a "safe" array (i.e. a fully typed array) // (note that this means memory is duplicated) float[] bufferAsArray = new float[len]; // Allocates new memory the size of input Marshal.Copy(buffer, bufferAsArray, 0, len); double total = 0.0; for (int j = 0; j < size[1]; j++) { for (int i = 0; i < size[0]; i++) { float pixel = bufferAsArray[i + j * size[1]]; total += pixel; } } Console.WriteLine("Pixel value total: {0}", total); }
public static string getListOfPackageImage(int index) { Class.manageImg managerView = HttpContext.Current.Session["managerView"] as Class.manageImg; managerView.currentPageIndex = index; HttpContext.Current.Session["managerView"] = managerView; ViewImage_ that = HttpContext.Current.Session["viewImage"] as ViewImage_; that.updateReference(index); // set default values managerView.allImages[index][0].getUnlabelled = new int[] { -1, -1 }; managerView.allImages[index][0].getPercentage = "-"; if (managerView.tc.ActiveLearning) // when active learning is enabled, check if threshold is reached { if (DataAccess.DataAccessTestCase.checkThreshold(managerView)) { return("alert('Active learning procedure has been executed, page index will be reset'); setTimeout(function(){ Reset=true; }, 3000);"); } } if (index >= 0 && index <= managerView.iNGroups) { managerView.sCurrentImageFolder = new List <String>(managerView.allImages[index].Count); for (var i = 0; i < managerView.allImages[index].Count; i++) { managerView.sCurrentImageFolder.Add(null); managerView.sCurrentImageFolder[i] = managerView.tc.dbPath + "\\" + managerView.allImages[index][i].Path.Replace('/', '\\'); //- Martin } // get the labelscales for (int i = 0; i < managerView.allImages[index].Count; i++) { if (managerView.tc.DiskreteScale) { managerView.allImages[index][i].LableDiscrete = DataAccessTestCase.GetDiscreteLabel(managerView.IDUser, managerView.allImages[index][i].IdGroupImage);//pcw } else { managerView.allImages[index][i].LableContinuous = DataAccessTestCase.GetLableContinuous(managerView.allImages[index][i].IdGroupImage, managerView.IDUser, managerView.allImages[index][i].TypeScaleContinuous);//pcw } } List <String> sPath = managerView.sCurrentImageFolder; if (sPath == null) { throw new ArgumentException("path variable in manageImg is not specified!"); } else { // get paths and dimension of every individual image for (int i = 0; i < managerView.allImages[index].Count; i++) { managerView.allImages[index][i].imagePaths = (System.IO.Directory.EnumerateFiles(sPath[i], "*.*", SearchOption.AllDirectories).Where(s => Constant.lsExtensions.Any(e => s.EndsWith(e)))).ToArray(); Array.Sort(managerView.allImages[index][i].imagePaths); int[] iSize = new int[] { 0, 0, 0 }; string pfad = managerView.allImages[index][i].imagePaths[0]; itk.simple.Image itkImage = SimpleITK.ReadImage(pfad); // bei DICOM werden nur die Dimensionen des ersten Bildes ausgelesen, diese sind bei den anderen Schichten identisch VectorUInt32 UInt32Size = itkImage.GetSize(); iSize[0] = unchecked ((int)UInt32Size[0]); iSize[1] = unchecked ((int)UInt32Size[1]); if (managerView.allImages[index][i].imagePaths.Length > 1)// for DICOM files { iSize[2] = managerView.allImages[index][i].imagePaths.Length; } else if (managerView.allImages[index][i].imagePaths.Length == 1)// { iSize[2] = unchecked ((int)UInt32Size[2]); iSize[2]--; } managerView.allImages[index][i].imageDimensions = iSize; } } // get index of the next/previous page with not completely labelled images try { managerView.allImages[index][0].getNumOfPages = managerView.allImages.Count(); managerView.allImages[index][0].getUnlabelled = getUnlabelled(index); managerView.allImages[index][0].getPercentage = getCurrPercentage(); }catch (ArgumentOutOfRangeException ex) { return("alert('An error occurred while trying to load the image package, please contact the administrator');"); } //Obfuscate image paths for (int c = 0; c < managerView.allImages[index].Count; c++) { for (int z = 0; z < managerView.allImages[index][c].imagePaths.Length; z++) { managerView.allImages[index][c].imagePaths[z] = obfuscate(managerView.allImages[index][c].imagePaths[z]); } } // put the array in the JSON format var json = new JavaScriptSerializer().Serialize(managerView.allImages[index]); return(json); //return managerView.allImages[index]; } else { return(null); } }