Main Page   Groups   Namespace List   Class Hierarchy   Alphabetical List   Compound List   File List   Namespace Members   Compound Members   File Members   Concepts

itkImageKmeansModelEstimator.h

Go to the documentation of this file.
00001 /*========================================================================= 00002 00003 Program: Insight Segmentation & Registration Toolkit 00004 Module: $RCSfile: itkImageKmeansModelEstimator.h,v $ 00005 Language: C++ 00006 Date: $Date: 2003/09/10 14:28:32 $ 00007 Version: $Revision: 1.8 $ 00008 00009 Copyright (c) Insight Software Consortium. All rights reserved. 00010 See ITKCopyright.txt or http://www.itk.org/HTML/Copyright.htm for details. 00011 00012 This software is distributed WITHOUT ANY WARRANTY; without even 00013 the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR 00014 PURPOSE. See the above copyright notices for more information. 00015 00016 =========================================================================*/ 00017 #ifndef _itkImageKmeansModelEstimator_h 00018 #define _itkImageKmeansModelEstimator_h 00019 00020 #include <time.h> 00021 #include <math.h> 00022 #include <float.h> 00023 00024 #include "vnl/vnl_vector.h" 00025 #include "vnl/vnl_matrix.h" 00026 #include "vnl/vnl_math.h" 00027 #include "vnl/algo/vnl_matrix_inverse.h" 00028 00029 #include "itkImageRegionIterator.h" 00030 #include "itkImageRegionConstIterator.h" 00031 #include "itkExceptionObject.h" 00032 00033 #include "itkImageModelEstimatorBase.h" 00034 00035 #define ONEBAND 1 00036 #define GLA_CONVERGED 1 00037 #define GLA_NOT_CONVERGED 2 00038 #define LBG_COMPLETED 3 00039 00040 namespace itk 00041 { 00042 00124 template <class TInputImage, 00125 class TMembershipFunction> 00126 class ITK_EXPORT ImageKmeansModelEstimator: 00127 public ImageModelEstimatorBase<TInputImage, TMembershipFunction> 00128 { 00129 public: 00131 typedef ImageKmeansModelEstimator Self; 00132 typedef ImageModelEstimatorBase<TInputImage, TMembershipFunction> Superclass; 00133 00134 typedef SmartPointer<Self> Pointer; 00135 typedef SmartPointer<const Self> ConstPointer; 00136 00138 itkNewMacro(Self); 00139 00141 itkTypeMacro(ImageKmeansModelEstimator, ImageModelEstimatorBase); 00142 00144 typedef TInputImage InputImageType; 00145 typedef typename TInputImage::Pointer InputImagePointer; 00146 typedef typename TInputImage::ConstPointer InputImageConstPointer; 00147 00150 typedef typename TInputImage::PixelType::VectorType 00151 InputImageVectorType; 00152 00154 typedef typename TInputImage::PixelType InputImagePixelType; 00155 00157 typedef 00158 ImageRegionIterator<TInputImage> InputImageIterator; 00159 00160 typedef 00161 ImageRegionConstIterator<TInputImage> InputImageConstIterator; 00162 00164 typedef typename TMembershipFunction::Pointer MembershipFunctionPointer ; 00165 00167 typedef vnl_matrix<double> CodebookMatrixOfDoubleType; 00168 00170 typedef vnl_matrix<int> CodebookMatrixOfIntegerType; 00171 00173 void SetCodebook(CodebookMatrixOfDoubleType InCodebook); 00174 00176 itkGetMacro(Codebook,CodebookMatrixOfDoubleType); 00177 00179 CodebookMatrixOfDoubleType GetOutCodebook() 00180 { return m_Codebook; } 00181 00183 itkSetMacro(Threshold,double); 00184 00186 itkGetMacro(Threshold,double); 00187 00189 itkSetMacro(OffsetAdd,double); 00190 00192 itkGetMacro(OffsetAdd,double); 00193 00195 itkSetMacro(OffsetMultiply,double); 00196 00198 itkGetMacro(OffsetMultiply,double); 00199 00201 itkSetMacro(MaxSplitAttempts,int); 00202 00204 itkGetMacro(MaxSplitAttempts,int); 00205 00207 CodebookMatrixOfDoubleType GetKmeansResults(void) 00208 { return m_Centroid; } 00209 00210 protected: 00211 ImageKmeansModelEstimator(); 00212 ~ImageKmeansModelEstimator(); 00213 virtual void PrintSelf(std::ostream& os, Indent indent) const; 00214 00216 void GenerateData() ; 00217 00219 void Allocate(); 00220 00222 void PrintKmeansAlgorithmResults(); 00223 private: 00224 ImageKmeansModelEstimator(const Self&); //purposely not implemented 00225 void operator=(const Self&); //purposely not implemented 00226 00233 virtual void EstimateModels(); 00234 00235 void EstimateKmeansModelPrameters(); 00236 00237 typedef typename TInputImage::SizeType ImageSizeType; 00238 00240 typedef typename TInputImage::PixelType::VectorType InputPixelVectorType; 00241 00242 void Reallocate(int oldSize, int newSize); 00243 00244 //Local functions 00245 int WithCodebookUseGLA(); // GLA stands for the Generalized Lloyd Algorithm 00246 int WithoutCodebookUseLBG(); //LBG stands for the Lindo Buzo Gray Algorithm 00247 00248 void NearestNeighborSearchBasic(double *distortion); 00249 00250 void SplitCodewords(int currentSize, 00251 int numDesired, 00252 int scale); 00253 00254 void Perturb(double *oldCodeword, 00255 int scale, 00256 double *newCodeword); 00257 00258 CodebookMatrixOfDoubleType m_Codebook; 00259 00260 // Buffer for K-means calcualtions 00261 CodebookMatrixOfDoubleType m_Centroid; 00262 00263 double m_Threshold; 00264 double m_OffsetAdd; 00265 double m_OffsetMultiply; 00266 int m_MaxSplitAttempts; 00267 00268 //unsigned long m_NumberOfModels; 00269 bool m_ValidInCodebook; 00270 double m_DoubleMaximum; 00271 double m_OutputDistortion; 00272 int m_OutputNumberOfEmptyCells; 00273 00274 unsigned long m_VectorDimension; 00275 unsigned long m_NumberOfCodewords; 00276 unsigned long m_CurrentNumberOfCodewords; 00277 00278 CodebookMatrixOfIntegerType m_CodewordHistogram; 00279 CodebookMatrixOfDoubleType m_CodewordDistortion; 00280 00281 }; // class ImageKmeansModelEstimator 00282 00283 00284 } // namespace itk 00285 00286 #ifndef ITK_MANUAL_INSTANTIATION 00287 #include "itkImageKmeansModelEstimator.txx" 00288 #endif 00289 00290 00291 00292 #endif

Generated at Sat Mar 31 02:21:14 2007 for ITK by doxygen 1.3.8 written by Dimitri van Heesch, © 1997-2000