#ifndef VQ2D_H #define VQ2D_H #include #include #include #include #include namespace icl{ /// Support class for 2-Dimensional vector quatisation using KMeans \ingroup G_UTILS /** Vector Quantisation is internally applied using the KMeans algorithm which can be defines as follows:
      Given data set D of |D| elements with D = d_1,...,d_|D|
      Given center count K with 
      Optionally given data set C = c1,..,cK of initial centers (prototypes) of size |C|=K
      
      algorithm:
      
      for i = 1 to MAX-STEPS do
         for k = 1 to K
            Vc : = { di | |di-ck| < |di-co| for all o!=k } ( Voronoi cell for center c )
         endfor

         for k = 1 to K
            ck := mean(Vc)
         endfor
      
         // current quatisation is given by the set of centers C
         
         if current quatisation error < minError 
            break
         endif
      endfor
      
**/ class VQ2D{ public: /// create a new VQ VQ2D(float *data=0, int dim=0, bool deepCopyData = false); /// data will be copied once void setData(float *data, int dim, bool deepCopy = false); /// retruns just the center information /** @param centers count of prototypes to use @param steps count of steps to perform @param mmqe mininum mean qauntisation error @param qe quantisation error */ const VQVectorSet &run(int centers, int steps, float mmqe, float &qe); /// calculates advanced features like local pca const VQClusterInfo &features(); /// return the centers of all clusters const VQVectorSet ¢ers(); protected: VQVectorSet *m_poCenters; ///!< center data VQClusterInfo *m_poClusterInfo; ///!< additinal cluster information VQVectorSet *m_poData; ///!< data }; } #endif