An error occurred while loading the file. Please try again.
-
Narcon Nicolas authored2df2e6b9
#ifndef __LSRM_GRAPH_H
#define __LSRM_GRAPH_H
#include "lsrmDataStructures.h"
#include "lpContour.h"
namespace lsrm
{
struct BaseNode
{
/* Node already merged. */
bool m_Valid;
/* Node has to be removed from the graph. */
bool m_Expired;
/* Does the node merge at the previous iteration */
bool m_IsMerged;
/* Perimeter of the region */
unsigned int m_Perimeter;
/* Area (number of inner pixels) of the region */
unsigned int m_Area;
/*
Node is identified by the location
of the first pixel of the region.
*/
long unsigned int m_Id;
/*
Bounding box of the region
in the image.
*/
lp::BoundingBox m_Bbox;
/* Contour of the shape */
lp::Contour m_Contour;
};
template<class DerivedNode>
struct NeighborType
{
typedef std::weak_ptr<DerivedNode> WeakDerived;
typedef std::shared_ptr<DerivedNode> SharedDerived;
WeakDerived m_Target;
float m_Cost;
unsigned int m_Boundary;
bool m_CostUpdated;
NeighborType(WeakDerived ptr, double w, unsigned int c) :
m_Target(ptr), m_Cost(w), m_Boundary(c), m_CostUpdated(false) {}
inline SharedDerived GetRegion()
{
SharedDerived ptr(m_Target.lock());
if(!ptr)
throw std::runtime_error("lsrmGraph.h - NeighborType::GetRegion - Region pointer is not valid");
return ptr;
}
};
template<class DerivedNode>
struct Node : BaseNode
{
typedef NeighborType<DerivedNode> CRPTNeighborType;
std::vector<CRPTNeighborType> m_Edges;
};
71727374757677787980818283848586878889909192
template<class TNode>
struct Graph
{
typedef TNode NodeType;
typedef std::shared_ptr<NodeType> NodePointerType;
typedef typename NodeType::CRPTNeighborType EdgeType;
typedef std::vector<NodePointerType> NodeListType;
typedef typename NodeListType::iterator NodeIteratorType;
typedef typename NodeListType::const_iterator NodeConstIteratorType;
typedef std::vector<EdgeType> EdgeListType;
typedef typename EdgeListType::iterator EdgeIteratorType;
typedef typename EdgeListType::const_iterator EdgeConstIteratorType;
std::vector< NodePointerType > m_Nodes;
};
} // end of namespace lsrm
#endif