User Tools

Site Tools


cpp:ps

Differences

This shows you the differences between two versions of the page.

Link to this comparison view

Both sides previous revisionPrevious revision
Next revision
Previous revision
cpp:ps [2022/06/22 14:00] francoiscpp:ps [2022/12/09 09:39] (current) charles
Line 8: Line 8:
 Dans cet exemple nous proposons de réaliser un pattern spectra à 2 dimensions. Cela signifie que la contribution de chaque nœud sera cumulé en fonction Dans cet exemple nous proposons de réaliser un pattern spectra à 2 dimensions. Cela signifie que la contribution de chaque nœud sera cumulé en fonction
   * de la taille du nœud   * de la taille du nœud
-  * et de sa caractéristique d'être comptacte ou non+  * et de sa caractéristique d'être compact ou non
  
 ===== Visualisation ===== ===== Visualisation =====
Line 48: Line 48:
 </code> </code>
  
-En fonction de ce qui a été déclaré, il peut être utile de simplifier les appels en omettant le contexte d'utilisation (par exemple en évitant de préfixer avec std::). +En fonction de ce qui a été déclaré, il peut être utile de simplifier les appels en omettant le contexte d'utilisation (par exemple en évitant de préfixer avec ''std::''). 
 <code c++> <code c++>
 using namespace std; using namespace std;
Line 59: Line 59:
 Nous préfererons un histogramme logarithmique par défaut. Nous préfererons un histogramme logarithmique par défaut.
 Nous choisissons un pattern spectra de 900 casses (30 bin x 30 bin). Nous choisissons un pattern spectra de 900 casses (30 bin x 30 bin).
-La compression HDF5 à besoin de paramètres propres (taux de compression, taille de cache).+La compression HDF5 besoin de paramètres propres (taux de compression, taille de cache).
 <code c++> <code c++>
 typedef uint16_t DimBin; typedef uint16_t DimBin;
  
 static const int GeoDimT (2); static const int GeoDimT (2);
-static TreeType treeType = MAX; +static const TreeType treeType = MAX; 
-static DimBin linearCompactBin (false), linearAreaBin (false); +static const DimBin linearCompactBin (false), linearAreaBin (false); 
-static DimBin binCompactCount (30), binAreaCount (30); +static const DimBin binCompactCount (30), binAreaCount (30); 
-static unsigned int compressLevel (5); +static const unsigned int compressLevel (5); 
-static size_t cacheSize (1024*1024);+static const size_t cacheSize (1024*1024);
 </code> </code>
  
Line 104: Line 104:
 </code> </code>
  
-Le point d'entré du programmecommencera par analyser les arguments+Le point d'entrée du programme commencera par analyser les arguments :
  
   * argv[0] : nom du programme   * argv[0] : nom du programme
Line 121: Line 121:
 </code> </code>
  
-En fonction des pixels de l'image nous invoquerons fonction ''patternSpectra'' avec le bon type. +En fonction des pixels de l'image nous invoquerons la fonction ''patternSpectra'' avec le bon type. 
 <code c++> <code c++>
   switch (inputImage.getDataType ()) {   switch (inputImage.getDataType ()) {
Line 158: Line 158:
   Raster<PixelT, GeoDimT> raster;   Raster<PixelT, GeoDimT> raster;
   // image size (width x height)   // image size (width x height)
-  Size<GeoDimT> size (inputImage.getSize ());+  const Size<GeoDimT> size (inputImage.getSize ());
   // read first band (0) in 2D mode from origine [0,0] to end [width, height].   // read first band (0) in 2D mode from origine [0,0] to end [width, height].
   inputImage.readBand (raster, 0, NullPoint2D, size);   inputImage.readBand (raster, 0, NullPoint2D, size);
Line 167: Line 167:
   cout << "Build tree" << endl;   cout << "Build tree" << endl;
   // no border (i.e. all pixels are take in account)   // no border (i.e. all pixels are take in account)
-  Border<GeoDimT> border (size, false);+  const Border<GeoDimT> border (size, false);
   // neighbors take in account (default connectivity C4)   // neighbors take in account (default connectivity C4)
-  GraphWalker<GeoDimT> graphWalker (border);+  const GraphWalker<GeoDimT> graphWalker (border);
   // tree builder base on raster, connectivity and type of tree   // tree builder base on raster, connectivity and type of tree
   ArrayTreeBuilder<PixelT, PixelT, GeoDimT> atb (raster, graphWalker, treeType);   ArrayTreeBuilder<PixelT, PixelT, GeoDimT> atb (raster, graphWalker, treeType);
Line 192: Line 192:
   // create area attribute   // create area attribute
   cout << "Build Area Attributes" << endl;   cout << "Build Area Attributes" << endl;
-  AreaAttributes<GeoDimT> areaAttributes (tree);+  const AreaAttributes<GeoDimT> areaAttributes (tree);
   cout << "Build Perimeter Attributes" << endl;   cout << "Build Perimeter Attributes" << endl;
-  PerimeterAttributes<GeoDimT> perimeterAttributes (tree, graphWalker);+  const PerimeterAttributes<GeoDimT> perimeterAttributes (tree, graphWalker);
   cout << "Build Compactness Attributes" << endl;   cout << "Build Compactness Attributes" << endl;
-  CompactnessAttributes<GeoDimT> compactnessAttributes (tree, areaAttributes, perimeterAttributes);+  const CompactnessAttributes<GeoDimT> compactnessAttributes (tree, areaAttributes, perimeterAttributes);
 </code> </code>
  
-Nous construisons des intervalles de valeurs (absices et ordonnées).+Nous construisons des intervalles de valeurs (abscisses et ordonnées).
 <code c++> <code c++>
   cout << "Build PS" << endl;   cout << "Build PS" << endl;
-  static DimImg MaxArea (size.getPixelsCount ()); +  const DimImg MaxArea (size.getPixelsCount ()); 
-  vector<double> compactScale = linearCompactBin ?+  const vector<double> compactScale = linearCompactBin ?
     linearSpace (0., 1., binCompactCount) :     linearSpace (0., 1., binCompactCount) :
     logSpace (1./MaxArea, 1., binCompactCount);     logSpace (1./MaxArea, 1., binCompactCount);
-  vector<double> areaScale = linearAreaBin ?+  const vector<double> areaScale = linearAreaBin ?
     linearSpace (1., MaxArea, binAreaCount) :     linearSpace (1., MaxArea, binAreaCount) :
     logSpace (1, MaxArea, binAreaCount);     logSpace (1, MaxArea, binAreaCount);
 </code> </code>
  
-Nous le pattern spectra en parcourant tous les nœuds.+Nous calculons le pattern spectra en parcourant tous les nœuds.
 <code c++> <code c++>
   vector<double> psTab (binAreaCount * binCompactCount, 0.);   vector<double> psTab (binAreaCount * binCompactCount, 0.);
Line 220: Line 220:
  
   for (DimParent compId = 0; compId < rootId; ++compId) {   for (DimParent compId = 0; compId < rootId; ++compId) {
-    DimBin areaBinId = lower_bound (areaScale.begin (), areaScale.end (), double (areaValues[compId])) - areaScale.begin (); +    const DimBin areaBinId = lower_bound (areaScale.begin (), areaScale.end (), double (areaValues[compId])) - areaScale.begin (); 
-    DimBin compactBinId = lower_bound (compactScale.begin (), compactScale.end (), double (compactValues[compId])) - compactScale.begin (); +    const DimBin compactBinId = lower_bound (compactScale.begin (), compactScale.end (), double (compactValues[compId])) - compactScale.begin (); 
-    double diff = abs (double (weightValues[compId])- +    const double diff = abs (double (weightValues[compId]) - 
-        double (weightValues[tree.getCompParent (compId)])); +      double (weightValues[tree.getCompParent (compId)])); 
-    double volume = diff * areaValues[compId];+    const double volume = diff * areaValues[compId];
  
-    size_t id (compactBinId + areaBinId * binCompactCount);+    const size_t id (compactBinId + areaBinId * binCompactCount);
     psTab [id] += volume;     psTab [id] += volume;
   }   }
 </code> </code>
  
-Nous construisons, pour l'exemple, Une représentation réduite du pattern spectra (de nombreuses cellules sont vides).+Nous construisons, pour l'exemple, une représentation réduite du pattern spectra (de nombreuses cases sont vides).
 <code c++> <code c++>
   vector<DimBin> reduceBinIdx;   vector<DimBin> reduceBinIdx;
Line 279: Line 279:
 </code> </code>
  
-La commande ''h5dump'' permet d'afficher les valeurs dans le fichier+La commande ''h5dump'' permet d'afficher les valeurs contenues dans le fichier.
 <code bash> <code bash>
 $ h5dump arles.kor  $ h5dump arles.kor 
Line 286: Line 286:
 </code> </code>
  
-Pattern Spectra+Le Pattern Spectra est constitué de 30 x 30 cases.
 <code bash> <code bash>
    DATASET "PS" {    DATASET "PS" {
Line 299: Line 299:
 </code> </code>
  
-Abscisse+Voici les information permettant de reconstituer l'axe des abscisses.
 <code bash> <code bash>
    DATASET "XLabel" {    DATASET "XLabel" {
Line 324: Line 324:
 </code> </code>
  
-Ordonnée+Voici les information permettant de reconstituer l'axe des ordonnées.
 <code bash> <code bash>
    DATASET "YLabel" {    DATASET "YLabel" {
Line 348: Line 348:
    }    }
 </code> </code>
-Données réduites+ 
 +Pour l'exemple voici une autre représentation (réduite) du Parttern Spectra.
 <code bash> <code bash>
  
cpp/ps.1655906412.txt.gz · Last modified: 2022/06/22 14:00 by francois