SegmenterRegionGrowingMeanStrategy.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/SegmenterRegionGrowingMeanStrategy.h
22  \brief Raster region growing segmenter Mean strategy.
23  */
24 
25 #ifndef __TERRALIB_RP_INTERNAL_SEGMENTERREGIONGROWINGMEANSTRATEGY_H
26 #define __TERRALIB_RP_INTERNAL_SEGMENTERREGIONGROWINGMEANSTRATEGY_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 SegmenterRegionGrowingMeanStrategy
49  \brief Raster region growing segmenter strategy.
50  \ingroup rp_seg
51  */
53  {
54  public :
55 
56  /*!
57  \class Parameters
58  \brief Segmenter Parameters
59  */
61  {
62  public:
63 
64  /**
65  * \name Global parameters
66  */
67  /**@{*/
68 
69  unsigned int m_minSegmentSize; //!< A positive minimum segment size (pixels number - default: 100).
70 
71  double m_segmentsSimilarityThreshold; //!< Segments similarity treshold - Use lower values to merge only those segments that are more similar - Higher values will allow more segments to be merged - valid values range: positive values - default: 0.03 ).
72 
73  unsigned int m_segmentsSimIncreaseSteps; //!< The maximum number of steps to increment the similarity threshold value for the cases where no segment merge occurred - zero will disable segment similarity threshold increments - defaul: 2.
74 
75  bool m_enableLocalMutualBestFitting; //!< If enabled, a merge only occurs between two segments if the minimum dissimilarity criteria is best fulfilled mutually (default: false).
76 
77  bool m_enableSameIterationMerges; //!< If enabled, a merged segment could be merged with another within the same iteration (default:false).
78 
79  //@}
80 
81  Parameters();
82 
83  ~Parameters();
84 
85  //overload
86  const Parameters& operator=( const Parameters& params );
87 
88  //overload
89  void reset() throw( te::rp::Exception );
90 
91  //overload
92  AbstractParameters* clone() const;
93  };
94 
96 
98 
99  //overload
100  bool initialize(
101  SegmenterStrategyParameters const* const strategyParams )
102  throw( te::rp::Exception );
103 
104  //overload
105  void reset();
106 
107  //overload
108  bool execute(
109  SegmenterIdsManager& segmenterIdsManager,
110  const te::rp::SegmenterSegmentsBlock& block2ProcessInfo,
111  const te::rst::Raster& inputRaster,
112  const std::vector< unsigned int >& inputRasterBands,
113  const std::vector< std::complex< double > >& inputRasterNoDataValues,
114  const std::vector< std::complex< double > >& inputRasterBandMinValues,
115  const std::vector< std::complex< double > >& inputRasterBandMaxValues,
116  te::rst::Raster& outputRaster,
117  const unsigned int outputRasterBand,
118  const bool enableProgressInterface ) throw( te::rp::Exception );
119 
120  //overload
121  double getMemUsageEstimation( const unsigned int bandsToProcess,
122  const unsigned int pixelsNumber ) const;
123 
124  //overload
125  unsigned int getOptimalBlocksOverlapSize() const;
126 
127  //overload
128  bool shouldComputeMinMaxValues() const;
129 
130  //overload
131  BlocksMergingMethod getBlocksMergingMethod() const;
132 
133  protected :
134  /*!
135  \brief Internal segments ids matrix type definition.
136  */
137  typedef Matrix< SegmenterSegmentsBlock::SegmentIdDataType >
139 
140  /*!
141  \brief true if this instance is initialized.
142  */
143  bool m_isInitialized;
144 
145  /*!
146  \brief Internal execution parameters.
147  */
149 
150  /*! \brief A pool of segments that can be reused on each strategy execution. */
152 
153  /*! \brief A internal segments IDs matrix that can be reused on each strategy execution. */
154  SegmentsIdsMatrixT m_segmentsIdsMatrix;
155 
156  /*!
157  \brief Initialize the segment objects container and the segment IDs container.
158  \param segmenterIdsManager A segments ids manager to acquire unique segments ids.
159  \param block2ProcessInfo Info about the block to process.
160  \param inputRaster The input raster.
161  \param inputRasterBands Input raster bands to use.
162  \param inputRasterNoDataValues A vector of values to be used as input raster no-data values.
163  \param inputRasterBandMinValues The minimum value present on each band.
164  \param inputRasterBandMinValues The maximum value present on each band.
165  \param actSegsListHeadPtr A pointer the the active segments list head.
166  \return true if OK, false on errors.
167  */
168  bool initializeSegments( SegmenterIdsManager& segmenterIdsManager,
169  const te::rp::SegmenterSegmentsBlock& block2ProcessInfo,
170  const te::rst::Raster& inputRaster,
171  const std::vector< unsigned int >& inputRasterBands,
172  const std::vector< std::complex< double > >& inputRasterNoDataValues,
173  const std::vector< std::complex< double > >& inputRasterBandMinValues,
174  const std::vector< std::complex< double > >& inputRasterBandMaxValues,
175  SegmenterRegionGrowingSegment< rg::MeanFeatureType >** actSegsListHeadPtr );
176  };
177 
178  /*!
179  \class SegmenterRegionGrowingMeanStrategyFactory
180  \brief Raster region growing segmenter strategy factory.
181  \note Factory key: RegionGrowingMean
182  */
185  {
186  public:
187 
189 
191 
192  //overload
193  te::rp::SegmenterStrategy* build();
194 
195  };
196 
197  } // end namespace rp
198 } // end namespace te
199 
200 #endif // __TERRALIB_RP_INTERNAL_SEGMENTERREGIONGROWINGMEANSTRATEGY_H
Segmenter segments IDs manager.
Raster segmenter strategy factory base class.
Base exception class for plugin module.
Definition: Exception.h:42
bool m_enableSameIterationMerges
If enabled, a merged segment could be merged with another within the same iteration (default:false)...
Segmenter merger used in region growing process.
bool m_enableLocalMutualBestFitting
If enabled, a merge only occurs between two segments if the minimum dissimilarity criteria is best fu...
Raster segmenter strategy factory base class.
Region Growing segment.
URI C++ Library.
Raster segmenter strategy base class.
#define TERPEXPORT
You can use this macro in order to export/import classes and functions from this module.
Definition: Config.h:139
double m_segmentsSimilarityThreshold
Segments similarity treshold - Use lower values to merge only those segments that are more similar - ...
unsigned int m_minSegmentSize
A positive minimum segment size (pixels number - default: 100).
Generic template matrix.
Raster region growing segmenter strategy.
Raster segmenter strategy base class.
Configuration flags for the Raster Processing module of TerraLib.
Segments block.
Raster segmenter strategy parameters base class.
A generic template matrix.
Definition: Matrix.h:51
float MeanFeatureType
Mean Strategy feature type.
BlocksMergingMethod
Blocks merging method.
Segmenter segments block description class.
Raster region growing segmenter strategy factory.
unsigned int m_segmentsSimIncreaseSteps
The maximum number of steps to increment the similarity threshold value for the cases where no segmen...