403 #include "allheaders.h" 408 static const l_int32 INITIAL_PTR_ARRAYSIZE = 20;
409 static const l_int32 MAX_PTR_ARRAYSIZE = 10000;
410 static const l_int32 DEFAULT_ARRAY_SAMPLING = 30;
411 static const l_int32 MIN_ARRAY_SAMPLING = 8;
412 static const l_int32 DEFAULT_MIN_LINES = 15;
413 static const l_int32 MIN_MIN_LINES = 4;
414 static const l_int32 DEFAULT_MAX_REF_DIST = 16;
415 static const l_int32 DEFAULT_USE_BOTH = TRUE;
416 static const l_int32 DEFAULT_CHECK_COLUMNS = FALSE;
419 static const l_int32 DEFAULT_MAX_LINECURV = 180;
420 static const l_int32 DEFAULT_MIN_DIFF_LINECURV = 0;
421 static const l_int32 DEFAULT_MAX_DIFF_LINECURV = 200;
422 static const l_int32 DEFAULT_MAX_EDGECURV = 50;
423 static const l_int32 DEFAULT_MAX_DIFF_EDGECURV = 40;
424 static const l_int32 DEFAULT_MAX_EDGESLOPE = 80;
451 PROCNAME(
"dewarpCreate");
454 return (
L_DEWARP *)ERROR_PTR(
"pixs not defined", procName, NULL);
455 if (pixGetDepth(
pixs) != 1)
456 return (
L_DEWARP *)ERROR_PTR(
"pixs not 1 bpp", procName, NULL);
459 return (
L_DEWARP *)ERROR_PTR(
"dew not made", procName, NULL);
462 dew->
w = pixGetWidth(
pixs);
463 dew->
h = pixGetHeight(
pixs);
491 PROCNAME(
"dewarpCreateRef");
494 return (
L_DEWARP *)ERROR_PTR(
"dew not made", procName, NULL);
513 PROCNAME(
"dewarpDestroy");
516 L_WARNING(
"ptr address is null!\n", procName);
519 if ((dew = *pdew) == NULL)
580 PROCNAME(
"dewarpaCreate");
583 nptrs = INITIAL_PTR_ARRAYSIZE;
584 if (nptrs > MAX_PTR_ARRAYSIZE)
585 return (
L_DEWARPA *)ERROR_PTR(
"too many pages", procName, NULL);
587 return (
L_DEWARPA *)ERROR_PTR(
"redfactor not in {1,2}",
591 }
else if (
sampling < MIN_ARRAY_SAMPLING) {
592 L_WARNING(
"sampling too small; setting to %d\n", procName,
598 }
else if (
minlines < MIN_MIN_LINES) {
599 L_WARNING(
"minlines too small; setting to %d\n", procName,
604 maxdist = DEFAULT_MAX_REF_DIST;
611 return (
L_DEWARPA *)ERROR_PTR(
"dewarp ptrs not made", procName, NULL);
672 PROCNAME(
"dewarpaCreateFromPixacomp");
675 return (
L_DEWARPA *)ERROR_PTR(
"pixac not defined", procName, NULL);
680 return (
L_DEWARPA *)ERROR_PTR(
"dewa not made", procName, NULL);
683 for (i = 0; i < nptrs; i++) {
686 if (pixt && (pixGetWidth(pixt) > 1)) {
690 ERROR_INT(
"unable to make dew!", procName, 1);
701 L_ERROR(
"unable to build model for page %d\n", procName, i);
728 PROCNAME(
"dewarpaDestroy");
731 L_WARNING(
"ptr address is null!\n", procName);
734 if ((
dewa = *pdewa) == NULL)
767 PROCNAME(
"dewarpaDestroyDewarp");
770 return ERROR_INT(
"dewa or dew not defined", procName, 1);
772 return ERROR_INT(
"page out of bounds", procName, 1);
774 return ERROR_INT(
"dew not defined", procName, 1);
808 l_int32
pageno, n, newsize;
811 PROCNAME(
"dewarpaInsertDewarp");
814 return ERROR_INT(
"dewa not defined", procName, 1);
816 return ERROR_INT(
"dew not defined", procName, 1);
820 if (
pageno > MAX_PTR_ARRAYSIZE)
821 return ERROR_INT(
"too many pages", procName, 1);
873 PROCNAME(
"dewarpaExtendArraysToSize");
876 return ERROR_INT(
"dewa not defined", procName, 1);
881 size *
sizeof(
L_DEWARP *))) == NULL)
882 return ERROR_INT(
"new ptr array not returned", procName, 1);
886 size *
sizeof(
L_DEWARP *))) == NULL)
887 return ERROR_INT(
"new ptr cache array not returned", procName, 1);
905 PROCNAME(
"dewarpaGetDewarp");
908 return (
L_DEWARP *)ERROR_PTR(
"dewa not defined", procName, NULL);
910 L_ERROR(
"index = %d is invalid; max index = %d\n",
967 l_int32 max_linecurv,
968 l_int32 min_diff_linecurv,
969 l_int32 max_diff_linecurv,
970 l_int32 max_edgecurv,
971 l_int32 max_diff_edgecurv,
972 l_int32 max_edgeslope)
974 PROCNAME(
"dewarpaSetCurvatures");
977 return ERROR_INT(
"dewa not defined", procName, 1);
979 if (max_linecurv == -1)
984 if (min_diff_linecurv == -1)
989 if (max_diff_linecurv == -1)
994 if (max_edgecurv == -1)
999 if (max_diff_edgecurv == -1)
1004 if (max_edgeslope == -1)
1033 PROCNAME(
"dewarpaUseBothArrays");
1036 return ERROR_INT(
"dewa not defined", procName, 1);
1070 l_int32 check_columns)
1072 PROCNAME(
"dewarpaSetCheckColumns");
1075 return ERROR_INT(
"dewa not defined", procName, 1);
1098 PROCNAME(
"dewarpaSetMaxDistance");
1101 return ERROR_INT(
"dewa not defined", procName, 1);
1124 PROCNAME(
"dewarpRead");
1127 return (
L_DEWARP *)ERROR_PTR(
"filename not defined", procName, NULL);
1129 return (
L_DEWARP *)ERROR_PTR(
"stream not opened", procName, NULL);
1133 return (
L_DEWARP *)ERROR_PTR(
"dew not read", procName, NULL);
1165 FPIX *fpixv, *fpixh;
1167 PROCNAME(
"dewarpReadStream");
1170 return (
L_DEWARP *)ERROR_PTR(
"stream not defined", procName, NULL);
1172 if (fscanf(fp,
"\nDewarp Version %d\n", &version) != 1)
1173 return (
L_DEWARP *)ERROR_PTR(
"not a dewarp file", procName, NULL);
1175 return (
L_DEWARP *)ERROR_PTR(
"invalid dewarp version", procName, NULL);
1176 if (fscanf(fp,
"pageno = %d\n", &
pageno) != 1)
1177 return (
L_DEWARP *)ERROR_PTR(
"read fail for pageno", procName, NULL);
1178 if (fscanf(fp,
"hasref = %d, refpage = %d\n", &
hasref, &
refpage) != 2)
1179 return (
L_DEWARP *)ERROR_PTR(
"read fail for hasref, refpage",
1183 return (
L_DEWARP *)ERROR_PTR(
"read fail for sampling/redfactor",
1185 if (fscanf(fp,
"nlines = %d, minlines = %d\n", &
nlines, &
minlines) != 2)
1186 return (
L_DEWARP *)ERROR_PTR(
"read fail for nlines/minlines",
1188 if (fscanf(fp,
"w = %d, h = %d\n", &
w, &
h) != 2)
1189 return (
L_DEWARP *)ERROR_PTR(
"read fail for w, h", procName, NULL);
1190 if (fscanf(fp,
"nx = %d, ny = %d\n", &
nx, &
ny) != 2)
1191 return (
L_DEWARP *)ERROR_PTR(
"read fail for nx, ny", procName, NULL);
1192 if (fscanf(fp,
"vert_dispar = %d, horiz_dispar = %d\n", &vdispar, &hdispar)
1194 return (
L_DEWARP *)ERROR_PTR(
"read fail for flags", procName, NULL);
1196 if (fscanf(fp,
"min line curvature = %d, max line curvature = %d\n",
1198 return (
L_DEWARP *)ERROR_PTR(
"read fail for mincurv & maxcurv",
1202 if (fscanf(fp,
"left edge slope = %d, right edge slope = %d\n",
1204 return (
L_DEWARP *)ERROR_PTR(
"read fail for leftslope & rightslope",
1206 if (fscanf(fp,
"left edge curvature = %d, right edge curvature = %d\n",
1208 return (
L_DEWARP *)ERROR_PTR(
"read fail for leftcurv & rightcurv",
1213 return (
L_DEWARP *)ERROR_PTR(
"read fail for vdispar",
1218 return (
L_DEWARP *)ERROR_PTR(
"read fail for hdispar",
1270 PROCNAME(
"dewarpReadMem");
1273 return (
L_DEWARP *)ERROR_PTR(
"data not defined", procName, NULL);
1275 return (
L_DEWARP *)ERROR_PTR(
"stream not opened", procName, NULL);
1279 if (!dew) L_ERROR(
"dew not read\n", procName);
1298 PROCNAME(
"dewarpWrite");
1301 return ERROR_INT(
"filename not defined", procName, 1);
1303 return ERROR_INT(
"dew not defined", procName, 1);
1306 return ERROR_INT(
"stream not opened", procName, 1);
1310 return ERROR_INT(
"dew not written to stream", procName, 1);
1333 l_int32 vdispar, hdispar;
1335 PROCNAME(
"dewarpWriteStream");
1338 return ERROR_INT(
"stream not defined", procName, 1);
1340 return ERROR_INT(
"dew not defined", procName, 1);
1343 fprintf(fp,
"pageno = %d\n", dew->
pageno);
1344 fprintf(fp,
"hasref = %d, refpage = %d\n", dew->
hasref, dew->
refpage);
1345 fprintf(fp,
"sampling = %d, redfactor = %d\n",
1347 fprintf(fp,
"nlines = %d, minlines = %d\n", dew->
nlines, dew->
minlines);
1348 fprintf(fp,
"w = %d, h = %d\n", dew->
w, dew->
h);
1349 fprintf(fp,
"nx = %d, ny = %d\n", dew->
nx, dew->
ny);
1352 fprintf(fp,
"vert_dispar = %d, horiz_dispar = %d\n", vdispar, hdispar);
1354 fprintf(fp,
"min line curvature = %d, max line curvature = %d\n",
1357 fprintf(fp,
"left edge slope = %d, right edge slope = %d\n",
1359 fprintf(fp,
"left edge curvature = %d, right edge curvature = %d\n",
1367 L_WARNING(
"no disparity arrays!\n", procName);
1393 PROCNAME(
"dewarpWriteMem");
1395 if (pdata) *pdata = NULL;
1396 if (psize) *psize = 0;
1398 return ERROR_INT(
"&data not defined", procName, 1);
1400 return ERROR_INT(
"&size not defined", procName, 1);
1402 return ERROR_INT(
"dew not defined", procName, 1);
1405 if ((fp = open_memstream((
char **)pdata, psize)) == NULL)
1406 return ERROR_INT(
"stream not opened", procName, 1);
1409 L_INFO(
"work-around: writing to a temp file\n", procName);
1412 return ERROR_INT(
"tmpfile stream not opened", procName, 1);
1414 if ((fp = tmpfile()) == NULL)
1415 return ERROR_INT(
"tmpfile stream not opened", procName, 1);
1441 PROCNAME(
"dewarpaRead");
1444 return (
L_DEWARPA *)ERROR_PTR(
"filename not defined", procName, NULL);
1446 return (
L_DEWARPA *)ERROR_PTR(
"stream not opened", procName, NULL);
1450 return (
L_DEWARPA *)ERROR_PTR(
"dewa not read", procName, NULL);
1475 l_int32 i, version, ndewarp, maxpage;
1477 l_int32 max_linecurv, min_diff_linecurv, max_diff_linecurv;
1478 l_int32 max_edgeslope, max_edgecurv, max_diff_edgecurv;
1483 PROCNAME(
"dewarpaReadStream");
1486 return (
L_DEWARPA *)ERROR_PTR(
"stream not defined", procName, NULL);
1488 if (fscanf(fp,
"\nDewarpa Version %d\n", &version) != 1)
1489 return (
L_DEWARPA *)ERROR_PTR(
"not a dewarpa file", procName, NULL);
1491 return (
L_DEWARPA *)ERROR_PTR(
"invalid dewarp version", procName, NULL);
1493 if (fscanf(fp,
"ndewarp = %d, maxpage = %d\n", &ndewarp, &maxpage) != 2)
1494 return (
L_DEWARPA *)ERROR_PTR(
"read fail for maxpage+", procName, NULL);
1496 "sampling = %d, redfactor = %d, minlines = %d, maxdist = %d\n",
1498 return (
L_DEWARPA *)ERROR_PTR(
"read fail for 4 params", procName, NULL);
1500 "max_linecurv = %d, min_diff_linecurv = %d, max_diff_linecurv = %d\n",
1501 &max_linecurv, &min_diff_linecurv, &max_diff_linecurv) != 3)
1502 return (
L_DEWARPA *)ERROR_PTR(
"read fail for linecurv", procName, NULL);
1504 "max_edgeslope = %d, max_edgecurv = %d, max_diff_edgecurv = %d\n",
1505 &max_edgeslope, &max_edgecurv, &max_diff_edgecurv) != 3)
1506 return (
L_DEWARPA *)ERROR_PTR(
"read fail for edgecurv", procName, NULL);
1507 if (fscanf(fp,
"fullmodel = %d\n", &useboth) != 1)
1508 return (
L_DEWARPA *)ERROR_PTR(
"read fail for useboth", procName, NULL);
1521 for (i = 0; i < ndewarp; i++) {
1523 L_ERROR(
"read fail for dew[%d]\n", procName, i);
1551 PROCNAME(
"dewarpaReadMem");
1554 return (
L_DEWARPA *)ERROR_PTR(
"data not defined", procName, NULL);
1556 return (
L_DEWARPA *)ERROR_PTR(
"stream not opened", procName, NULL);
1560 if (!
dewa) L_ERROR(
"dewa not read\n", procName);
1579 PROCNAME(
"dewarpaWrite");
1582 return ERROR_INT(
"filename not defined", procName, 1);
1584 return ERROR_INT(
"dewa not defined", procName, 1);
1587 return ERROR_INT(
"stream not opened", procName, 1);
1591 return ERROR_INT(
"dewa not written to stream", procName, 1);
1607 l_int32 ndewarp, i,
pageno;
1609 PROCNAME(
"dewarpaWriteStream");
1612 return ERROR_INT(
"stream not defined", procName, 1);
1614 return ERROR_INT(
"dewa not defined", procName, 1);
1623 return ERROR_INT(
"dewa->namodels not made", procName, 1);
1627 fprintf(fp,
"ndewarp = %d, maxpage = %d\n", ndewarp,
dewa->
maxpage);
1628 fprintf(fp,
"sampling = %d, redfactor = %d, minlines = %d, maxdist = %d\n",
1631 "max_linecurv = %d, min_diff_linecurv = %d, max_diff_linecurv = %d\n",
1634 "max_edgeslope = %d, max_edgecurv = %d, max_diff_edgecurv = %d\n",
1637 for (i = 0; i < ndewarp; i++) {
1667 PROCNAME(
"dewarpaWriteMem");
1669 if (pdata) *pdata = NULL;
1670 if (psize) *psize = 0;
1672 return ERROR_INT(
"&data not defined", procName, 1);
1674 return ERROR_INT(
"&size not defined", procName, 1);
1676 return ERROR_INT(
"dewa not defined", procName, 1);
1679 if ((fp = open_memstream((
char **)pdata, psize)) == NULL)
1680 return ERROR_INT(
"stream not opened", procName, 1);
1683 L_INFO(
"work-around: writing to a temp file\n", procName);
1686 return ERROR_INT(
"tmpfile stream not opened", procName, 1);
1688 if ((fp = tmpfile()) == NULL)
1689 return ERROR_INT(
"tmpfile stream not opened", procName, 1);
struct FPix * sampvdispar
struct L_Dewarp ** dewarp
struct L_Dewarp ** dewarpcache
struct FPix * samphdispar
l_ok dewarpaDestroyDewarp(L_DEWARPA *dewa, l_int32 pageno)
dewarpaDestroyDewarp()
PIX * pixacompGetPix(PIXAC *pixac, l_int32 index)
pixacompGetPix()
l_int32 max_diff_linecurv
l_int32 pixacompGetOffset(PIXAC *pixac)
pixacompGetOffset()
l_ok numaAddNumber(NUMA *na, l_float32 val)
numaAddNumber()
l_ok dewarpaWriteStream(FILE *fp, L_DEWARPA *dewa)
dewarpaWriteStream()
L_DEWARP * dewarpCreate(PIX *pixs, l_int32 pageno)
dewarpCreate()
l_int32 max_diff_edgecurv
l_ok fpixWriteStream(FILE *fp, FPIX *fpix)
fpixWriteStream()
static l_int32 dewarpaExtendArraysToSize(L_DEWARPA *dewa, l_int32 size)
dewarpaExtendArraysToSize()
FILE * fopenReadFromMemory(const l_uint8 *data, size_t size)
fopenReadFromMemory()
void dewarpDestroy(L_DEWARP **pdew)
dewarpDestroy()
l_ok dewarpWriteMem(l_uint8 **pdata, size_t *psize, L_DEWARP *dew)
dewarpWriteMem()
NUMA * numaCreate(l_int32 n)
numaCreate()
l_ok dewarpaWrite(const char *filename, L_DEWARPA *dewa)
dewarpaWrite()
l_ok dewarpaSetCurvatures(L_DEWARPA *dewa, l_int32 max_linecurv, l_int32 min_diff_linecurv, l_int32 max_diff_linecurv, l_int32 max_edgecurv, l_int32 max_diff_edgecurv, l_int32 max_edgeslope)
dewarpaSetCurvatures()
void * reallocNew(void **pindata, l_int32 oldsize, l_int32 newsize)
reallocNew()
void dewarpaDestroy(L_DEWARPA **pdewa)
dewarpaDestroy()
l_ok dewarpaSetMaxDistance(L_DEWARPA *dewa, l_int32 maxdist)
dewarpaSetMaxDistance()
l_ok dewarpBuildPageModel(L_DEWARP *dew, const char *debugfile)
dewarpBuildPageModel()
l_ok dewarpaListPages(L_DEWARPA *dewa)
dewarpaListPages()
l_ok numaGetIValue(NUMA *na, l_int32 index, l_int32 *pival)
numaGetIValue()
#define DEWARP_VERSION_NUMBER
l_int32 min_diff_linecurv
l_int32 numaGetCount(NUMA *na)
numaGetCount()
struct FPix * fullydispar
l_ok dewarpMinimize(L_DEWARP *dew)
dewarpMinimize()
l_ok dewarpaWriteMem(l_uint8 **pdata, size_t *psize, L_DEWARPA *dewa)
dewarpaWriteMem()
L_DEWARPA * dewarpaReadMem(const l_uint8 *data, size_t size)
dewarpaReadMem()
FILE * fopenWriteWinTempfile()
fopenWriteWinTempfile()
L_DEWARPA * dewarpaRead(const char *filename)
dewarpaRead()
L_DEWARPA * dewarpaCreate(l_int32 nptrs, l_int32 sampling, l_int32 redfactor, l_int32 minlines, l_int32 maxdist)
dewarpaCreate()
PIX * pixClone(PIX *pixs)
pixClone()
l_ok dewarpWriteStream(FILE *fp, L_DEWARP *dew)
dewarpWriteStream()
L_DEWARPA * dewarpaReadStream(FILE *fp)
dewarpaReadStream()
void pixDestroy(PIX **ppix)
pixDestroy()
struct FPix * sampydispar
L_DEWARP * dewarpReadStream(FILE *fp)
dewarpReadStream()
void numaDestroy(NUMA **pna)
numaDestroy()
L_DEWARP * dewarpRead(const char *filename)
dewarpRead()
FILE * fopenWriteStream(const char *filename, const char *modestring)
fopenWriteStream()
FILE * fopenReadStream(const char *filename)
fopenReadStream()
l_uint8 * l_binaryReadStream(FILE *fp, size_t *pnbytes)
l_binaryReadStream()
l_ok dewarpaUseBothArrays(L_DEWARPA *dewa, l_int32 useboth)
dewarpaUseBothArrays()
L_DEWARPA * dewarpaCreateFromPixacomp(PIXAC *pixac, l_int32 useboth, l_int32 sampling, l_int32 minlines, l_int32 maxdist)
dewarpaCreateFromPixacomp()
l_ok dewarpaInsertDewarp(L_DEWARPA *dewa, L_DEWARP *dew)
dewarpaInsertDewarp()
L_DEWARP * dewarpReadMem(const l_uint8 *data, size_t size)
dewarpReadMem()
struct FPix * fullvdispar
l_ok dewarpWrite(const char *filename, L_DEWARP *dew)
dewarpWrite()
l_ok dewarpaSetCheckColumns(L_DEWARPA *dewa, l_int32 check_columns)
dewarpaSetCheckColumns()
l_int32 pixacompGetCount(PIXAC *pixac)
pixacompGetCount()
struct FPix * fullhdispar
FPIX * fpixReadStream(FILE *fp)
fpixReadStream()
void fpixDestroy(FPIX **pfpix)
fpixDestroy()
l_ok dewarpaInsertRefModels(L_DEWARPA *dewa, l_int32 notests, l_int32 debug)
dewarpaInsertRefModels()
L_DEWARP * dewarpCreateRef(l_int32 pageno, l_int32 refpage)
dewarpCreateRef()
L_DEWARP * dewarpaGetDewarp(L_DEWARPA *dewa, l_int32 index)
dewarpaGetDewarp()