
modifié : CMakeListsOTB.txt modifié : LICENSE modifié : MakefileNoOTB modifié : Readme.html modifié : Readme.txt modifié : include/Appli/Option.hpp modifié : include/Appli/Selected.hpp modifié : include/Appli/Selected.tpp modifié : include/ArrayTree/ArrayTreeBuilder.hpp modifié : include/ArrayTree/ArrayTreeBuilder.tpp modifié : include/ArrayTree/Border.hpp modifié : include/ArrayTree/Border.tpp modifié : include/ArrayTree/GraphWalker.hpp modifié : include/ArrayTree/GraphWalker.tpp modifié : include/ArrayTree/Leader.hpp modifié : include/ArrayTree/Leader.tpp modifié : include/ArrayTree/Weight.hpp modifié : include/ArrayTree/Weight.tpp modifié : include/ArrayTree/triskeleArrayTreeBase.hpp modifié : include/ArrayTree/triskeleArrayTreeBase.tpp modifié : include/ArrayTree/triskeleSort.hpp modifié : include/ArrayTree/triskeleSort.tpp modifié : include/AttributeProfiles.hpp modifié : include/AttributeProfiles.tpp modifié : include/Attributes/AreaAttributes.hpp modifié : include/Attributes/AreaAttributes.tpp modifié : include/Attributes/AverageAttributes.hpp modifié : include/Attributes/AverageAttributes.tpp modifié : include/Attributes/MoIAttributes.hpp modifié : include/Attributes/MoIAttributes.tpp modifié : include/Attributes/SDAttributes.hpp modifié : include/Attributes/SDAttributes.tpp modifié : include/Attributes/WeightAttributes.hpp modifié : include/Attributes/WeightAttributes.tpp modifié : include/Attributes/XYAttributes.hpp modifié : include/Attributes/XYAttributes.tpp modifié : include/CompAttribute.hpp modifié : include/CompAttribute.tpp modifié : include/IImage.hpp modifié : include/IImage.tpp modifié : include/QuadTree/QuadTreeBuilder.hpp modifié : include/Tree.hpp modifié : include/Tree.tpp modifié : include/TreeBuilder.hpp modifié : include/TreeBuilder.tpp modifié : include/TreeStats.hpp modifié : include/TreeStats.tpp modifié : include/XMLTree/XMLTreeBuilder.hpp modifié : include/triskeleBase.hpp modifié : include/triskeleBase.tpp modifié : include/triskeleDealThreads.hpp modifié : include/triskeleDealThreads.tpp modifié : include/triskeleDebug.hpp modifié : include/triskeleGdalGetType.hpp modifié : otb-module.cmake modifié : src/Appli/Option.cpp modifié : src/Appli/Selected.cpp modifié : src/ArrayTree/triskeleArrayTreeBase.cpp modifié : src/CMakeLists.txt modifié : src/IImage.cpp modifié : src/PerfArrayTreeBuilder.cpp modifié : src/QuadTree/QuadTreeBuilder.cpp modifié : src/TestArrayTreeBuilder.cpp modifié : src/Tree.cpp modifié : src/TreeStats.cpp modifié : src/XMLTree/XMLTreeBuilder.cpp modifié : src/apGenerator.cpp modifié : src/triskeleBase.cpp modifié : src/triskeleDebug.cpp
86 lines
3.5 KiB
C++
86 lines
3.5 KiB
C++
#ifndef _OTB_TRISKELE_ARRAY_TREE_GRAPHWALKER_HPP
|
|
#define _OTB_TRISKELE_ARRAY_TREE_GRAPHWALKER_HPP
|
|
|
|
#include <boost/assert.hpp>
|
|
#include <algorithm>
|
|
#include <numeric>
|
|
#include <vector>
|
|
|
|
#include "triskeleDebug.hpp"
|
|
#include "triskeleBase.hpp"
|
|
#include "triskeleArrayTreeBase.hpp"
|
|
#include "Border.hpp"
|
|
|
|
#ifdef GRAPHWALKER_NO_BORDER
|
|
#define GRAPHWALKER_CALL_LAMBDA_IDX(idx, count, lambda) lambda, count++
|
|
#define GRAPHWALKER_CALL_LAMBDA_PTS(p1, p2, count, lambda) lambda, count++
|
|
#else
|
|
#define GRAPHWALKER_CALL_LAMBDA_IDX(idx, count, lambda) if (!border.isBorder (idx)) lambda, count++
|
|
#define GRAPHWALKER_CALL_LAMBDA_PTS(p1, p2, count, lambda) if (!(border.isBorder (p1) || border.isBorder (p2))) lambda, count++
|
|
#endif
|
|
|
|
namespace otb {
|
|
namespace triskele {
|
|
namespace arrayTree {
|
|
|
|
using namespace ::triskele;
|
|
using namespace std;
|
|
|
|
/** GraphWalker */
|
|
class GraphWalker {
|
|
public:
|
|
const Border &border;
|
|
const Connectivity connectivity;
|
|
inline const Size &getSize () const;
|
|
|
|
inline GraphWalker (const Border &border, const Connectivity &connectivity = Connectivity::C4);
|
|
|
|
inline DimImg vertexMaxCount () const;
|
|
static inline DimImg vertexMaxCount (const Size &tileSize);
|
|
inline DimEdge edgeMaxCount () const;
|
|
inline DimEdge edgeMaxCount (const Size &tileSize) const;
|
|
inline DimEdge edgeBoundaryMaxCount (const DimSideImg &side) const;
|
|
|
|
inline void setTiles (const unsigned int &coreCount,
|
|
vector<Rect> &tiles, vector<Rect> &boundaries, vector<bool> &verticalBoundaries) const {
|
|
setTiles (coreCount, Rect (NullPoint, border.getSize ()), tiles, boundaries, verticalBoundaries);
|
|
}
|
|
static inline void setTiles (const unsigned int &coreCount, const Rect &rect,
|
|
vector<Rect> &tiles, vector<Rect> &boundaries, vector<bool> &verticalBoundaries);
|
|
inline void setMaxBounds (const vector<Rect> &tiles, vector<DimImg> &vertexMaxBounds, vector<DimImg> &edgesMaxBounds) const;
|
|
|
|
template<typename Funct>
|
|
inline DimImg forEachVertexIdx (const Funct &lambda /*lambda (idx)*/) const;
|
|
template<typename Funct>
|
|
DimImg forEachVertexPt (const Funct &lambda /*lambda (p)*/) const {
|
|
const Size &size (border.getSize ());
|
|
return forEachVertexIdx ([&lambda, &size] (const Point &p) { lambda (point2idx (size, p)); });
|
|
}
|
|
template<typename Funct>
|
|
inline DimImg forEachVertexIdx (const Rect &rect, const Funct &lambda /*lambda (idx)*/) const;
|
|
template<typename Funct>
|
|
inline DimImg forEachVertexPt (const Rect &rect, const Funct &lambda /*lambda (p)*/) const;
|
|
|
|
template<typename Funct>
|
|
inline DimEdge forEachEdgePt (const Rect &rect, TileItem tileItem, const Funct &lambda /*lambda (p0, p1)*/) const;
|
|
|
|
template <typename WeightT, typename EdgeWeightFunction>
|
|
inline WeightT getMedian (const EdgeWeightFunction &ef /*ef.getValue (idx)*/) const;
|
|
|
|
template<typename WeightT, typename EdgeWeightFunction>
|
|
inline DimEdge getEdges (const Rect &rect, TileItem tileItem, Edge<WeightT> *edges, const EdgeWeightFunction &ef /*ef.getWeight (p0, p1)*/) const;
|
|
template<typename WeightT, typename EdgeWeightFunction>
|
|
inline DimEdge getSortedEdges (const Rect &rect, TileItem tileItem, Edge<WeightT> *edges, const EdgeWeightFunction &ef /*ef.getWeight (p0, p1) ef.sort ()*/) const;
|
|
template<typename WeightT, typename EdgeWeightFunction>
|
|
inline DimEdge getCountingSortedEdges (const Rect &rect, TileItem tileItem, Edge<WeightT> *edges, const EdgeWeightFunction &ef /*ef.getWeight (p0, p1)*/) const;
|
|
};
|
|
|
|
#include "GraphWalker.tpp"
|
|
|
|
} // arrayTree
|
|
} // triskele
|
|
} // otb
|
|
|
|
|
|
#endif // _OTB_TRISKELE_ARRAY_TREE_GRAPHWALKER_HPP
|