/* * lineacc.h * -- Accumulator holding data for one horizontal line in the image. */ #ifndef _LINEACC_H_ #define _LINEACC_H_ /* lineAcc -- * * Accumulator holding data for one horizontal line in the image. * Used for holding temporary data, internally in the function * 'processImage()'. * * 'lineAcc' is used in the function 'processImage()', to process the * input image line by line. * * 'lineAcc' has (must be allocated to have) as many elements as there * are pixels in the width of the input image, and one lineAcc element * corresponds with one image in a line of the image. * * Each cell in lineAcc stores the LABEL (= ID number) of the * four-connected component that the image pixel is part of. * */ #include "label.h" /* label_h, LABEL_EMPTY */ /* Implementation: * LineAcc is implemented simply as an array of label_t, of a size * equal to the width of the image being processed. */ typedef struct lineAcc_ { int N; /*Nr of elements in pArr[]. */ label_t * pArr; } lineAcc_t; /************************************************************************* * Function prototypes *************************************************************************/ /* lineAcc_alloc() -- * * User instantiates a lineAcc_t instance, then calls lineAcc_alloc() to * allocate the internal members of that lineAcc_t instance. * * Parameter: * in_size = the number of different labels that the map must store. * * Returns 0 on failure, 1 on success. */ int lineAcc_alloc( lineAcc_t * pLA, int in_size ); /* lineAcc_free() -- * Deallocate the internal members of the lineAcc_t structure. */ void lineAcc_free( lineAcc_t * pLA ); /* lineAcc_init() -- * Initialize lineAcc_t instance for beginning with a new image: * all elements set to LABEL_EMPTY. */ void lineAcc_init( lineAcc_t * pLA ); /* lineAcc_get() -- * Return the label stored in element in_iX. */ label_t lineAcc_get( lineAcc_t * pLA, int in_iX ); /* lineAcc_put() -- * Set element in_iX to the value in_lbl. */ void lineAcc_put( lineAcc_t * pLA, int in_iX, label_t in_lbl ); #endif /*_LINEACC_H_ */