Ejemplo n.º 1
0
 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));
     }
 }
Ejemplo n.º 2
0
        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));
        }
Ejemplo n.º 3
0
        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);
        }
Ejemplo n.º 4
0
        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));
            }
        }