37 #ifndef VIGRA_REGION_SHRINK_HXX 
   38 #define VIGRA_REGION_SHRINK_HXX 
   40 #include "multi_array.hxx" 
   41 #include "multi_gridgraph.hxx" 
   45     template<
unsigned int DIM, 
class LABEL_TYPE,
class LABEL_TYPE_OUT>
 
   47         MultiArrayView<DIM,LABEL_TYPE>     labels,
 
   48         const size_t shrinkNpixels,
 
   49         MultiArrayView<DIM,LABEL_TYPE_OUT> shrinkedLabels
 
   51         shrinkedLabels = labels;
 
   53         typedef GridGraph<DIM, undirected_tag> Graph;
 
   54         typedef typename Graph::Node Node;
 
   56         typedef typename Graph::NodeIt graph_scanner;
 
   57         typedef typename Graph::OutArcIt neighbor_iterator;
 
   59         const Graph g(labels.shape());
 
   62         for (graph_scanner n(g); n != lemon::INVALID; ++n){
 
   64             for (neighbor_iterator arc(g, node); arc != lemon::INVALID; ++arc){
 
   65                 const Node otherNode = g.target(arc);
 
   67                 if(labels[node]!=labels[otherNode]){
 
   68                     shrinkedLabels[node]=0;
 
   69                     shrinkedLabels[otherNode]=0;
 
   74         MultiArray<DIM,bool> visited(labels.shape());
 
   75         for(
size_t r=0;r<shrinkNpixels-1;++r){
 
   76             std::fill(visited.begin(),visited.end(),
false);
 
   77             for (graph_scanner n(g); n != lemon::INVALID; ++n){
 
   79                 if(!visited[n] && shrinkedLabels[node]==0){
 
   80                     for (neighbor_iterator arc(g, node); arc != lemon::INVALID; ++arc){
 
   81                         const Node otherNode = g.target(arc);
 
   82                         shrinkedLabels[otherNode]=0;
 
   83                         visited[otherNode]=
true;
 
   93 #endif // VIGRA_REGION_SHRINK_HXX