SegmenterRegionGrowingMeanMerger.cpp
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/SegmenterRegionGrowingMeanMerger.cpp
22  \brief Segmenter mean merger used in region growing process.
23 */
24 
26 
27 namespace te
28 {
29  namespace rp
30  {
32  {
33  m_featuresNumber = featuresNumber;
35  2.0 * std::sqrt( (double)featuresNumber ) );
36  }
37 
39  default;
40 
45  {
46  assert( segment1Ptr );
47  assert( segment1Ptr->m_features );
48  assert( segment2Ptr );
49  assert( segment2Ptr->m_features );
50 
52 
55  {
58 
60  }
61 
64 
66  }
67 
71  {
72  assert( segment1Ptr );
73  assert( segment1Ptr->m_features );
74  assert( segment2Ptr );
75  assert( segment2Ptr->m_features );
76 
77  // Merging basic features
78 
79  segment1Ptr->m_size += segment2Ptr->m_size;
80 
81  segment1Ptr->m_xStart = std::min(
82  segment1Ptr->m_xStart,
83  segment2Ptr->m_xStart );
84  segment1Ptr->m_xBound = std::max(
85  segment1Ptr->m_xBound,
86  segment2Ptr->m_xBound );
87 
88  segment1Ptr->m_yStart = std::min(
89  segment1Ptr->m_yStart,
90  segment2Ptr->m_yStart );
91  segment1Ptr->m_yBound = std::max(
92  segment1Ptr->m_yBound,
93  segment2Ptr->m_yBound );
94 
95  // Merging specific features
96 
97  for( unsigned int meansIdx = 0 ; meansIdx < m_featuresNumber ; ++meansIdx )
98  {
99  segment1Ptr->m_features[ meansIdx ] =
100  (
101  (
102  segment1Ptr->m_features[ meansIdx ]
103  *
105  )
106  +
107  (
108  segment2Ptr->m_features[ meansIdx ]
109  *
111  )
112  )
113  /
114  (
116  (
117  segment1Ptr->m_size
118  +
119  segment2Ptr->m_size
120  )
121  );
122  }
123  }
124  } // end namespace rp
125 } // end namespace te
unsigned int m_xStart
Segment left X coordinate box over the label image.
double DissimilarityTypeT
Type for dissimilarity.
URI C++ Library.
Definition: Attributes.h:37
SegmenterRegionGrowingMeanMerger(const unsigned int featuresNumber)
unsigned int m_yStart
Segment upper Y coordinate box over the label image.
SegmenterRegionGrowingSegment< rg::MeanFeatureType >::FeatureType m_getDissimilarity_dissValue
Segmenter mean merger used in region growing process.
FeatureType * m_features
A pionter to a fixed size vector of segment features.
unsigned int m_xBound
Segment lower bound X coordinate box over the label image.
float MeanFeatureType
Mean Strategy feature type.
unsigned int m_yBound
Segment lower bound Y coordinate box over the label image.
unsigned int m_size
Segment area (pixels number).
unsigned int m_featuresNumber
The number of features (bands).
DissimilarityTypeT getDissimilarity(SegmenterRegionGrowingSegment< rg::MeanFeatureType > const *const segment1Ptr, SegmenterRegionGrowingSegment< rg::MeanFeatureType > const *const segment2Ptr, SegmenterRegionGrowingSegment< rg::MeanFeatureType > *const mergePreviewSegPtr) const
Returns a dimilarity index between this and the other segment.
void mergeFeatures(SegmenterRegionGrowingSegment< rg::MeanFeatureType > *const segment1Ptr, SegmenterRegionGrowingSegment< rg::MeanFeatureType > const *const segment2Ptr, SegmenterRegionGrowingSegment< rg::MeanFeatureType > const *const mergePreviewSegPtr) const
Merge specific segment features from both segments into the first segment.
SegmenterRegionGrowingSegment< rg::MeanFeatureType >::FeatureType m_getDissimilarity_diffValue
SegmenterRegionGrowingSegment< rg::MeanFeatureType >::FeatureType m_dissimilarityNormFactor