00001 /// \file 00002 /// Définition des classes pour les KMean 00003 #ifndef GUARD_KMEAN_H 00004 #define GUARD_KMEAN_H 00005 00006 #include <vector> 00007 #include <list> 00008 00009 #include "Debug.hpp" 00010 #include "PNG.hpp" 00011 #include "PixelMap.hpp" 00012 00013 using namespace std; 00014 00015 static Channel channelKMean(&cout); 00016 /////////////////////////////////////////////////////////////////////////////// 00017 /// KMeanClass : représente un centroïde 00018 /////////////////////////////////////////////////////////////////////////////// 00019 class KMeanClass{ 00020 /// Centre de la classe 00021 Color color; 00022 /// Pixels associés à ce centre 00023 vector<Pixel> pixel; 00024 /// string label; 00025 public: 00026 /// Constructeur par défaut 00027 KMeanClass(){} 00028 /// Retourne une chaîne de caractères détaillée 00029 string toString() const; 00030 /// Fixe le centre de la classe 00031 void setColor(Color); 00032 /// Retourne le centre de la classe 00033 Color getColor() const; 00034 // int getSize() const; 00035 /// Ajoute un pixel à la classe 00036 void addPixel(Pixel); 00037 /// Calcule la moyenne de la classe 00038 void computeMean(); 00039 // void setLabel(string); 00040 /// Méthode auxiliaire pour produire un fichier PNG 00041 void output(PNG) const; 00042 /// Méthode auxiliaire pour obtenir les composantes connexes 00043 void getContent(PixelMap&)const; 00044 }; 00045 //////////////////////////////////////////////////////////////////////////////// 00046 /// Implémente l'algorithmes des K-Means 00047 //////////////////////////////////////////////////////////////////////////////// 00048 class KMean{ 00049 /// Nombre de centre 00050 int k; 00051 /// Image à traiter 00052 PNG image; 00053 /// Pixel de l'image 00054 vector<Pixel> pixel; 00055 /// Les classes 00056 vector<KMeanClass> center; 00057 protected: 00058 /// Initialise les centres 00059 void init(); 00060 public: 00061 /// Constructeur avec une image et le nombre de classe 00062 /// \param image l'image à traîter 00063 /// \param k le nombre de centre 00064 KMean(PNG, int); 00065 /// Retourne une chaîne de caractères détaillée 00066 string toString() const; 00067 /// Execute l'algorithme 00068 void doKMean(); 00069 /// Production d'un fichier PNG 00070 void output(string) const; 00071 /// Construit un graphe des composantes connexes 00072 Node makeNode() const; 00073 }; 00074 #endif