nouveau fichier : include/ArrayTree/ArrayTreeBuilder.tpp nouveau fichier : include/ArrayTree/Border.hpp nouveau fichier : include/ArrayTree/GraphWalker.hpp nouveau fichier : include/ArrayTree/Leader.hpp nouveau fichier : include/ArrayTree/Weight.hpp nouveau fichier : include/ArrayTree/Weight.tpp nouveau fichier : include/ArrayTree/triskeleArrayTreeBase.hpp nouveau fichier : include/ArrayTree/triskeleSort.hpp nouveau fichier : include/ArrayTree/triskeleSort.tpp modifié : include/Attribute.hpp modifié : include/Attributes/AreaAttribute.hpp supprimé : include/BuildTree.hpp supprimé : include/DAPTree/Border.hpp supprimé : include/DAPTree/DAPTreeBuilder.hpp supprimé : include/DAPTree/DAPTreeBuilder.tpp supprimé : include/DAPTree/GraphWalker.hpp supprimé : include/DAPTree/ParRnk.hpp supprimé : include/DAPTree/Weight.hpp supprimé : include/DAPTree/baseDAPTree.hpp supprimé : include/DAPTree/sort.hpp nouveau fichier : include/IImage.hpp nouveau fichier : include/IImage.tpp supprimé : include/ImageInterface.hpp supprimé : include/ImageInterface.tpp modifié : include/QuadTree/QuadTreeBuilder.hpp modifié : include/Tree.hpp nouveau fichier : include/TreeBuilder.hpp supprimé : include/TreeOfShapesGeraud/ToSBuilder.hpp supprimé : include/TreeOfShapesGeraud/ToSutils.hpp modifié : include/XMLTree/XMLTreeBuilder.hpp supprimé : include/baseDef.hpp supprimé : include/getType.hpp nouveau fichier : include/triskeleBase.hpp renommé : include/dealThreads.hpp -> include/triskeleDealThreads.hpp nouveau fichier : include/triskeleDealThreads.tpp renommé : include/debug.hpp -> include/triskeleDebug.hpp nouveau fichier : include/triskeleGdalGetType.hpp modifié : otb-module.cmake nouveau fichier : src/ArrayTree/triskeleArrayTreeBase.cpp modifié : src/Attribute.cpp modifié : src/Attributes/AreaAttribute.cpp modifié : src/CMakeLists.txt supprimé : src/DAPTree/GraphWalker.cpp supprimé : src/DAPTree/ParRnk.cpp supprimé : src/DAPTree/baseDAPTree.cpp supprimé : src/DAPTree/sort.cpp modifié : src/QuadTree/QuadTreeBuilder.cpp modifié : src/Tree.cpp supprimé : src/TreeOfShapesGeraud/ToSBuilder.cpp supprimé : src/TreeOfShapesGeraud/ToSutils.cpp modifié : src/XMLTree/XMLTreeBuilder.cpp supprimé : src/debug.cpp modifié : src/testMain.cpp nouveau fichier : src/triskeleDebug.cpp supprimé : tests/ToSGeraudCoord.txt supprimé : tests/ToSGeraudIdx.ods
89 lines
2.8 KiB
C++
89 lines
2.8 KiB
C++
#ifndef _OTB_TRISKELE_ARRAY_TREE_BORDER_HPP
|
|
#define _OTB_TRISKELE_ARRAY_TREE_BORDER_HPP
|
|
|
|
#include <algorithm>
|
|
|
|
#include "triskeleBase.hpp"
|
|
#include "triskeleArrayTreeBase.hpp"
|
|
|
|
namespace otb {
|
|
namespace triskele {
|
|
namespace arrayTree {
|
|
|
|
/** Border */
|
|
class Border {
|
|
public:
|
|
/*! Retourne le nombre de pixels à l'aide de la taille */
|
|
static DimImg getPixelsCount (const Size &size) { return DimImg (size.width)*DimImg (size.height); }
|
|
|
|
/*! Retourne la taille que doit faire le tableau simplifié */
|
|
static DimImg getMapLength (DimImg pixelsCount) { return (pixelsCount+7)/8; }
|
|
|
|
/*! Vérifie si un index est sur la map ou une bordure, en se basant sur le bit de l'index idx de la map */
|
|
bool isBorder (DimImg idx) const { return map ? map[idx/8] & (1 << (idx%8)) : false; }
|
|
|
|
/*! Vérifie si un point est sur la map ou une bordure en appelant la méthode précédente après avoir converti le point en index */
|
|
bool isBorder (const Point &p) const { return map ? isBorder (pointToId (size, p)) : false; }
|
|
|
|
/*! Supprime toutes les occurences de bordure à l'index idx */
|
|
void clearBorder (DimImg idx) { map[idx/8] &= ~(1 << (idx%8)); }
|
|
|
|
/*! Supprime toutes les occurences de bordure en appelant la méthode précédente après avoir converti le point en index */
|
|
void clearBorder (const Point &p) { clearBorder (pointToId (size, p)); }
|
|
|
|
/*! Rajoute une occurence de bordure à l'index indiqué */
|
|
void setBorder (DimImg idx) { map[idx/8] |= (1 << (idx%8)); }
|
|
|
|
/*! Rajoute une occurence de bordure en appelant la méthode précédente après avoir converti le point en index */
|
|
void setBorder (const Point &p) { setBorder (pointToId (size, p)); }
|
|
|
|
/*! Construit par défault sans aucune bordure */
|
|
Border ()
|
|
: pixelsCount (0), mapLength (0), size (), map (NULL) {
|
|
}
|
|
|
|
/*! Construit Border, les valeurs de map dépendent de defaultVal */
|
|
Border (const Size &size, bool defaultVal)
|
|
: pixelsCount (getPixelsCount (size)), mapLength (getMapLength (pixelsCount)), size (size) {
|
|
map = new uint8_t [mapLength];
|
|
reset (defaultVal);
|
|
}
|
|
~Border () { if (map) delete [] map; }
|
|
|
|
void reset (bool defaultVal) {
|
|
std::fill_n (map, mapLength, defaultVal ? 0xFF : 0);
|
|
if (!(mapLength && defaultVal))
|
|
return;
|
|
map[mapLength-1] &= 0xFF >> (8-(pixelsCount%8))%8;
|
|
}
|
|
|
|
/*! Compte le nombre de pixels considérés comme de la bordure */
|
|
DimImg borderCount () {
|
|
DimImg result = 0;
|
|
for (DimImg i = 0; i < mapLength; ++i)
|
|
result += bitCount[map[i]];
|
|
return result;
|
|
}
|
|
|
|
|
|
private:
|
|
/*! Nombre de pixels dans l'image */
|
|
DimImg pixelsCount;
|
|
|
|
/*! Taille du tableau "simplifié" des pixels */
|
|
DimImg mapLength;
|
|
|
|
/*! Dimensions de l'image */
|
|
Size size;
|
|
|
|
/*! Tableau "simplifié" des pixels */
|
|
uint8_t *map;
|
|
};
|
|
|
|
|
|
} //arrayTree
|
|
} // triskele
|
|
} // otb
|
|
|
|
#endif // _OTB_TRISKELE_ARRAY_TREE_BORDER_HPP
|