public ImageRaster3D <RangeType> GetSubImage( int x_offset, int x_size, int y_offset, int y_size, int z_offset, int z_size, bool copy_values) { //TODO check if it even fits if (copy_values) { IRaster3DInteger raster = new Raster3DInteger(x_size, y_size, z_size); ImageRaster3D <RangeType> sub_image = new ImageRaster3D <RangeType>(raster); for (int z_index = 0; z_index < z_size; z_index++) { for (int y_index = 0; y_index < y_size; y_index++) { for (int x_index = 0; x_index < x_size; x_index++) { RangeType value = GetElementValue(x_index + x_offset, y_index + y_offset, z_index + z_offset); sub_image.SetElementValue(x_index, y_index, z_index, value); } } } return(sub_image); } else { //TODO this is buggy as f**k IRaster3DInteger raster = this.Raster.GetSubRaster( x_offset, x_size, y_offset, y_size, z_offset, z_size); return(new ImageRaster3D <RangeType>(raster, GetElementValues(false), false)); } }
public static ImageRaster3D <ElementType> LoadImageRaster3DBitmap <ElementType>(string file_path, IFunction <Color, ElementType> color_converter) { Bitmap image_color = new Bitmap(file_path); FrameDimension frame_dimension = GetFrameDimension(image_color); IRaster3DInteger raster = new Raster3DInteger(image_color.Width, image_color.Height, image_color.GetFrameCount(frame_dimension)); ElementType[] image_array = new ElementType[raster.ElementCount]; for (int index_z = 0; index_z < raster.Size2; index_z++) { image_color.SelectActiveFrame(frame_dimension, index_z); for (int index_y = 0; index_y < raster.Size1; index_y++) { for (int index_x = 0; index_x < raster.Size0; index_x++) { image_array[raster.GetElementIndex(index_x, index_y, index_z)] = color_converter.Compute(image_color.GetPixel(index_x, index_y)); } } } return(new ImageRaster3D <ElementType>(raster, image_array, false)); }
public void TestComputeCentroids() { int iteration_count = 1; int[] desired_cluster_dimensions = new int[] { 5, 5, 1 }; SLIC3D slick = new SLIC3D(iteration_count, desired_cluster_dimensions, 1); IRaster3DInteger raster = new Raster3DInteger(100, 100, 1); IList <IImageRaster <IRaster3DInteger, float> > stack = new List <IImageRaster <IRaster3DInteger, float> >(); stack.Add(new ImageRaster3D <float>(raster, 0)); stack.Add(new ImageRaster3D <float>(raster, 0)); stack.Add(new ImageRaster3D <float>(raster, 0)); IImageRaster <IRaster3DInteger, float[]> image_features = new ImageRasterWrapperStack <IRaster3DInteger, float>(stack); Tuple <IImageRaster <IRaster3DInteger, int>, IImageRaster <IRaster3DInteger, float>, IList <int[]>, IList <float[]> > initialization = slick.Initialize(raster); IImageRaster <IRaster3DInteger, int> image_labeling = initialization.Item1; IImageRaster <IRaster3DInteger, float> image_distance = initialization.Item2; IList <int[]> cluster_spatial_centroids = initialization.Item3; IList <float[]> cluster_feature_centroids = initialization.Item4; slick.ComputeCentroids(image_labeling, image_features, cluster_spatial_centroids, cluster_feature_centroids); }
public void TestSlick3Cluster() { int iteration_count = 5; int[] desired_cluster_dimensions = new int[] { 5, 1, 1 }; SLIC3D slick = new SLIC3D(iteration_count, desired_cluster_dimensions, 1); IRaster3DInteger raster = new Raster3DInteger(15, 1, 1); IList <IImageRaster <IRaster3DInteger, float> > stack = new List <IImageRaster <IRaster3DInteger, float> >(); IImageRaster <IRaster3DInteger, float> feature_image = new ImageRaster3D <float>(raster, 0); for (int element_index = 3; element_index < 12; element_index++) { feature_image.SetElementValue(element_index, 1); } stack.Add(feature_image); IImageRaster <IRaster3DInteger, float[]> image_features = new ImageRasterWrapperStack <IRaster3DInteger, float>(stack); Tuple <IImageRaster <IRaster3DInteger, int>, IImageRaster <IRaster3DInteger, float>, IList <int[]>, IList <float[]> > initialization = slick.Initialize(raster); IImageRaster <IRaster3DInteger, int> image_labeling = initialization.Item1; IImageRaster <IRaster3DInteger, float> image_distance = initialization.Item2; IList <int[]> cluster_spatial_centroids = initialization.Item3; IList <float[]> cluster_feature_centroids = initialization.Item4; Assert.AreEqual(3, cluster_spatial_centroids.Count); slick.ComputeCentroids(image_labeling, image_features, cluster_spatial_centroids, cluster_feature_centroids); int [] neigbourhood_element_indexes = new int [99]; for (int iteration_index = 0; iteration_index < iteration_count; iteration_index++) { slick.AssignElements(image_labeling, image_distance, image_features, cluster_spatial_centroids, cluster_feature_centroids, neigbourhood_element_indexes); slick.ComputeCentroids(image_labeling, image_features, cluster_spatial_centroids, cluster_feature_centroids); } Assert.AreEqual(3, cluster_spatial_centroids.Count); for (int element_index = 3; element_index < 12; element_index++) { Assert.AreEqual(1, feature_image.GetElementValue(element_index)); } }