63 #include <config_auto.h> 67 #include "allheaders.h" 73 PTA **pptal2,
PTA **pptar2);
76 l_int32 *pntop, l_int32 *pnbot,
77 l_int32 *pytop, l_int32 *pybot);
81 l_float32 *pc, l_float32 *pmederr);
88 #define DEBUG_TEXTLINE_CENTERS 0 89 #define DEBUG_SHORT_LINES 0 91 #define DEBUG_TEXTLINE_CENTERS 0 92 #define DEBUG_SHORT_LINES 0 96 static const l_float32 MinRatioLinesToHeight = 0.45;
97 static const l_int32 MinLinesForHoriz1 = 10;
98 static const l_int32 MinLinesForHoriz2 = 3;
99 static const l_float32 AllowedWidthFract = 0.05;
157 const char *debugfile)
159 l_int32 linecount, ntop, nbot, ytop, ybot, ret;
160 PIX *
pixs, *pix1, *pix2, *pix3;
164 PROCNAME(
"dewarpBuildPageModel");
167 return ERROR_INT(
"dew not defined", procName, 1);
169 dew->
debug = (debugfile) ? 1 : 0;
175 pixDisplayWithTitle(
pixs, 0, 0,
"pixs", 1);
176 pixWriteDebug(
"/tmp/lept/dewmod/0010.png",
pixs, IFF_PNG);
182 L_WARNING(
"textline centers not found; model not built\n", procName);
190 pixWriteDebug(
"/tmp/lept/dewmod/0020.png", pix3, IFF_PNG);
200 debugfile || DEBUG_SHORT_LINES);
206 pixWriteDebug(
"/tmp/lept/dewmod/0030.png", pix3, IFF_PNG);
218 L_WARNING(
"linecount %d < min req'd number of lines (%d) for model\n",
219 procName, linecount, dew->
minlines);
226 &ntop, &nbot, &ytop, &ybot) == FALSE) {
228 L_WARNING(
"invalid line coverage: ntop = %d, nbot = %d;" 229 " spanning [%d ... %d] in height %d\n", procName,
230 ntop, nbot, ytop, ybot, pixGetHeight(
pixs));
238 L_WARNING(
"vertical disparity not built\n", procName);
249 L_INFO(
"hsuccess = 1\n", procName);
255 pixWriteDebug(
"/tmp/lept/dewmod/0060.png", pix1, IFF_PNG);
256 pixDisplay(pix1, 1000, 0);
260 pixWriteDebug(
"/tmp/lept/dewmod/0070.png", pix1, IFF_PNG);
261 pixDisplay(pix1, 1000, 0);
265 "Dewarp Build Model", debugfile);
308 l_float32 c0, c1, c2, x, y, midy, val, medval, meddev, minval, maxval;
312 PIX *pix1, *pix2, *pixcirc, *pixdb;
313 PTA *pta, *ptad, *ptacirc;
314 PTAA *ptaa0, *ptaa1, *ptaa2, *ptaa3, *ptaa4, *ptaa5, *ptaat;
317 PROCNAME(
"dewarpFindVertDisparity");
320 return ERROR_INT(
"dew not defined", procName, 1);
323 return ERROR_INT(
"ptaa not defined", procName, 1);
325 if (dew->
debug) L_INFO(
"finding vertical disparity\n", procName);
334 nx = (rotflag) ? dew->
ny : dew->
nx;
335 ny = (rotflag) ? dew->
nx : dew->
ny;
341 for (i = 0; i <
nlines; i++) {
346 for (j = 0; j <
nx; j++) {
359 for (i = 0; i <
nlines; i++) {
373 pixWriteDebug(
"/tmp/lept/dewmod/0041.png", pix2, IFF_PNG);
387 L_INFO(
"\nPage %d\n", procName, dew->
pageno);
388 L_INFO(
"Pass 1: Curvature: medval = %f, meddev = %f\n",
389 procName, medval, meddev);
392 for (i = 0; i <
nlines; i++) {
394 if (L_ABS(val - medval) > 7.0 * meddev)
408 L_INFO(
"Pass 2: Min/max curvature = (%d, %d)\n", procName,
414 for (i = 0; i <
nlines; i++) {
417 ptaGetPt(pta, npts / 2, NULL, &midy);
445 pixWriteDebug(
"/tmp/lept/dewmod/0042.png", pix2, IFF_PNG);
446 pixDisplay(pix2, 0, 0);
459 for (i = 0; i <
nlines; i++) {
463 for (j = 0; j <
nx; j++) {
482 for (j = 0; j <
nx; j++) {
484 for (i = 0; i <
nlines; i++) {
504 for (j = 0; j <
nx; j++) {
508 for (i = 0; i <
ny; i++) {
519 "Dewarp Vert Disparity",
520 "/tmp/lept/dewarp/vert_disparity.pdf");
521 lept_stderr(
"pdf file: /tmp/lept/dewarp/vert_disparity.pdf\n");
526 for (i = 0; i <
ny; i++) {
527 for (j = 0; j <
nx; j++) {
571 l_float32 c0, c1, cl0, cl1, cl2, cr0, cr1, cr2;
572 l_float32 x, y, refl, refr;
573 l_float32 val, mederr;
579 PTA *pta, *ptat, *pta1, *pta2;
583 PROCNAME(
"dewarpFindHorizDisparity");
586 return ERROR_INT(
"dew not defined", procName, 1);
589 return ERROR_INT(
"ptaa not defined", procName, 1);
591 if (dew->
debug) L_INFO(
"finding horizontal disparity\n", procName);
594 h = pixGetHeight(dew->
pixs);
597 L_INFO(
"Horiz disparity not built\n", procName);
603 ptaWriteDebug(
"/tmp/lept/dewdebug/endpts_left1.pta", ptal1, 1);
604 ptaWriteDebug(
"/tmp/lept/dewdebug/endpts_right1.pta", ptar1, 1);
619 L_INFO(
"Not enough filtered end points\n", procName);
638 if (linear_edgefit) {
643 L_INFO(
"Left linear LSF median error = %5.2f\n", procName, mederr);
644 L_INFO(
"Left edge slope = %d\n", procName, dew->
leftslope);
646 for (i = 0; i <
ny; i++) {
656 L_INFO(
"Right linear LSF median error = %5.2f\n", procName, mederr);
657 L_INFO(
"Right edge slope = %d\n", procName, dew->
rightslope);
659 for (i = 0; i <
ny; i++) {
669 L_INFO(
"Left quad LSF median error = %5.2f\n", procName, mederr);
670 L_INFO(
"Left edge slope = %d\n", procName, dew->
leftslope);
671 L_INFO(
"Left edge curvature = %d\n", procName, dew->
leftcurv);
673 for (i = 0; i <
ny; i++) {
683 L_INFO(
"Right quad LSF median error = %5.2f\n", procName, mederr);
684 L_INFO(
"Right edge slope = %d\n", procName, dew->
rightslope);
685 L_INFO(
"Right edge curvature = %d\n", procName, dew->
rightcurv);
687 for (i = 0; i <
ny; i++) {
695 PTA *ptalft, *ptarft;
696 h = pixGetHeight(dew->
pixs);
699 if (linear_edgefit) {
700 for (i = 0; i <
h; i++) {
707 for (i = 0; i <
h; i++) {
717 pixDisplay(pix1, 600, 800);
718 pixWriteDebug(
"/tmp/lept/dewmod/0051.png", pix1, IFF_PNG);
726 pixDisplay(pix1, 800, 800);
727 pixWriteDebug(
"/tmp/lept/dewmod/0052.png", pix1, IFF_PNG);
729 "Dewarp Horiz Disparity",
730 "/tmp/lept/dewarp/horiz_disparity.pdf");
731 lept_stderr(
"pdf file: /tmp/lept/dewarp/horiz_disparity.pdf\n");
749 for (i = 0; i <
ny; i++) {
760 for (i = 0; i <
ny; i++) {
768 for (j = 0; j <
nx; j++) {
781 for (i = 0; i <
ny; i++) {
782 for (j = 0; j <
nx; j++) {
818 l_int32 i,
w,
h, bx, by, nsegs, csize1, csize2;
825 PROCNAME(
"dewarpGetTextlineCenters");
827 if (!
pixs || pixGetDepth(
pixs) != 1)
828 return (
PTAA *)ERROR_PTR(
"pixs undefined or not 1 bpp", procName, NULL);
831 if (debugflag) L_INFO(
"finding text line centers\n", procName);
840 csize1 = L_MAX(15,
w / 80);
841 csize2 = L_MAX(40,
w / 30);
842 snprintf(buf,
sizeof(buf),
"o1.3 + c%d.1 + o%d.1 + c%d.1",
843 csize1, csize1, csize2);
856 pixWriteDebug(
"/tmp/lept/dewmod/0011.tif", pix1, IFF_TIFF_G4);
857 pixDisplayWithTitle(pix1, 0, 600,
"pix1", 1);
858 pixWriteDebug(
"/tmp/lept/dewmod/0012.tif", pix2, IFF_TIFF_G4);
859 pixDisplayWithTitle(pix2, 0, 800,
"pix2", 1);
882 pixWriteDebug(
"/tmp/lept/dewmod/0013.tif", pix2, IFF_TIFF_G4);
883 pixDisplayWithTitle(pix2, 0, 1000,
"pix2", 1);
891 for (i = 0; i < nsegs; i++) {
901 pixWriteDebug(
"/tmp/lept/dewmod/0014.tif", pix2, IFF_PNG);
902 pixDisplayWithTitle(pix2, 0, 1200,
"pix3", 1);
926 l_int32
w,
h, i, j, wpl, sum, count;
927 l_uint32 *line, *data;
930 PROCNAME(
"pixGetMeanVerticals");
932 if (!
pixs || pixGetDepth(
pixs) != 1)
933 return (
PTA *)ERROR_PTR(
"pixs undefined or not 1 bpp", procName, NULL);
938 wpl = pixGetWpl(
pixs);
939 for (j = 0; j <
w; j++) {
942 for (i = 0; i <
h; i++) {
949 if (count == 0)
continue;
950 ptaAddPt(pta, x + j, y + (sum / count));
973 l_int32
w, n, i, index, maxlen, len;
974 l_float32 minx, maxx;
980 PROCNAME(
"dewarpRemoveShortLines");
982 if (!
pixs || pixGetDepth(
pixs) != 1)
983 return (
PTAA *)ERROR_PTR(
"pixs undefined or not 1 bpp", procName, NULL);
985 return (
PTAA *)ERROR_PTR(
"ptaas undefined", procName, NULL);
991 for (i = 0; i < n; i++) {
1002 if (maxlen < 0.5 *
w)
1003 L_WARNING(
"lines are relatively short\n", procName);
1006 for (i = 1; i < n; i++) {
1009 if (len < fract * maxlen)
break;
1017 pixDisplayWithTitle(pix2, 0, 200,
"pix4", 1);
1056 l_int32 i, n, npt, x, y;
1057 l_float32 miny, maxy, ratio;
1058 PTA *pta, *ptal1, *ptar1;
1060 PROCNAME(
"dewarpGetLineEndPoints");
1062 if (!pptal || !pptar)
1063 return ERROR_INT(
"&ptal and &ptar not both defined", procName, 1);
1064 *pptal = *pptar = NULL;
1066 return ERROR_INT(
"ptaa undefined", procName, 1);
1070 if (n < MinLinesForHoriz1) {
1071 L_INFO(
"only %d lines; too few\n", procName, n);
1078 for (i = 0; i < n; i++) {
1090 ratio = (maxy - miny) / (l_float32)
h;
1091 if (ratio < MinRatioLinesToHeight) {
1092 L_INFO(
"ratio lines to height, %f, too small\n", procName, ratio);
1137 l_float32 ymin, ymax, xvall, xvalr, yvall, yvalr;
1138 PTA *ptal1, *ptar1, *ptal2, *ptar2;
1140 PROCNAME(
"dewarpFilterLineEndPoints");
1142 return ERROR_INT(
"ptal or ptar not defined", procName, 1);
1143 *pptalf = *pptarf = NULL;
1146 w = pixGetWidth(dew->
pixs);
1152 for (i = 0; i < n; i++) {
1155 if (yvall < ymin + 0.20 * (
w - ymin) &&
1156 yvalr > 0.80 * ymax) {
1162 ptaWriteDebug(
"/tmp/lept/dewdebug/endpts_left2.pta", ptal1, 1);
1163 ptaWriteDebug(
"/tmp/lept/dewdebug/endpts_right2.pta", ptar1, 1);
1167 if (n < MinLinesForHoriz1 - 2) {
1170 L_INFO(
"First filter: only %d endpoints; needed 8\n", procName, n);
1179 if (!ptal2 || !ptar2) {
1182 L_INFO(
"Second filter: too few endpoints left after outliers removed\n",
1187 ptaWriteDebug(
"/tmp/lept/dewdebug/endpts_left3.pta", ptal2, 1);
1188 ptaWriteDebug(
"/tmp/lept/dewdebug/endpts_right3.pta", ptar2, 1);
1219 l_int32 i, n, nu, nd;
1220 l_float32 rval, xval, yval, delta;
1221 PTA *ptau1, *ptau2, *ptad1, *ptad2;
1223 PROCNAME(
"dewarpRemoveBadEndPoints");
1226 return (
PTA *)ERROR_PTR(
"ptas not defined", procName, NULL);
1228 delta = AllowedWidthFract *
w;
1236 for (i = 0; i < nu; i++) {
1238 if (L_ABS(rval - yval) <= delta)
1244 L_INFO(
"Second filter: upper set is too small after outliers removed\n",
1254 for (i = 0; i < nd; i++) {
1256 if (L_ABS(rval - yval) <= delta)
1263 L_INFO(
"Second filter: lower set is too small after outliers removed\n",
1301 l_int32 i, n, iy, both_halves, ntop, nbot, ytop, ybot, nmin;
1302 l_float32 y, fraction;
1305 PROCNAME(
"dewarpIsLineCoverageValid");
1308 return ERROR_INT(
"ptaa not defined", procName, 0);
1310 return ERROR_INT(
"ptaa empty", procName, 0);
1312 return ERROR_INT(
"invalid h", procName, 0);
1313 if (!pntop || !pnbot)
1314 return ERROR_INT(
"&ntop and &nbot not defined", procName, 0);
1315 if (!pytop || !pybot)
1316 return ERROR_INT(
"&ytop and &ybot not defined", procName, 0);
1319 for (i = 0; i < n; i++) {
1324 for (i = 0, ntop = 0; i < n; i++) {
1326 if (i == 0) ytop = iy;
1327 if (i == n - 1) ybot = iy;
1338 both_halves = (ntop >= nmin) && (nbot >= nmin);
1339 fraction = (l_float32)(ybot - ytop) / (l_float32)
h;
1340 if (both_halves && fraction > 0.50)
1370 l_float32 x, y, xp, c0, c1;
1373 PROCNAME(
"dewarpLinearLSF");
1375 if (pmederr) *pmederr = 0.0;
1377 return ERROR_INT(
"not all ptrs are defined", procName, 1);
1380 return ERROR_INT(
"ptad not defined", procName, 1);
1391 for (i = 0; i < n; i++) {
1429 l_float32 x, y, xp, c0, c1, c2;
1432 PROCNAME(
"dewarpQuadraticLSF");
1434 if (pmederr) *pmederr = 0.0;
1435 if (!pa || !pb || !pc)
1436 return ERROR_INT(
"not all ptrs are defined", procName, 1);
1437 *pa = *pb = *pc = 0.0;
1439 return ERROR_INT(
"ptad not defined", procName, 1);
1451 for (i = 0; i < n; i++) {
1507 l_float32 fractthresh,
1510 l_int32 i, j, x, n1, n2, nb, ne, count,
w,
h, ival, prev;
1511 l_int32 istart, iend, first, last, x0, x1,
nx,
ny;
1512 l_float32 fract, delta, sum, aveval, fval, del, denom;
1513 l_float32 ca, cb, cc, cd, ce, y;
1515 BOXA *boxa1, *boxa2;
1517 NUMA *na1, *na2, *na3, *na4, *nasum;
1522 PROCNAME(
"dewarpFindHorizSlopeDisparity");
1525 return ERROR_INT(
"dew not defined", procName, 1);
1527 return ERROR_INT(
"invalid vert or horiz disparity model", procName, 1);
1528 if (!pixb || pixGetDepth(pixb) != 1)
1529 return ERROR_INT(
"pixb not defined or not 1 bpp", procName, 1);
1531 if (dew->
debug) L_INFO(
"finding slope horizontal disparity\n", procName);
1535 pixDisplay(pix1, 100, 100);
1547 for (x = 0; x + 50 <
w; x += 25) {
1555 gplotSimple1(na1, GPLOT_PNG,
"/tmp/lept/dew/0091", NULL);
1556 lept_mv(
"/tmp/lept/dew/0091.png",
"lept/dewmod", NULL, NULL);
1557 pixWriteDebug(
"/tmp/lept/dewmod/0090.png", pix1, IFF_PNG);
1568 for (i = 0; i < n1; i++) {
1582 for (i = n1 - 1; i >= 0; i--) {
1596 delta = (parity == 0) ? last - first : first - last;
1597 denom = L_MAX(1.0, (l_float32)(L_MIN(first, last)));
1598 fract = (l_float32)delta / denom;
1600 L_INFO(
"Slope-disparity: first = %d, last = %d, fract = %7.3f\n",
1601 procName, first, last, fract);
1602 gplotSimple1(na2, GPLOT_PNG,
"/tmp/lept/dew/0092", NULL);
1603 lept_mv(
"/tmp/lept/dew/0092.png",
"lept/dewmod", NULL, NULL);
1605 if (fract < fractthresh) {
1606 L_INFO(
"Small slope-disparity: first = %d, last = %d, fract = %7.3f\n",
1607 procName, first, last, fract);
1618 denom = L_MAX(1.0, (l_float32)(ne / 2));
1619 aveval = sum / denom;
1624 L_INFO(
"Average background density: %5.1f\n", procName, aveval);
1625 gplotSimple1(na2, GPLOT_PNG,
"/tmp/lept/dew/0093", NULL);
1626 lept_mv(
"/tmp/lept/dew/0093.png",
"lept/dewmod", NULL, NULL);
1637 "/tmp/lept/dew/0094", NULL);
1639 lept_mv(
"/tmp/lept/dew/0094.png",
"lept/dewmod", NULL, NULL);
1647 for (i = n2 - 1; i >= 0; i--) {
1649 if (fval < 1.0)
break;
1655 for (x = x0; x < x1; x++) {
1660 for (x = x1; x <
w; x++)
1663 for (i = 0; i < n2; i++) {
1665 if (fval < 1.0)
break;
1671 for (x = x1; x >= x0; x--) {
1676 for (x = x0; x >= 0; x--)
1684 del = (l_float32)
w / (l_float32)
nx;
1685 for (i = 0; i <
ny; i++) {
1686 for (j = 0; j <
nx; j++) {
1737 const char *debugfile)
1740 l_int32 i, j, bx, by, ret,
nlines;
1742 PIX *
pixs, *pixh, *pixv, *pix, *pix1, *pix2;
1743 PIXA *pixa1, *pixa2;
1745 PTAA *ptaa1, *ptaa2;
1747 PROCNAME(
"dewarpBuildLineModel");
1750 return ERROR_INT(
"dew not defined", procName, 1);
1752 L_WARNING(
"opensize should be >= 3; setting to 8\n", procName);
1756 dew->
debug = (debugfile) ? 1 : 0;
1765 pixDisplayWithTitle(
pixs, 0, 0,
"pixs", 1);
1766 pixWriteDebug(
"/tmp/lept/dewline/001.png",
pixs, IFF_PNG);
1780 snprintf(buf,
sizeof(buf),
"d1.3 + c%d.1 + o%d.1", opensize - 2, opensize);
1782 snprintf(buf,
sizeof(buf),
"d3.1 + c1.%d + o1.%d", opensize - 2, opensize);
1793 for (i = 0; i < 2; i++) {
1795 pixDisplay(pix, 0, 900);
1800 L_WARNING(
"only found %d lines\n", procName,
nlines);
1808 for (j = 0; j <
nlines; j++) {
1819 snprintf(buf,
sizeof(buf),
"/tmp/lept/dewline/%03d.png", 2 + 2 * i);
1820 pixWriteDebug(buf, pix2, IFF_PNG);
1831 snprintf(buf,
sizeof(buf),
"/tmp/lept/dewline/%03d.png", 3 + 2 * i);
1832 pixWriteDebug(buf, pix2, IFF_PNG);
1841 L_WARNING(
"%d lines: too few to build model\n", procName,
nlines);
1855 L_WARNING(
"horizontal disparity not built\n", procName);
1857 L_INFO(
"hsuccess = 1\n", procName);
1861 lept_mv(
"/tmp/lept/dewarp/vert_disparity.pdf",
1862 "lept/dewarp",
"horiz_disparity.pdf", NULL);
1868 L_WARNING(
"vertical disparity not built\n", procName);
1870 L_INFO(
"vsuccess = 1\n", procName);
1882 pixWriteDebug(
"/tmp/lept/dewline/006.png", pix1, IFF_PNG);
1883 pixDisplay(pix1, 1000, 0);
1888 pixWriteDebug(
"/tmp/lept/dewline/007.png", pix1, IFF_PNG);
1889 pixDisplay(pix1, 1000, 0);
1893 "Dewarp Build Line Model", debugfile);
1926 PROCNAME(
"dewarpaModelStatus");
1928 if (pvsuccess) *pvsuccess = 0;
1929 if (phsuccess) *phsuccess = 0;
1931 return ERROR_INT(
"dewa not defined", procName, 1);
1934 return ERROR_INT(
"dew not retrieved", procName, 1);
1935 if (pvsuccess) *pvsuccess = dew->
vsuccess;
1936 if (phsuccess) *phsuccess = dew->
hsuccess;
1957 l_int32 i, n,
w, yval, rval, gval, bval;
1960 PROCNAME(
"pixRenderMidYs");
1963 return ERROR_INT(
"pixs not defined", procName, 1);
1965 return ERROR_INT(
"namidys not defined", procName, 1);
1967 w = pixGetWidth(
pixs);
1970 for (i = 0; i < n; i++) {
1996 PTA *ptalt, *ptart, *ptacirc;
1998 PROCNAME(
"pixRenderHorizEndPoints");
2001 return ERROR_INT(
"pixs not defined", procName, 1);
2003 return ERROR_INT(
"ptal and ptar not both defined", procName, 1);
l_ok applyQuarticFit(l_float32 a, l_float32 b, l_float32 c, l_float32 d, l_float32 e, l_float32 x, l_float32 *py)
applyQuarticFit()
void gplotDestroy(GPLOT **pgplot)
gplotDestroy()
struct FPix * sampvdispar
l_ok ptaGetQuadraticLSF(PTA *pta, l_float32 *pa, l_float32 *pb, l_float32 *pc, NUMA **pnafit)
ptaGetQuadraticLSF()
struct FPix * samphdispar
l_int32 lept_mv(const char *srcfile, const char *newdir, const char *newtail, char **pnewpath)
lept_mv()
l_ok numaGetFValue(NUMA *na, l_int32 index, l_float32 *pval)
numaGetFValue()
static PTA * dewarpRemoveBadEndPoints(l_int32 w, PTA *ptas)
dewarpRemoveBadEndPoints()
l_ok ptaaGetPt(PTAA *ptaa, l_int32 ipta, l_int32 jpt, l_float32 *px, l_float32 *py)
ptaaGetPt()
l_int32 lept_mkdir(const char *subdir)
lept_mkdir()
l_ok ptaGetRankValue(PTA *pta, l_float32 fract, PTA *ptasort, l_int32 sorttype, l_float32 *pval)
ptaGetRankValue()
NUMA * numaGetSortIndex(NUMA *na, l_int32 sortorder)
numaGetSortIndex()
PIX * pixConvertTo32(PIX *pixs)
pixConvertTo32()
l_int32 lept_roundftoi(l_float32 fval)
lept_roundftoi()
PIX * pixCreateTemplate(const PIX *pixs)
pixCreateTemplate()
PIX * pixGenerateFromPta(PTA *pta, l_int32 w, l_int32 h)
pixGenerateFromPta()
GPLOT * gplotSimpleXY1(NUMA *nax, NUMA *nay, l_int32 plotstyle, l_int32 outformat, const char *outroot, const char *title)
gplotSimpleXY1()
NUMA * numaSortByIndex(NUMA *nas, NUMA *naindex)
numaSortByIndex()
l_ok ptaWriteStream(FILE *fp, PTA *pta, l_int32 type)
ptaWriteStream()
l_ok ptaAddPt(PTA *pta, l_float32 x, l_float32 y)
ptaAddPt()
l_ok numaWriteDebug(const char *filename, NUMA *na)
numaWriteDebug()
l_ok numaAddNumber(NUMA *na, l_float32 val)
numaAddNumber()
PIXA * pixaCreate(l_int32 n)
pixaCreate()
l_ok boxaContainedInBoxCount(BOXA *boxa, BOX *box, l_int32 *pcount)
boxaContainedInBoxCount()
PTAA * dewarpRemoveShortLines(PIX *pixs, PTAA *ptaas, l_float32 fract, l_int32 debugflag)
dewarpRemoveShortLines()
BOXA * boxaSelectBySize(BOXA *boxas, l_int32 width, l_int32 height, l_int32 type, l_int32 relation, l_int32 *pchanged)
boxaSelectBySize()
l_ok ptaGetQuarticLSF(PTA *pta, l_float32 *pa, l_float32 *pb, l_float32 *pc, l_float32 *pd, l_float32 *pe, NUMA **pnafit)
ptaGetQuarticLSF()
PTA * ptaCreate(l_int32 n)
ptaCreate()
l_ok numaGetMedian(NUMA *na, l_float32 *pval)
numaGetMedian()
PIX * pixCopy(PIX *pixd, const PIX *pixs)
pixCopy()
PIX * pixDisplayPtaaPattern(PIX *pixd, PIX *pixs, PTAA *ptaa, PIX *pixp, l_int32 cx, l_int32 cy)
pixDisplayPtaaPattern()
NUMA * numaMakeConstant(l_float32 val, l_int32 size)
numaMakeConstant()
void lept_stderr(const char *fmt,...)
lept_stderr()
NUMA * numaSort(NUMA *naout, NUMA *nain, l_int32 sortorder)
numaSort()
static PTA * dewarpGetMeanVerticals(PIX *pixs, l_int32 x, l_int32 y)
dewarpGetMeanVerticals()
l_ok ptaGetArrays(PTA *pta, NUMA **pnax, NUMA **pnay)
ptaGetArrays()
void pixcmapDestroy(PIXCMAP **pcmap)
pixcmapDestroy()
NUMA * numaCreate(l_int32 n)
numaCreate()
l_int32 ptaGetCount(PTA *pta)
ptaGetCount()
void boxaDestroy(BOXA **pboxa)
boxaDestroy()
l_uint32 * pixGetData(PIX *pix)
pixGetData()
PTA * ptaSort(PTA *ptas, l_int32 sorttype, l_int32 sortorder, NUMA **pnaindex)
ptaSort()
l_ok dewarpBuildLineModel(L_DEWARP *dew, l_int32 opensize, const char *debugfile)
dewarpBuildLineModel()
PIX * pixaDisplay(PIXA *pixa, l_int32 w, l_int32 h)
pixaDisplay()
NUMA * numaClipToInterval(NUMA *nas, l_int32 first, l_int32 last)
numaClipToInterval()
l_ok convertFilesToPdf(const char *dirname, const char *substr, l_int32 res, l_float32 scalefactor, l_int32 type, l_int32 quality, const char *title, const char *fileout)
convertFilesToPdf()
#define GET_DATA_BIT(pdata, n)
l_ok ptaGetLinearLSF(PTA *pta, l_float32 *pa, l_float32 *pb, NUMA **pnafit)
ptaGetLinearLSF()
l_ok ptaJoin(PTA *ptad, PTA *ptas, l_int32 istart, l_int32 iend)
ptaJoin()
l_ok fpixSetPixel(FPIX *fpix, l_int32 x, l_int32 y, l_float32 val)
fpixSetPixel()
l_ok pixRenderLineArb(PIX *pix, l_int32 x1, l_int32 y1, l_int32 x2, l_int32 y2, l_int32 width, l_uint8 rval, l_uint8 gval, l_uint8 bval)
pixRenderLineArb()
l_ok dewarpBuildPageModel(L_DEWARP *dew, const char *debugfile)
dewarpBuildPageModel()
PTAA * ptaaSortByIndex(PTAA *ptaas, NUMA *naindex)
ptaaSortByIndex()
l_ok applyQuadraticFit(l_float32 a, l_float32 b, l_float32 c, l_float32 x, l_float32 *py)
applyQuadraticFit()
BOXA * pixConnComp(PIX *pixs, PIXA **ppixa, l_int32 connectivity)
pixConnComp()
l_ok dewarpFindHorizSlopeDisparity(L_DEWARP *dew, PIX *pixb, l_float32 fractthresh, l_int32 parity)
dewarpFindHorizSlopeDisparity()
NUMA * numaArithOp(NUMA *nad, NUMA *na1, NUMA *na2, l_int32 op)
numaArithOp()
l_ok dewarpFindVertDisparity(L_DEWARP *dew, PTAA *ptaa, l_int32 rotflag)
dewarpFindVertDisparity()
PTA * ptaaGetPta(PTAA *ptaa, l_int32 index, l_int32 accessflag)
ptaaGetPta()
l_ok numaGetIValue(NUMA *na, l_int32 index, l_int32 *pival)
numaGetIValue()
l_ok pixaAddPix(PIXA *pixa, PIX *pix, l_int32 copyflag)
pixaAddPix()
PTA * numaConvertToPta1(NUMA *na)
numaConvertToPta1()
PIX * pixXor(PIX *pixd, PIX *pixs1, PIX *pixs2)
pixXor()
PIX * pixDisplayPtaa(PIX *pixs, PTAA *ptaa)
pixDisplayPtaa()
l_int32 numaGetCount(NUMA *na)
numaGetCount()
BOXA * pixConnCompBB(PIX *pixs, l_int32 connectivity)
pixConnCompBB()
l_ok dewarpFindHorizDisparity(L_DEWARP *dew, PTAA *ptaa)
dewarpFindHorizDisparity()
l_ok dewarpaModelStatus(L_DEWARPA *dewa, l_int32 pageno, l_int32 *pvsuccess, l_int32 *phsuccess)
dewarpaModelStatus()
l_ok pixcmapGetColor(PIXCMAP *cmap, l_int32 index, l_int32 *prval, l_int32 *pgval, l_int32 *pbval)
pixcmapGetColor()
PIX * pixMorphSequence(PIX *pixs, const char *sequence, l_int32 dispsep)
pixMorphSequence()
void ptaaDestroy(PTAA **pptaa)
ptaaDestroy()
FPIX * fpixRotateOrth(FPIX *fpixs, l_int32 quads)
fpixRotateOrth()
PIXA * pixaSelectBySize(PIXA *pixas, l_int32 width, l_int32 height, l_int32 type, l_int32 relation, l_int32 *pchanged)
pixaSelectBySize()
l_ok ptaGetPt(PTA *pta, l_int32 index, l_float32 *px, l_float32 *py)
ptaGetPt()
PTA * ptaCreateFromNuma(NUMA *nax, NUMA *nay)
ptaCreateFromNuma()
static l_int32 dewarpGetLineEndPoints(l_int32 h, PTAA *ptaa, PTA **pptal, PTA **pptar)
dewarpGetLineEndPoints()
l_ok dewarpPopulateFullRes(L_DEWARP *dew, PIX *pix, l_int32 x, l_int32 y)
dewarpPopulateFullRes()
static l_int32 dewarpFilterLineEndPoints(L_DEWARP *dew, PTA *ptal1, PTA *ptar1, PTA **pptal2, PTA **pptar2)
dewarpFilterLineEndPoints()
l_ok numaSetParameters(NUMA *na, l_float32 startx, l_float32 delx)
numaSetParameters()
l_ok pixaGetBoxGeometry(PIXA *pixa, l_int32 index, l_int32 *px, l_int32 *py, l_int32 *pw, l_int32 *ph)
pixaGetBoxGeometry()
PTAA * dewarpGetTextlineCenters(PIX *pixs, l_int32 debugflag)
dewarpGetTextlineCenters()
PIX * pixClone(PIX *pixs)
pixClone()
void pixDestroy(PIX **ppix)
pixDestroy()
struct FPix * sampydispar
PIX * pixRotateOrth(PIX *pixs, l_int32 quads)
pixRotateOrth()
static l_int32 dewarpIsLineCoverageValid(PTAA *ptaa2, l_int32 h, l_int32 *pntop, l_int32 *pnbot, l_int32 *pytop, l_int32 *pybot)
dewarpIsLineCoverageValid()
l_ok ptaGetRange(PTA *pta, l_float32 *pminx, l_float32 *pmaxx, l_float32 *pminy, l_float32 *pmaxy)
ptaGetRange()
void numaDestroy(NUMA **pna)
numaDestroy()
PIX * pixSeedfillBinary(PIX *pixd, PIX *pixs, PIX *pixm, l_int32 connectivity)
pixSeedfillBinary()
l_ok pixGetDimensions(const PIX *pix, l_int32 *pw, l_int32 *ph, l_int32 *pd)
pixGetDimensions()
l_ok numaGetMin(NUMA *na, l_float32 *pminval, l_int32 *piminloc)
numaGetMin()
l_ok applyLinearFit(l_float32 a, l_float32 b, l_float32 x, l_float32 *py)
applyLinearFit()
l_int32 ptaaGetCount(PTAA *ptaa)
ptaaGetCount()
static l_int32 dewarpQuadraticLSF(PTA *ptad, l_float32 *pa, l_float32 *pb, l_float32 *pc, l_float32 *pmederr)
dewarpQuadraticLSF()
FPIX * fpixCreate(l_int32 width, l_int32 height)
fpixCreate()
l_float32 * numaGetFArray(NUMA *na, l_int32 copyflag)
numaGetFArray()
l_ok ptaWriteDebug(const char *filename, PTA *pta, l_int32 type)
ptaWriteDebug()
PIX * pixaGetPix(PIXA *pixa, l_int32 index, l_int32 accesstype)
pixaGetPix()
PIX * pixDisplayPta(PIX *pixd, PIX *pixs, PTA *pta)
pixDisplayPta()
struct FPix * fullvdispar
l_ok numaGetMedianDevFromMedian(NUMA *na, l_float32 *pmed, l_float32 *pdev)
numaGetMedianDevFromMedian()
void ptaDestroy(PTA **ppta)
ptaDestroy()
PTA * ptaSelectRange(PTA *ptas, l_int32 first, l_int32 last)
ptaSelectRange()
l_ok numaReplaceNumber(NUMA *na, l_int32 index, l_float32 val)
numaReplaceNumber()
void boxDestroy(BOX **pbox)
boxDestroy()
l_int32 boxaGetCount(BOXA *boxa)
boxaGetCount()
l_ok ptaGetMinMax(PTA *pta, l_float32 *pxmin, l_float32 *pymin, l_float32 *pxmax, l_float32 *pymax)
ptaGetMinMax()
struct FPix * fullhdispar
PIX * pixDisplayPtaPattern(PIX *pixd, PIX *pixs, PTA *pta, PIX *pixp, l_int32 cx, l_int32 cy, l_uint32 color)
pixDisplayPtaPattern()
l_ok ptaGetIPt(PTA *pta, l_int32 index, l_int32 *px, l_int32 *py)
ptaGetIPt()
l_ok ptaaAddPta(PTAA *ptaa, PTA *pta, l_int32 copyflag)
ptaaAddPta()
l_ok numaGetMax(NUMA *na, l_float32 *pmaxval, l_int32 *pimaxloc)
numaGetMax()
static l_int32 pixRenderHorizEndPoints(PIX *pixs, PTA *ptal, PTA *ptar, l_uint32 color)
pixRenderHorizEndPoints()
l_int32 lept_rmdir(const char *subdir)
lept_rmdir()
static l_int32 pixRenderMidYs(PIX *pixs, NUMA *namidys, l_int32 linew)
pixRenderMidYs()
PTA * generatePtaFilledCircle(l_int32 radius)
generatePtaFilledCircle()
void fpixDestroy(FPIX **pfpix)
fpixDestroy()
void pixaDestroy(PIXA **ppixa)
pixaDestroy()
BOX * boxCreate(l_int32 x, l_int32 y, l_int32 w, l_int32 h)
boxCreate()
l_int32 pixaGetCount(PIXA *pixa)
pixaGetCount()
l_ok numaGetSumOnInterval(NUMA *na, l_int32 first, l_int32 last, l_float32 *psum)
numaGetSumOnInterval()
PTAA * ptaaCreate(l_int32 n)
ptaaCreate()
L_DEWARP * dewarpaGetDewarp(L_DEWARPA *dewa, l_int32 index)
dewarpaGetDewarp()
l_ok gplotSimple1(NUMA *na, l_int32 outformat, const char *outroot, const char *title)
gplotSimple1()
PTA * ptaTranspose(PTA *ptas)
ptaTranspose()
l_ok ptaaWriteDebug(const char *filename, PTAA *ptaa, l_int32 type)
ptaaWriteDebug()
static l_int32 dewarpLinearLSF(PTA *ptad, l_float32 *pa, l_float32 *pb, l_float32 *pmederr)
dewarpLinearLSF()
PIXCMAP * pixcmapCreateRandom(l_int32 depth, l_int32 hasblack, l_int32 haswhite)
pixcmapCreateRandom()
PIX * fpixRenderContours(FPIX *fpixs, l_float32 incr, l_float32 proxim)
fpixRenderContours()