Exemplo n.º 1
0
        public override Tuple <IImageRaster <IRaster2DInteger, int>, IImageRaster <IRaster2DInteger, float>, IList <int[]>, IList <float[]> > Initialize(IRaster2DInteger raster)
        {
            IImageRaster2D <int>   region_image               = new ImageRaster2D <int>(raster);
            IImageRaster2D <float> distance_image             = new ImageRaster2D <float>(raster, Single.MaxValue);
            Tuple <IList <int[]>, IList <float[]> > Centroids = InitializeCentroids(raster);
            IList <int[]>   cluster_spatial_centroids         = Centroids.Item1;
            IList <float[]> cluster_feature_centroids         = Centroids.Item2;

            int[] neigbourhood_dimensions    = d_cluster_dimensions_double;
            int   neigbourhood_element_count = ((neigbourhood_dimensions[0] * 2) + 1) * ((neigbourhood_dimensions[1] * 2) + 1);

            int[] element_index_indexes = new int[neigbourhood_element_count];

            for (int centroid_index = 0; centroid_index < cluster_spatial_centroids.Count; centroid_index++)
            {
                raster.GetNeigbourhoodElementIndexesRBA(cluster_spatial_centroids[centroid_index], neigbourhood_dimensions, element_index_indexes);
                for (int element_index_index = 0; element_index_index < neigbourhood_element_count; element_index_index++)
                {
                    int element_index = element_index_indexes[element_index_index];
                    if (element_index != -1)
                    {
                        int[] element_coordinates = raster.GetElementCoordinates(element_index);
                        float distance            = FunctionDistanceEuclidean.ComputeStatic(element_coordinates, cluster_spatial_centroids[centroid_index]);
                        if (distance < distance_image.GetElementValue(element_index))
                        {
                            distance_image.SetElementValue(element_index, distance);
                            region_image.SetElementValue(element_index, centroid_index);
                        }
                    }
                }
            }
            return(new Tuple <IImageRaster <IRaster2DInteger, int>, IImageRaster <IRaster2DInteger, float>, IList <int[]>, IList <float[]> >(region_image, distance_image, cluster_spatial_centroids, cluster_feature_centroids));
        }
        public TopologyElementRaster3D26Connectivity(IRaster3DInteger raster, float [] voxel_spacing)
            : base(raster, 26)
        {
            this.raster_size = raster.SizeArray;
            this.size_xy     = raster_size[0] * raster_size[1];
            this.d_size_xyz  = raster_size[0] * raster_size[1] * raster_size[2];

            this.x_edge_offset = d_size_xyz;
            this.y_edge_offset = d_size_xyz + d_size_xyz;
            this.z_edge_offset = d_size_xyz + d_size_xyz + d_size_xyz;

            neigbour_distance = new float [26];
            int neigbour_index = 0;

            for (int x_index = -1; x_index < 2; x_index++)
            {
                for (int y_index = -1; y_index < 2; y_index++)
                {
                    for (int z_index = -1; z_index < 2; z_index++)
                    {
                        if ((x_index != 0) || (y_index != 0) || (z_index == 0))
                        {
                            neigbour_distance[neigbour_index] = FunctionDistanceEuclidean.ComputeStatic(new int [] { 0, 0, 0 }, new int [] { x_index, y_index, z_index });
                            neigbour_index++;
                        }
                    }
                }
            }
        }
Exemplo n.º 3
0
        public void TestSimulatedAnealing()
        {
            int [] initial = new int[] { 0, 0, 0, 0, 0, 0, 0 };
            int [] target  = new int [] { 1, 2, 3, 4, 3, 5, 4 };
            IMutatorPoint <int> mutator = new MutatorPointOneInt();
            IFunctionDistance <int[], float> distance            = new FunctionDistanceEuclidean();
            IFunction <int[], float>         evaluation_function = new FunctionDistanceToTarget <int[], float>(distance, target);
            int iteration_count = 1000;
            IFunction <int, float> accept_chance = new FunctionLinearDecay(1, 500);

            SimulatedAnealing <int, float> simulate_anealing = new SimulatedAnealing <int, float>(
                mutator, accept_chance, iteration_count);

            int[] result = simulate_anealing.Minimize(initial, evaluation_function);
            ToolsCollection.print(result);
        }