All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Properties Friends Macros Groups Pages
SegmenterRegionGrowingSegment.cpp
Go to the documentation of this file.
2 
3 #include <cstdlib>
4 #include <string.h>
5 
6 namespace te
7 {
8  namespace rp
9  {
11  const SegmenterRegionGrowingSegment& other )
12  {
13  m_id = other.m_id;
14  m_size = other.m_size;
15  m_xStart = other.m_xStart;
16  m_xBound = other.m_xBound;
17  m_yStart = other.m_yStart;
18  m_yBound = other.m_yBound;
22 
23  free( m_neighborSegments );
24  if( other.m_neighborSegmentsSize )
25  {
28  other.m_neighborSegmentsSize );
29  memcpy( m_neighborSegments, other.m_neighborSegments,
31  other.m_neighborSegmentsSize );
33  }
34  else
35  {
38  }
39 
40  if( other.m_featuresSize )
41  {
42  memcpy( m_features, other.m_features,
43  sizeof( FeatureType ) * other.m_featuresSize );
44  }
46 
47  return *this;
48  }
49 
51  SegmenterRegionGrowingSegment * const nSegPtr )
52  {
53  if( nSegPtr )
54  {
55  unsigned int idx = 0;
56 
57  for( idx = 0 ; idx < m_neighborSegmentsSize ; ++idx )
58  {
59  if( m_neighborSegments[ idx ] == nSegPtr )
60  {
61  return;
62  }
63  }
64 
65  for( idx = 0 ; idx < m_neighborSegmentsSize ; ++idx )
66  {
67  if( m_neighborSegments[ idx ] == 0 )
68  {
69  m_neighborSegments[ idx ] = nSegPtr;
70  return;
71  }
72  }
73 
75  m_neighborSegments, ( m_neighborSegmentsSize + 1 ) * sizeof(
77 
79 
80  m_neighborSegmentsSize = m_neighborSegmentsSize + 1;
81  }
82  }
83 
85  SegmenterRegionGrowingSegment * const nSegPtr )
86  {
87  unsigned int numberOfZeroes = 0;
88  unsigned int idx = 0;
89  for( ; idx < m_neighborSegmentsSize ; ++idx )
90  {
91  if( m_neighborSegments[ idx ] == nSegPtr )
92  {
93  m_neighborSegments[ idx ] = 0;
94  ++numberOfZeroes;
95  }
96  else if( m_neighborSegments[ idx ] == 0 )
97  {
98  ++numberOfZeroes;
99  }
100  }
101 
102  unsigned int numberOfNonZeroes = m_neighborSegmentsSize - numberOfZeroes;
103 
104  if( ( m_neighborSegmentsSize > 4 ) && ( numberOfNonZeroes < numberOfZeroes ) )
105  {
107  malloc( numberOfNonZeroes * sizeof( SegmenterRegionGrowingSegment* ) );
108 
109  unsigned int idx2 = 0;
110 
111  for( idx = 0 ; idx < m_neighborSegmentsSize ; ++idx )
112  {
113  if( m_neighborSegments[ idx ] )
114  {
115  auxVecPtr[ idx2++ ] = m_neighborSegments[ idx ];
116  }
117  }
118 
119  free( m_neighborSegments );
120  m_neighborSegments = auxVecPtr;
121  m_neighborSegmentsSize = numberOfNonZeroes;
122  }
123  }
124 
126  {
127  free( m_neighborSegments );
128  m_neighborSegments = 0;
130  }
131  } // namespace rp
132 } // namespace te
unsigned int m_neighborSegmentsSize
The current size of m_neighborSegments.
unsigned int m_yBound
Segment lower bound Y coordinate box over the label image.
unsigned int m_xStart
Segment left X coordinate box over the label image.
IterationCounterType m_mergetIteration
The current merge iteration.
unsigned int m_xBound
Segment lower bound X coordinate box over the label image.
SegmenterRegionGrowingSegment * m_nextActiveSegment
A pointer to the next active segment.
void addNeighborSegment(SegmenterRegionGrowingSegment *const nSegPtr)
Add a pointer of a neighbor segment (if it is not already there).
Region Growing segment.
SegmenterRegionGrowingSegment * m_prevActiveSegment
A pointer to the previous active segment.
FeatureType * m_features
A pionter to a fixed size vector of segment features.
SegmenterRegionGrowingSegment ** m_neighborSegments
Neighborhood segments pointers (some pointers can be null) or a null pointer if there is no neighborh...
SegmenterRegionGrowingSegment & operator=(const SegmenterRegionGrowingSegment &other)
unsigned int m_size
Segment area (pixels number).
unsigned int m_featuresSize
The current size of m_features.
unsigned int m_yStart
Segment upper Y coordinate box over the label image.
void removeNeighborSegment(SegmenterRegionGrowingSegment *const nSegPtr)
Remove all occurrences of a neighbor segment.
void clearNeighborSegments()
Remove all neighbor segments.
SegmenterSegmentsBlock::SegmentIdDataType m_id
Segment ID.