65 #include <config_auto.h>
69 #include "allheaders.h"
101 l_int32 i, j, w, h, size, n;
109 PROCNAME(
"pixQuadtreeMean");
112 return ERROR_INT(
"&fpixa not defined", procName, 1);
114 if (!pixs || pixGetDepth(pixs) != 8)
115 return ERROR_INT(
"pixs not defined or not 8 bpp", procName, 1);
118 return ERROR_INT(
"nlevels too large for image", procName, 1);
125 return ERROR_INT(
"pix_mac not made", procName, 1);
129 return ERROR_INT(
"baa not made", procName, 1);
133 for (i = 0; i < nlevels; i++) {
138 for (j = 0; j < n; j++) {
180 l_int32 i, j, w, h, size, n;
185 FPIX *fpixv, *fpixrv;
189 PROCNAME(
"pixQuadtreeVariance");
191 if (!pfpixa_v && !pfpixa_rv)
192 return ERROR_INT(
"neither &fpixav nor &fpixarv defined", procName, 1);
193 if (pfpixa_v) *pfpixa_v = NULL;
194 if (pfpixa_rv) *pfpixa_rv = NULL;
195 if (!pixs || pixGetDepth(pixs) != 8)
196 return ERROR_INT(
"pixs not defined or not 8 bpp", procName, 1);
199 return ERROR_INT(
"nlevels too large for image", procName, 1);
206 return ERROR_INT(
"pix_mac not made", procName, 1);
213 return ERROR_INT(
"dpix_msac not made", procName, 1);
219 return ERROR_INT(
"baa not made", procName, 1);
224 for (i = 0; i < nlevels; i++) {
229 if (pfpixa_rv) fpixrv =
fpixCreate(size, size);
230 for (j = 0; j < n; j++) {
233 if (pfpixa_v)
fpixSetPixel(fpixv, j % size, j / size, var);
234 if (pfpixa_rv)
fpixSetPixel(fpixrv, j % size, j / size, rvar);
274 l_int32 w, h, bx, by, bw, bh;
275 l_uint32 val00, val01, val10, val11;
279 PROCNAME(
"pixMeanInRectangle");
282 return ERROR_INT(
"&val not defined", procName, 1);
284 if (!pixs || pixGetDepth(pixs) != 8)
285 return ERROR_INT(
"pixs not defined", procName, 1);
287 return ERROR_INT(
"box not defined", procName, 1);
289 return ERROR_INT(
"pixma not defined", procName, 1);
297 if (bw == 0 || bh == 0)
298 return ERROR_INT(
"no pixels in box", procName, 1);
301 norm = 1.0 / ((l_float32)(bw) * bh);
302 if (bx > 0 && by > 0) {
303 pixGetPixel(pixma, bx + bw - 1, by + bh - 1, &val11);
307 *pval = norm * (val11 - val01 + val00 - val10);
311 *pval = norm * (val11 - val10);
315 *pval = norm * (val11 - val01);
318 *pval = norm * val11;
352 l_int32 w, h, bx, by, bw, bh;
353 l_uint32 val00, val01, val10, val11;
354 l_float64 dval00, dval01, dval10, dval11, mval, msval, var, norm;
357 PROCNAME(
"pixVarianceInRectangle");
360 return ERROR_INT(
"neither &var nor &rvar defined", procName, 1);
361 if (pvar) *pvar = 0.0;
362 if (prvar) *prvar = 0.0;
363 if (!pixs || pixGetDepth(pixs) != 8)
364 return ERROR_INT(
"pixs not defined", procName, 1);
366 return ERROR_INT(
"box not defined", procName, 1);
368 return ERROR_INT(
"pix_ma not defined", procName, 1);
370 return ERROR_INT(
"dpix_msa not defined", procName, 1);
378 if (bw == 0 || bh == 0)
379 return ERROR_INT(
"no pixels in box", procName, 1);
382 norm = 1.0 / ((l_float32)(bw) * bh);
383 if (bx > 0 && by > 0) {
384 pixGetPixel(pix_ma, bx + bw - 1, by + bh - 1, &val11);
388 dpixGetPixel(dpix_msa, bx + bw - 1, by + bh - 1, &dval11);
392 mval = norm * (val11 - val01 + val00 - val10);
393 msval = norm * (dval11 - dval01 + dval00 - dval10);
394 var = (msval - mval * mval);
395 if (pvar) *pvar = (l_float32)var;
396 if (prvar) *prvar = (l_float32)(sqrt(var));
402 mval = norm * (val11 - val10);
403 msval = norm * (dval11 - dval10);
404 var = (msval - mval * mval);
405 if (pvar) *pvar = (l_float32)var;
406 if (prvar) *prvar = (l_float32)(sqrt(var));
412 mval = norm * (val11 - val01);
413 msval = norm * (dval11 - dval01);
414 var = (msval - mval * mval);
415 if (pvar) *pvar = (l_float32)var;
416 if (prvar) *prvar = (l_float32)(sqrt(var));
421 msval = norm * dval11;
422 var = (msval - mval * mval);
423 if (pvar) *pvar = (l_float32)var;
424 if (prvar) *prvar = (l_float32)(sqrt(var));
457 l_int32 i, j, k, maxpts, nside, nbox, bw, bh;
458 l_int32 *xstart, *xend, *ystart, *yend;
463 PROCNAME(
"boxaaQuadtreeRegions");
466 return (
BOXAA *)ERROR_PTR(
"nlevels must be >= 1", procName, NULL);
467 if (w < (1 << (nlevels - 1)))
468 return (
BOXAA *)ERROR_PTR(
"w doesn't support nlevels", procName, NULL);
469 if (h < (1 << (nlevels - 1)))
470 return (
BOXAA *)ERROR_PTR(
"h doesn't support nlevels", procName, NULL);
473 maxpts = 1 << (nlevels - 1);
474 xstart = (l_int32 *)LEPT_CALLOC(maxpts,
sizeof(l_int32));
475 xend = (l_int32 *)LEPT_CALLOC(maxpts,
sizeof(l_int32));
476 ystart = (l_int32 *)LEPT_CALLOC(maxpts,
sizeof(l_int32));
477 yend = (l_int32 *)LEPT_CALLOC(maxpts,
sizeof(l_int32));
478 for (k = 0; k < nlevels; k++) {
480 for (i = 0; i < nside; i++) {
481 xstart[i] = (w - 1) * i / nside;
482 if (i > 0) xstart[i]++;
483 xend[i] = (w - 1) * (i + 1) / nside;
484 ystart[i] = (h - 1) * i / nside;
485 if (i > 0) ystart[i]++;
486 yend[i] = (h - 1) * (i + 1) / nside;
489 "k = %d, xs[%d] = %d, xe[%d] = %d, ys[%d] = %d, ye[%d] = %d\n",
490 k, i, xstart[i], i, xend[i], i, ystart[i], i, yend[i]);
495 for (i = 0; i < nside; i++) {
496 bh = yend[i] - ystart[i] + 1;
497 for (j = 0; j < nside; j++) {
498 bw = xend[j] - xstart[j] + 1;
499 box =
boxCreate(xstart[j], ystart[i], bw, bh);
542 PROCNAME(
"quadtreeGetParent");
545 return ERROR_INT(
"&val not defined", procName, 1);
548 return ERROR_INT(
"fpixa not defined", procName, 1);
550 if (level < 1 || level >= n)
551 return ERROR_INT(
"invalid level", procName, 1);
553 if (
fpixaGetPixel(fpixa, level - 1, x / 2, y / 2, pval) != 0)
554 return ERROR_INT(
"invalid coordinates", procName, 1);
588 PROCNAME(
"quadtreeGetChildren");
590 if (!pval00 || !pval01 || !pval10 || !pval11)
591 return ERROR_INT(
"&val* not all defined", procName, 1);
592 *pval00 = *pval10 = *pval01 = *pval11 = 0.0;
594 return ERROR_INT(
"fpixa not defined", procName, 1);
596 if (level < 0 || level >= n - 1)
597 return ERROR_INT(
"invalid level", procName, 1);
599 if (
fpixaGetPixel(fpixa, level + 1, 2 * x, 2 * y, pval00) != 0)
600 return ERROR_INT(
"invalid coordinates", procName, 1);
603 fpixaGetPixel(fpixa, level + 1, 2 * x + 1, 2 * y + 1, pval11);
628 minside = L_MIN(w, h);
629 for (i = 0; i < 20; i++) {
630 if (minside < (1.5 * (1 << i)))
663 l_int32 nlevels, i, mag, w;
666 PIX *pixt1, *pixt2, *pixt3, *pixt4, *pixd;
669 PROCNAME(
"fpixaDisplayQuadtree");
672 return (
PIX *)ERROR_PTR(
"fpixa not defined", procName, NULL);
675 return (
PIX *)ERROR_PTR(
"pixas empty", procName, NULL);
677 if ((bmf =
bmfCreate(NULL, fontsize)) == NULL)
678 L_ERROR(
"bmf not made; text will not be added", procName);
680 for (i = 0; i < nlevels; i++) {
683 mag = factor * (1 << (nlevels - i - 1));
686 snprintf(buf,
sizeof(buf),
"Level %d\n", i);
695 w = pixGetWidth(pixt4);
void bmfDestroy(L_BMF **pbmf)
bmfDestroy()
L_BMF * bmfCreate(const char *dir, l_int32 fontsize)
bmfCreate()
void boxDestroy(BOX **pbox)
boxDestroy()
BOXAA * boxaaCreate(l_int32 n)
boxaaCreate()
l_int32 boxaGetCount(BOXA *boxa)
boxaGetCount()
l_ok boxaaAddBoxa(BOXAA *baa, BOXA *ba, l_int32 copyflag)
boxaaAddBoxa()
l_ok boxGetGeometry(BOX *box, l_int32 *px, l_int32 *py, l_int32 *pw, l_int32 *ph)
boxGetGeometry()
l_ok boxaAddBox(BOXA *boxa, BOX *box, l_int32 copyflag)
boxaAddBox()
void boxaDestroy(BOXA **pboxa)
boxaDestroy()
BOXA * boxaaGetBoxa(BOXAA *baa, l_int32 index, l_int32 accessflag)
boxaaGetBoxa()
BOX * boxaGetBox(BOXA *boxa, l_int32 index, l_int32 accessflag)
boxaGetBox()
void boxaaDestroy(BOXAA **pbaa)
boxaaDestroy()
BOX * boxCreate(l_int32 x, l_int32 y, l_int32 w, l_int32 h)
boxCreate()
BOXA * boxaCreate(l_int32 n)
boxaCreate()
BOX * boxClipToRectangle(BOX *box, l_int32 wi, l_int32 hi)
boxClipToRectangle()
PIX * pixBlockconvAccum(PIX *pixs)
pixBlockconvAccum()
DPIX * pixMeanSquareAccum(PIX *pixs)
pixMeanSquareAccum()
l_ok fpixaAddFPix(FPIXA *fpixa, FPIX *fpix, l_int32 copyflag)
fpixaAddFPix()
void dpixDestroy(DPIX **pdpix)
dpixDestroy()
l_ok fpixaGetPixel(FPIXA *fpixa, l_int32 index, l_int32 x, l_int32 y, l_float32 *pval)
fpixaGetPixel()
DPIX * dpixClone(DPIX *dpix)
dpixClone()
l_ok dpixGetPixel(DPIX *dpix, l_int32 x, l_int32 y, l_float64 *pval)
dpixGetPixel()
FPIX * fpixaGetFPix(FPIXA *fpixa, l_int32 index, l_int32 accesstype)
fpixaGetFPix()
FPIXA * fpixaCreate(l_int32 n)
fpixaCreate()
l_ok fpixSetPixel(FPIX *fpix, l_int32 x, l_int32 y, l_float32 val)
fpixSetPixel()
void fpixDestroy(FPIX **pfpix)
fpixDestroy()
l_int32 fpixaGetCount(FPIXA *fpixa)
fpixaGetCount()
FPIX * fpixCreate(l_int32 width, l_int32 height)
fpixCreate()
PIX * fpixConvertToPix(FPIX *fpixs, l_int32 outdepth, l_int32 negvals, l_int32 errorflag)
fpixConvertToPix()
void pixDestroy(PIX **ppix)
pixDestroy()
l_ok pixGetDimensions(const PIX *pix, l_int32 *pw, l_int32 *ph, l_int32 *pd)
pixGetDimensions()
PIX * pixClone(PIX *pixs)
pixClone()
l_ok pixGetPixel(PIX *pix, l_int32 x, l_int32 y, l_uint32 *pval)
pixGetPixel()
l_ok pixaAddPix(PIXA *pixa, PIX *pix, l_int32 copyflag)
pixaAddPix()
void pixaDestroy(PIXA **ppixa)
pixaDestroy()
PIXA * pixaCreate(l_int32 n)
pixaCreate()
PIX * pixaDisplayTiledInRows(PIXA *pixa, l_int32 outdepth, l_int32 maxwidth, l_float32 scalefactor, l_int32 background, l_int32 spacing, l_int32 border)
pixaDisplayTiledInRows()
PIX * pixConvertTo32(PIX *pixs)
pixConvertTo32()
l_ok pixMeanInRectangle(PIX *pixs, BOX *box, PIX *pixma, l_float32 *pval)
pixMeanInRectangle()
BOXAA * boxaaQuadtreeRegions(l_int32 w, l_int32 h, l_int32 nlevels)
boxaaQuadtreeRegions()
l_int32 quadtreeMaxLevels(l_int32 w, l_int32 h)
quadtreeMaxLevels()
l_ok pixQuadtreeVariance(PIX *pixs, l_int32 nlevels, PIX *pix_ma, DPIX *dpix_msa, FPIXA **pfpixa_v, FPIXA **pfpixa_rv)
pixQuadtreeVariance()
l_ok quadtreeGetParent(FPIXA *fpixa, l_int32 level, l_int32 x, l_int32 y, l_float32 *pval)
quadtreeGetParent()
PIX * fpixaDisplayQuadtree(FPIXA *fpixa, l_int32 factor, l_int32 fontsize)
fpixaDisplayQuadtree()
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 pixVarianceInRectangle(PIX *pixs, BOX *box, PIX *pix_ma, DPIX *dpix_msa, l_float32 *pvar, l_float32 *prvar)
pixVarianceInRectangle()
l_ok pixQuadtreeMean(PIX *pixs, l_int32 nlevels, PIX *pix_ma, FPIXA **pfpixa)
pixQuadtreeMean()
PIX * pixExpandReplicate(PIX *pixs, l_int32 factor)
pixExpandReplicate()
PIX * pixAddSingleTextblock(PIX *pixs, L_BMF *bmf, const char *textstr, l_uint32 val, l_int32 location, l_int32 *poverflow)
pixAddSingleTextblock()
void lept_stderr(const char *fmt,...)
lept_stderr()