2 #ifndef OPENGM_MINSTCUTKOLMOGOROV_HXX
3 #define OPENGM_MINSTCUTKOLMOGOROV_HXX
8 #include <maxflowlib.h>
18 template<
class NType,
class VType>
19 class MinSTCutKolmogorov {
21 typedef NType node_type;
22 typedef VType ValueType;
23 typedef maxflowLib::Graph<ValueType,ValueType,ValueType> graph_type;
26 ~MinSTCutKolmogorov();
27 MinSTCutKolmogorov(
size_t numberOfNodes,
size_t numberOfEdges);
28 void addEdge(node_type,node_type,ValueType);
29 void calculateCut(std::vector<bool>&);
33 size_t numberOfNodes_;
34 size_t numberOfEdges_;
35 static const NType S = 0;
36 static const NType T = 1;
40 template<
class NType,
class VType>
41 MinSTCutKolmogorov<NType,VType>::MinSTCutKolmogorov() {
47 template<
class NType,
class VType>
48 MinSTCutKolmogorov<NType,VType>::MinSTCutKolmogorov(
size_t numberOfNodes,
size_t numberOfEdges) {
49 numberOfNodes_ = numberOfNodes;
50 numberOfEdges_ = numberOfEdges;
51 graph_ =
new graph_type(numberOfNodes_-2,numberOfEdges_);
52 graph_->add_node(numberOfNodes_-2);
58 template<
class NType,
class VType>
59 MinSTCutKolmogorov<NType,VType>::~MinSTCutKolmogorov()
66 template<
class NType,
class VType>
67 void MinSTCutKolmogorov<NType,VType>::addEdge(node_type n1, node_type n2, ValueType cost) {
68 assert(n1 < numberOfNodes_);
69 assert(n2 < numberOfNodes_);
72 graph_->add_tweights( n2-2, cost, 0);
74 graph_->add_tweights( n1-2, 0, cost);
76 graph_->add_edge( n1-2, n2-2, cost, 0 );
80 template<
class NType,
class VType>
81 void MinSTCutKolmogorov<NType,VType>::calculateCut(std::vector<bool>& segmentation) {
83 segmentation.resize(numberOfNodes_);
84 for(
size_t i=2; i<numberOfNodes_; ++i) {
85 if (graph_->what_segment(i-2) == graph_type::SOURCE) {
86 segmentation[i]=
false;
100 #endif // #ifndef OPENGM_MINSTCUTBOOST_HXX