30 #ifndef _D_MORPHO_HIERARQ_HPP
31 #define _D_MORPHO_HIERARQ_HPP
36 #include "Core/include/private/DTypes.hpp"
37 #include "Morpho/include/DStructuringElement.h"
47 enum HQ_STATUS { HQ_CANDIDATE, HQ_QUEUED, HQ_LABELED, HQ_WS_LINE, HQ_FINAL };
74 void initialize(
size_t newSize)
77 realSize = max(newSize + 1,
size_t(8));
78 data =
new T[realSize];
89 memmove(data, data + first, (last - first) *
sizeof(T));
110 static const bool preallocate =
true;
120 template <
class TokenType =
size_t>
class STD_Queue :
public queue<TokenType>
124 STD_Queue(
size_t = 0) : queue<TokenType>()
127 static const bool preallocate =
false;
130 template <
class TokenType =
size_t>
class STD_Stack :
public stack<TokenType>
134 inline TokenType front()
140 template <
class T,
class TokenType = size_t,
145 size_t GRAY_LEVEL_NBR;
146 size_t GRAY_LEVEL_MIN;
147 size_t GRAY_LEVEL_MAX;
154 const bool reverseOrder;
175 for (
size_t i = 0; i < GRAY_LEVEL_NBR; i++) {
185 void initialize(
const Image<T> &img)
196 stacks =
new StackType *[GRAY_LEVEL_NBR]();
197 tokenNbr =
new size_t[GRAY_LEVEL_NBR];
199 if (StackType::preallocate) {
200 size_t *h =
new size_t[GRAY_LEVEL_NBR];
203 for (
size_t i = 0; i < GRAY_LEVEL_NBR; i++) {
205 stacks[i] =
new StackType(h[i]);
212 for (
size_t i = 0; i < GRAY_LEVEL_NBR; i++)
213 stacks[i] =
new StackType();
216 memset(tokenNbr, 0, GRAY_LEVEL_NBR *
sizeof(
size_t));
227 inline size_t getSize()
232 inline bool isEmpty()
237 inline size_t getHigherLevel()
239 return GRAY_LEVEL_MIN + higherLevel;
242 inline void push(T value, TokenType dOffset)
244 size_t level = size_t(value) - GRAY_LEVEL_MIN;
246 if (level > higherLevel)
249 if (level < higherLevel)
252 stacks[level]->push(dOffset);
257 inline void findNewReferenceLevel()
262 for (
size_t i = higherLevel - 1; i != GRAY_LEVEL_MAX; i--) {
263 if (tokenNbr[i] > 0) {
269 for (
size_t i = higherLevel + 1; i < GRAY_LEVEL_NBR; i++) {
270 if (tokenNbr[i] > 0) {
278 inline TokenType pop()
280 size_t hlSize = tokenNbr[higherLevel];
281 TokenType dOffset = stacks[higherLevel]->front();
282 stacks[higherLevel]->pop();
286 tokenNbr[higherLevel]--;
290 tokenNbr[higherLevel] = 0;
291 findNewReferenceLevel();
294 tokenNbr[higherLevel] = 0;
Preallocated FIFO Queue.
Definition: DMorphoHierarQ.hpp:53
Definition: DMorphoHierarQ.hpp:143
Main Image class.
Definition: DImage.hpp:57
Definition: DMorphoHierarQ.hpp:121
Definition: DMorphoHierarQ.hpp:131
histogram(const Image< T > &imIn, size_t *h)
Image histogram.
Definition: DImageHistogram.hpp:64
Definition: DTypes.hpp:88