54 #include "allheaders.h" 57 l_float32 *pdel1, l_float32 *pdel2);
106 BOXA *boxae, *boxao, *boxalfe, *boxalfo, *boxame, *boxamo, *boxad;
108 PROCNAME(
"boxaSmoothSequenceLS");
111 return (
BOXA *)ERROR_PTR(
"boxas not defined", procName, NULL);
113 L_WARNING(
"factor must be > 0.0; returning copy\n", procName);
117 L_WARNING(
"maxdiff must be >= 0; returning copy\n", procName);
123 L_WARNING(
"invalid subflag; returning copy\n", procName);
127 L_WARNING(
"need at least 4 boxes; returning copy\n", procName);
212 BOXA *boxae, *boxao, *boxamede, *boxamedo, *boxame, *boxamo, *boxad;
214 PROCNAME(
"boxaSmoothSequenceMedian");
217 return (
BOXA *)ERROR_PTR(
"boxas not defined", procName, NULL);
219 L_WARNING(
"halfwin must be > 0; returning copy\n", procName);
223 L_WARNING(
"maxdiff must be >= 0; returning copy\n", procName);
229 L_WARNING(
"invalid subflag; returning copy\n", procName);
233 L_WARNING(
"need at least 6 boxes; returning copy\n", procName);
314 l_int32 n, i, w, h, lval, tval, rval, bval, rejectlr, rejecttb;
315 l_float32 al, bl, at, bt, ar, br, ab, bb;
316 l_float32 medw, medh, medvarw, medvarh;
318 BOXA *boxalr, *boxatb, *boxad;
320 PTA *ptal, *ptat, *ptar, *ptab;
322 PROCNAME(
"boxaLinearFit");
325 return (
BOXA *)ERROR_PTR(
"boxas not defined", procName, NULL);
327 return (
BOXA *)ERROR_PTR(
"need at least 2 boxes", procName, NULL);
339 fprintf(stderr,
"medw = %7.3f, medvarw = %7.3f\n", medw, medvarw);
340 fprintf(stderr,
"medh = %7.3f, medvarh = %7.3f\n", medh, medvarh);
351 rejectlr = rejecttb = 0;
352 for (i = 0; i < n; i++) {
359 if (L_ABS(w - medw) <= factor * medvarw) {
365 if (L_ABS(h - medh) <= factor * medvarh) {
377 return (
BOXA *)ERROR_PTR(
"need at least 2 valid boxes", procName, NULL);
381 L_INFO(
"# lr reject = %d, # tb reject = %d\n", procName,
415 for (i = 0; i < n; i++) {
416 lval = (l_int32)(al * i + bl + 0.5);
417 tval = (l_int32)(at * i + bt + 0.5);
418 rval = (l_int32)(ar * i + br + 0.5);
419 bval = (l_int32)(ab * i + bb + 0.5);
424 box =
boxCreate(lval, tval, rval - lval + 1, bval - tval + 1);
466 l_int32 n, i, left, top, right, bot;
469 NUMA *nal, *nat, *nar, *nab, *naml, *namt, *namr, *namb;
471 PROCNAME(
"boxaWindowedMedian");
474 return (
BOXA *)ERROR_PTR(
"boxas not defined", procName, NULL);
476 L_WARNING(
"less than 3 boxes; returning a copy\n", procName);
480 L_WARNING(
"halfwin must be > 0; returning copy\n", procName);
486 return (
BOXA *)ERROR_PTR(
"filled boxa not made", procName, NULL);
497 for (i = 0; i < n; i++) {
502 box =
boxCreate(left, top, right - left + 1, bot - top + 1);
606 l_int32 n, i, ls, ts, rs, bs, ws, hs, lm, tm, rm, bm, wm, hm, ld, td, rd, bd;
607 BOX *boxs, *boxm, *boxd, *boxempty;
610 PROCNAME(
"boxaModifyWithBoxa");
613 return (
BOXA *)ERROR_PTR(
"boxas not defined", procName, NULL);
615 L_WARNING(
"boxam not defined; returning copy", procName);
621 L_WARNING(
"invalid subflag; returning copy", procName);
626 L_WARNING(
"boxas and boxam sizes differ; returning copy", procName);
632 for (i = 0; i < n; i++) {
635 if (!boxs || !boxm) {
655 ld = (L_ABS(lm - ls) <= maxdiff) ? ls : lm - extrapixels;
656 td = (L_ABS(tm - ts) <= maxdiff) ? ts : tm - extrapixels;
657 rd = (L_ABS(rm - rs) <= maxdiff) ? rs : rm + extrapixels;
658 bd = (L_ABS(bm - bs) <= maxdiff) ? bs : bm + extrapixels;
660 ld = (L_ABS(wm - ws) <= maxdiff) ? ls : lm - extrapixels;
661 td = (L_ABS(hm - hs) <= maxdiff) ? ts : tm - extrapixels;
662 rd = (L_ABS(wm - ws) <= maxdiff) ? rs : rm + extrapixels;
663 bd = (L_ABS(hm - hs) <= maxdiff) ? bs : bm + extrapixels;
665 ld = L_MAX(lm, L_MIN(ls, lm + maxdiff));
666 td = L_MAX(tm, L_MIN(ts, tm + maxdiff));
667 rd = L_MIN(rm, L_MAX(rs, rm - maxdiff));
668 bd = L_MIN(bm, L_MAX(bs, bm - maxdiff));
670 ld = L_MIN(lm, L_MAX(ls, lm - maxdiff));
671 td = L_MIN(tm, L_MAX(ts, tm - maxdiff));
672 rd = L_MAX(rm, L_MIN(rs, rm + maxdiff));
673 bd = L_MAX(bm, L_MIN(bs, bm + maxdiff));
675 boxd =
boxCreate(ld, td, rd - ld + 1, bd - td + 1);
722 l_int32 n, i, x, y, w, h, invalid;
723 l_int32 delw, delh, del_left, del_right, del_top, del_bot;
724 BOX *medbox, *boxs, *boxd;
727 PROCNAME(
"boxaConstrainSize");
730 return (
BOXA *)ERROR_PTR(
"boxas not defined", procName, NULL);
735 if (width == 0 || height == 0 || invalid > 0) {
737 L_ERROR(
"median vals not returned", procName);
741 if (width == 0) width = w;
742 if (height == 0) height = h;
747 for (i = 0; i < n; i++) {
753 del_left = del_right = del_top = del_bot = 0;
759 del_left = -delw / 2;
760 del_right = delw / 2 + L_SIGN(delw) * (delw & 1);
768 del_bot = delh / 2 + L_SIGN(delh) * (delh & 1);
832 l_int32 n, he, ho, hmed, doeven;
833 l_float32 del1, del2;
834 BOXA *boxae, *boxao, *boxa1e, *boxa1o, *boxad;
836 PROCNAME(
"boxaReconcileEvenOddHeight");
839 return (
BOXA *)ERROR_PTR(
"boxas not defined", procName, NULL);
842 L_WARNING(
"no action requested; returning copy\n", procName);
846 L_WARNING(
"need at least 6 valid boxes; returning copy\n", procName);
850 L_WARNING(
"invalid factor; setting to 1.0\n", procName);
865 L_INFO(
"median he = %d, median ho = %d\n", procName, he, ho);
873 if (L_ABS(he - ho) > delh) {
875 doeven = (ho < he) ? TRUE : FALSE;
876 hmed = (l_int32)(factor * L_MIN(he, ho));
877 hmed = L_MIN(hmed, L_MAX(he, ho));
879 doeven = (ho > he) ? TRUE : FALSE;
880 hmed = (l_int32)(factor * L_MAX(he, ho));
881 hmed = L_MAX(hmed, L_MIN(he, ho));
906 if (del2 < del1 + 10.)
912 L_INFO(
"Got worse: del2 = %f > del1 = %f\n", procName, del2, del1);
940 l_int32 i, n, npairs, y1a, y1b, y2a, y2b, h1a, h1b, h2a, h2b;
941 l_float32 del1, del2;
943 PROCNAME(
"boxaTestEvenOddHeight");
945 if (pdel1) *pdel1 = 0.0;
946 if (pdel2) *pdel2 = 0.0;
947 if (!pdel1 || !pdel2)
948 return ERROR_INT(
"&del1 and &del2 not both defined", procName, 1);
949 if (!boxa1 || !boxa2)
950 return ERROR_INT(
"boxa1 and boxa2 not both defined", procName, 1);
958 npairs = (n - start) / 2;
959 for (i = start; i < 2 * npairs; i += 2) {
962 del1 += (l_float32)(y1a - y1b) * (y1a - y1b)
963 + (h1a - h1b) * (h1a - h1b);
966 del2 += (l_float32)(y2a - y2b) * (y2a - y2b)
967 + (h2a - h2b) * (h2a - h2b);
971 *pdel1 = (l_float32)sqrt((l_float64)del1 / (0.5 * n));
972 *pdel2 = (l_float32)sqrt((l_float64)del2 / (0.5 * n));
1012 l_int32 i, ne, no, nmin, xe, we, xo, wo, inde, indo, x, w;
1014 BOXA *boxae, *boxao, *boxad;
1016 PROCNAME(
"boxaReconcilePairWidth");
1019 return (
BOXA *)ERROR_PTR(
"boxas not defined", procName, NULL);
1020 if (factor <= 0.0) {
1021 L_WARNING(
"invalid factor; setting to 1.0\n", procName);
1031 nmin = L_MIN(ne, no);
1032 for (i = 0; i < nmin; i++) {
1040 if (inde == 0 && indo == 0)
continue;
1046 if (we == 0 || wo == 0) {
1050 }
else if (L_ABS(we - wo) > delw) {
1052 if (we > wo && inde == 1) {
1057 }
else if (we < wo && indo == 1) {
1063 if (we < wo && inde == 1) {
1066 x = L_MAX(0, xe + (we - w));
1069 }
else if (we > wo && indo == 1) {
1137 l_int32 i, n, bw1, bh1, bw2, bh2, npairs;
1138 l_float32 ave, fdiff, sumdiff, med, fvarp, fvarm;
1141 PROCNAME(
"boxaSizeConsistency1");
1143 if (pfvarp) *pfvarp = 0.0;
1144 if (pfvarm) *pfvarm = 0.0;
1146 return ERROR_INT(
"&same not defined", procName, 1);
1149 return ERROR_INT(
"boxas not defined", procName, 1);
1151 return ERROR_INT(
"need a least 6 valid boxes", procName, 1);
1153 return ERROR_INT(
"invalid type", procName, 1);
1154 if (threshp < 0.0 || threshp >= 0.5)
1155 return ERROR_INT(
"invalid threshp", procName, 1);
1156 if (threshm < 0.0 || threshm >= 0.5)
1157 return ERROR_INT(
"invalid threshm", procName, 1);
1158 if (threshp == 0.0) threshp = 0.02;
1159 if (threshm == 0.0) threshm = 0.015;
1164 for (i = 0, npairs = 0, sumdiff = 0; i < n - 1; i += 2) {
1167 if (bw1 == 0 || bh1 == 0 || bw2 == 0 || bh2 == 0)
1171 ave = (bw1 + bw2) / 2.0;
1172 fdiff = L_ABS(bw1 - bw2) / ave;
1176 ave = (bh1 + bh2) / 2.0;
1177 fdiff = L_ABS(bh1 - bh2) / ave;
1183 fvarp = sumdiff / npairs;
1184 if (pfvarp) *pfvarp = fvarp;
1189 L_WARNING(
"median value is 0\n", procName);
1193 if (pfvarm) *pfvarm = fvarm;
1198 if (fvarp < threshp && fvarm < threshm)
1200 else if (fvarp < threshp && fvarm > threshm)
1246 l_int32 i, n, bw1, bh1, bw2, bh2, npairs;
1247 l_float32 medw, medh, devw, devh, minw, maxw, minh, w;
1251 PIX *pix1, *pix2, *pix3;
1254 PROCNAME(
"boxaSizeConsistency2");
1256 if (pfdevw) *pfdevw = 0.0;
1257 if (pfdevh) *pfdevh = 0.0;
1259 return ERROR_INT(
"boxas not defined", procName, 1);
1260 if (!pfdevw || !pfdevh)
1261 return ERROR_INT(
"&fdevw and &fdevh not both defined", procName, 1);
1264 L_WARNING(
"small boxa; assuming OK", procName);
1272 for (i = 0, npairs = 0; i < n - 1; i += 2) {
1275 if (bw1 == 0 || bh1 == 0 || bw2 == 0 || bh2 == 0)
1278 minw = (l_float32)L_MIN(bw1, bw2);
1279 maxw = (l_float32)L_MAX(bw1, bw2);
1280 minh = (l_float32)L_MIN(bh1, bh2);
1281 w = (minw / minh > 0.5) ? minw : maxw;
1291 L_WARNING(
"no valid box pairs\n", procName);
1303 *pfdevw = devw / medw;
1304 *pfdevh = devh / medh;
1306 fprintf(stderr,
"medw = %5.1f, medh = %5.1f\n", medw, medh);
1307 fprintf(stderr,
"fdevw = %6.3f, fdevh = %6.3f\n", *pfdevw, *pfdevh);
1309 boxaPlotSizes(boxa1,
"regularized_boxa", NULL, NULL, &pix2);
1310 pixDisplay(pix1, 500, 0);
1311 pixDisplay(pix2, 500, 1000);
1317 pixWrite(
"/tmp/lept/boxa/eval.png", pix3, IFF_PNG);
1318 pixDisplay(pix3, 100, 100);
1376 l_float32 *pratiowh)
1378 l_int32 i, n, ne, no, outfound, isvalid, ind, ldist, rdist, tdist, bdist;
1379 l_int32 medw, medh, newloc, bw, bh, left, right, top, bot;
1380 l_int32 medleft, medlefte, medlefto, medright, medrighte, medrighto;
1381 l_int32 medtop, medtope, medtopo, medbot, medbote, medboto;
1384 BOXA *boxa1, *boxae, *boxao, *boxad;
1385 NUMA *naind, *nadelw, *nadelh;
1387 PROCNAME(
"boxaReconcileSizeByMedian");
1389 if (pnadelw) *pnadelw = NULL;
1390 if (pnadelh) *pnadelh = NULL;
1391 if (pratiowh) *pratiowh = 0.0;
1393 return (
BOXA *)ERROR_PTR(
"boxas not defined", procName, NULL);
1396 L_WARNING(
"invalid type; returning copy\n", procName);
1399 if (fract <= 0.0 || fract >= 1.0) {
1400 L_WARNING(
"invalid fract; returning copy\n", procName);
1403 if (factor < 0.7 || factor > 1.4)
1404 L_WARNING(
"factor %5.3f is typ. closer to 1.0\n", procName, factor);
1406 L_WARNING(
"need at least 6 valid boxes; returning copy\n", procName);
1414 factor, pnadelw, NULL, pratiowh);
1416 factor, NULL, pnadelh, NULL);
1430 *pratiowh = (l_float32)medw / (l_float32)medh;
1431 L_INFO(
"median ratio w/h = %5.3f\n", procName, *pratiowh);
1439 for (i = 0; i < n; i++) {
1445 brat = (l_float32)bw / (l_float32)medw;
1446 if (brat < 1.0 - fract || brat > 1.0 + fract) {
1462 L_INFO(
"no width outlier boxes found\n", procName);
1473 L_INFO(
"fixing width of outlier boxes\n", procName);
1474 medlefte = medrighte = medlefto = medrighto = 0;
1482 medlefte = medlefto;
1483 medrighte = medrighto;
1484 }
else if (no == 0) {
1485 medlefto = medlefte;
1486 medrighto = medrighte;
1491 for (i = 0; i < n; i++) {
1495 medleft = (i % 2 == 0) ? medlefte : medlefto;
1496 medright = (i % 2 == 0) ? medrighte : medrighto;
1497 if (ind == 1 && isvalid) {
1499 ldist = L_ABS(left - medleft);
1500 rdist = L_ABS(right - medright);
1501 if (ldist > rdist) {
1502 newloc = L_MAX(0, right - factor * medw);
1505 newloc = left + factor * medw;
1515 *pratiowh = (l_float32)medw / (l_float32)medh;
1516 L_INFO(
"median ratio w/h = %5.3f\n", procName, *pratiowh);
1524 for (i = 0; i < n; i++) {
1530 brat = (l_float32)bh / (l_float32)medh;
1531 if (brat < 1.0 - fract || brat > 1.0 + fract) {
1547 L_INFO(
"no height outlier boxes found\n", procName);
1558 L_INFO(
"fixing height of outlier boxes\n", procName);
1559 medlefte = medtope = medbote = medtopo = medboto = 0;
1569 }
else if (no == 0) {
1576 for (i = 0; i < n; i++) {
1580 medtop = (i % 2 == 0) ? medtope : medtopo;
1581 medbot = (i % 2 == 0) ? medbote : medboto;
1582 if (ind == 1 && isvalid) {
1584 tdist = L_ABS(top - medtop);
1585 bdist = L_ABS(bot - medbot);
1586 if (tdist > bdist) {
1587 newloc = L_MAX(0, bot - factor * medh);
1590 newloc = top + factor * medh;
1630 const char *plotname,
1637 char buf[128], titlebuf[128];
1638 static l_int32 plotid = 0;
1639 l_int32 n, i, w, h, left, top, right, bot;
1642 NUMA *nal, *nat, *nar, *nab;
1644 PROCNAME(
"boxaPlotSides");
1646 if (pnal) *pnal = NULL;
1647 if (pnat) *pnat = NULL;
1648 if (pnar) *pnar = NULL;
1649 if (pnab) *pnab = NULL;
1650 if (ppixd) *ppixd = NULL;
1652 return ERROR_INT(
"boxa not defined", procName, 1);
1654 return ERROR_INT(
"less than 2 boxes", procName, 1);
1664 for (i = 0; i < n; i++) {
1666 right = left + w - 1;
1677 snprintf(buf,
sizeof(buf),
"/tmp/lept/plots/sides.%s", plotname);
1678 snprintf(titlebuf,
sizeof(titlebuf),
"%s: Box sides vs. box index",
1681 snprintf(buf,
sizeof(buf),
"/tmp/lept/plots/sides.%d", plotid++);
1682 snprintf(titlebuf,
sizeof(titlebuf),
"Box sides vs. box index");
1685 "box index",
"side location");
1686 gplotAddPlot(gplot, NULL, nal, GPLOT_LINES,
"left side");
1687 gplotAddPlot(gplot, NULL, nat, GPLOT_LINES,
"top side");
1688 gplotAddPlot(gplot, NULL, nar, GPLOT_LINES,
"right side");
1689 gplotAddPlot(gplot, NULL, nab, GPLOT_LINES,
"bottom side");
1742 const char *plotname,
1747 char buf[128], titlebuf[128];
1748 static l_int32 plotid = 0;
1754 PROCNAME(
"boxaPlotSizes");
1756 if (pnaw) *pnaw = NULL;
1757 if (pnah) *pnah = NULL;
1758 if (ppixd) *ppixd = NULL;
1760 return ERROR_INT(
"boxa not defined", procName, 1);
1762 return ERROR_INT(
"less than 2 boxes", procName, 1);
1770 for (i = 0; i < n; i++) {
1779 snprintf(buf,
sizeof(buf),
"/tmp/lept/plots/size.%s", plotname);
1780 snprintf(titlebuf,
sizeof(titlebuf),
"%s: Box size vs. box index",
1783 snprintf(buf,
sizeof(buf),
"/tmp/lept/plots/size.%d", plotid++);
1784 snprintf(titlebuf,
sizeof(titlebuf),
"Box size vs. box index");
1787 "box index",
"box dimension");
1834 BOXA *boxae, *boxao, *boxad;
1836 PROCNAME(
"boxaFillSequence");
1839 return (
BOXA *)ERROR_PTR(
"boxas not defined", procName, NULL);
1841 return (
BOXA *)ERROR_PTR(
"invalid useflag", procName, NULL);
1848 L_INFO(
"%d valid boxes, %d invalid boxes\n", procName, nv, n - nv);
1850 L_WARNING(
"n < 3; some invalid\n", procName);
1868 L_WARNING(
"there are still %d invalid boxes\n", procName, n - nv);
1890 l_int32 n, nv, i, j, spandown, spanup;
1894 PROCNAME(
"boxaFillAll");
1897 return ERROR_INT(
"boxa not defined", procName, 1);
1900 if (n == nv)
return 0;
1902 L_WARNING(
"no valid boxes out of %d boxes\n", procName, n);
1907 if ((indic = (l_int32 *)LEPT_CALLOC(n,
sizeof(l_int32))) == NULL)
1908 return ERROR_INT(
"indic not made", procName, 1);
1909 for (i = 0; i < n; i++) {
1917 for (i = 0; i < n; i++) {
1920 spandown = spanup = 10000000;
1921 for (j = i - 1; j >= 0; j--) {
1922 if (indic[j] == 1) {
1927 for (j = i + 1; j < n; j++) {
1928 if (indic[j] == 1) {
1933 if (spandown < spanup)
1974 l_float32 *pdel_evenodd,
1975 l_float32 *prms_even,
1976 l_float32 *prms_odd,
1977 l_float32 *prms_all)
1979 l_int32 n, ne, no, nmin, vale, valo, i;
1981 BOXA *boxae, *boxao;
1982 NUMA *nae, *nao, *na_all;
1984 PROCNAME(
"boxaSizeVariation");
1986 if (pdel_evenodd) *pdel_evenodd = 0.0;
1987 if (prms_even) *prms_even = 0.0;
1988 if (prms_odd) *prms_odd = 0.0;
1989 if (prms_all) *prms_all = 0.0;
1991 return ERROR_INT(
"boxa not defined", procName, 1);
1993 return ERROR_INT(
"invalid type", procName, 1);
1994 if (!pdel_evenodd && !prms_even && !prms_odd && !prms_all)
1995 return ERROR_INT(
"nothing to do", procName, 1);
1998 return ERROR_INT(
"too few boxes", procName, 1);
2003 nmin = L_MIN(ne, no);
2007 return ERROR_INT(
"either no even or no odd boxes", procName, 1);
2022 for (i = 0; i < nmin; i++) {
2025 sum += L_ABS(vale - valo);
2027 *pdel_evenodd = sum / nmin;
2085 l_int32 i, n, bw, bh, medw, medh, medwe, medwo, medhe, medho;
2086 BOXA *boxae, *boxao;
2087 NUMA *nadelw, *nadelh;
2089 PROCNAME(
"boxaMedianDimensions");
2091 if (pmedw) *pmedw = 0;
2092 if (pmedh) *pmedh = 0;
2093 if (pmedwe) *pmedwe= 0;
2094 if (pmedwo) *pmedwo= 0;
2095 if (pmedhe) *pmedhe= 0;
2096 if (pmedho) *pmedho= 0;
2097 if (pnadelw) *pnadelw = NULL;
2098 if (pnadelh) *pnadelh = NULL;
2100 return ERROR_INT(
"boxas not defined", procName, 1);
2102 return ERROR_INT(
"need at least 6 valid boxes", procName, 1);
2109 return ERROR_INT(
"don't have 3+ valid boxes of each type", procName, 1);
2116 if (pmedw) *pmedw = medw;
2117 if (pmedh) *pmedh = medh;
2118 if (pmedwe) *pmedwe = medwe;
2119 if (pmedwo) *pmedwo = medwo;
2120 if (pmedhe) *pmedhe = medhe;
2121 if (pmedho) *pmedho = medho;
2127 for (i = 0; i < n; i++) {
2129 if (bw == 0 || bh == 0) {
void gplotDestroy(GPLOT **pgplot)
gplotDestroy()
BOXA * boxaReconcileEvenOddHeight(BOXA *boxas, l_int32 sides, l_int32 delh, l_int32 op, l_float32 factor, l_int32 start)
boxaReconcileEvenOddHeight()
BOXA * boxaModifyWithBoxa(BOXA *boxas, BOXA *boxam, l_int32 subflag, l_int32 maxdiff, l_int32 extrapixels)
boxaModifyWithBoxa()
l_int32 lept_mkdir(const char *subdir)
lept_mkdir()
BOX * boxaGetValidBox(BOXA *boxa, l_int32 index, l_int32 accessflag)
boxaGetValidBox()
l_ok gplotAddPlot(GPLOT *gplot, NUMA *nax, NUMA *nay, l_int32 plotstyle, const char *plottitle)
gplotAddPlot()
l_ok boxaExtractAsNuma(BOXA *boxa, NUMA **pnal, NUMA **pnat, NUMA **pnar, NUMA **pnab, NUMA **pnaw, NUMA **pnah, l_int32 keepinvalid)
boxaExtractAsNuma()
l_ok boxaPlotSides(BOXA *boxa, const char *plotname, NUMA **pnal, NUMA **pnat, NUMA **pnar, NUMA **pnab, PIX **ppixd)
boxaPlotSides()
l_ok numaSimpleStats(NUMA *na, l_int32 first, l_int32 last, l_float32 *pmean, l_float32 *pvar, l_float32 *prvar)
numaSimpleStats()
l_ok boxaSizeConsistency1(BOXA *boxas, l_int32 type, l_float32 threshp, l_float32 threshm, l_float32 *pfvarp, l_float32 *pfvarm, l_int32 *psame)
boxaSizeConsistency1()
BOXA * boxaMergeEvenOdd(BOXA *boxae, BOXA *boxao, l_int32 fillflag)
boxaMergeEvenOdd()
l_ok numaAddNumber(NUMA *na, l_float32 val)
numaAddNumber()
l_ok boxaGetMedianVals(BOXA *boxa, l_int32 *px, l_int32 *py, l_int32 *pr, l_int32 *pb, l_int32 *pw, l_int32 *ph)
boxaGetMedianVals()
PIXA * pixaCreate(l_int32 n)
pixaCreate()
l_ok boxaGetSizes(BOXA *boxa, NUMA **pnaw, NUMA **pnah)
boxaGetSizes()
l_ok gplotMakeOutput(GPLOT *gplot)
gplotMakeOutput()
GPLOT * gplotCreate(const char *rootname, l_int32 outformat, const char *title, const char *xlabel, const char *ylabel)
gplotCreate()
BOXA * boxaReconcilePairWidth(BOXA *boxas, l_int32 delw, l_int32 op, l_float32 factor, NUMA *na)
boxaReconcilePairWidth()
BOXA * boxaFillSequence(BOXA *boxas, l_int32 useflag, l_int32 debug)
boxaFillSequence()
l_ok boxGetSideLocations(BOX *box, l_int32 *pl, l_int32 *pr, l_int32 *pt, l_int32 *pb)
boxGetSideLocations()
l_ok numaGetMedian(NUMA *na, l_float32 *pval)
numaGetMedian()
l_ok boxaSplitEvenOdd(BOXA *boxa, l_int32 fillflag, BOXA **pboxae, BOXA **pboxao)
boxaSplitEvenOdd()
BOXA * boxaSmoothSequenceLS(BOXA *boxas, l_float32 factor, l_int32 subflag, l_int32 maxdiff, l_int32 extrapixels, l_int32 debug)
boxaSmoothSequenceLS()
l_ok boxaReplaceBox(BOXA *boxa, l_int32 index, BOX *box)
boxaReplaceBox()
BOXA * boxaCopy(BOXA *boxa, l_int32 copyflag)
boxaCopy()
NUMA * numaCreate(l_int32 n)
numaCreate()
void boxaDestroy(BOXA **pboxa)
boxaDestroy()
BOXA * boxaAdjustHeightToTarget(BOXA *boxad, BOXA *boxas, l_int32 sides, l_int32 target, l_int32 thresh)
boxaAdjustHeightToTarget()
NUMA * numaWindowedMedian(NUMA *nas, l_int32 halfwin)
numaWindowedMedian()
BOXA * boxaSmoothSequenceMedian(BOXA *boxas, l_int32 halfwin, l_int32 subflag, l_int32 maxdiff, l_int32 extrapixels, l_int32 debug)
boxaSmoothSequenceMedian()
l_ok ptaGetLinearLSF(PTA *pta, l_float32 *pa, l_float32 *pb, NUMA **pnafit)
ptaGetLinearLSF()
PIX * pixaDisplayTiledInColumns(PIXA *pixas, l_int32 nx, l_float32 scalefactor, l_int32 spacing, l_int32 border)
pixaDisplayTiledInColumns()
BOXA * boxaConstrainSize(BOXA *boxas, l_int32 width, l_int32 widthflag, l_int32 height, l_int32 heightflag)
boxaConstrainSize()
l_ok boxaExtractAsPta(BOXA *boxa, PTA **pptal, PTA **pptat, PTA **pptar, PTA **pptab, PTA **pptaw, PTA **pptah, l_int32 keepinvalid)
boxaExtractAsPta()
l_ok boxaPlotSizes(BOXA *boxa, const char *plotname, NUMA **pnaw, NUMA **pnah, PIX **ppixd)
boxaPlotSizes()
l_int32 stringCat(char *dest, size_t size, const char *src)
stringCat()
l_ok numaGetIValue(NUMA *na, l_int32 index, l_int32 *pival)
numaGetIValue()
l_ok pixaAddPix(PIXA *pixa, PIX *pix, l_int32 copyflag)
pixaAddPix()
l_ok numaGetMeanDevFromMedian(NUMA *na, l_float32 med, l_float32 *pdev)
numaGetMeanDevFromMedian()
l_ok boxaGetBoxGeometry(BOXA *boxa, l_int32 index, l_int32 *px, l_int32 *py, l_int32 *pw, l_int32 *ph)
boxaGetBoxGeometry()
static l_int32 boxaFillAll(BOXA *boxa)
boxaFillAll()
l_ok boxaAddBox(BOXA *boxa, BOX *box, l_int32 copyflag)
boxaAddBox()
l_ok boxaSizeVariation(BOXA *boxa, l_int32 type, l_float32 *pdel_evenodd, l_float32 *prms_even, l_float32 *prms_odd, l_float32 *prms_all)
boxaSizeVariation()
l_ok boxaWriteDebug(const char *filename, BOXA *boxa)
boxaWriteDebug()
BOX * boxAdjustSides(BOX *boxd, BOX *boxs, l_int32 delleft, l_int32 delright, l_int32 deltop, l_int32 delbot)
boxAdjustSides()
l_ok boxSetSide(BOX *boxs, l_int32 side, l_int32 val, l_int32 thresh)
boxSetSide()
void pixDestroy(PIX **ppix)
pixDestroy()
BOXA * boxaLinearFit(BOXA *boxas, l_float32 factor, l_int32 debug)
boxaLinearFit()
BOX * boxaGetBox(BOXA *boxa, l_int32 index, l_int32 accessflag)
boxaGetBox()
void numaDestroy(NUMA **pna)
numaDestroy()
static l_int32 boxaTestEvenOddHeight(BOXA *boxa1, BOXA *boxa2, l_int32 start, l_float32 *pdel1, l_float32 *pdel2)
boxaTestEvenOddHeight()
PIX * pixRead(const char *filename)
pixRead()
l_int32 boxaGetValidCount(BOXA *boxa)
boxaGetValidCount()
l_ok boxaMedianDimensions(BOXA *boxas, l_int32 *pmedw, l_int32 *pmedh, l_int32 *pmedwe, l_int32 *pmedwo, l_int32 *pmedhe, l_int32 *pmedho, NUMA **pnadelw, NUMA **pnadelh)
boxaMedianDimensions()
l_ok ptaWriteDebug(const char *filename, PTA *pta, l_int32 type)
ptaWriteDebug()
l_ok boxaSizeConsistency2(BOXA *boxas, l_float32 *pfdevw, l_float32 *pfdevh, l_int32 debug)
boxaSizeConsistency2()
BOX * boxCopy(BOX *box)
boxCopy()
void ptaDestroy(PTA **ppta)
ptaDestroy()
l_ok numaGetMedianDevFromMedian(NUMA *na, l_float32 *pmed, l_float32 *pdev)
numaGetMedianDevFromMedian()
BOXA * boxaCreate(l_int32 n)
boxaCreate()
BOXA * boxaWindowedMedian(BOXA *boxas, l_int32 halfwin, l_int32 debug)
boxaWindowedMedian()
void boxDestroy(BOX **pbox)
boxDestroy()
l_int32 boxaGetCount(BOXA *boxa)
boxaGetCount()
l_ok boxSetGeometry(BOX *box, l_int32 x, l_int32 y, l_int32 w, l_int32 h)
boxSetGeometry()
l_ok boxIsValid(BOX *box, l_int32 *pvalid)
boxIsValid()
l_ok boxGetGeometry(BOX *box, l_int32 *px, l_int32 *py, l_int32 *pw, l_int32 *ph)
boxGetGeometry()
void pixaDestroy(PIXA **ppixa)
pixaDestroy()
BOX * boxCreate(l_int32 x, l_int32 y, l_int32 w, l_int32 h)
boxCreate()
BOXA * boxaReconcileSizeByMedian(BOXA *boxas, l_int32 type, l_float32 fract, l_float32 factor, NUMA **pnadelw, NUMA **pnadelh, l_float32 *pratiowh)
boxaReconcileSizeByMedian()