All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Properties Friends Macros Groups Pages
SegmenterRegionGrowingSegmentsPool.cpp
Go to the documentation of this file.
2 
3 #include <cmath>
4 
5 namespace te
6 {
7  namespace rp
8  {
9 
11  {
12  m_segsNumber = 0;
13  m_featuresNumber = 0;
15  }
16 
18  {
19  clear();
20  }
21 
24  const unsigned int featuresNumber)
25  {
26  if( ( segsNumber > m_segsNumber ) || ( featuresNumber != m_featuresNumber ) )
27  {
28  clear();
29 
30  if( segsNumber )
31  {
32  unsigned int nCols = (unsigned int)std::floor( std::sqrt( (double)segsNumber ) );
33  unsigned int nRows = (unsigned int)std::ceil( ((double)segsNumber) /
34  ((double)nCols) );
35  assert( ( nCols * nRows ) >= segsNumber );
36 
37  if( m_segments.reset( nRows, nCols,
39  {
40  return false;
41  }
42 
43  m_segsNumber = segsNumber;
44 
45  if( featuresNumber )
46  {
47  if( m_segmentsFeatures.reset( nRows, nCols * featuresNumber,
49  {
50  clear();
51  return false;
52  }
53 
54  m_featuresNumber = featuresNumber;
55 
56  unsigned int col = 0;
57  for( unsigned int row = 0 ; row < nRows ; ++row )
58  {
59  for( col = 0 ; col < nCols ; ++col )
60  {
61  m_segments[ row ][ col ].m_status = false;
62  m_segments[ row ][ col ].m_neighborSegments = 0;
63  m_segments[ row ][ col ].m_neighborSegmentsSize = 0;
64  m_segments[ row ][ col ].m_features = m_segmentsFeatures[ row ] + ( col * featuresNumber );
65  m_segments[ row ][ col ].m_featuresSize = featuresNumber;
66  }
67  }
68  }
69  else
70  {
71  unsigned int col = 0;
72  for( unsigned int row = 0 ; row < nRows ; ++row )
73  {
74  for( col = 0 ; col < nCols ; ++col )
75  {
76  m_segments[ row ][ col ].m_status = false;
77  m_segments[ row ][ col ].m_neighborSegments = 0;
78  m_segments[ row ][ col ].m_neighborSegmentsSize = 0;
79  m_segments[ row ][ col ].m_features = 0;
80  m_segments[ row ][ col ].m_featuresSize = 0;
81  }
82  }
83  }
84  }
85  }
86  else
87  {
88  unsigned int nRows = m_segments.getLinesNumber();
89  unsigned int nCols = m_segments.getColumnsNumber();
90 
91  unsigned int col = 0;
92  for( unsigned int row = 0 ; row < nRows ; ++row )
93  {
94  for( col = 0 ; col < nCols ; ++col )
95  {
96  m_segments[ row ][ col ].m_status = false;
97  m_segments[ row ][ col ].clearNeighborSegments();
98  }
99  }
100 
101  resetUseCounter();
102  }
103 
104  return true;
105  }
106 
107 
109  {
111  {
114  m_segments.getColumnsNumber() );
115 
117 
118  assert( m_getNextSegment_line < m_segments.getLinesNumber() );
119  assert( m_getNextSegment_col < m_segments.getColumnsNumber() );
120 
122  }
123  else
124  {
125  return 0;
126  }
127  }
128 
130  {
131  unsigned int nRows = m_segments.getLinesNumber();
132  unsigned int nCols = m_segments.getColumnsNumber();
133 
134  unsigned int col = 0;
135  for( unsigned int row = 0 ; row < nRows ; ++row )
136  {
137  for( col = 0 ; col < nCols ; ++col )
138  {
139  if( m_segments[ row ][ col ].m_neighborSegments )
140  {
141  free( m_segments[ row ][ col ].m_neighborSegments );
142  }
143  }
144  }
145 
146  m_segsNumber = 0;
147  m_featuresNumber = 0;
149  m_segments.reset();
150  m_segmentsFeatures.reset();
151  }
152 
154  {
156  }
157 
159  {
160  return m_segsNumber;
161  }
162 
163  } // namespace rp
164 } // namespace te
unsigned int m_featuresNumber
The number of features for each created segment.
Matrix< SegmenterRegionGrowingSegment::FeatureType > m_segmentsFeatures
Internal stored segment features.
SegmenterSegmentsBlock::SegmentIdDataType m_segsNumber
The number of segments allocated segments.
SegmenterRegionGrowingSegment * getNextSegment()
Retrive a stored segment.
bool initialize(const SegmenterSegmentsBlock::SegmentIdDataType segsNumber, const unsigned int featuresNumber)
Pool initialization.
SegmenterSegmentsBlock::SegmentIdDataType getSegmentsNumber() const
Return the current allocated segments number.
A generic template matrix.
Definition: Matrix.h:51
Matrix< SegmenterRegionGrowingSegment > m_segments
Internal stored segments.
SegmenterSegmentsBlock::SegmentIdDataType m_nextUnusedSegmentIdx
The next unused segment index.