32 #include "WHierarchicalTreeVoxels.h"
58 std::pair<size_t, size_t>tmp2;
61 m_colors.push_back( WColor( 0.3, 0.3, 0.3, 1.0 ) );
72 size_t level = std::max(
m_level[cluster1],
m_level[cluster2] ) + 1;
79 m_colors.push_back( WColor( 0.3, 0.3, 0.3, 1.0 ) );
81 std::pair<size_t, size_t>childs( cluster1, cluster2 );
84 std::vector<size_t>leafes;
100 for(
size_t i = 0; i < returnVec.size(); ++i )
110 std::list<size_t>worklist;
111 std::vector<size_t>returnVector;
118 while( !worklist.empty() )
120 size_t current = worklist.front();
121 worklist.pop_front();
129 worklist.push_back( left );
133 returnVector.push_back( left );
137 worklist.push_back( right );
141 returnVector.push_back( right );
151 std::list<size_t>worklist;
152 std::vector<size_t>returnVector;
158 if( ( distanceCheckVector[
m_children[i].first] > 0 ) || ( distanceCheckVector[
m_children[i].second] > 0 ) )
160 distanceCheckVector[i] = 2;
164 distanceCheckVector[i] = 1;
165 returnVector.push_back( i );
173 std::vector<size_t>returnVector;
175 std::list<size_t>worklist;
176 worklist.push_back( root );
178 while( worklist.size() < number )
180 size_t current = worklist.front();
181 worklist.pop_front();
186 worklist.push_back( left );
187 worklist.push_back( right );
191 std::cout << number <<
" clusters at " <<
m_customData[worklist.front()] <<
" energy" << std::endl;
193 std::list<size_t>::iterator it;
194 for( it = worklist.begin(); it != worklist.end(); ++it )
196 size_t current = *it;
197 returnVector.push_back( current );
std::vector< size_t > getVoxelsForCluster(size_t cluster)
getter
std::vector< size_t > findXClusters(size_t root, size_t number)
finds a number of clusters, the algorithm travers down the tree and will always split the cluster wit...
~WHierarchicalTreeVoxels()
destructor
std::vector< size_t > findClustersForBranchLength(float value, size_t minSize=100)
finds the clusters for a given similarity value
void addLeaf()
A leaf is at the very bottom of the tree, it represents a single fiber or voxel, for several purposes...
std::vector< size_t > m_voxelnums
stores the voxel id of each leaf node
WHierarchicalTreeVoxels()
standard constructor
std::vector< size_t > findClustersForValue(float value)
finds the clusters for a given similarity value
void addCluster(size_t cluster1, size_t cluster2, float customData)
adds a cluster to the set, it combines 2 already existing clusters
base class for hierarchical tree implementations
std::vector< float > m_customData
custom data for each cluster, this may some energy or similarity level generated by the clustering al...
size_t size(size_t cluster) const
getter
std::vector< WColor > m_colors
a color value for each cluster
size_t m_clusterCount
overall number of cluster, counts both leafes ( clusters of size one ) and real clusters
std::vector< std::pair< size_t, size_t > > m_children
vector that stores the 2 children of each cluster, contains an empty pair for leafes
std::vector< size_t > m_parents
vector that stores the parent cluster for each cluster
float getCustomData(size_t cluster) const
getter
size_t m_leafCount
number of leaf nodes
size_t m_maxLevel
the maximum level, naturally the level of the root node
std::vector< size_t > getLeafesForCluster(size_t cluster) const
getter
std::vector< size_t > m_level
vector that stores the level of each cluster, the level is the maximum of the levels of the child clu...
bool m_leafesLocked
to enforce valid datastructures there will be no leaf with an id higher than a cluster,...
std::vector< std::vector< size_t > > m_containsLeafes
vector that stores the leaf id's for each cluster, this is quite memory intensive but speeds up selec...
implements a compare operator for clusters, depending on custom value of the cluster