65 #include "allheaders.h" 97 l_int32 i, j, w, h, size, n;
105 PROCNAME(
"pixQuadtreeMean");
108 return ERROR_INT(
"&fpixa not defined", procName, 1);
110 if (!pixs || pixGetDepth(pixs) != 8)
111 return ERROR_INT(
"pixs not defined or not 8 bpp", procName, 1);
114 return ERROR_INT(
"nlevels too large for image", procName, 1);
121 return ERROR_INT(
"pix_mac not made", procName, 1);
125 return ERROR_INT(
"baa not made", procName, 1);
129 for (i = 0; i < nlevels; i++) {
134 for (j = 0; j < n; j++) {
176 l_int32 i, j, w, h, size, n;
181 FPIX *fpixv, *fpixrv;
185 PROCNAME(
"pixQuadtreeVariance");
187 if (!pfpixa_v && !pfpixa_rv)
188 return ERROR_INT(
"neither &fpixav nor &fpixarv defined", procName, 1);
189 if (pfpixa_v) *pfpixa_v = NULL;
190 if (pfpixa_rv) *pfpixa_rv = NULL;
191 if (!pixs || pixGetDepth(pixs) != 8)
192 return ERROR_INT(
"pixs not defined or not 8 bpp", procName, 1);
195 return ERROR_INT(
"nlevels too large for image", procName, 1);
202 return ERROR_INT(
"pix_mac not made", procName, 1);
209 return ERROR_INT(
"dpix_msac not made", procName, 1);
215 return ERROR_INT(
"baa not made", procName, 1);
220 for (i = 0; i < nlevels; i++) {
225 if (pfpixa_rv) fpixrv =
fpixCreate(size, size);
226 for (j = 0; j < n; j++) {
229 if (pfpixa_v)
fpixSetPixel(fpixv, j % size, j / size, var);
230 if (pfpixa_rv)
fpixSetPixel(fpixrv, j % size, j / size, rvar);
270 l_int32 w, h, bx, by, bw, bh;
271 l_uint32 val00, val01, val10, val11;
275 PROCNAME(
"pixMeanInRectangle");
278 return ERROR_INT(
"&val not defined", procName, 1);
280 if (!pixs || pixGetDepth(pixs) != 8)
281 return ERROR_INT(
"pixs not defined", procName, 1);
283 return ERROR_INT(
"box not defined", procName, 1);
285 return ERROR_INT(
"pixma not defined", procName, 1);
293 if (bw == 0 || bh == 0)
294 return ERROR_INT(
"no pixels in box", procName, 1);
297 norm = 1.0 / ((l_float32)(bw) * bh);
298 if (bx > 0 && by > 0) {
299 pixGetPixel(pixma, bx + bw - 1, by + bh - 1, &val11);
303 *pval = norm * (val11 - val01 + val00 - val10);
307 *pval = norm * (val11 - val10);
311 *pval = norm * (val11 - val01);
314 *pval = norm * val11;
348 l_int32 w, h, bx, by, bw, bh;
349 l_uint32 val00, val01, val10, val11;
350 l_float64 dval00, dval01, dval10, dval11, mval, msval, var, norm;
353 PROCNAME(
"pixVarianceInRectangle");
356 return ERROR_INT(
"neither &var nor &rvar defined", procName, 1);
357 if (pvar) *pvar = 0.0;
358 if (prvar) *prvar = 0.0;
359 if (!pixs || pixGetDepth(pixs) != 8)
360 return ERROR_INT(
"pixs not defined", procName, 1);
362 return ERROR_INT(
"box not defined", procName, 1);
364 return ERROR_INT(
"pix_ma not defined", procName, 1);
366 return ERROR_INT(
"dpix_msa not defined", procName, 1);
374 if (bw == 0 || bh == 0)
375 return ERROR_INT(
"no pixels in box", procName, 1);
378 norm = 1.0 / ((l_float32)(bw) * bh);
379 if (bx > 0 && by > 0) {
380 pixGetPixel(pix_ma, bx + bw - 1, by + bh - 1, &val11);
384 dpixGetPixel(dpix_msa, bx + bw - 1, by + bh - 1, &dval11);
388 mval = norm * (val11 - val01 + val00 - val10);
389 msval = norm * (dval11 - dval01 + dval00 - dval10);
390 var = (msval - mval * mval);
391 if (pvar) *pvar = (l_float32)var;
392 if (prvar) *prvar = (l_float32)(sqrt(var));
398 mval = norm * (val11 - val10);
399 msval = norm * (dval11 - dval10);
400 var = (msval - mval * mval);
401 if (pvar) *pvar = (l_float32)var;
402 if (prvar) *prvar = (l_float32)(sqrt(var));
408 mval = norm * (val11 - val01);
409 msval = norm * (dval11 - dval01);
410 var = (msval - mval * mval);
411 if (pvar) *pvar = (l_float32)var;
412 if (prvar) *prvar = (l_float32)(sqrt(var));
417 msval = norm * dval11;
418 var = (msval - mval * mval);
419 if (pvar) *pvar = (l_float32)var;
420 if (prvar) *prvar = (l_float32)(sqrt(var));
453 l_int32 i, j, k, maxpts, nside, nbox, bw, bh;
454 l_int32 *xstart, *xend, *ystart, *yend;
459 PROCNAME(
"boxaaQuadtreeRegions");
462 return (
BOXAA *)ERROR_PTR(
"nlevels must be >= 1", procName, NULL);
463 if (w < (1 << (nlevels - 1)))
464 return (
BOXAA *)ERROR_PTR(
"w doesn't support nlevels", procName, NULL);
465 if (h < (1 << (nlevels - 1)))
466 return (
BOXAA *)ERROR_PTR(
"h doesn't support nlevels", procName, NULL);
469 maxpts = 1 << (nlevels - 1);
470 xstart = (l_int32 *)LEPT_CALLOC(maxpts,
sizeof(l_int32));
471 xend = (l_int32 *)LEPT_CALLOC(maxpts,
sizeof(l_int32));
472 ystart = (l_int32 *)LEPT_CALLOC(maxpts,
sizeof(l_int32));
473 yend = (l_int32 *)LEPT_CALLOC(maxpts,
sizeof(l_int32));
474 for (k = 0; k < nlevels; k++) {
476 for (i = 0; i < nside; i++) {
477 xstart[i] = (w - 1) * i / nside;
478 if (i > 0) xstart[i]++;
479 xend[i] = (w - 1) * (i + 1) / nside;
480 ystart[i] = (h - 1) * i / nside;
481 if (i > 0) ystart[i]++;
482 yend[i] = (h - 1) * (i + 1) / nside;
485 "k = %d, xs[%d] = %d, xe[%d] = %d, ys[%d] = %d, ye[%d] = %d\n",
486 k, i, xstart[i], i, xend[i], i, ystart[i], i, yend[i]);
491 for (i = 0; i < nside; i++) {
492 bh = yend[i] - ystart[i] + 1;
493 for (j = 0; j < nside; j++) {
494 bw = xend[j] - xstart[j] + 1;
495 box =
boxCreate(xstart[j], ystart[i], bw, bh);
538 PROCNAME(
"quadtreeGetParent");
541 return ERROR_INT(
"&val not defined", procName, 1);
544 return ERROR_INT(
"fpixa not defined", procName, 1);
546 if (level < 1 || level >= n)
547 return ERROR_INT(
"invalid level", procName, 1);
549 if (
fpixaGetPixel(fpixa, level - 1, x / 2, y / 2, pval) != 0)
550 return ERROR_INT(
"invalid coordinates", procName, 1);
584 PROCNAME(
"quadtreeGetChildren");
586 if (!pval00 || !pval01 || !pval10 || !pval11)
587 return ERROR_INT(
"&val* not all defined", procName, 1);
588 *pval00 = *pval10 = *pval01 = *pval11 = 0.0;
590 return ERROR_INT(
"fpixa not defined", procName, 1);
592 if (level < 0 || level >= n - 1)
593 return ERROR_INT(
"invalid level", procName, 1);
595 if (
fpixaGetPixel(fpixa, level + 1, 2 * x, 2 * y, pval00) != 0)
596 return ERROR_INT(
"invalid coordinates", procName, 1);
599 fpixaGetPixel(fpixa, level + 1, 2 * x + 1, 2 * y + 1, pval11);
624 minside = L_MIN(w, h);
625 for (i = 0; i < 20; i++) {
626 if (minside < (1.5 * (1 << i)))
659 l_int32 nlevels, i, mag, w;
662 PIX *pixt1, *pixt2, *pixt3, *pixt4, *pixd;
665 PROCNAME(
"fpixaDisplayQuadtree");
668 return (
PIX *)ERROR_PTR(
"fpixa not defined", procName, NULL);
671 return (
PIX *)ERROR_PTR(
"pixas empty", procName, NULL);
673 if ((bmf =
bmfCreate(NULL, fontsize)) == NULL)
674 L_ERROR(
"bmf not made; text will not be added", procName);
676 for (i = 0; i < nlevels; i++) {
679 mag = factor * (1 << (nlevels - i - 1));
682 snprintf(buf,
sizeof(buf),
"Level %d\n", i);
691 w = pixGetWidth(pixt4);
DPIX * dpixClone(DPIX *dpix)
dpixClone()
void bmfDestroy(L_BMF **pbmf)
bmfDestroy()
PIX * fpixaDisplayQuadtree(FPIXA *fpixa, l_int32 factor, l_int32 fontsize)
fpixaDisplayQuadtree()
void dpixDestroy(DPIX **pdpix)
dpixDestroy()
l_ok fpixaGetPixel(FPIXA *fpixa, l_int32 index, l_int32 x, l_int32 y, l_float32 *pval)
fpixaGetPixel()
PIX * pixConvertTo32(PIX *pixs)
pixConvertTo32()
PIX * pixBlockconvAccum(PIX *pixs)
pixBlockconvAccum()
l_int32 fpixaGetCount(FPIXA *fpixa)
fpixaGetCount()
PIXA * pixaCreate(l_int32 n)
pixaCreate()
l_ok pixMeanInRectangle(PIX *pixs, BOX *box, PIX *pixma, l_float32 *pval)
pixMeanInRectangle()
BOX * boxClipToRectangle(BOX *box, l_int32 wi, l_int32 hi)
boxClipToRectangle()
void boxaDestroy(BOXA **pboxa)
boxaDestroy()
PIX * fpixConvertToPix(FPIX *fpixs, l_int32 outdepth, l_int32 negvals, l_int32 errorflag)
fpixConvertToPix()
FPIXA * fpixaCreate(l_int32 n)
fpixaCreate()
l_ok pixQuadtreeMean(PIX *pixs, l_int32 nlevels, PIX *pix_ma, FPIXA **pfpixa)
pixQuadtreeMean()
l_int32 quadtreeMaxLevels(l_int32 w, l_int32 h)
quadtreeMaxLevels()
l_ok fpixSetPixel(FPIX *fpix, l_int32 x, l_int32 y, l_float32 val)
fpixSetPixel()
l_ok boxaaAddBoxa(BOXAA *baa, BOXA *ba, l_int32 copyflag)
boxaaAddBoxa()
l_ok pixaAddPix(PIXA *pixa, PIX *pix, l_int32 copyflag)
pixaAddPix()
void boxaaDestroy(BOXAA **pbaa)
boxaaDestroy()
l_ok pixVarianceInRectangle(PIX *pixs, BOX *box, PIX *pix_ma, DPIX *dpix_msa, l_float32 *pvar, l_float32 *prvar)
pixVarianceInRectangle()
PIX * pixaDisplayTiledInRows(PIXA *pixa, l_int32 outdepth, l_int32 maxwidth, l_float32 scalefactor, l_int32 background, l_int32 spacing, l_int32 border)
pixaDisplayTiledInRows()
l_ok boxaAddBox(BOXA *boxa, BOX *box, l_int32 copyflag)
boxaAddBox()
l_ok quadtreeGetParent(FPIXA *fpixa, l_int32 level, l_int32 x, l_int32 y, l_float32 *pval)
quadtreeGetParent()
PIX * pixClone(PIX *pixs)
pixClone()
l_ok dpixGetPixel(DPIX *dpix, l_int32 x, l_int32 y, l_float64 *pval)
dpixGetPixel()
void pixDestroy(PIX **ppix)
pixDestroy()
BOX * boxaGetBox(BOXA *boxa, l_int32 index, l_int32 accessflag)
boxaGetBox()
l_ok pixQuadtreeVariance(PIX *pixs, l_int32 nlevels, PIX *pix_ma, DPIX *dpix_msa, FPIXA **pfpixa_v, FPIXA **pfpixa_rv)
pixQuadtreeVariance()
l_ok pixGetPixel(PIX *pix, l_int32 x, l_int32 y, l_uint32 *pval)
pixGetPixel()
l_ok pixGetDimensions(const PIX *pix, l_int32 *pw, l_int32 *ph, l_int32 *pd)
pixGetDimensions()
BOXAA * boxaaCreate(l_int32 n)
boxaaCreate()
BOXAA * boxaaQuadtreeRegions(l_int32 w, l_int32 h, l_int32 nlevels)
boxaaQuadtreeRegions()
PIX * pixExpandReplicate(PIX *pixs, l_int32 factor)
pixExpandReplicate()
FPIX * fpixCreate(l_int32 width, l_int32 height)
fpixCreate()
DPIX * pixMeanSquareAccum(PIX *pixs)
pixMeanSquareAccum()
BOXA * boxaCreate(l_int32 n)
boxaCreate()
void boxDestroy(BOX **pbox)
boxDestroy()
l_int32 boxaGetCount(BOXA *boxa)
boxaGetCount()
void fpixDestroy(FPIX **pfpix)
fpixDestroy()
l_ok boxGetGeometry(BOX *box, l_int32 *px, l_int32 *py, l_int32 *pw, l_int32 *ph)
boxGetGeometry()
void pixaDestroy(PIXA **ppixa)
pixaDestroy()
PIX * pixAddSingleTextblock(PIX *pixs, L_BMF *bmf, const char *textstr, l_uint32 val, l_int32 location, l_int32 *poverflow)
pixAddSingleTextblock()
BOX * boxCreate(l_int32 x, l_int32 y, l_int32 w, l_int32 h)
boxCreate()
FPIX * fpixaGetFPix(FPIXA *fpixa, l_int32 index, l_int32 accesstype)
fpixaGetFPix()
l_ok quadtreeGetChildren(FPIXA *fpixa, l_int32 level, l_int32 x, l_int32 y, l_float32 *pval00, l_float32 *pval10, l_float32 *pval01, l_float32 *pval11)
quadtreeGetChildren()
l_ok fpixaAddFPix(FPIXA *fpixa, FPIX *fpix, l_int32 copyflag)
fpixaAddFPix()
BOXA * boxaaGetBoxa(BOXAA *baa, l_int32 index, l_int32 accessflag)
boxaaGetBoxa()
L_BMF * bmfCreate(const char *dir, l_int32 fontsize)
bmfCreate()