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() ;
84 
85  //overload
86  AbstractParameters* clone() const;
87 
88  //overload
89  bool serialize( AlgorithmParametersSerializer& serializer ) const;
90  };
91 
93 
95 
96  //overload
97  bool initialize( SegmenterStrategyParameters const* const strategyParams );
98 
99  //overload
100  void reset();
101 
102  //overload
103  bool execute(
104  SegmenterIdsManager& segmenterIdsManager,
105  const te::rp::SegmenterSegmentsBlock& block2ProcessInfo,
106  const te::rst::Raster& inputRaster,
107  const std::vector< unsigned int >& inputRasterBands,
108  const std::vector< std::complex< double > >& inputRasterNoDataValues,
109  const std::vector< std::complex< double > >& inputRasterBandMinValues,
110  const std::vector< std::complex< double > >& inputRasterBandMaxValues,
111  te::rst::Raster& outputRaster,
112  const unsigned int outputRasterBand,
113  const bool enableProgressInterface );
114 
115  //overload
116  double getMemUsageEstimation( const unsigned int bandsToProcess,
117  const unsigned int pixelsNumber ) const;
118 
119  //overload
120  unsigned int getOptimalBlocksOverlapSize() const;
121 
122  //overload
124 
125  //overload
127 
128  protected :
129  /*!
130  \brief Internal segments ids matrix type definition.
131  */
134 
135  /*!
136  \brief true if this instance is initialized.
137  */
139 
140  /*!
141  \brief Internal execution parameters.
142  */
144 
145  /*! \brief A pool of segments that can be reused on each strategy execution. */
147 
148  /*! \brief A internal segments IDs matrix that can be reused on each strategy execution. */
150 
151  /*!
152  \brief Initialize the segment objects container and the segment IDs container.
153  \param segmenterIdsManager A segments ids manager to acquire unique segments ids.
154  \param block2ProcessInfo Info about the block to process.
155  \param inputRaster The input raster.
156  \param inputRasterBands Input raster bands to use.
157  \param inputRasterNoDataValues A vector of values to be used as input raster no-data values.
158  \param inputRasterBandMinValues The minimum value present on each band.
159  \param inputRasterBandMinValues The maximum value present on each band.
160  \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.).
161  \return true if OK, false on errors.
162  */
163  bool initializeSegments( SegmenterIdsManager& segmenterIdsManager,
164  const te::rp::SegmenterSegmentsBlock& block2ProcessInfo,
165  const te::rst::Raster& inputRaster,
166  const std::vector< unsigned int >& inputRasterBands,
167  const std::vector< std::complex< double > >& inputRasterNoDataValues,
168  const std::vector< std::complex< double > >& inputRasterBandMinValues,
169  const std::vector< std::complex< double > >& inputRasterBandMaxValues,
171  };
172 
173  /*!
174  \class SegmenterRegionGrowingBaatzStrategyFactory
175  \brief Raster region growing segmenter strategy factory.
176  \note Factory key: RegionGrowingBaatz
177  */
180  {
181  public:
182 
184 
186 
187  //overload
189 
190  };
191 
192  } // end namespace rp
193 } // end namespace te
194 
195 #endif // __TERRALIB_RP_INTERNAL_SEGMENTERREGIONGROWINGBAATZSTRATEGY_H
Generic template matrix.
Segmenter merger used in region growing process.
Region Growing segment.
Raster segmenter strategy factory base class.
Raster segmenter strategy base class.
A class to standardize algorithm parameters serialization.
Segmenter segments IDs manager.
Raster region growing segmenter strategy factory.
te::rp::SegmenterStrategy * build()
Concrete factories (derived from this one) must implement this method in order to create objects.
double m_colorWeight
The weight given to the color component, deafult:0.9, valid range: [0,1].
void reset()
Clear all internal allocated resources and reset the parameters instance to its initial state.
AbstractParameters * clone() const
Create a clone copy of this instance.
double m_compactnessWeight
The weight given to the compactness component, deafult:0.5, valid range: [0,1].
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...
const Parameters & operator=(const Parameters &params)
bool serialize(AlgorithmParametersSerializer &serializer) const
Returns a parameter serialization object.
bool initialize(SegmenterStrategyParameters const *const strategyParams)
Initialize the segmentation strategy.
double getMemUsageEstimation(const unsigned int bandsToProcess, const unsigned int pixelsNumber) const
Returns a memory estimation (bytes).
bool m_isInitialized
true if this instance is initialized.
bool initializeSegments(SegmenterIdsManager &segmenterIdsManager, const te::rp::SegmenterSegmentsBlock &block2ProcessInfo, const te::rst::Raster &inputRaster, const std::vector< unsigned int > &inputRasterBands, const std::vector< std::complex< double > > &inputRasterNoDataValues, const std::vector< std::complex< double > > &inputRasterBandMinValues, const std::vector< std::complex< double > > &inputRasterBandMaxValues, SegmenterRegionGrowingSegment< rg::BaatzFeatureType > **actSegsListHeadPtr)
Initialize the segment objects container and the segment IDs container.
Matrix< SegmenterSegmentsBlock::SegmentIdDataType > SegmentsIdsMatrixT
Internal segments ids matrix type definition.
SegmentsIdsMatrixT m_segmentsIdsMatrix
A internal segments IDs matrix that can be reused on each strategy execution.
void reset()
Clear all internal allocated resources and go back to the initial not-initialized state.
unsigned int getOptimalBlocksOverlapSize() const
Returns a optimal blocks overlap size (number of border pixels overlapped between blocks,...
SegmenterRegionGrowingSegmentsPool< rg::BaatzFeatureType > m_segmentsPool
A pool of segments that can be reused on each strategy execution.
BlocksMergingMethod getBlocksMergingMethod() const
Return the strategy blocks merging method.
bool execute(SegmenterIdsManager &segmenterIdsManager, const te::rp::SegmenterSegmentsBlock &block2ProcessInfo, const te::rst::Raster &inputRaster, const std::vector< unsigned int > &inputRasterBands, const std::vector< std::complex< double > > &inputRasterNoDataValues, const std::vector< std::complex< double > > &inputRasterBandMinValues, const std::vector< std::complex< double > > &inputRasterBandMaxValues, te::rst::Raster &outputRaster, const unsigned int outputRasterBand, const bool enableProgressInterface)
Executes the segmentation strategy over region delimited by the given block.
bool shouldComputeMinMaxValues() const
Returns if the min and max pixel values should be computed.
SegmenterRegionGrowingBaatzStrategy::Parameters m_parameters
Internal execution parameters.
Segmenter segments block description class.
Raster segmenter strategy factory base class.
Raster segmenter strategy base class.
BlocksMergingMethod
Blocks merging method.
An abstract class for raster data strucutures.
Definition: Raster.h:72
TerraLib.
#define TERPEXPORT
You can use this macro in order to export/import classes and functions from this module.
Definition: Config.h:139
Proxy configuration file for TerraView (see terraview_config.h).