SegmenterRegionGrowingBaatzStrategy.h
Go to the documentation of this file.
1 /* Copyright (C) 2015 National Institute For Space Research (INPE) - Brazil.
2 
3  This file is part of the TerraLib - a Framework for building GIS enabled applications.
4 
5  TerraLib is free software: you can redistribute it and/or modify
6  it under the terms of the GNU Lesser General Public License as published by
7  the Free Software Foundation, either version 3 of the License,
8  or (at your option) any later version.
9 
10  TerraLib is distributed in the hope that it will be useful,
11  but WITHOUT ANY WARRANTY; without even the implied warranty of
12  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
13  GNU Lesser General Public License for more details.
14 
15  You should have received a copy of the GNU Lesser General Public License
16  along with TerraLib. See COPYING. If not, write to
17  TerraLib Team at <terralib-team@terralib.org>.
18  */
19 
20 /*!
21  \file terralib/rp/SegmenterRegionGrowingBaatzStrategy.h
22  \brief Raster region growing segmenter Baatz strategy.
23  */
24 
25 #ifndef __TERRALIB_RP_INTERNAL_SEGMENTERREGIONGROWINGBAATZSTRATEGY_H
26 #define __TERRALIB_RP_INTERNAL_SEGMENTERREGIONGROWINGBAATZSTRATEGY_H
27 
29 #include "SegmenterStrategy.h"
34 #include "SegmenterSegmentsBlock.h"
36 #include "Matrix.h"
37 #include "Config.h"
38 
39 #include <vector>
40 #include <list>
41 #include <set>
42 
43 namespace te
44 {
45  namespace rp
46  {
47  /*!
48  \class SegmenterRegionGrowingBaatzStrategy
49  \brief Raster region growing segmenter strategy.
50  \ingroup rp_seg
51  */
53  {
54  public :
55  /*!
56  \class Parameters
57  \brief Segmenter Parameters
58  */
60  {
61  public:
62  /**
63  * \name Baatz specific parameters
64  */
65  /**@{*/
66 
67  std::vector< double > m_bandsWeights; //!< The weight given to each band, when applicable (note: the bands weights sum must always be 1) or an empty vector indicating that all bands have the same weight.
68 
69  double m_colorWeight; //!< The weight given to the color component, deafult:0.9, valid range: [0,1].
70 
71  double m_compactnessWeight; //!< The weight given to the compactness component, deafult:0.5, valid range: [0,1].
72 
73  //@}
74 
76 
78 
79  //overload
80  const Parameters& operator=( const Parameters& params );
81 
82  //overload
83  void reset() throw( te::rp::Exception );
84 
85  //overload
86  AbstractParameters* clone() const;
87  };
88 
90 
92 
93  //overload
94  bool initialize( SegmenterStrategyParameters const* const strategyParams )
95  throw( te::rp::Exception );
96 
97  //overload
98  void reset();
99 
100  //overload
101  bool execute(
102  SegmenterIdsManager& segmenterIdsManager,
103  const te::rp::SegmenterSegmentsBlock& block2ProcessInfo,
104  const te::rst::Raster& inputRaster,
105  const std::vector< unsigned int >& inputRasterBands,
106  const std::vector< std::complex< double > >& inputRasterNoDataValues,
107  const std::vector< std::complex< double > >& inputRasterBandMinValues,
108  const std::vector< std::complex< double > >& inputRasterBandMaxValues,
109  te::rst::Raster& outputRaster,
110  const unsigned int outputRasterBand,
111  const bool enableProgressInterface ) throw( te::rp::Exception );
112 
113  //overload
114  double getMemUsageEstimation( const unsigned int bandsToProcess,
115  const unsigned int pixelsNumber ) const;
116 
117  //overload
118  unsigned int getOptimalBlocksOverlapSize() const;
119 
120  //overload
121  bool shouldComputeMinMaxValues() const;
122 
123  //overload
124  BlocksMergingMethod getBlocksMergingMethod() const;
125 
126  protected :
127  /*!
128  \brief Internal segments ids matrix type definition.
129  */
130  typedef Matrix< SegmenterSegmentsBlock::SegmentIdDataType >
132 
133  /*!
134  \brief true if this instance is initialized.
135  */
136  bool m_isInitialized;
137 
138  /*!
139  \brief Internal execution parameters.
140  */
142 
143  /*! \brief A pool of segments that can be reused on each strategy execution. */
145 
146  /*! \brief A internal segments IDs matrix that can be reused on each strategy execution. */
147  SegmentsIdsMatrixT m_segmentsIdsMatrix;
148 
149  /*!
150  \brief Initialize the segment objects container and the segment IDs container.
151  \param segmenterIdsManager A segments ids manager to acquire unique segments ids.
152  \param block2ProcessInfo Info about the block to process.
153  \param inputRaster The input raster.
154  \param inputRasterBands Input raster bands to use.
155  \param inputRasterNoDataValues A vector of values to be used as input raster no-data values.
156  \param inputRasterBandMinValues The minimum value present on each band.
157  \param inputRasterBandMinValues The maximum value present on each band.
158  \param actSegsListHeadPtr A pointer the the active segments list head or a null points if no segments were initialized (entire image with no data, i.e.).
159  \return true if OK, false on errors.
160  */
161  bool initializeSegments( SegmenterIdsManager& segmenterIdsManager,
162  const te::rp::SegmenterSegmentsBlock& block2ProcessInfo,
163  const te::rst::Raster& inputRaster,
164  const std::vector< unsigned int >& inputRasterBands,
165  const std::vector< std::complex< double > >& inputRasterNoDataValues,
166  const std::vector< std::complex< double > >& inputRasterBandMinValues,
167  const std::vector< std::complex< double > >& inputRasterBandMaxValues,
168  SegmenterRegionGrowingSegment< rg::BaatzFeatureType >** actSegsListHeadPtr );
169  };
170 
171  /*!
172  \class SegmenterRegionGrowingBaatzStrategyFactory
173  \brief Raster region growing segmenter strategy factory.
174  \note Factory key: RegionGrowingBaatz
175  */
178  {
179  public:
180 
182 
184 
185  //overload
187 
188  };
189 
190  } // end namespace rp
191 } // end namespace te
192 
193 #endif // __TERRALIB_RP_INTERNAL_SEGMENTERREGIONGROWINGBAATZSTRATEGY_H
te::rp::SegmenterStrategy
Raster segmenter strategy base class.
Definition: SegmenterStrategy.h:47
te::rp::Matrix
A generic template matrix.
Definition: Matrix.h:55
te
TerraLib.
Definition: AddressGeocodingOp.h:52
SegmenterSegmentsBlock.h
Segments block.
te::rp::SegmenterRegionGrowingBaatzStrategy::Parameters::m_compactnessWeight
double m_compactnessWeight
The weight given to the compactness component, deafult:0.5, valid range: [0,1].
Definition: SegmenterRegionGrowingBaatzStrategy.h:71
te::rp::SegmenterRegionGrowingBaatzStrategy::Parameters::Parameters
Parameters()
Matrix.h
Generic template matrix.
te::rp::SegmenterRegionGrowingBaatzStrategy::Parameters::m_bandsWeights
std::vector< double > m_bandsWeights
The weight given to each band, when applicable (note: the bands weights sum must always be 1) or an e...
Definition: SegmenterRegionGrowingBaatzStrategy.h:67
te::rp::SegmenterStrategyParameters
Segmenter Strategy Parameters.
Definition: SegmenterStrategyParameters.h:40
te::rp::rg::BaatzFeatureType
float BaatzFeatureType
Baatz Strategy feature type.
Definition: SegmenterRegionGrowingFunctions.h:62
te::rp::SegmenterRegionGrowingBaatzStrategy::Parameters::m_colorWeight
double m_colorWeight
The weight given to the color component, deafult:0.9, valid range: [0,1].
Definition: SegmenterRegionGrowingBaatzStrategy.h:69
te::rp::SegmenterRegionGrowingSegmentsPool
Segments pool.
Definition: SegmenterRegionGrowingSegmentsPool.h:46
te::rp::SegmenterRegionGrowingBaatzStrategy
Raster region growing segmenter strategy.
Definition: SegmenterRegionGrowingBaatzStrategy.h:53
SegmenterRegionGrowingSegmentsPool.h
Segments pool.
SegmenterRegionGrowingSegment.h
Region Growing segment.
te::rp::SegmenterStrategyFactory
Raster segmenter strategy factory base class.
Definition: SegmenterStrategyFactory.h:46
te::Exception
Base exception class for plugin module.
Definition: Exception.h:42
te::rp::SegmenterRegionGrowingBaatzStrategy::Parameters::reset
void reset()
Clear all internal allocated resources and reset the parameters instance to its initial state.
te::rp::SegmenterRegionGrowingBaatzStrategyFactory::build
te::rp::SegmenterStrategy * build()
Concrete factories (derived from this one) must implement this method in order to create objects.
te::rp::SegmenterRegionGrowingStrategyParameters
Segmenter Region Growing Strategy Parameters.
Definition: SegmenterRegionGrowingStrategyParameters.h:41
TERPEXPORT
#define TERPEXPORT
You can use this macro in order to export/import classes and functions from this module.
Definition: Config.h:139
SegmenterRegionGrowingFunctions.h
te::rp::SegmenterRegionGrowingSegment
Region Growing segment.
Definition: SegmenterRegionGrowingSegment.h:42
te::rp::SegmenterRegionGrowingBaatzStrategy::Parameters::operator=
const Parameters & operator=(const Parameters &params)
te::rp::SegmenterRegionGrowingBaatzStrategy::Parameters::~Parameters
~Parameters()
te::rp::SegmenterRegionGrowingBaatzStrategy::Parameters
Segmenter Parameters.
Definition: SegmenterRegionGrowingBaatzStrategy.h:60
te::rp::SegmenterRegionGrowingBaatzStrategyFactory
Raster region growing segmenter strategy factory.
Definition: SegmenterRegionGrowingBaatzStrategy.h:178
Config.h
Proxy configuration file for TerraView (see terraview_config.h).
SegmenterStrategyFactory.h
Raster segmenter strategy factory base class.
SegmenterStrategy.h
Raster segmenter strategy base class.
te::rp::SegmenterRegionGrowingBaatzStrategyFactory::SegmenterRegionGrowingBaatzStrategyFactory
SegmenterRegionGrowingBaatzStrategyFactory()
te::rp::SegmenterStrategy::BlocksMergingMethod
BlocksMergingMethod
Blocks merging method.
Definition: SegmenterStrategy.h:53
te::rp::SegmenterIdsManager
Segmenter segments IDs manager.
Definition: SegmenterIdsManager.h:45
te::rp::SegmenterSegmentsBlock
Segmenter segments block description class.
Definition: SegmenterSegmentsBlock.h:42
SegmenterRegionGrowingStrategyParameters.h
te::rp::SegmenterRegionGrowingBaatzStrategyFactory::~SegmenterRegionGrowingBaatzStrategyFactory
~SegmenterRegionGrowingBaatzStrategyFactory()
SegmenterRegionGrowingMerger.h
Segmenter merger used in region growing process.