51 #include <config_auto.h> 55 #include "allheaders.h" 58 static void adjustSidePlotName(
char *buf,
size_t size,
const char *preface,
114 BOXA *boxae, *boxao, *boxamede, *boxamedo, *boxame, *boxamo, *boxad;
117 PROCNAME(
"boxaSmoothSequenceMedian");
120 return (
BOXA *)ERROR_PTR(
"boxas not defined", procName, NULL);
122 L_WARNING(
"halfwin must be > 0; returning copy\n", procName);
126 L_WARNING(
"maxdiff must be >= 0; returning copy\n", procName);
132 L_WARNING(
"invalid subflag; returning copy\n", procName);
136 L_WARNING(
"need at least 6 boxes; returning copy\n", procName);
164 pixWrite(
"/tmp/lept/smooth/plotsides1.png", pix1, IFF_PNG);
167 pixWrite(
"/tmp/lept/smooth/plotsides2.png", pix1, IFF_PNG);
170 pixWrite(
"/tmp/lept/smooth/plotsizes1.png", pix1, IFF_PNG);
173 pixWrite(
"/tmp/lept/smooth/plotsizes2.png", pix1, IFF_PNG);
210 l_int32 n, i, left, top, right, bot;
213 NUMA *nal, *nat, *nar, *nab, *naml, *namt, *namr, *namb;
216 PROCNAME(
"boxaWindowedMedian");
219 return (
BOXA *)ERROR_PTR(
"boxas not defined", procName, NULL);
221 L_WARNING(
"less than 3 boxes; returning a copy\n", procName);
225 L_WARNING(
"halfwin must be > 0; returning copy\n", procName);
231 return (
BOXA *)ERROR_PTR(
"filled boxa not made", procName, NULL);
242 for (i = 0; i < n; i++) {
247 box =
boxCreate(left, top, right - left + 1, bot - top + 1);
254 pixWrite(
"/tmp/lept/windowed/plotsides1.png", pix1, IFF_PNG);
257 pixWrite(
"/tmp/lept/windowed/plotsides2.png", pix1, IFF_PNG);
260 pixWrite(
"/tmp/lept/windowed/plotsizes1.png", pix1, IFF_PNG);
263 pixWrite(
"/tmp/lept/windowed/plotsizes2.png", pix1, IFF_PNG);
357 l_int32 n, i, ls, ts, rs, bs, ws, hs, lm, tm, rm, bm, wm, hm, ld, td, rd, bd;
358 BOX *boxs, *boxm, *boxd, *boxempty;
361 PROCNAME(
"boxaModifyWithBoxa");
364 return (
BOXA *)ERROR_PTR(
"boxas not defined", procName, NULL);
366 L_WARNING(
"boxam not defined; returning copy", procName);
372 L_WARNING(
"invalid subflag; returning copy", procName);
377 L_WARNING(
"boxas and boxam sizes differ; returning copy", procName);
383 for (i = 0; i < n; i++) {
386 if (!boxs || !boxm) {
406 ld = (L_ABS(lm - ls) <= maxdiff) ? ls : lm - extrapixels;
407 td = (L_ABS(tm - ts) <= maxdiff) ? ts : tm - extrapixels;
408 rd = (L_ABS(rm - rs) <= maxdiff) ? rs : rm + extrapixels;
409 bd = (L_ABS(bm - bs) <= maxdiff) ? bs : bm + extrapixels;
411 ld = (L_ABS(wm - ws) <= maxdiff) ? ls : lm - extrapixels;
412 td = (L_ABS(hm - hs) <= maxdiff) ? ts : tm - extrapixels;
413 rd = (L_ABS(wm - ws) <= maxdiff) ? rs : rm + extrapixels;
414 bd = (L_ABS(hm - hs) <= maxdiff) ? bs : bm + extrapixels;
416 ld = L_MAX(lm, L_MIN(ls, lm + maxdiff));
417 td = L_MAX(tm, L_MIN(ts, tm + maxdiff));
418 rd = L_MIN(rm, L_MAX(rs, rm - maxdiff));
419 bd = L_MIN(bm, L_MAX(bs, bm - maxdiff));
421 ld = L_MIN(lm, L_MAX(ls, lm - maxdiff));
422 td = L_MIN(tm, L_MAX(ts, tm - maxdiff));
423 rd = L_MAX(rm, L_MIN(rs, rm + maxdiff));
424 bd = L_MAX(bm, L_MIN(bs, bm + maxdiff));
426 boxd =
boxCreate(ld, td, rd - ld + 1, bd - td + 1);
473 l_int32 i, ne, no, nmin, xe, we, xo, wo, inde, indo, x, w;
475 BOXA *boxae, *boxao, *boxad;
477 PROCNAME(
"boxaReconcilePairWidth");
480 return (
BOXA *)ERROR_PTR(
"boxas not defined", procName, NULL);
482 L_WARNING(
"invalid factor; setting to 1.0\n", procName);
492 nmin = L_MIN(ne, no);
493 for (i = 0; i < nmin; i++) {
501 if (inde == 0 && indo == 0)
continue;
507 if (we == 0 || wo == 0) {
511 }
else if (L_ABS(we - wo) > delw) {
513 if (we > wo && inde == 1) {
518 }
else if (we < wo && indo == 1) {
524 if (we < wo && inde == 1) {
527 x = L_MAX(0, xe + (we - w));
530 }
else if (we > wo && indo == 1) {
598 l_int32 i, n, bw1, bh1, bw2, bh2, npairs;
599 l_float32 ave, fdiff, sumdiff, med, fvarp, fvarm;
602 PROCNAME(
"boxaSizeConsistency");
604 if (pfvarp) *pfvarp = 0.0;
605 if (pfvarm) *pfvarm = 0.0;
607 return ERROR_INT(
"&same not defined", procName, 1);
610 return ERROR_INT(
"boxas not defined", procName, 1);
612 return ERROR_INT(
"need a least 6 valid boxes", procName, 1);
614 return ERROR_INT(
"invalid type", procName, 1);
615 if (threshp < 0.0 || threshp >= 0.5)
616 return ERROR_INT(
"invalid threshp", procName, 1);
617 if (threshm < 0.0 || threshm >= 0.5)
618 return ERROR_INT(
"invalid threshm", procName, 1);
619 if (threshp == 0.0) threshp = 0.02;
620 if (threshm == 0.0) threshm = 0.015;
625 for (i = 0, npairs = 0, sumdiff = 0; i < n - 1; i += 2) {
628 if (bw1 == 0 || bh1 == 0 || bw2 == 0 || bh2 == 0)
632 ave = (bw1 + bw2) / 2.0;
633 fdiff = L_ABS(bw1 - bw2) / ave;
637 ave = (bh1 + bh2) / 2.0;
638 fdiff = L_ABS(bh1 - bh2) / ave;
644 fvarp = sumdiff / npairs;
645 if (pfvarp) *pfvarp = fvarp;
650 L_WARNING(
"median value is 0\n", procName);
654 if (pfvarm) *pfvarm = fvarm;
659 if (fvarp < threshp && fvarm < threshm)
661 else if (fvarp < threshp && fvarm > threshm)
699 BOXA *boxa1e, *boxa1o, *boxa2e, *boxa2o, *boxa3e, *boxa3o, *boxad;
702 PROCNAME(
"boxaReconcileAllByMedian");
705 return (
BOXA *)ERROR_PTR(
"boxas not defined", procName, NULL);
707 L_WARNING(
"invalid select1; returning copy\n", procName);
711 L_WARNING(
"invalid select2; returning copy\n", procName);
715 L_WARNING(
"thresh must be >= 0; returning copy\n", procName);
719 L_WARNING(
"need at least 3 valid boxes; returning copy\n", procName);
758 pixWrite(
"/tmp/lept/boxa/recon_sides.png", pix1, IFF_PNG);
812 l_int32 left, right, top, bot, medleft, medright, medtop, medbot;
817 PROCNAME(
"boxaReconcileSidesByMedian");
820 return (
BOXA *)ERROR_PTR(
"boxas not defined", procName, NULL);
824 L_WARNING(
"invalid select; returning copy\n", procName);
828 L_WARNING(
"thresh must be >= 0; returning copy\n", procName);
832 L_WARNING(
"need at least 3 valid boxes; returning copy\n", procName);
855 if (ndb == 0 || ndb == 5) {
856 adjustSidePlotName(buf,
sizeof(buf),
"init", select);
866 for (i = 0; i < n; i++) {
869 diff = medleft - left;
870 if (L_ABS(diff) >= thresh)
876 for (i = 0; i < n; i++) {
879 diff = medright - right;
880 if (L_ABS(diff) >= thresh)
886 for (i = 0; i < n; i++) {
890 if (L_ABS(diff) >= thresh)
896 for (i = 0; i < n; i++) {
900 if (L_ABS(diff) >= thresh)
907 adjustSidePlotName(buf,
sizeof(buf),
"final", select);
916 adjustSidePlotName(
char *buf,
991 l_int32 i, n, ne, no, outfound, isvalid, ind, del, maxdel;
992 l_int32 medw, medh, bw, bh, left, right, top, bot;
993 l_int32 medleft, medlefte, medlefto, medright, medrighte, medrighto;
994 l_int32 medtop, medtope, medtopo, medbot, medbote, medboto;
997 BOXA *boxa1, *boxae, *boxao, *boxad;
998 NUMA *naind, *nadelw, *nadelh;
1000 PROCNAME(
"boxaReconcileSizeByMedian");
1002 if (pnadelw) *pnadelw = NULL;
1003 if (pnadelh) *pnadelh = NULL;
1004 if (pratiowh) *pratiowh = 0.0;
1006 return (
BOXA *)ERROR_PTR(
"boxas not defined", procName, NULL);
1009 L_WARNING(
"invalid type; returning copy\n", procName);
1012 if (dfract <= 0.0 || dfract >= 0.5) {
1013 L_WARNING(
"invalid dimensional fract; returning copy\n", procName);
1016 if (sfract <= 0.0 || sfract >= 0.5) {
1017 L_WARNING(
"invalid side fract; returning copy\n", procName);
1020 if (factor < 0.8 || factor > 1.25)
1021 L_WARNING(
"factor %5.3f is typ. closer to 1.0\n", procName, factor);
1023 L_WARNING(
"need at least 6 valid boxes; returning copy\n", procName);
1031 factor, pnadelw, NULL, pratiowh);
1033 factor, NULL, pnadelh, NULL);
1047 *pratiowh = (l_float32)medw / (l_float32)medh;
1048 L_INFO(
"median ratio w/h = %5.3f\n", procName, *pratiowh);
1056 for (i = 0; i < n; i++) {
1062 brat = (l_float32)bw / (l_float32)medw;
1063 if (brat < 1.0 - dfract || brat > 1.0 + dfract) {
1079 L_INFO(
"no width outlier boxes found\n", procName);
1090 L_INFO(
"fixing width of outlier boxes\n", procName);
1091 medlefte = medrighte = medlefto = medrighto = 0;
1099 medlefte = medlefto;
1100 medrighte = medrighto;
1101 }
else if (no == 0) {
1102 medlefto = medlefte;
1103 medrighto = medrighte;
1113 maxdel = (l_int32)(sfract * medw + 0.5);
1114 for (i = 0; i < n; i++) {
1118 medleft = (i % 2 == 0) ? medlefte : medlefto;
1119 medright = (i % 2 == 0) ? medrighte : medrighto;
1120 if (ind == 1 && isvalid) {
1122 if (L_ABS(left - medleft) > maxdel) left = medleft;
1123 if (L_ABS(right - medright) > maxdel) right = medright;
1124 del = (l_int32)(factor * medw - (right - left)) / 2;
1134 *pratiowh = (l_float32)medw / (l_float32)medh;
1135 L_INFO(
"median ratio w/h = %5.3f\n", procName, *pratiowh);
1143 for (i = 0; i < n; i++) {
1149 brat = (l_float32)bh / (l_float32)medh;
1150 if (brat < 1.0 - dfract || brat > 1.0 + dfract) {
1166 L_INFO(
"no height outlier boxes found\n", procName);
1177 L_INFO(
"fixing height of outlier boxes\n", procName);
1178 medlefte = medtope = medbote = medtopo = medboto = 0;
1188 }
else if (no == 0) {
1201 maxdel = (l_int32)(sfract * medh + 0.5);
1202 for (i = 0; i < n; i++) {
1206 medtop = (i % 2 == 0) ? medtope : medtopo;
1207 medbot = (i % 2 == 0) ? medbote : medboto;
1208 if (ind == 1 && isvalid) {
1210 if (L_ABS(top - medtop) > maxdel) top = medtop;
1211 if (L_ABS(bot - medbot) > maxdel) bot = medbot;
1212 del = (l_int32)(factor * medh - (bot - top)) / 2;
1252 const char *plotname,
1259 char buf[128], titlebuf[128];
1261 static l_int32 plotid = 0;
1262 l_int32 n, i, w, h, left, top, right, bot;
1263 l_int32 debugprint = FALSE;
1267 NUMA *nal, *nat, *nar, *nab;
1269 PROCNAME(
"boxaPlotSides");
1271 if (pnal) *pnal = NULL;
1272 if (pnat) *pnat = NULL;
1273 if (pnar) *pnar = NULL;
1274 if (pnab) *pnab = NULL;
1275 if (ppixd) *ppixd = NULL;
1277 return ERROR_INT(
"boxa not defined", procName, 1);
1279 return ERROR_INT(
"less than 2 boxes", procName, 1);
1281 return ERROR_INT(
"&pixd not defined", procName, 1);
1291 for (i = 0; i < n; i++) {
1293 right = left + w - 1;
1304 snprintf(buf,
sizeof(buf),
"/tmp/lept/plots/sides.%s", plotname);
1305 snprintf(titlebuf,
sizeof(titlebuf),
"%s: Box sides vs. box index",
1308 snprintf(buf,
sizeof(buf),
"/tmp/lept/plots/sides.%d", plotid++);
1309 snprintf(titlebuf,
sizeof(titlebuf),
"Box sides vs. box index");
1312 "box index",
"side location");
1313 gplotAddPlot(gplot, NULL, nal, GPLOT_LINES,
"left side");
1314 gplotAddPlot(gplot, NULL, nat, GPLOT_LINES,
"top side");
1315 gplotAddPlot(gplot, NULL, nar, GPLOT_LINES,
"right side");
1316 gplotAddPlot(gplot, NULL, nab, GPLOT_LINES,
"bottom side");
1324 lept_stderr(
"%s left: med = %7.3f, meandev = %7.3f\n",
1325 dataname, med, dev);
1328 lept_stderr(
"%s top: med = %7.3f, meandev = %7.3f\n",
1329 dataname, med, dev);
1332 lept_stderr(
"%s right: med = %7.3f, meandev = %7.3f\n",
1333 dataname, med, dev);
1336 lept_stderr(
"%s bot: med = %7.3f, meandev = %7.3f\n",
1337 dataname, med, dev);
1338 LEPT_FREE(dataname);
1385 const char *plotname,
1390 char buf[128], titlebuf[128];
1391 static l_int32 plotid = 0;
1397 PROCNAME(
"boxaPlotSizes");
1399 if (pnaw) *pnaw = NULL;
1400 if (pnah) *pnah = NULL;
1401 if (ppixd) *ppixd = NULL;
1403 return ERROR_INT(
"boxa not defined", procName, 1);
1405 return ERROR_INT(
"less than 2 boxes", procName, 1);
1407 return ERROR_INT(
"&pixd not defined", procName, 1);
1414 for (i = 0; i < n; i++) {
1423 snprintf(buf,
sizeof(buf),
"/tmp/lept/plots/size.%s", plotname);
1424 snprintf(titlebuf,
sizeof(titlebuf),
"%s: Box size vs. box index",
1427 snprintf(buf,
sizeof(buf),
"/tmp/lept/plots/size.%d", plotid++);
1428 snprintf(titlebuf,
sizeof(titlebuf),
"Box size vs. box index");
1431 "box index",
"box dimension");
1473 BOXA *boxae, *boxao, *boxad;
1475 PROCNAME(
"boxaFillSequence");
1478 return (
BOXA *)ERROR_PTR(
"boxas not defined", procName, NULL);
1480 return (
BOXA *)ERROR_PTR(
"invalid useflag", procName, NULL);
1487 L_INFO(
"%d valid boxes, %d invalid boxes\n", procName, nv, n - nv);
1489 L_WARNING(
"n < 3; some invalid\n", procName);
1507 L_WARNING(
"there are still %d invalid boxes\n", procName, n - nv);
1529 l_int32 n, nv, i, j, spandown, spanup;
1533 PROCNAME(
"boxaFillAll");
1536 return ERROR_INT(
"boxa not defined", procName, 1);
1539 if (n == nv)
return 0;
1541 L_WARNING(
"no valid boxes out of %d boxes\n", procName, n);
1546 if ((indic = (l_int32 *)LEPT_CALLOC(n,
sizeof(l_int32))) == NULL)
1547 return ERROR_INT(
"indic not made", procName, 1);
1548 for (i = 0; i < n; i++) {
1556 for (i = 0; i < n; i++) {
1559 spandown = spanup = 10000000;
1560 for (j = i - 1; j >= 0; j--) {
1561 if (indic[j] == 1) {
1566 for (j = i + 1; j < n; j++) {
1567 if (indic[j] == 1) {
1572 if (spandown < spanup)
1613 l_float32 *pdel_evenodd,
1614 l_float32 *prms_even,
1615 l_float32 *prms_odd,
1616 l_float32 *prms_all)
1618 l_int32 n, ne, no, nmin, vale, valo, i;
1620 BOXA *boxae, *boxao;
1621 NUMA *nae, *nao, *na_all;
1623 PROCNAME(
"boxaSizeVariation");
1625 if (pdel_evenodd) *pdel_evenodd = 0.0;
1626 if (prms_even) *prms_even = 0.0;
1627 if (prms_odd) *prms_odd = 0.0;
1628 if (prms_all) *prms_all = 0.0;
1630 return ERROR_INT(
"boxa not defined", procName, 1);
1632 return ERROR_INT(
"invalid type", procName, 1);
1633 if (!pdel_evenodd && !prms_even && !prms_odd && !prms_all)
1634 return ERROR_INT(
"nothing to do", procName, 1);
1637 return ERROR_INT(
"too few boxes", procName, 1);
1642 nmin = L_MIN(ne, no);
1646 return ERROR_INT(
"either no even or no odd boxes", procName, 1);
1661 for (i = 0; i < nmin; i++) {
1664 sum += L_ABS(vale - valo);
1666 *pdel_evenodd = sum / nmin;
1724 l_int32 i, n, bw, bh, medw, medh, medwe, medwo, medhe, medho;
1725 BOXA *boxae, *boxao;
1726 NUMA *nadelw, *nadelh;
1728 PROCNAME(
"boxaMedianDimensions");
1730 if (pmedw) *pmedw = 0;
1731 if (pmedh) *pmedh = 0;
1732 if (pmedwe) *pmedwe= 0;
1733 if (pmedwo) *pmedwo= 0;
1734 if (pmedhe) *pmedhe= 0;
1735 if (pmedho) *pmedho= 0;
1736 if (pnadelw) *pnadelw = NULL;
1737 if (pnadelh) *pnadelh = NULL;
1739 return ERROR_INT(
"boxas not defined", procName, 1);
1741 return ERROR_INT(
"need at least 6 valid boxes", procName, 1);
1748 return ERROR_INT(
"don't have 3+ valid boxes of each type", procName, 1);
1755 if (pmedw) *pmedw = medw;
1756 if (pmedh) *pmedh = medh;
1757 if (pmedwe) *pmedwe = medwe;
1758 if (pmedwo) *pmedwo = medwo;
1759 if (pmedhe) *pmedhe = medhe;
1760 if (pmedho) *pmedho = medho;
1766 for (i = 0; i < n; i++) {
1768 if (bw == 0 || bh == 0) {
void gplotDestroy(GPLOT **pgplot)
gplotDestroy()
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 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()
BOXA * boxaReconcileSidesByMedian(BOXA *boxas, l_int32 select, l_int32 thresh, l_int32 extra, PIXA *pixadb)
boxaReconcileSidesByMedian()
l_ok numaSimpleStats(NUMA *na, l_int32 first, l_int32 last, l_float32 *pmean, l_float32 *pvar, l_float32 *prvar)
numaSimpleStats()
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()
l_ok boxaGetSizes(BOXA *boxa, NUMA **pnaw, NUMA **pnah)
boxaGetSizes()
BOXA * boxaReconcileAllByMedian(BOXA *boxas, l_int32 select1, l_int32 select2, l_int32 thresh, l_int32 extra, PIXA *pixadb)
boxaReconcileAllByMedian()
GPLOT * gplotCreate(const char *rootname, l_int32 outformat, const char *title, const char *xlabel, const char *ylabel)
gplotCreate()
char * stringNew(const char *src)
stringNew()
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()
void lept_stderr(const char *fmt,...)
lept_stderr()
l_ok boxaSizeConsistency(BOXA *boxas, l_int32 type, l_float32 threshp, l_float32 threshm, l_float32 *pfvarp, l_float32 *pfvarm, l_int32 *psame)
boxaSizeConsistency()
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()
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()
PIX * pixaDisplayTiledInColumns(PIXA *pixas, l_int32 nx, l_float32 scalefactor, l_int32 spacing, l_int32 border)
pixaDisplayTiledInColumns()
BOXA * boxaReconcileSizeByMedian(BOXA *boxas, l_int32 type, l_float32 dfract, l_float32 sfract, l_float32 factor, NUMA **pnadelw, NUMA **pnadelh, l_float32 *pratiowh)
boxaReconcileSizeByMedian()
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()
l_ok gplotAddPlot(GPLOT *gplot, NUMA *nax, NUMA *nay, l_int32 plotstyle, const char *plotlabel)
gplotAddPlot()
void pixDestroy(PIX **ppix)
pixDestroy()
BOX * boxaGetBox(BOXA *boxa, l_int32 index, l_int32 accessflag)
boxaGetBox()
void numaDestroy(NUMA **pna)
numaDestroy()
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()
PIX * gplotMakeOutputPix(GPLOT *gplot)
gplotMakeOutputPix()
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 stringCopy(char *dest, const char *src, l_int32 n)
stringCopy()
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()
BOX * boxCreate(l_int32 x, l_int32 y, l_int32 w, l_int32 h)
boxCreate()
l_int32 pixaGetCount(PIXA *pixa)
pixaGetCount()