55#define AR_PIXEL_SIZE 1
57#ifndef AR_LABELING_ADAPTIVE
58# ifndef AR_LABELING_DEBUG_ENABLE_F
59# ifndef AR_LABELING_WHITE_REGION_F
60# ifndef AR_LABELING_FRAME_IMAGE_F
66# ifndef AR_LABELING_FRAME_IMAGE_F
73# ifndef AR_LABELING_WHITE_REGION_F
74# ifndef AR_LABELING_FRAME_IMAGE_F
80# ifndef AR_LABELING_FRAME_IMAGE_F
88# ifndef AR_LABELING_DEBUG_ENABLE_F
89# ifndef AR_LABELING_WHITE_REGION_F
95# ifndef AR_LABELING_WHITE_REGION_F
106#ifdef AR_LABELING_ADAPTIVE
110#ifdef AR_LABELING_DEBUG_ENABLE_F
123#ifdef AR_LABELING_FRAME_IMAGE_F
131#ifdef AR_LABELING_DEBUG_ENABLE_F
137 pnt2 = &(labelInfo->
labelImage[(lysize - 1)*lxsize]);
138 for(i = 0; i < lxsize; i++) {
139 *(pnt1++) = *(pnt2++) = 0;
145 for(i = 0; i < lysize; i++) {
152 work = labelInfo->
work;
153 work2 = labelInfo->
work2;
155#ifdef AR_LABELING_DEBUG_ENABLE_F
156 dpnt = &(labelInfo->
bwImage[lxsize + 1]);
157# ifdef AR_LABELING_FRAME_IMAGE_F
159# ifdef AR_LABELING_ADAPTIVE
164 for(j = 1; j < lysize - 1; j++, pnt +=
AR_PIXEL_SIZE*2, pnt2 += 2, dpnt += 2) {
165 for(i = 1; i < lxsize - 1; i++, pnt +=
AR_PIXEL_SIZE, pnt2++, dpnt++) {
169 for(j = 1; j < lysize - 1; j++, pnt +=
AR_PIXEL_SIZE*4, pnt2 += 2, dpnt += 2) {
170 for(i = 1; i < lxsize - 1; i++, pnt +=
AR_PIXEL_SIZE*2, pnt2++, dpnt++) {
173# ifdef AR_LABELING_FRAME_IMAGE_F
175# ifdef AR_LABELING_ADAPTIVE
180 for(j = 1; j < lysize - 1; j++, pnt +=
AR_PIXEL_SIZE*2, pnt2 += 2) {
181 for(i = 1; i < lxsize - 1; i++, pnt +=
AR_PIXEL_SIZE, pnt2++) {
185 for(j = 1; j < lysize - 1; j++, pnt +=
AR_PIXEL_SIZE*4, pnt2 += 2) {
186 for(i = 1; i < lxsize - 1; i++, pnt +=
AR_PIXEL_SIZE*2, pnt2++) {
190#ifndef AR_LABELING_WHITE_REGION_F
192# ifndef AR_LABELING_ADAPTIVE
193 if( *pnt <= labelingThresh ) {
195 if( *pnt <= *pnt_thresh ) {
199# ifndef AR_LABELING_ADAPTIVE
200 if( *pnt > labelingThresh ) {
202 if( *pnt > *pnt_thresh ) {
206# ifdef AR_LABELING_DEBUG_ENABLE_F
209 pnt1 = &(pnt2[-lxsize]);
212 l = ((*pnt2) - 1) * 7;
218 else if( *(pnt1+1) > 0 ) {
219 if( *(pnt1-1) > 0 ) {
220 m = work[*(pnt1+1)-1];
221 n = work[*(pnt1-1)-1];
225 for(k = 0; k < wk_max; k++) {
226 if( *wk == m ) *wk = n;
233 for(k = 0; k < wk_max; k++) {
234 if( *wk == n ) *wk = m;
245 else if( *(pnt2-1) > 0 ) {
246 m = work[*(pnt1+1)-1];
247 n = work[*(pnt2-1)-1];
251 for(k = 0; k < wk_max; k++) {
252 if( *wk == m ) *wk = n;
259 for(k = 0; k < wk_max; k++) {
260 if( *wk == n ) *wk = m;
276 if( work2[l+3] > i ) work2[l+3] = i;
280 else if( *(pnt1-1) > 0 ) {
286 if( work2[l+4] < i ) work2[l+4] = i;
289 else if( *(pnt2-1) > 0) {
295 if( work2[l+4] < i ) work2[l+4] = i;
300 ARLOGe(
"Error: labeling work overflow.\n");
303 work[wk_max-1] = *pnt2 = wk_max;
317#ifdef AR_LABELING_DEBUG_ENABLE_F
322#ifndef AR_LABELING_FRAME_IMAGE_F
328 area = &(labelInfo->
area[0]);
329 clip = &(labelInfo->
clip[0][0]);
330 pos = &(labelInfo->
pos[0][0]);
333 for(i = 1; i <= wk_max; i++, wk++) {
334 *wk = (*wk==i)? j++: work[(*wk)-1];
337 if( *label_num == 0 ) {
341 memset( (
ARUint8 *)area, 0, *label_num *
sizeof(
int) );
343 for(i = 0; i < *label_num; i++) {
344 clip[i*4+0] = lxsize;
346 clip[i*4+2] = lysize;
349 for(i = 0; i < wk_max; i++) {
351 area[j] += work2[i*7+0];
352 pos[j*2+0] += work2[i*7+1];
353 pos[j*2+1] += work2[i*7+2];
354 if( clip[j*4+0] > work2[i*7+3] ) clip[j*4+0] = work2[i*7+3];
355 if( clip[j*4+1] < work2[i*7+4] ) clip[j*4+1] = work2[i*7+4];
356 if( clip[j*4+2] > work2[i*7+5] ) clip[j*4+2] = work2[i*7+5];
357 if( clip[j*4+3] < work2[i*7+6] ) clip[j*4+3] = work2[i*7+6];
360 for( i = 0; i < *label_num; i++ ) {
361 pos[i*2+0] /= area[i];
362 pos[i*2+1] /= area[i];
artoolkitX core routines.
unsigned char ARUint8
Definition: ar.h:92
double ARdouble
Definition: ar.h:99
#define AR_LABELING_LABEL_TYPE
Definition: arConfig.h:111
#define AR_LABELING_WORK_SIZE
Definition: arConfig.h:110
int arLabelingSubDWIC(ARUint8 *image, int xsize, int ysize, int labelingThresh, ARLabelInfo *labelInfo)
int arLabelingSubEBIC(ARUint8 *image, int xsize, int ysize, int labelingThresh, ARLabelInfo *labelInfo)
int arLabelingSubEBRC(ARUint8 *image, int xsize, int ysize, int labelingThresh, ARLabelInfo *labelInfo)
int arLabelingSubEWZ(ARUint8 *image, const int xsize, const int ysize, ARUint8 *image_thresh, ARLabelInfo *labelInfo)
int arLabelingSubDWZ(ARUint8 *image, const int xsize, const int ysize, ARUint8 *image_thresh, ARLabelInfo *labelInfo)
int arLabelingSubEBZ(ARUint8 *image, const int xsize, const int ysize, ARUint8 *image_thresh, ARLabelInfo *labelInfo)
int arLabelingSubDBRC(ARUint8 *image, int xsize, int ysize, int labelingThresh, ARLabelInfo *labelInfo)
int arLabelingSubEWRC(ARUint8 *image, int xsize, int ysize, int labelingThresh, ARLabelInfo *labelInfo)
int arLabelingSubDBZ(ARUint8 *image, const int xsize, const int ysize, ARUint8 *image_thresh, ARLabelInfo *labelInfo)
int arLabelingSubDWRC(ARUint8 *image, int xsize, int ysize, int labelingThresh, ARLabelInfo *labelInfo)
int arLabelingSubEWIC(ARUint8 *image, int xsize, int ysize, int labelingThresh, ARLabelInfo *labelInfo)
int arLabelingSubDBIC(ARUint8 *image, int xsize, int ysize, int labelingThresh, ARLabelInfo *labelInfo)
Definition: arLabelingSub.h:61
#define AR_PIXEL_SIZE
Definition: arLabelingSub.h:55
#define ARLOGe(...)
Definition: log.h:141
(description)
Definition: ar.h:246
ARdouble pos[AR_LABELING_WORK_SIZE][2]
Definition: ar.h:254
int work[AR_LABELING_WORK_SIZE]
Definition: ar.h:255
ARUint8 * bwImage
Definition: ar.h:249
int clip[AR_LABELING_WORK_SIZE][4]
Definition: ar.h:253
int area[AR_LABELING_WORK_SIZE]
Definition: ar.h:252
int label_num
Definition: ar.h:251
AR_LABELING_LABEL_TYPE * labelImage
Definition: ar.h:247
int work2[AR_LABELING_WORK_SIZE *7]
area, pos[2], clip[4].
Definition: ar.h:256