Пример #1
0
        public Tuple <EdgeValueType[], EdgeValueType> CreateAlphaPartitionTreeElementArray <ElementValueType, EdgeValueType>(
            IAlgebraReal <EdgeValueType> algebra,
            IFunctionDissimilarity <ElementValueType, EdgeValueType> edge_function,
            ElementValueType[] element_values)
        {
            int element_count = this.ElementCount;

            EdgeValueType [] new_image = new EdgeValueType [element_count];
            EdgeValueType    max_value = algebra.MinValue;

            // do x edges
            for (int element_index = x_edge_offset; element_index < element_count; element_index++)
            {
                new_image[element_index] = edge_function.Compute(
                    element_values[element_index - x_edge_offset],
                    element_values[element_index - x_edge_offset + 1]);
                max_value = algebra.Max(max_value, new_image[element_index]);
            }

            // set node values
            for (int element_index = 0; element_index < x_edge_offset; element_index++)
            {
                new_image[element_index] = max_value;
            }

            // flip x edges
            for (int element_index = x_edge_offset; element_index < element_count; element_index++)
            {
                new_image[element_index] = algebra.Subtract(max_value, new_image[element_index]);
            }

            return(new Tuple <EdgeValueType[], EdgeValueType>(new_image, max_value));
        }
 public ClassifierPartitionTree3D()
 {
     builder       = new AlphaPartitionTreeBuilderMinTree <float[], float>(new AlgebraRealFloat32(), new MaxTreeBuilderSingleQueue <float>());
     topology      = null;
     edge_model    = null;
     node_detector = null;
 }
        public IAlphaPartitionTree <EdgeValueType> BuildAlphaPartitionTree(
            ITopologyElementEdge element_topology,
            IFunctionDissimilarity <ElementValueType, EdgeValueType> edge_function,
            ElementValueType[] element_values)

        {
            return(BuildAlphaPartitionTree(element_topology, edge_function, element_values, null));
        }
Пример #4
0
        public Tuple <EdgeValueType[], EdgeValueType> CreateAlphaPartitionTreeElementArray <ElementValueType, EdgeValueType>(
            IAlgebraReal <EdgeValueType> algebra,
            IFunctionDissimilarity <ElementValueType, EdgeValueType> edge_function,
            ElementValueType [] element_values)
        {
            int element_count = this.ElementCount;

            EdgeValueType[] element_and_edge_values = new EdgeValueType[element_count];

            EdgeValueType max_value = algebra.MinValue;

            // do x edges
            for (int element_index = x_edge_offset; element_index < y_edge_offset; element_index++)
            {
                if (element_index % raster_size[0] != raster_size[0] - 1)
                {
                    element_and_edge_values[element_index] = edge_function.Compute(
                        element_values[element_index - x_edge_offset],
                        element_values[element_index - x_edge_offset + 1]);
                    max_value = algebra.Max(max_value, element_and_edge_values[element_index]);
                }
            }

            // do y edges
            for (int element_index = y_edge_offset; element_index < z_edge_offset; element_index++)
            {
                if ((element_index % size_xy) / raster_size[0] != raster_size[1] - 1)
                {
                    element_and_edge_values[element_index] = edge_function.Compute(
                        element_values[element_index - y_edge_offset],
                        element_values[element_index - y_edge_offset + this.size_x]);
                    max_value = algebra.Max(max_value, element_and_edge_values[element_index]);
                }
            }

            // do z edges
            for (int element_index = z_edge_offset; element_index < (element_and_edge_values.Length - size_xy); element_index++)
            {
                element_and_edge_values[element_index] = edge_function.Compute(
                    element_values[element_index - z_edge_offset],
                    element_values[element_index - z_edge_offset + this.size_xy]);
                max_value = algebra.Max(max_value, element_and_edge_values[element_index]);
            }

            // set real node values to max value
            for (int element_index = 0; element_index < x_edge_offset; element_index++)
            {
                element_and_edge_values[element_index] = max_value;
            }

            // flip all edges
            for (int element_index = x_edge_offset; element_index < element_count; element_index++)
            {
                element_and_edge_values[element_index] = algebra.Subtract(max_value, element_and_edge_values[element_index]);
            }

            return(new Tuple <EdgeValueType[], EdgeValueType>(element_and_edge_values, max_value));
        }
Пример #5
0
 public AlphaPartitionTree3D(
     IAlphaPartitionTreeBuilder <ElementValueType, EdgeValueType> builder,
     ITopologyElementEdgeRaster <IRaster3DInteger> topology,
     IFunctionDissimilarity <ElementValueType, EdgeValueType> edge_function,
     IImageRaster <IRaster3DInteger, ElementValueType> image)
 {
     //TODO make sure topology matches image
     ElementValueType[] element_values = image.GetElementValues(false);
     tree = builder.BuildAlphaPartitionTree(topology, edge_function, element_values);
 }
        public IAlphaPartitionTree <EdgeValueType> BuildAlphaPartitionTree(
            ITopologyElementEdge element_topology,
            IFunctionDissimilarity <ElementValueType, EdgeValueType> edge_function,
            ElementValueType[] element_values,
            IProgressReporter reporter)
        {
            Debug.Assert(element_topology.ElementCountReal == element_values.Length);

            Tuple <EdgeValueType[], EdgeValueType> element_and_edge_values =
                element_topology.CreateAlphaPartitionTreeElementArray <ElementValueType, EdgeValueType>(
                    this.algebra,
                    edge_function,
                    element_values);

            EdgeValueType[] edge_values = element_and_edge_values.Item1;
            //Note max tree is really a min tree becuase of the edge value flip flip by the topology
            IMaxTree <EdgeValueType> min_tree = builder.BuildMaxTree(element_and_edge_values.Item1, new ComparerNatural <EdgeValueType>(), element_topology, element_values.Length, reporter);

            return(new AlphaPartitionTreeMinTree <EdgeValueType>(algebra, min_tree, element_and_edge_values.Item2));
        }
Пример #7
0
 public CentroidHierarchy(IFunctionDissimilarity <DomainType[], double> dissimilarity_function, DomainType[] location, IList <CentroidHierarchy <DomainType> > children)
 {
     this.dissimilarity_function = dissimilarity_function;
     this.location = location;
     this.children = children;
 }
 public TemplateClusteringHierarchy(IFunctionDissimilarity <DomainType[], double> dissimilarity_measure)
 {
     this.dissimilarity_measure = dissimilarity_measure;
 }