65 #include <config_auto.h>
69 #include "allheaders.h"
101 l_int32 i, j, w, h, size, n;
110 return ERROR_INT(
"&fpixa not defined", __func__, 1);
112 if (!pixs || pixGetDepth(pixs) != 8)
113 return ERROR_INT(
"pixs not defined or not 8 bpp", __func__, 1);
116 return ERROR_INT(
"nlevels too large for image", __func__, 1);
123 return ERROR_INT(
"pix_mac not made", __func__, 1);
127 return ERROR_INT(
"baa not made", __func__, 1);
131 for (i = 0; i < nlevels; i++) {
136 for (j = 0; j < n; j++) {
178 l_int32 i, j, w, h, size, n;
183 FPIX *fpixv, *fpixrv;
187 if (!pfpixa_v && !pfpixa_rv)
188 return ERROR_INT(
"neither &fpixav nor &fpixarv defined", __func__, 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", __func__, 1);
195 return ERROR_INT(
"nlevels too large for image", __func__, 1);
202 return ERROR_INT(
"pix_mac not made", __func__, 1);
209 return ERROR_INT(
"dpix_msac not made", __func__, 1);
215 return ERROR_INT(
"baa not made", __func__, 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;
276 return ERROR_INT(
"&val not defined", __func__, 1);
278 if (!pixs || pixGetDepth(pixs) != 8)
279 return ERROR_INT(
"pixs not defined", __func__, 1);
281 return ERROR_INT(
"box not defined", __func__, 1);
283 return ERROR_INT(
"pixma not defined", __func__, 1);
291 if (bw == 0 || bh == 0)
292 return ERROR_INT(
"no pixels in box", __func__, 1);
295 norm = 1.0 / ((l_float32)(bw) * bh);
296 if (bx > 0 && by > 0) {
297 pixGetPixel(pixma, bx + bw - 1, by + bh - 1, &val11);
301 *pval = norm * (val11 - val01 + val00 - val10);
305 *pval = norm * (val11 - val10);
309 *pval = norm * (val11 - val01);
312 *pval = norm * val11;
346 l_int32 w, h, bx, by, bw, bh;
347 l_uint32 val00, val01, val10, val11;
348 l_float64 dval00, dval01, dval10, dval11, mval, msval, var, norm;
352 return ERROR_INT(
"neither &var nor &rvar defined", __func__, 1);
353 if (pvar) *pvar = 0.0;
354 if (prvar) *prvar = 0.0;
355 if (!pixs || pixGetDepth(pixs) != 8)
356 return ERROR_INT(
"pixs not defined", __func__, 1);
358 return ERROR_INT(
"box not defined", __func__, 1);
360 return ERROR_INT(
"pix_ma not defined", __func__, 1);
362 return ERROR_INT(
"dpix_msa not defined", __func__, 1);
370 if (bw == 0 || bh == 0)
371 return ERROR_INT(
"no pixels in box", __func__, 1);
374 norm = 1.0 / ((l_float32)(bw) * bh);
375 if (bx > 0 && by > 0) {
376 pixGetPixel(pix_ma, bx + bw - 1, by + bh - 1, &val11);
380 dpixGetPixel(dpix_msa, bx + bw - 1, by + bh - 1, &dval11);
384 mval = norm * (val11 - val01 + val00 - val10);
385 msval = norm * (dval11 - dval01 + dval00 - dval10);
386 var = (msval - mval * mval);
387 if (pvar) *pvar = (l_float32)var;
388 if (prvar) *prvar = (l_float32)(sqrt(var));
394 mval = norm * (val11 - val10);
395 msval = norm * (dval11 - dval10);
396 var = (msval - mval * mval);
397 if (pvar) *pvar = (l_float32)var;
398 if (prvar) *prvar = (l_float32)(sqrt(var));
404 mval = norm * (val11 - val01);
405 msval = norm * (dval11 - dval01);
406 var = (msval - mval * mval);
407 if (pvar) *pvar = (l_float32)var;
408 if (prvar) *prvar = (l_float32)(sqrt(var));
413 msval = norm * dval11;
414 var = (msval - mval * mval);
415 if (pvar) *pvar = (l_float32)var;
416 if (prvar) *prvar = (l_float32)(sqrt(var));
449 l_int32 i, j, k, maxpts, nside, nbox, bw, bh;
450 l_int32 *xstart, *xend, *ystart, *yend;
456 return (
BOXAA *)ERROR_PTR(
"nlevels must be >= 1", __func__, NULL);
457 if (w < (1 << (nlevels - 1)))
458 return (
BOXAA *)ERROR_PTR(
"w doesn't support nlevels", __func__, NULL);
459 if (h < (1 << (nlevels - 1)))
460 return (
BOXAA *)ERROR_PTR(
"h doesn't support nlevels", __func__, NULL);
463 maxpts = 1 << (nlevels - 1);
464 xstart = (l_int32 *)LEPT_CALLOC(maxpts,
sizeof(l_int32));
465 xend = (l_int32 *)LEPT_CALLOC(maxpts,
sizeof(l_int32));
466 ystart = (l_int32 *)LEPT_CALLOC(maxpts,
sizeof(l_int32));
467 yend = (l_int32 *)LEPT_CALLOC(maxpts,
sizeof(l_int32));
468 for (k = 0; k < nlevels; k++) {
470 for (i = 0; i < nside; i++) {
471 xstart[i] = (w - 1) * i / nside;
472 if (i > 0) xstart[i]++;
473 xend[i] = (w - 1) * (i + 1) / nside;
474 ystart[i] = (h - 1) * i / nside;
475 if (i > 0) ystart[i]++;
476 yend[i] = (h - 1) * (i + 1) / nside;
479 "k = %d, xs[%d] = %d, xe[%d] = %d, ys[%d] = %d, ye[%d] = %d\n",
480 k, i, xstart[i], i, xend[i], i, ystart[i], i, yend[i]);
485 for (i = 0; i < nside; i++) {
486 bh = yend[i] - ystart[i] + 1;
487 for (j = 0; j < nside; j++) {
488 bw = xend[j] - xstart[j] + 1;
489 box =
boxCreate(xstart[j], ystart[i], bw, bh);
533 return ERROR_INT(
"&val not defined", __func__, 1);
536 return ERROR_INT(
"fpixa not defined", __func__, 1);
538 if (level < 1 || level >= n)
539 return ERROR_INT(
"invalid level", __func__, 1);
541 if (
fpixaGetPixel(fpixa, level - 1, x / 2, y / 2, pval) != 0)
542 return ERROR_INT(
"invalid coordinates", __func__, 1);
576 if (!pval00 || !pval01 || !pval10 || !pval11)
577 return ERROR_INT(
"&val* not all defined", __func__, 1);
578 *pval00 = *pval10 = *pval01 = *pval11 = 0.0;
580 return ERROR_INT(
"fpixa not defined", __func__, 1);
582 if (level < 0 || level >= n - 1)
583 return ERROR_INT(
"invalid level", __func__, 1);
585 if (
fpixaGetPixel(fpixa, level + 1, 2 * x, 2 * y, pval00) != 0)
586 return ERROR_INT(
"invalid coordinates", __func__, 1);
589 fpixaGetPixel(fpixa, level + 1, 2 * x + 1, 2 * y + 1, pval11);
614 minside = L_MIN(w, h);
615 for (i = 0; i < 20; i++) {
616 if (minside < (1.5 * (1 << i)))
649 l_int32 nlevels, i, mag, w;
652 PIX *pixt1, *pixt2, *pixt3, *pixt4, *pixd;
656 return (
PIX *)ERROR_PTR(
"fpixa not defined", __func__, NULL);
659 return (
PIX *)ERROR_PTR(
"pixas empty", __func__, NULL);
661 if ((bmf =
bmfCreate(NULL, fontsize)) == NULL)
662 L_ERROR(
"bmf not made; text will not be added", __func__);
664 for (i = 0; i < nlevels; i++) {
667 mag = factor * (1 << (nlevels - i - 1));
670 snprintf(buf,
sizeof(buf),
"Level %d\n", i);
679 w = pixGetWidth(pixt4);
void bmfDestroy(L_BMF **pbmf)
bmfDestroy()
L_BMF * bmfCreate(const char *dir, l_int32 fontsize)
bmfCreate()
l_ok boxGetGeometry(const BOX *box, l_int32 *px, l_int32 *py, l_int32 *pw, l_int32 *ph)
boxGetGeometry()
void boxDestroy(BOX **pbox)
boxDestroy()
BOXAA * boxaaCreate(l_int32 n)
boxaaCreate()
l_ok boxaaAddBoxa(BOXAA *baa, BOXA *ba, l_int32 copyflag)
boxaaAddBoxa()
l_ok boxaAddBox(BOXA *boxa, BOX *box, l_int32 copyflag)
boxaAddBox()
void boxaDestroy(BOXA **pboxa)
boxaDestroy()
l_int32 boxaGetCount(const BOXA *boxa)
boxaGetCount()
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()