|
Public Types |
| typedef KdTreeBasedKmeansEstimator | Self |
| typedef Object | Superclass |
| typedef SmartPointer< Self > | Pointer |
typedef SmartPointer< const
Self > | ConstPointer |
| typedef TKdTree::KdTreeNodeType | KdTreeNodeType |
| typedef TKdTree::MeasurementType | MeasurementType |
| typedef TKdTree::MeasurementVectorType | MeasurementVectorType |
| typedef TKdTree::InstanceIdentifier | InstanceIdentifier |
| typedef TKdTree::SampleType | SampleType |
| typedef KdTreeNodeType::CentroidType | CentroidType |
| typedef unsigned int | MeasurementVectorSizeType |
| typedef Array< double > | ParameterType |
| typedef std::vector< ParameterType > | InternalParametersType |
| typedef Array< double > | ParametersType |
typedef itk::hash_map< InstanceIdentifier,
unsigned int > | ClusterLabelsType |
Public Member Functions |
| virtual const char * | GetNameOfClass () const |
| void | SetParameters (ParametersType ¶ms) |
| ParametersType & | GetParameters () |
| TKdTree * | GetKdTree () |
| virtual const MeasurementVectorSizeType & | GetMeasurementVectorSize () |
| virtual const int & | GetCurrentIteration () |
| virtual const double & | GetCentroidPositionChanges () |
| void | StartOptimization () |
| void | SetUseClusterLabels (bool flag) |
| ClusterLabelsType * | GetClusterLabels () |
|
| virtual void | SetMaximumIteration (int _arg) |
| virtual const int & | GetMaximumIteration () |
|
| virtual void | SetCentroidPositionChangesThreshold (double _arg) |
| virtual const double & | GetCentroidPositionChangesThreshold () |
|
| void | SetKdTree (TKdTree *tree) |
Static Public Member Functions |
| static Pointer | New () |
Protected Member Functions |
| | KdTreeBasedKmeansEstimator () |
| virtual | ~KdTreeBasedKmeansEstimator () |
| void | PrintSelf (std::ostream &os, Indent indent) const |
| void | FillClusterLabels (KdTreeNodeType *node, int closestIndex) |
| double | GetSumOfSquaredPositionChanges (InternalParametersType &previous, InternalParametersType ¤t) |
| int | GetClosestCandidate (ParameterType &measurements, std::vector< int > &validIndexes) |
| bool | IsFarther (ParameterType &pointA, ParameterType &pointB, MeasurementVectorType &lowerBound, MeasurementVectorType &upperBound) |
| void | Filter (KdTreeNodeType *node, std::vector< int > validIndexes, MeasurementVectorType &lowerBound, MeasurementVectorType &upperBound) |
| void | CopyParameters (InternalParametersType &source, InternalParametersType &target) |
| void | CopyParameters (ParametersType &source, InternalParametersType &target) |
| void | CopyParameters (InternalParametersType &source, ParametersType &target) |
| void | PrintPoint (ParameterType &point) |
|
| void | GetPoint (ParameterType &point, MeasurementVectorType measurements) |
Classes |
| class | CandidateVector |
It returns k mean vectors that are centroids of k-clusters using pre-generated k-d tree. k-d tree generation is done by the WeightedCentroidKdTreeGenerator. The tree construction needs to be done only once. The resulting k-d tree's non-terminal nodes that have their children nodes have vector sums of measurement vectors that belong to the nodes and the number of measurement vectors in addition to the typical node boundary information and pointers to children nodes. Instead of reassigning every measurement vector to the nearest cluster centroid and recalculating centroid, it maintain a set of cluster centroid candidates and using pruning algorithm that utilizes k-d tree, it updates the means of only relevant candidates at each iterations. It would be faster than traditional implementation of k-means algorithm. However, the k-d tree consumes a large amount of memory. The tree construction time and pruning algorithm's performance are important factors to the whole process's performance. If users want to use k-d tree for some purpose other than k-means estimation, they can use the KdTreeGenerator instead of the WeightedCentroidKdTreeGenerator. It will save the tree construction time and memory usage.
Note: There is a second implementation of k-means algorithm in ITK under the While the Kd tree based implementation is more time efficient, the GLA/LBG based algorithm is more memory efficient.