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)); }
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)); }
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)); }
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; }