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_neighborSegments = 0;
62  m_segments[ row ][ col ].m_neighborSegmentsSize = 0;
63  m_segments[ row ][ col ].m_features = m_segmentsFeatures[ row ] + ( col * featuresNumber );
64  m_segments[ row ][ col ].m_featuresSize = featuresNumber;
65  }
66  }
67  }
68  else
69  {
70  unsigned int col = 0;
71  for( unsigned int row = 0 ; row < nRows ; ++row )
72  {
73  for( col = 0 ; col < nCols ; ++col )
74  {
75  m_segments[ row ][ col ].m_neighborSegments = 0;
76  m_segments[ row ][ col ].m_neighborSegmentsSize = 0;
77  m_segments[ row ][ col ].m_features = 0;
78  m_segments[ row ][ col ].m_featuresSize = 0;
79  }
80  }
81  }
82  }
83  }
84  else
85  {
87  }
88 
89  return true;
90  }
91 
92 
94  {
96  {
99  m_segments.getColumnsNumber() );
100 
102 
103  assert( m_getNextSegment_line < m_segments.getLinesNumber() );
104  assert( m_getNextSegment_col < m_segments.getColumnsNumber() );
105 
107  }
108  else
109  {
110  return 0;
111  }
112  }
113 
115  {
116  unsigned int nRows = m_segments.getLinesNumber();
117  unsigned int nCols = m_segments.getColumnsNumber();
118 
119  unsigned int col = 0;
120  for( unsigned int row = 0 ; row < nRows ; ++row )
121  {
122  for( col = 0 ; col < nCols ; ++col )
123  {
124  if( m_segments[ row ][ col ].m_neighborSegments )
125  {
126  free( m_segments[ row ][ col ].m_neighborSegments );
127  }
128  }
129  }
130 
131  m_segsNumber = 0;
132  m_featuresNumber = 0;
134  m_segments.reset();
135  m_segmentsFeatures.reset();
136  }
137 
139  {
141  }
142 
144  {
145  return m_segsNumber;
146  }
147 
148  } // namespace rp
149 } // 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.