62 #include "allheaders.h" 68 PTA **pptal2,
PTA **pptar2);
71 l_int32 *ptopline, l_int32 *pbotline);
73 l_float32 *pc, l_float32 *pmederr);
80 #define DEBUG_TEXTLINE_CENTERS 0 81 #define DEBUG_SHORT_LINES 0 83 #define DEBUG_TEXTLINE_CENTERS 0 84 #define DEBUG_SHORT_LINES 0 88 static const l_float32 L_MIN_RATIO_LINES_TO_HEIGHT = 0.45;
89 static const l_int32 L_MIN_LINES_FOR_HORIZ_1 = 10;
90 static const l_int32 L_MIN_LINES_FOR_HORIZ_2 = 3;
91 static const l_float32 L_ALLOWED_W_FRACT = 0.05;
149 const char *debugfile)
151 l_int32 linecount, topline, botline, ret;
152 PIX *
pixs, *pix1, *pix2, *pix3;
156 PROCNAME(
"dewarpBuildPageModel");
159 return ERROR_INT(
"dew not defined", procName, 1);
161 dew->
debug = (debugfile) ? 1 : 0;
167 pixDisplayWithTitle(
pixs, 0, 0,
"pixs", 1);
168 pixWriteDebug(
"/tmp/lept/dewmod/0010.png",
pixs, IFF_PNG);
174 L_WARNING(
"textline centers not found; model not built\n", procName);
182 pixWriteDebug(
"/tmp/lept/dewmod/0020.png", pix3, IFF_PNG);
192 debugfile || DEBUG_SHORT_LINES);
198 pixWriteDebug(
"/tmp/lept/dewmod/0030.png", pix3, IFF_PNG);
210 L_WARNING(
"linecount %d < min req'd number of lines (%d) for model\n",
211 procName, linecount, dew->
minlines);
218 &topline, &botline) == FALSE) {
220 L_WARNING(
"invalid line coverage: [%d ... %d] in height %d\n",
221 procName, topline, botline, pixGetHeight(
pixs));
229 L_WARNING(
"vertical disparity not built\n", procName);
240 L_INFO(
"hsuccess = 1\n", procName);
246 pixWriteDebug(
"/tmp/lept/dewmod/0060.png", pix1, IFF_PNG);
247 pixDisplay(pix1, 1000, 0);
251 pixWriteDebug(
"/tmp/lept/dewmod/0070.png", pix1, IFF_PNG);
252 pixDisplay(pix1, 1000, 0);
256 "Dewarp Build Model", debugfile);
257 fprintf(stderr,
"pdf file: %s\n", debugfile);
299 l_float32 c0, c1, c2, x, y, midy, val, medval, meddev, minval, maxval;
303 PIX *pix1, *pix2, *pixcirc, *pixdb;
304 PTA *pta, *ptad, *ptacirc;
305 PTAA *ptaa0, *ptaa1, *ptaa2, *ptaa3, *ptaa4, *ptaa5, *ptaat;
308 PROCNAME(
"dewarpFindVertDisparity");
311 return ERROR_INT(
"dew not defined", procName, 1);
314 return ERROR_INT(
"ptaa not defined", procName, 1);
316 if (dew->
debug) L_INFO(
"finding vertical disparity\n", procName);
325 nx = (rotflag) ? dew->
ny : dew->
nx;
326 ny = (rotflag) ? dew->
nx : dew->
ny;
332 for (i = 0; i <
nlines; i++) {
337 for (j = 0; j <
nx; j++) {
350 for (i = 0; i <
nlines; i++) {
364 pixWriteDebug(
"/tmp/lept/dewmod/0041.png", pix2, IFF_PNG);
378 L_INFO(
"\nPage %d\n", procName, dew->
pageno);
379 L_INFO(
"Pass 1: Curvature: medval = %f, meddev = %f\n",
380 procName, medval, meddev);
383 for (i = 0; i <
nlines; i++) {
385 if (L_ABS(val - medval) > 7.0 * meddev)
399 L_INFO(
"Pass 2: Min/max curvature = (%d, %d)\n", procName,
405 for (i = 0; i <
nlines; i++) {
408 ptaGetPt(pta, npts / 2, NULL, &midy);
436 pixWriteDebug(
"/tmp/lept/dewmod/0042.png", pix2, IFF_PNG);
437 pixDisplay(pix2, 0, 0);
450 for (i = 0; i <
nlines; i++) {
454 for (j = 0; j <
nx; j++) {
473 for (j = 0; j <
nx; j++) {
475 for (i = 0; i <
nlines; i++) {
495 for (j = 0; j <
nx; j++) {
499 for (i = 0; i <
ny; i++) {
510 "Dewarp Vert Disparity",
511 "/tmp/lept/dewarp/vert_disparity.pdf");
512 fprintf(stderr,
"pdf file: /tmp/lept/dewarp/vert_disparity.pdf\n");
517 for (i = 0; i <
ny; i++) {
518 for (j = 0; j <
nx; j++) {
562 l_float32 c0, c1, cl0, cl1, cl2, cr0, cr1, cr2;
563 l_float32 x, y, refl, refr;
564 l_float32 val, mederr;
570 PTA *pta, *ptat, *pta1, *pta2;
574 PROCNAME(
"dewarpFindHorizDisparity");
577 return ERROR_INT(
"dew not defined", procName, 1);
580 return ERROR_INT(
"ptaa not defined", procName, 1);
582 if (dew->
debug) L_INFO(
"finding horizontal disparity\n", procName);
585 h = pixGetHeight(dew->
pixs);
588 L_INFO(
"Horiz disparity not built\n", procName);
594 ptaWriteDebug(
"/tmp/lept/dewdebug/endpts_left1.pta", ptal1, 1);
595 ptaWriteDebug(
"/tmp/lept/dewdebug/endpts_right1.pta", ptar1, 1);
627 L_INFO(
"Left quad LSF median error = %5.2f\n", procName, mederr);
628 L_INFO(
"Left edge slope = %d\n", procName, dew->
leftslope);
629 L_INFO(
"Left edge curvature = %d\n", procName, dew->
leftcurv);
631 for (i = 0; i <
ny; i++) {
641 L_INFO(
"Right quad LSF median error = %5.2f\n", procName, mederr);
642 L_INFO(
"Right edge slope = %d\n", procName, dew->
rightslope);
643 L_INFO(
"Right edge curvature = %d\n", procName, dew->
rightcurv);
645 for (i = 0; i <
ny; i++) {
652 PTA *ptalft, *ptarft;
653 h = pixGetHeight(dew->
pixs);
656 for (i = 0; i <
h; i++) {
665 pixDisplay(pix1, 600, 800);
666 pixWriteDebug(
"/tmp/lept/dewmod/0051.png", pix1, IFF_PNG);
674 pixDisplay(pix1, 800, 800);
675 pixWriteDebug(
"/tmp/lept/dewmod/0052.png", pix1, IFF_PNG);
677 "Dewarp Horiz Disparity",
678 "/tmp/lept/dewarp/horiz_disparity.pdf");
679 fprintf(stderr,
"pdf file: /tmp/lept/dewarp/horiz_disparity.pdf\n");
697 for (i = 0; i <
ny; i++) {
708 for (i = 0; i <
ny; i++) {
716 for (j = 0; j <
nx; j++) {
729 for (i = 0; i <
ny; i++) {
730 for (j = 0; j <
nx; j++) {
766 l_int32 i,
w,
h, bx, by, nsegs, csize1, csize2;
773 PROCNAME(
"dewarpGetTextlineCenters");
775 if (!
pixs || pixGetDepth(
pixs) != 1)
776 return (
PTAA *)ERROR_PTR(
"pixs undefined or not 1 bpp", procName, NULL);
779 if (debugflag) L_INFO(
"finding text line centers\n", procName);
788 csize1 = L_MAX(15,
w / 80);
789 csize2 = L_MAX(40,
w / 30);
790 snprintf(buf,
sizeof(buf),
"o1.3 + c%d.1 + o%d.1 + c%d.1",
791 csize1, csize1, csize2);
804 pixWriteDebug(
"/tmp/lept/dewmod/0011.tif", pix1, IFF_TIFF_G4);
805 pixDisplayWithTitle(pix1, 0, 600,
"pix1", 1);
806 pixWriteDebug(
"/tmp/lept/dewmod/0012.tif", pix2, IFF_TIFF_G4);
807 pixDisplayWithTitle(pix2, 0, 800,
"pix2", 1);
830 pixWriteDebug(
"/tmp/lept/dewmod/0013.tif", pix2, IFF_TIFF_G4);
831 pixDisplayWithTitle(pix2, 0, 1000,
"pix2", 1);
839 for (i = 0; i < nsegs; i++) {
849 pixWriteDebug(
"/tmp/lept/dewmod/0014.tif", pix2, IFF_PNG);
850 pixDisplayWithTitle(pix2, 0, 1200,
"pix3", 1);
874 l_int32
w,
h, i, j, wpl, sum, count;
875 l_uint32 *line, *data;
878 PROCNAME(
"pixGetMeanVerticals");
880 if (!
pixs || pixGetDepth(
pixs) != 1)
881 return (
PTA *)ERROR_PTR(
"pixs undefined or not 1 bpp", procName, NULL);
886 wpl = pixGetWpl(
pixs);
887 for (j = 0; j <
w; j++) {
890 for (i = 0; i <
h; i++) {
897 if (count == 0)
continue;
898 ptaAddPt(pta, x + j, y + (sum / count));
921 l_int32
w, n, i, index, maxlen, len;
922 l_float32 minx, maxx;
928 PROCNAME(
"dewarpRemoveShortLines");
930 if (!
pixs || pixGetDepth(
pixs) != 1)
931 return (
PTAA *)ERROR_PTR(
"pixs undefined or not 1 bpp", procName, NULL);
933 return (
PTAA *)ERROR_PTR(
"ptaas undefined", procName, NULL);
939 for (i = 0; i < n; i++) {
950 if (maxlen < 0.5 *
w)
951 L_WARNING(
"lines are relatively short\n", procName);
954 for (i = 1; i < n; i++) {
957 if (len < fract * maxlen)
break;
965 pixDisplayWithTitle(pix2, 0, 200,
"pix4", 1);
1004 l_int32 i, n, npt, x, y;
1005 l_float32 miny, maxy, ratio;
1006 PTA *pta, *ptal1, *ptar1;
1008 PROCNAME(
"dewarpGetLineEndPoints");
1010 if (!pptal || !pptar)
1011 return ERROR_INT(
"&ptal and &ptar not both defined", procName, 1);
1012 *pptal = *pptar = NULL;
1014 return ERROR_INT(
"ptaa undefined", procName, 1);
1018 if (n < L_MIN_LINES_FOR_HORIZ_1) {
1019 L_INFO(
"only %d lines; too few\n", procName, n);
1026 for (i = 0; i < n; i++) {
1038 ratio = (maxy - miny) / (l_float32)
h;
1039 if (ratio < L_MIN_RATIO_LINES_TO_HEIGHT) {
1040 L_INFO(
"ratio lines to height, %f, too small\n", procName, ratio);
1085 l_float32 ymin, ymax, xvall, xvalr, yvall, yvalr;
1086 PTA *ptal1, *ptar1, *ptal2, *ptar2;
1088 PROCNAME(
"dewarpFilterLineEndPoints");
1090 return ERROR_INT(
"ptal or ptar not defined", procName, 1);
1091 *pptalf = *pptarf = NULL;
1094 w = pixGetWidth(dew->
pixs);
1100 for (i = 0; i < n; i++) {
1103 if (yvall < ymin + 0.20 * (
w - ymin) &&
1104 yvalr > 0.80 * ymax) {
1110 ptaWriteDebug(
"/tmp/lept/dewdebug/endpts_left2.pta", ptal1, 1);
1111 ptaWriteDebug(
"/tmp/lept/dewdebug/endpts_right2.pta", ptar1, 1);
1115 if (n < L_MIN_LINES_FOR_HORIZ_1 - 2) {
1118 L_INFO(
"First filter: only %d endpoints; needed 8\n", procName, n);
1127 if (!ptal2 || !ptar2) {
1130 L_INFO(
"Second filter: too few endpoints left after outliers removed\n",
1135 ptaWriteDebug(
"/tmp/lept/dewdebug/endpts_left3.pta", ptal2, 1);
1136 ptaWriteDebug(
"/tmp/lept/dewdebug/endpts_right3.pta", ptar2, 1);
1167 l_int32 i, n, nu, nd;
1168 l_float32 rval, xval, yval, delta;
1169 PTA *ptau1, *ptau2, *ptad1, *ptad2;
1171 PROCNAME(
"dewarpRemoveBadEndPoints");
1174 return (
PTA *)ERROR_PTR(
"ptas not defined", procName, NULL);
1176 delta =
w * L_ALLOWED_W_FRACT;
1184 for (i = 0; i < nu; i++) {
1186 if (L_ABS(rval - yval) <= delta)
1190 if (
ptaGetCount(ptau2) < L_MIN_LINES_FOR_HORIZ_2) {
1192 L_INFO(
"Second filter: upper set is too small after outliers removed\n",
1202 for (i = 0; i < nd; i++) {
1204 if (L_ABS(rval - yval) <= delta)
1208 if (
ptaGetCount(ptad2) < L_MIN_LINES_FOR_HORIZ_2) {
1211 L_INFO(
"Second filter: lower set is too small after outliers removed\n",
1245 l_int32 i, n, both_halves;
1246 l_float32 top, bot, y, fraction;
1248 PROCNAME(
"dewarpIsLineCoverageValid");
1251 return ERROR_INT(
"ptaa not defined", procName, 0);
1253 return ERROR_INT(
"ptaa empty", procName, 0);
1255 return ERROR_INT(
"invalid h", procName, 0);
1256 if (!ptopline || !pbotline)
1257 return ERROR_INT(
"&topline and &botline not defined", procName, 0);
1261 for (i = 0; i < n; i++) {
1263 if (y < top) top = y;
1264 if (y > bot) bot = y;
1266 *ptopline = (l_int32)top;
1267 *pbotline = (l_int32)bot;
1268 both_halves = top < 0.5 *
h && bot > 0.5 *
h;
1269 fraction = (bot - top) /
h;
1270 if (both_halves && fraction > 0.40)
1303 l_float32 x, y, xp, c0, c1, c2;
1306 PROCNAME(
"dewarpQuadraticLSF");
1308 if (pmederr) *pmederr = 0.0;
1309 if (!pa || !pb || !pc)
1310 return ERROR_INT(
"not all ptrs are defined", procName, 1);
1311 *pa = *pb = *pc = 0.0;
1313 return ERROR_INT(
"ptad not defined", procName, 1);
1325 for (i = 0; i < n; i++) {
1380 l_float32 fractthresh,
1383 l_int32 i, j, x, n1, n2, nb, ne, count,
w,
h, ival, prev;
1384 l_int32 istart, iend, first, last, x0, x1,
nx,
ny;
1385 l_float32 fract, delta, sum, aveval, fval, del, denom;
1386 l_float32 ca, cb, cc, cd, ce, y;
1388 BOXA *boxa1, *boxa2;
1389 NUMA *na1, *na2, *na3, *na4, *nasum;
1394 PROCNAME(
"dewarpFindHorizSlopeDisparity");
1397 return ERROR_INT(
"dew not defined", procName, 1);
1399 return ERROR_INT(
"invalid vert or horiz disparity model", procName, 1);
1400 if (!pixb || pixGetDepth(pixb) != 1)
1401 return ERROR_INT(
"pixb not defined or not 1 bpp", procName, 1);
1403 if (dew->
debug) L_INFO(
"finding slope horizontal disparity\n", procName);
1407 pixDisplay(pix1, 100, 100);
1412 fprintf(stderr,
"number of components: %d\n", nb);
1419 for (x = 0; x + 50 <
w; x += 25) {
1427 gplotSimple1(na1, GPLOT_PNG,
"/tmp/lept/dew/0091", NULL);
1428 lept_mv(
"/tmp/lept/dew/0091.png",
"lept/dewmod", NULL, NULL);
1429 pixWriteDebug(
"/tmp/lept/dewmod/0090.png", pix1, IFF_PNG);
1440 for (i = 0; i < n1; i++) {
1454 for (i = n1 - 1; i >= 0; i--) {
1468 delta = (parity == 0) ? last - first : first - last;
1469 denom = L_MAX(1.0, (l_float32)(L_MIN(first, last)));
1470 fract = (l_float32)delta / denom;
1472 L_INFO(
"Slope-disparity: first = %d, last = %d, fract = %7.3f\n",
1473 procName, first, last, fract);
1474 gplotSimple1(na2, GPLOT_PNG,
"/tmp/lept/dew/0092", NULL);
1475 lept_mv(
"/tmp/lept/dew/0092.png",
"lept/dewmod", NULL, NULL);
1477 if (fract < fractthresh) {
1478 L_INFO(
"Small slope-disparity: first = %d, last = %d, fract = %7.3f\n",
1479 procName, first, last, fract);
1490 denom = L_MAX(1.0, (l_float32)(ne / 2));
1491 aveval = sum / denom;
1496 L_INFO(
"Average background density: %5.1f\n", procName, aveval);
1497 gplotSimple1(na2, GPLOT_PNG,
"/tmp/lept/dew/0093", NULL);
1498 lept_mv(
"/tmp/lept/dew/0093.png",
"lept/dewmod", NULL, NULL);
1509 "/tmp/lept/dew/0094", NULL);
1510 lept_mv(
"/tmp/lept/dew/0094.png",
"lept/dewmod", NULL, NULL);
1518 for (i = n2 - 1; i >= 0; i--) {
1520 if (fval < 1.0)
break;
1526 for (x = x0; x < x1; x++) {
1531 for (x = x1; x <
w; x++)
1534 for (i = 0; i < n2; i++) {
1536 if (fval < 1.0)
break;
1542 for (x = x1; x >= x0; x--) {
1547 for (x = x0; x >= 0; x--)
1555 del = (l_float32)
w / (l_float32)
nx;
1556 for (i = 0; i <
ny; i++) {
1557 for (j = 0; j <
nx; j++) {
1608 const char *debugfile)
1611 l_int32 i, j, bx, by, ret,
nlines;
1613 PIX *
pixs, *pixh, *pixv, *pix, *pix1, *pix2;
1614 PIXA *pixa1, *pixa2;
1616 PTAA *ptaa1, *ptaa2;
1618 PROCNAME(
"dewarpBuildLineModel");
1621 return ERROR_INT(
"dew not defined", procName, 1);
1623 L_WARNING(
"opensize should be >= 3; setting to 8\n", procName);
1627 dew->
debug = (debugfile) ? 1 : 0;
1636 pixDisplayWithTitle(
pixs, 0, 0,
"pixs", 1);
1637 pixWriteDebug(
"/tmp/lept/dewline/001.png",
pixs, IFF_PNG);
1651 snprintf(buf,
sizeof(buf),
"d1.3 + c%d.1 + o%d.1", opensize - 2, opensize);
1653 snprintf(buf,
sizeof(buf),
"d3.1 + c1.%d + o1.%d", opensize - 2, opensize);
1664 for (i = 0; i < 2; i++) {
1666 pixDisplay(pix, 0, 900);
1671 L_WARNING(
"only found %d lines\n", procName,
nlines);
1679 for (j = 0; j <
nlines; j++) {
1690 snprintf(buf,
sizeof(buf),
"/tmp/lept/dewline/%03d.png", 2 + 2 * i);
1691 pixWriteDebug(buf, pix2, IFF_PNG);
1702 snprintf(buf,
sizeof(buf),
"/tmp/lept/dewline/%03d.png", 3 + 2 * i);
1703 pixWriteDebug(buf, pix2, IFF_PNG);
1712 L_WARNING(
"%d lines: too few to build model\n", procName,
nlines);
1726 L_WARNING(
"horizontal disparity not built\n", procName);
1728 L_INFO(
"hsuccess = 1\n", procName);
1732 lept_mv(
"/tmp/lept/dewarp/vert_disparity.pdf",
1733 "lept/dewarp",
"horiz_disparity.pdf", NULL);
1739 L_WARNING(
"vertical disparity not built\n", procName);
1741 L_INFO(
"vsuccess = 1\n", procName);
1753 pixWriteDebug(
"/tmp/lept/dewline/006.png", pix1, IFF_PNG);
1754 pixDisplay(pix1, 1000, 0);
1759 pixWriteDebug(
"/tmp/lept/dewline/007.png", pix1, IFF_PNG);
1760 pixDisplay(pix1, 1000, 0);
1764 "Dewarp Build Line Model", debugfile);
1765 fprintf(stderr,
"pdf file: %s\n", debugfile);
1797 PROCNAME(
"dewarpaModelStatus");
1799 if (pvsuccess) *pvsuccess = 0;
1800 if (phsuccess) *phsuccess = 0;
1802 return ERROR_INT(
"dewa not defined", procName, 1);
1805 return ERROR_INT(
"dew not retrieved", procName, 1);
1806 if (pvsuccess) *pvsuccess = dew->
vsuccess;
1807 if (phsuccess) *phsuccess = dew->
hsuccess;
1828 l_int32 i, n,
w, yval, rval, gval, bval;
1831 PROCNAME(
"pixRenderMidYs");
1834 return ERROR_INT(
"pixs not defined", procName, 1);
1836 return ERROR_INT(
"namidys not defined", procName, 1);
1838 w = pixGetWidth(
pixs);
1841 for (i = 0; i < n; i++) {
1867 PTA *ptalt, *ptart, *ptacirc;
1869 PROCNAME(
"pixRenderHorizEndPoints");
1872 return ERROR_INT(
"pixs not defined", procName, 1);
1874 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()
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()
static l_int32 dewarpIsLineCoverageValid(PTAA *ptaa2, l_int32 h, l_int32 *ptopline, l_int32 *pbotline)
dewarpIsLineCoverageValid()
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 * pixGenerateFromPta(PTA *pta, l_int32 w, l_int32 h)
pixGenerateFromPta()
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 * 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()
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)
PIX * pixCreateTemplate(PIX *pixs)
pixCreateTemplate()
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 gplotSimpleXY1(NUMA *nax, NUMA *nay, l_int32 plotstyle, l_int32 outformat, const char *outroot, const char *title)
gplotSimpleXY1()
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()
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()
PIX * pixCopy(PIX *pixd, PIX *pixs)
pixCopy()
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()
PIXCMAP * pixcmapCreateRandom(l_int32 depth, l_int32 hasblack, l_int32 haswhite)
pixcmapCreateRandom()
PIX * fpixRenderContours(FPIX *fpixs, l_float32 incr, l_float32 proxim)
fpixRenderContours()