101l_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);
114 pixGetDimensions(pixs, &w, &h, NULL);
116 return ERROR_INT(
"nlevels too large for image", __func__, 1);
119 pix_mac = pixBlockconvAccum(pixs);
121 pix_mac = pixClone(pix_ma);
123 return ERROR_INT(
"pix_mac not made", __func__, 1);
126 pixDestroy(&pix_mac);
127 return ERROR_INT(
"baa not made", __func__, 1);
130 *pfpixa = fpixaCreate(nlevels);
131 for (i = 0; i < nlevels; i++) {
132 boxa = boxaaGetBoxa(baa, i,
L_CLONE);
134 n = boxaGetCount(boxa);
135 fpix = fpixCreate(size, size);
136 for (j = 0; j < n; j++) {
137 box = boxaGetBox(boxa, j,
L_CLONE);
139 fpixSetPixel(fpix, j % size, j / size, val);
142 fpixaAddFPix(*pfpixa, fpix,
L_INSERT);
146 pixDestroy(&pix_mac);
178l_int32 i, j, w, h, size, n;
183FPIX *fpixv = NULL, *fpixrv = NULL;
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);
193 pixGetDimensions(pixs, &w, &h, NULL);
195 return ERROR_INT(
"nlevels too large for image", __func__, 1);
198 pix_mac = pixBlockconvAccum(pixs);
200 pix_mac = pixClone(pix_ma);
202 return ERROR_INT(
"pix_mac not made", __func__, 1);
204 dpix_msac = pixMeanSquareAccum(pixs);
206 dpix_msac = dpixClone(dpix_msa);
208 pixDestroy(&pix_mac);
209 return ERROR_INT(
"dpix_msac not made", __func__, 1);
213 pixDestroy(&pix_mac);
214 dpixDestroy(&dpix_msac);
215 return ERROR_INT(
"baa not made", __func__, 1);
218 if (pfpixa_v) *pfpixa_v = fpixaCreate(nlevels);
219 if (pfpixa_rv) *pfpixa_rv = fpixaCreate(nlevels);
220 for (i = 0; i < nlevels; i++) {
221 boxa = boxaaGetBoxa(baa, i,
L_CLONE);
223 n = boxaGetCount(boxa);
224 if (pfpixa_v) fpixv = fpixCreate(size, size);
225 if (pfpixa_rv) fpixrv = fpixCreate(size, size);
226 for (j = 0; j < n; j++) {
227 box = boxaGetBox(boxa, j,
L_CLONE);
229 if (pfpixa_v) fpixSetPixel(fpixv, j % size, j / size, var);
230 if (pfpixa_rv) fpixSetPixel(fpixrv, j % size, j / size, rvar);
233 if (pfpixa_v) fpixaAddFPix(*pfpixa_v, fpixv,
L_INSERT);
234 if (pfpixa_rv) fpixaAddFPix(*pfpixa_rv, fpixrv,
L_INSERT);
238 pixDestroy(&pix_mac);
239 dpixDestroy(&dpix_msac);
270l_int32 w, h, bx, by, bw, bh;
271l_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);
286 pixGetDimensions(pixs, &w, &h, NULL);
287 boxc = boxClipToRectangle(box, w, h);
288 boxGetGeometry(boxc, &bx, &by, &bw, &bh);
291 if (bw == 0 || bh == 0)
292 return ERROR_INT(
"no pixels in box", __func__, 1);
295 norm = 1.0f / ((l_float32)(bw) * bh);
296 if (bx > 0 && by > 0) {
297 pixGetPixel(pixma, bx + bw - 1, by + bh - 1, &val11);
298 pixGetPixel(pixma, bx + bw - 1, by - 1, &val10);
299 pixGetPixel(pixma, bx - 1, by + bh - 1, &val01);
300 pixGetPixel(pixma, bx - 1, by - 1, &val00);
301 *pval = norm * (val11 - val01 + val00 - val10);
303 pixGetPixel(pixma, bw - 1, by + bh - 1, &val11);
304 pixGetPixel(pixma, bw - 1, by - 1, &val10);
305 *pval = norm * (val11 - val10);
307 pixGetPixel(pixma, bx + bw - 1, bh - 1, &val11);
308 pixGetPixel(pixma, bx - 1, bh - 1, &val01);
309 *pval = norm * (val11 - val01);
311 pixGetPixel(pixma, bw - 1, bh - 1, &val11);
312 *pval = norm * val11;
346l_int32 w, h, bx, by, bw, bh;
347l_uint32 val00, val01, val10, val11;
348l_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);
365 pixGetDimensions(pixs, &w, &h, NULL);
366 boxc = boxClipToRectangle(box, w, h);
367 boxGetGeometry(boxc, &bx, &by, &bw, &bh);
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);
377 pixGetPixel(pix_ma, bx + bw - 1, by - 1, &val10);
378 pixGetPixel(pix_ma, bx - 1, by + bh - 1, &val01);
379 pixGetPixel(pix_ma, bx - 1, by - 1, &val00);
380 dpixGetPixel(dpix_msa, bx + bw - 1, by + bh - 1, &dval11);
381 dpixGetPixel(dpix_msa, bx + bw - 1, by - 1, &dval10);
382 dpixGetPixel(dpix_msa, bx - 1, by + bh - 1, &dval01);
383 dpixGetPixel(dpix_msa, bx - 1, by - 1, &dval00);
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));
390 pixGetPixel(pix_ma, bw - 1, by + bh - 1, &val11);
391 pixGetPixel(pix_ma, bw - 1, by - 1, &val10);
392 dpixGetPixel(dpix_msa, bw - 1, by + bh - 1, &dval11);
393 dpixGetPixel(dpix_msa, bw - 1, by - 1, &dval10);
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));
400 pixGetPixel(pix_ma, bx + bw - 1, bh - 1, &val11);
401 pixGetPixel(pix_ma, bx - 1, bh - 1, &val01);
402 dpixGetPixel(dpix_msa, bx + bw - 1, bh - 1, &dval11);
403 dpixGetPixel(dpix_msa, bx - 1, bh - 1, &dval01);
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));
410 pixGetPixel(pix_ma, bw - 1, bh - 1, &val11);
411 dpixGetPixel(dpix_msa, bw - 1, bh - 1, &dval11);
413 msval = norm * dval11;
414 var = (msval - mval * mval);
415 if (pvar) *pvar = (l_float32)var;
416 if (prvar) *prvar = (l_float32)(sqrt(var));
449l_int32 i, j, k, maxpts, nside, nbox, bw, bh;
450l_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);
462 baa = boxaaCreate(nlevels);
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]);
484 boxa = boxaCreate(nbox);
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);
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);
581 n = fpixaGetCount(fpixa);
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);
587 fpixaGetPixel(fpixa, level + 1, 2 * x + 1, 2 * y, pval10);
588 fpixaGetPixel(fpixa, level + 1, 2 * x, 2 * y + 1, pval01);
589 fpixaGetPixel(fpixa, level + 1, 2 * x + 1, 2 * y + 1, pval11);
649l_int32 nlevels, i, mag, w;
652PIX *pixt1, *pixt2, *pixt3, *pixt4 = NULL, *pixd;
656 return (
PIX *)ERROR_PTR(
"fpixa not defined", __func__, NULL);
658 if ((nlevels = fpixaGetCount(fpixa)) == 0)
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__);
663 pixat = pixaCreate(nlevels);
664 for (i = 0; i < nlevels; i++) {
665 fpix = fpixaGetFPix(fpixa, i,
L_CLONE);
667 mag = factor * (1 << (nlevels - i - 1));
668 pixt2 = pixExpandReplicate(pixt1, mag);
669 pixt3 = pixConvertTo32(pixt2);
670 snprintf(buf,
sizeof(buf),
"Level %d\n", i);
671 pixt4 = pixAddSingleTextblock(pixt3, bmf, buf, 0xff000000,
679 w = pixGetWidth(pixt4);
680 pixd = pixaDisplayTiledInRows(pixat, 32, nlevels * (w + 80), 1.0, 0, 30, 2);