[ VIGRA Homepage | Function Index | Class Index | Namespaces | File List | Main Page ]
EdgeWeightNodeFeatures< MERGE_GRAPH, EDGE_INDICATOR_MAP, EDGE_SIZE_MAP, NODE_FEATURE_MAP, NODE_SIZE_MAP, MIN_WEIGHT_MAP, NODE_LABEL_MAP > Class Template Reference |
This Cluster Operator is a MONSTER. It can really do a lot. More...
#include <vigra/hierarchical_clustering.hxx>
Public Member Functions | |
Edge | contractionEdge () |
get the edge which should be contracted next | |
WeightType | contractionWeight () |
get the edge weight of the edge which should be contracted next | |
EdgeWeightNodeFeatures (MergeGraph &mergeGraph, EDGE_INDICATOR_MAP edgeIndicatorMap, EDGE_SIZE_MAP edgeSizeMap, NODE_FEATURE_MAP nodeFeatureMap, NODE_SIZE_MAP nodeSizeMap, MIN_WEIGHT_MAP minWeightEdgeMap, NODE_LABEL_MAP nodeLabelMap, const ValueType beta, const metrics::MetricType metricType, const ValueType wardness=static_cast< ValueType >(1.0), const ValueType gamma=static_cast< ValueType >(10000000.0), const ValueType sameLabelMultiplier=static_cast< ValueType >(0.8)) | |
construct cluster operator | |
void | eraseEdge (const Edge &edge) |
will be called via callbacks from mergegraph | |
void | mergeEdges (const Edge &a, const Edge &b) |
will be called via callbacks from mergegraph | |
MergeGraph & | mergeGraph () |
get a reference to the merge | |
void | mergeNodes (const Node &a, const Node &b) |
will be called via callbacks from mergegraph | |
This Cluster Operator is a MONSTER. It can really do a lot.
Each edge has a single scalar weight w_e. Each node has a feature vector f_n. (all f_n's have the same length). Edges and nodes have a length / size
The total edge weight is computed via a complicated formula
The main idea is the following. Use a mixture between the edge weights w_e, and node based edge weights which are computed via a metric which measures the 'difference' between the u/v feature vectors f_n.
Furthermore a 'Ward'-like regularization can be applied. This is useful if one have clusters with sizes in the same magnitude (or 'similar' sizes). The amount of 'ward'-regularization is controlled with the 'wardness' parameter.
Also labels (in the sense of seeds) can be attached to get a 'watershed-ish' behavior (nodes with different labels will never be merged) The '0'-Label is used to indicate that there is no label at all. If certain connected regions share the same seed/label it is not guaranteed that they will merge. But a certain prior / multiplier must be specified. The total weight of an edge where the u/v node have the same label is multiplied with this very multiplier.
© Ullrich Köthe (ullrich.koethe@iwr.uni-heidelberg.de) |
html generated using doxygen and Python
|