SegmenterRegionGrowingBaatzMerger.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/SegmenterRegionGrowingBaatzMerger.h
22  \brief Segmenter Baatz merger used in region growing process.
23 */
24 
25 #ifndef __TERRALIB_RP_INTERNAL_SEGMENTERREGIONGROWINGBAATZMERGER_H
26 #define __TERRALIB_RP_INTERNAL_SEGMENTERREGIONGROWINGBAATZMERGER_H
27 
30 #include "SegmenterSegmentsBlock.h"
32 
33 #include "Config.h"
34 
35 #include <vector>
36 
37 namespace te
38 {
39  namespace rp
40  {
41  /*!
42  \class SegmenterRegionGrowingBaatzMerger
43  \brief Baatz based Segments merger
44  */
46  public SegmenterRegionGrowingMerger< rg::BaatzFeatureType >
47  {
48  public:
49  /*!
50  \brief Default constructor.
51  \param bandsWeights A reference to an external valid structure where each bands weight are stored.
52  \param segmentsIds //!< A reference to an external valid structure where all segments IDs are stored.
53  \param segmentsMatrix //!< A reference to an external valid segments matrix.
54  \param colorWeight //!< The weight given to the color component, deafult:0.5, valid range: [0,1].
55  \param compactnessWeight //!< The weight given to the compactness component, deafult:0.5, valid range: [0,1].
56  */
57  SegmenterRegionGrowingBaatzMerger( const double& colorWeight,
58  const double& compactnessWeight,
59  const std::vector< double >& bandsWeights,
60  const SegmentsIdsMatrixT& segmentsIds );
61 
63 
64  //overload
68  SegmenterRegionGrowingMergeData * const mergeDataPtr ) const;
69 
70  //overload
73  SegmenterRegionGrowingMergeData const * const mergeDataPtr ) const;
74 
75  //overload
77 
78  //overload
79  inline unsigned int getSegmentFeaturesSize() const { return m_segmentFeaturesSize; };
80 
81  void createMergeData( SegmenterRegionGrowingMergeData** mergeDataPtr ) const;
82 
83  protected :
84  /*!
85  \class MergeData
86  \brief Baatz specific merge data.
87  */
89  {
90  public:
91 
92  MergeData( const unsigned int featuresNumber );
93 
95 
96  /*!
97  \brief Vctor of segment features (this class will take the ownership and delete[] at destruction time).
98  */
100 
101  private:
102 
103  MergeData( const MergeData& other ) {};
104  const MergeData& operator=( const MergeData& other ) { return *this; };
105  };
106 
107  mutable int* m_dirsColOffsVecPtr; //!< pointer to a internal vector of directions column offsets.
108  mutable int* m_dirsRowOffsVecPtr; //!< pointer to a internal vector of directions row offsets.
109  const SegmentsIdsMatrixT& m_segmentsIdsMatrix; //!< A reference to an external valid structure where each all segments IDs are stored.
110  unsigned int m_segmentsIdsMatrixNRows; //!< Matrix rows numnber;
111  unsigned int m_segmentsIdsMatrixNCols; //!< Matrix cols numnber;
112  unsigned int m_bandsNumber; //!< The number of features (bands).
113  unsigned int m_segmentFeaturesSize; //< the required segments features vector size (numer of elements).
114  rg::BaatzFeatureType m_allSegsCompactnessOffset; //!< The offsets applied to normalize the compactness value.
115  rg::BaatzFeatureType m_allSegsCompactnessGain; //!< The gains applied to normalize the compactness value.
116  rg::BaatzFeatureType m_allSegsSmoothnessOffset; //!< The offsets applied to normalize the smoothness value.
117  rg::BaatzFeatureType m_allSegsSmoothnessGain; //!< The gains applied to normalize the smoothness value.
118  rg::BaatzFeatureType m_allSegsStdDevOffset; //!< The offsets applied to normalize the standard deviation value.
119  rg::BaatzFeatureType m_allSegsStdDevGain; //!< The gains applied to normalize the standard deviation value.
120  rg::BaatzFeatureType m_colorWeight; //!< The weight given to the color component, deafult:0.5, valid range: [0,1].
121  rg::BaatzFeatureType m_compactnessWeight; //!< The weight given to the compactness component, deafult:0.5, valid range: [0,1].
122  std::vector< rg::BaatzFeatureType > m_bandsWeights; //!< A vector where each bands weight are stored.
123 
124  // Variables used by the method getDissimilarity
138  mutable unsigned int m_getDissimilarity_sumsIdx;
141 
142  //Variables used by the method mergeFeaturs
144 
145  // Variables used by the method update
154  unsigned int m_update_band;
156 
157  // Variables used by getTouchingEdgeLength
162 
163 
164  /*!
165  \brief Returns the count of points from region 1 (with ID1) touching the region 2 (with ID2).
166  \param colStart1 The upper left X of the bounding box surrounding region 1.
167  \param rowStart1 The upper left Y of the bounding box surrounding region 1.
168  \param colBound1 The lower right X bound of the bounding box surrounding region 1.
169  \param rowBound1 The lower right Y bound of the bounding box surrounding region 1.
170  \param colStart2 The upper left X of the bounding box surrounding region 2.
171  \param rowStart2 The upper left Y of the bounding box surrounding region 2.
172  \param colBound2 The lower right X bound of the bounding box surrounding region 2.
173  \param rowBound2 The lower right Y bound of the bounding box surrounding region 21.
174  \param id1 Region 1 ID.
175  \param id2 Region 2 ID.
176  \param touchingEdgeLength The touching edge length.
177  \note The internal m_segmentsIdsMatrix will be used.
178  */
180  const unsigned int& colStart1,
181  const unsigned int& rowStart1,
182  const unsigned int& colBound1,
183  const unsigned int& rowBound1,
184  const unsigned int& colStart2,
185  const unsigned int& rowStart2,
186  const unsigned int& colBound2,
187  const unsigned int& rowBound2,
190  unsigned int& touchingEdgeLength ) const;
191  };
192  } // end namespace rp
193 } // end namespace te
194 
195 #endif // __TERRALIB_RP_INTERNAL_SEGMENTERREGIONGROWINGBAATZMERGER_H
te::rp::SegmenterRegionGrowingMerger
Abstract class for the segments merger.
Definition: SegmenterRegionGrowingMerger.h:53
SegmenterRegionGrowingMergeData.h
Segmenter data used by the merger (region growing process).
te::rp::SegmenterRegionGrowingBaatzMerger::getTouchingEdgeLength
void getTouchingEdgeLength(const unsigned int &colStart1, const unsigned int &rowStart1, const unsigned int &colBound1, const unsigned int &rowBound1, const unsigned int &colStart2, const unsigned int &rowStart2, const unsigned int &colBound2, const unsigned int &rowBound2, const SegmenterSegmentsBlock::SegmentIdDataType &id1, const SegmenterSegmentsBlock::SegmentIdDataType &id2, unsigned int &touchingEdgeLength) const
Returns the count of points from region 1 (with ID1) touching the region 2 (with ID2).
te::rp::SegmenterRegionGrowingBaatzMerger::m_getDissimilarity_meanUnion
rg::BaatzFeatureType m_getDissimilarity_meanUnion
Definition: SegmenterRegionGrowingBaatzMerger.h:136
te::rp::Matrix< SegmenterSegmentsBlock::SegmentIdDataType >
te::rp::SegmenterRegionGrowingBaatzMerger::MergeData
Baatz specific merge data.
Definition: SegmenterRegionGrowingBaatzMerger.h:89
te
TerraLib.
Definition: AddressGeocodingOp.h:52
te::rp::SegmenterRegionGrowingBaatzMerger::MergeData::~MergeData
~MergeData()
te::rp::SegmenterRegionGrowingBaatzMerger::m_getDissimilarity_mergeDataPtr
MergeData * m_getDissimilarity_mergeDataPtr
Definition: SegmenterRegionGrowingBaatzMerger.h:125
SegmenterSegmentsBlock.h
Segments block.
te::rp::SegmenterRegionGrowingBaatzMerger::m_mergeFeatures_mergeDataPtr
MergeData const * m_mergeFeatures_mergeDataPtr
Definition: SegmenterRegionGrowingBaatzMerger.h:143
te::rp::SegmenterRegionGrowingBaatzMerger::m_allSegsCompactnessOffset
rg::BaatzFeatureType m_allSegsCompactnessOffset
The offsets applied to normalize the compactness value.
Definition: SegmenterRegionGrowingBaatzMerger.h:114
te::rp::SegmenterRegionGrowingBaatzMerger::m_getDissimilarity_hForm
rg::BaatzFeatureType m_getDissimilarity_hForm
Definition: SegmenterRegionGrowingBaatzMerger.h:132
te::rp::SegmenterRegionGrowingBaatzMerger::m_segmentFeaturesSize
unsigned int m_segmentFeaturesSize
Definition: SegmenterRegionGrowingBaatzMerger.h:113
te::rp::SegmenterRegionGrowingBaatzMerger::m_update_compactnessMax
rg::BaatzFeatureType m_update_compactnessMax
Definition: SegmenterRegionGrowingBaatzMerger.h:147
te::rp::SegmenterRegionGrowingBaatzMerger::m_colorWeight
rg::BaatzFeatureType m_colorWeight
The weight given to the color component, deafult:0.5, valid range: [0,1].
Definition: SegmenterRegionGrowingBaatzMerger.h:120
te::rp::SegmenterRegionGrowingBaatzMerger::m_allSegsSmoothnessOffset
rg::BaatzFeatureType m_allSegsSmoothnessOffset
The offsets applied to normalize the smoothness value.
Definition: SegmenterRegionGrowingBaatzMerger.h:116
te::rp::SegmenterRegionGrowingBaatzMerger::m_getDissimilarity_hSmooth
rg::BaatzFeatureType m_getDissimilarity_hSmooth
Definition: SegmenterRegionGrowingBaatzMerger.h:131
te::rp::SegmenterRegionGrowingBaatzMerger::m_getDissimilarity_sizeSeg2D
rg::BaatzFeatureType m_getDissimilarity_sizeSeg2D
Definition: SegmenterRegionGrowingBaatzMerger.h:128
te::rp::SegmenterRegionGrowingBaatzMerger::m_getTouchingEdgeLength_seg1ColStart
int m_getTouchingEdgeLength_seg1ColStart
Definition: SegmenterRegionGrowingBaatzMerger.h:160
te::rp::SegmenterRegionGrowingBaatzMerger::MergeData::MergeData
MergeData(const MergeData &other)
Definition: SegmenterRegionGrowingBaatzMerger.h:103
te::rp::SegmenterRegionGrowingBaatzMerger::getSegmentFeaturesSize
unsigned int getSegmentFeaturesSize() const
Definition: SegmenterRegionGrowingBaatzMerger.h:79
te::rp::rg::BaatzFeatureType
float BaatzFeatureType
Baatz Strategy feature type.
Definition: SegmenterRegionGrowingFunctions.h:62
te::rp::SegmenterRegionGrowingBaatzMerger::m_getDissimilarity_touchingEdgeLength
unsigned int m_getDissimilarity_touchingEdgeLength
Definition: SegmenterRegionGrowingBaatzMerger.h:129
te::rp::SegmenterRegionGrowingBaatzMerger::m_getDissimilarity_heightUnionD
rg::BaatzFeatureType m_getDissimilarity_heightUnionD
Definition: SegmenterRegionGrowingBaatzMerger.h:140
te::rp::SegmenterRegionGrowingBaatzMerger::MergeData::m_features
rg::BaatzFeatureType * m_features
Vctor of segment features (this class will take the ownership and delete[] at destruction time).
Definition: SegmenterRegionGrowingBaatzMerger.h:99
te::rp::SegmenterRegionGrowingBaatzMerger::m_allSegsSmoothnessGain
rg::BaatzFeatureType m_allSegsSmoothnessGain
The gains applied to normalize the smoothness value.
Definition: SegmenterRegionGrowingBaatzMerger.h:117
te::rp::SegmenterRegionGrowingBaatzMerger::m_getDissimilarity_sizeUnionD
rg::BaatzFeatureType m_getDissimilarity_sizeUnionD
Definition: SegmenterRegionGrowingBaatzMerger.h:126
te::rp::SegmenterRegionGrowingBaatzMerger::m_update_smoothnessMax
rg::BaatzFeatureType m_update_smoothnessMax
Definition: SegmenterRegionGrowingBaatzMerger.h:149
te::rp::SegmenterRegionGrowingBaatzMerger::m_getDissimilarity_stdDevUnion
rg::BaatzFeatureType m_getDissimilarity_stdDevUnion
Definition: SegmenterRegionGrowingBaatzMerger.h:137
te::rp::SegmenterRegionGrowingBaatzMerger::m_getTouchingEdgeLength_seg1RowStart
int m_getTouchingEdgeLength_seg1RowStart
Definition: SegmenterRegionGrowingBaatzMerger.h:161
te::rp::SegmenterRegionGrowingBaatzMerger::m_getDissimilarity_squaresSumUnion
rg::BaatzFeatureType m_getDissimilarity_squaresSumUnion
Definition: SegmenterRegionGrowingBaatzMerger.h:135
te::rp::SegmenterRegionGrowingBaatzMerger::m_segmentsIdsMatrixNCols
unsigned int m_segmentsIdsMatrixNCols
Matrix cols numnber;.
Definition: SegmenterRegionGrowingBaatzMerger.h:111
te::rp::SegmenterSegmentsBlock::SegmentIdDataType
unsigned int SegmentIdDataType
Definition: SegmenterSegmentsBlock.h:57
te::rp::SegmenterRegionGrowingBaatzMerger::m_update_stdDevPtr
rg::BaatzFeatureType const * m_update_stdDevPtr
Definition: SegmenterRegionGrowingBaatzMerger.h:155
te::rp::SegmenterRegionGrowingBaatzMerger::MergeData::MergeData
MergeData(const unsigned int featuresNumber)
te::rp::SegmenterRegionGrowingBaatzMerger::m_compactnessWeight
rg::BaatzFeatureType m_compactnessWeight
The weight given to the compactness component, deafult:0.5, valid range: [0,1].
Definition: SegmenterRegionGrowingBaatzMerger.h:121
te::rp::SegmenterRegionGrowingBaatzMerger::createMergeData
void createMergeData(SegmenterRegionGrowingMergeData **mergeDataPtr) const
Create a new merge data instance when applicable.
te::rp::SegmenterRegionGrowingBaatzMerger::m_getDissimilarity_hCompact
rg::BaatzFeatureType m_getDissimilarity_hCompact
Definition: SegmenterRegionGrowingBaatzMerger.h:130
te::rp::SegmenterRegionGrowingBaatzMerger::getDissimilarity
DissimilarityTypeT getDissimilarity(SegmenterRegionGrowingSegment< rg::BaatzFeatureType > const *const segment1Ptr, SegmenterRegionGrowingSegment< rg::BaatzFeatureType > const *const segment2Ptr, SegmenterRegionGrowingMergeData *const mergeDataPtr) const
Returns a dimilarity index between this and the other segment.
te::rp::SegmenterRegionGrowingBaatzMerger::m_segmentsIdsMatrix
const SegmentsIdsMatrixT & m_segmentsIdsMatrix
A reference to an external valid structure where each all segments IDs are stored.
Definition: SegmenterRegionGrowingBaatzMerger.h:109
te::rp::SegmenterRegionGrowingBaatzMerger::m_update_stdDevMax
rg::BaatzFeatureType m_update_stdDevMax
Definition: SegmenterRegionGrowingBaatzMerger.h:151
te::rp::SegmenterRegionGrowingBaatzMerger
Baatz based Segments merger.
Definition: SegmenterRegionGrowingBaatzMerger.h:47
te::rp::SegmenterRegionGrowingBaatzMerger::m_bandsWeights
std::vector< rg::BaatzFeatureType > m_bandsWeights
A vector where each bands weight are stored.
Definition: SegmenterRegionGrowingBaatzMerger.h:122
te::rp::SegmenterRegionGrowingBaatzMerger::mergeFeatures
void mergeFeatures(SegmenterRegionGrowingSegment< rg::BaatzFeatureType > *const segment1Ptr, SegmenterRegionGrowingSegment< rg::BaatzFeatureType > const *const segment2Ptr, SegmenterRegionGrowingMergeData const *const mergeDataPtr) const
Merge specific segment features from both segments into the first segment.
te::rp::SegmenterRegionGrowingBaatzMerger::MergeData::operator=
const MergeData & operator=(const MergeData &other)
Definition: SegmenterRegionGrowingBaatzMerger.h:104
TERPEXPORT
#define TERPEXPORT
You can use this macro in order to export/import classes and functions from this module.
Definition: Config.h:139
te::rp::SegmenterRegionGrowingBaatzMerger::m_allSegsStdDevGain
rg::BaatzFeatureType m_allSegsStdDevGain
The gains applied to normalize the standard deviation value.
Definition: SegmenterRegionGrowingBaatzMerger.h:119
te::rp::SegmenterRegionGrowingBaatzMerger::m_getTouchingEdgeLength_col
int m_getTouchingEdgeLength_col
Definition: SegmenterRegionGrowingBaatzMerger.h:159
te::rp::DissimilarityTypeT
double DissimilarityTypeT
Type for dissimilarity.
Definition: SegmenterRegionGrowingMerger.h:46
SegmenterRegionGrowingFunctions.h
te::rp::SegmenterRegionGrowingBaatzMerger::m_segmentsIdsMatrixNRows
unsigned int m_segmentsIdsMatrixNRows
Matrix rows numnber;.
Definition: SegmenterRegionGrowingBaatzMerger.h:110
te::rp::SegmenterRegionGrowingBaatzMerger::m_getTouchingEdgeLength_row
int m_getTouchingEdgeLength_row
Definition: SegmenterRegionGrowingBaatzMerger.h:158
te::rp::SegmenterRegionGrowingBaatzMerger::m_getDissimilarity_sumUnion
rg::BaatzFeatureType m_getDissimilarity_sumUnion
Definition: SegmenterRegionGrowingBaatzMerger.h:134
te::rp::SegmenterRegionGrowingMergeData
Segmenter data used by the merger in region growing process.
Definition: SegmenterRegionGrowingMergeData.h:36
te::rp::SegmenterRegionGrowingBaatzMerger::m_dirsColOffsVecPtr
int * m_dirsColOffsVecPtr
pointer to a internal vector of directions column offsets.
Definition: SegmenterRegionGrowingBaatzMerger.h:107
te::rp::SegmenterRegionGrowingSegment< rg::BaatzFeatureType >
te::rp::SegmenterRegionGrowingBaatzMerger::SegmenterRegionGrowingBaatzMerger
SegmenterRegionGrowingBaatzMerger(const double &colorWeight, const double &compactnessWeight, const std::vector< double > &bandsWeights, const SegmentsIdsMatrixT &segmentsIds)
Default constructor.
te::rp::SegmenterRegionGrowingBaatzMerger::~SegmenterRegionGrowingBaatzMerger
~SegmenterRegionGrowingBaatzMerger()
te::rp::SegmenterRegionGrowingBaatzMerger::m_allSegsStdDevOffset
rg::BaatzFeatureType m_allSegsStdDevOffset
The offsets applied to normalize the standard deviation value.
Definition: SegmenterRegionGrowingBaatzMerger.h:118
te::rp::SegmenterRegionGrowingBaatzMerger::m_update_currentActSegPtr
SegmenterRegionGrowingSegment< rg::BaatzFeatureType > * m_update_currentActSegPtr
Definition: SegmenterRegionGrowingBaatzMerger.h:153
te::rp::SegmenterRegionGrowingBaatzMerger::m_update_featuresPtr
rg::BaatzFeatureType * m_update_featuresPtr
Definition: SegmenterRegionGrowingBaatzMerger.h:152
te::rp::SegmenterRegionGrowingBaatzMerger::m_dirsRowOffsVecPtr
int * m_dirsRowOffsVecPtr
pointer to a internal vector of directions row offsets.
Definition: SegmenterRegionGrowingBaatzMerger.h:108
te::rp::SegmenterRegionGrowingBaatzMerger::m_update_compactnessMin
rg::BaatzFeatureType m_update_compactnessMin
Definition: SegmenterRegionGrowingBaatzMerger.h:146
Config.h
Proxy configuration file for TerraView (see terraview_config.h).
te::rp::SegmenterRegionGrowingBaatzMerger::m_getDissimilarity_sizeSeg1D
rg::BaatzFeatureType m_getDissimilarity_sizeSeg1D
Definition: SegmenterRegionGrowingBaatzMerger.h:127
te::rp::SegmenterRegionGrowingBaatzMerger::m_update_band
unsigned int m_update_band
Definition: SegmenterRegionGrowingBaatzMerger.h:154
te::rp::SegmenterRegionGrowingBaatzMerger::update
void update(SegmenterRegionGrowingSegment< rg::BaatzFeatureType > *const actSegsListHeadPtr)
Update the internal state.
te::rp::SegmenterRegionGrowingBaatzMerger::m_getDissimilarity_hColor
rg::BaatzFeatureType m_getDissimilarity_hColor
Definition: SegmenterRegionGrowingBaatzMerger.h:133
te::rp::SegmenterRegionGrowingBaatzMerger::m_getDissimilarity_widthUnionD
rg::BaatzFeatureType m_getDissimilarity_widthUnionD
Definition: SegmenterRegionGrowingBaatzMerger.h:139
te::rp::SegmenterRegionGrowingBaatzMerger::m_allSegsCompactnessGain
rg::BaatzFeatureType m_allSegsCompactnessGain
The gains applied to normalize the compactness value.
Definition: SegmenterRegionGrowingBaatzMerger.h:115
te::rp::SegmenterRegionGrowingBaatzMerger::m_update_smoothnessMin
rg::BaatzFeatureType m_update_smoothnessMin
Definition: SegmenterRegionGrowingBaatzMerger.h:148
te::rp::SegmenterRegionGrowingBaatzMerger::m_bandsNumber
unsigned int m_bandsNumber
The number of features (bands).
Definition: SegmenterRegionGrowingBaatzMerger.h:112
te::rp::SegmenterRegionGrowingBaatzMerger::m_getDissimilarity_sumsIdx
unsigned int m_getDissimilarity_sumsIdx
Definition: SegmenterRegionGrowingBaatzMerger.h:138
SegmenterRegionGrowingMerger.h
Segmenter merger used in region growing process.
te::rp::SegmenterRegionGrowingBaatzMerger::m_update_stdDevMin
rg::BaatzFeatureType m_update_stdDevMin
Definition: SegmenterRegionGrowingBaatzMerger.h:150