55 #include "allheaders.h" 58 l_int32 x, l_int32 y,
L_DEWARP **pdew,
59 const char *debugfile);
121 const char *debugfile)
126 PROCNAME(
"dewarpaApplyDisparity");
131 return ERROR_INT(
"&pixd not defined", procName, 1);
134 L_WARNING(
"invalid grayin = %d; clipping at 255\n", procName, grayin);
140 return ERROR_INT(
"no model available", procName, 1);
145 return ERROR_INT(
"pixv not made", procName, 1);
150 pixDisplayWithTitle(pixv, 300, 0,
"pixv", 1);
153 pixWriteDebug(
"/tmp/lept/dewapply/001.png",
pixs, IFF_PNG);
154 pixWriteDebug(
"/tmp/lept/dewapply/002.png", pixv, IFF_PNG);
159 if (dew->
hvalid == FALSE) {
160 L_INFO(
"invalid horiz model for page %d\n", procName,
pageno);
166 pixDisplayWithTitle(pixh, 600, 0,
"pixh", 1);
167 pixWriteDebug(
"/tmp/lept/dewapply/003.png", pixh, IFF_PNG);
170 L_ERROR(
"horiz disparity failed on page %d\n",
180 "Dewarp Apply Disparity", debugfile);
181 fprintf(stderr,
"pdf file: %s\n", debugfile);
220 const char *debugfile)
222 l_int32 ncols,
debug;
226 PROCNAME(
"dewarpaApplyInit");
229 return ERROR_INT(
"&dew not defined", procName, 1);
233 return ERROR_INT(
"dewa not defined", procName, 1);
235 return ERROR_INT(
"invalid pageno", procName, 1);
237 return ERROR_INT(
"pixs not defined", procName, 1);
240 debug = (debugfile) ? 1 : 0;
250 L_INFO(
"no valid dew model for page %d\n", procName,
pageno);
260 if (dew2->
vvalid == FALSE)
261 return ERROR_INT(
"no model; shouldn't happen", procName, 1);
272 L_INFO(
"found %d columns; not correcting horiz disparity\n",
312 l_int32 i, j,
w,
h, d, fw, fh, wpld, wplf, isrc, val8;
313 l_uint32 *datad, *lined;
314 l_float32 *dataf, *linef;
319 PROCNAME(
"pixApplyVertDisparity");
322 return (
PIX *)ERROR_PTR(
"dew not defined", procName, NULL);
324 return (
PIX *)ERROR_PTR(
"pixs not defined", procName, NULL);
326 if (d != 1 && d != 8 && d != 32)
327 return (
PIX *)ERROR_PTR(
"pix not 1, 8 or 32 bpp", procName, NULL);
329 return (
PIX *)ERROR_PTR(
"fullvdispar not defined", procName, NULL);
331 if (fw <
w || fh <
h) {
332 fprintf(stderr,
"fw = %d, w = %d, fh = %d, h = %d\n", fw,
w, fh,
h);
333 return (
PIX *)ERROR_PTR(
"invalid fpix size", procName, NULL);
343 wpld = pixGetWpl(pixd);
347 for (i = 0; i <
h; i++) {
348 lined = datad + i * wpld;
349 linef = dataf + i * wplf;
350 for (j = 0; j <
w; j++) {
351 isrc = (l_int32)(i - linef[j] + 0.5);
353 isrc = L_MIN(L_MAX(isrc, 0),
h - 1);
354 if (isrc >= 0 && isrc <
h) {
362 for (i = 0; i <
h; i++) {
363 lined = datad + i * wpld;
364 linef = dataf + i * wplf;
365 for (j = 0; j <
w; j++) {
366 isrc = (l_int32)(i - linef[j] + 0.5);
368 isrc = L_MIN(L_MAX(isrc, 0),
h - 1);
369 if (isrc >= 0 && isrc <
h) {
377 for (i = 0; i <
h; i++) {
378 lined = datad + i * wpld;
379 linef = dataf + i * wplf;
380 for (j = 0; j <
w; j++) {
381 isrc = (l_int32)(i - linef[j] + 0.5);
383 isrc = L_MIN(L_MAX(isrc, 0),
h - 1);
384 if (isrc >= 0 && isrc <
h)
422 l_int32 i, j,
w,
h, d, fw, fh, wpls, wpld, wplf, jsrc, val8;
423 l_uint32 *datas, *lines, *datad, *lined;
424 l_float32 *dataf, *linef;
428 PROCNAME(
"pixApplyHorizDisparity");
431 return (
PIX *)ERROR_PTR(
"dew not defined", procName,
pixs);
433 return (
PIX *)ERROR_PTR(
"pixs not defined", procName, NULL);
435 if (d != 1 && d != 8 && d != 32)
436 return (
PIX *)ERROR_PTR(
"pix not 1, 8 or 32 bpp", procName, NULL);
438 return (
PIX *)ERROR_PTR(
"fullhdispar not defined", procName, NULL);
440 if (fw <
w || fh <
h) {
441 fprintf(stderr,
"fw = %d, w = %d, fh = %d, h = %d\n", fw,
w, fh,
h);
442 return (
PIX *)ERROR_PTR(
"invalid fpix size", procName, NULL);
453 wpls = pixGetWpl(
pixs);
454 wpld = pixGetWpl(pixd);
457 for (i = 0; i <
h; i++) {
458 lines = datas + i * wpls;
459 lined = datad + i * wpld;
460 linef = dataf + i * wplf;
461 for (j = 0; j <
w; j++) {
462 jsrc = (l_int32)(j - linef[j] + 0.5);
464 jsrc = L_MIN(L_MAX(jsrc, 0),
w - 1);
465 if (jsrc >= 0 && jsrc <
w) {
472 for (i = 0; i <
h; i++) {
473 lines = datas + i * wpls;
474 lined = datad + i * wpld;
475 linef = dataf + i * wplf;
476 for (j = 0; j <
w; j++) {
477 jsrc = (l_int32)(j - linef[j] + 0.5);
479 jsrc = L_MIN(L_MAX(jsrc, 0),
w - 1);
480 if (jsrc >= 0 && jsrc <
w) {
487 for (i = 0; i <
h; i++) {
488 lines = datas + i * wpls;
489 lined = datad + i * wpld;
490 linef = dataf + i * wplf;
491 for (j = 0; j <
w; j++) {
492 jsrc = (l_int32)(j - linef[j] + 0.5);
494 jsrc = L_MIN(L_MAX(jsrc, 0),
w - 1);
495 if (jsrc >= 0 && jsrc <
w)
496 lined[j] = lines[jsrc];
545 const char *debugfile)
552 PROCNAME(
"dewarpaApplyDisparityBoxa");
557 return ERROR_INT(
"&boxad not defined", procName, 1);
562 return ERROR_INT(
"no model available", procName, 1);
567 return ERROR_INT(
"boxa1 not made", procName, 1);
573 if (debugfile && mapdir != 1)
574 L_INFO(
"Reverse map direction; no debug output\n", procName);
575 debug_out = debugfile && (mapdir == 1);
582 pixWriteDebug(
"/tmp/lept/dewboxa/01.png", pix1, IFF_PNG);
587 pixWriteDebug(
"/tmp/lept/dewboxa/02.png", pix1, IFF_PNG);
593 if (dew->
hvalid == FALSE) {
594 L_INFO(
"invalid horiz model for page %d\n", procName,
pageno);
598 L_ERROR(
"horiz disparity fails on page %d\n", procName,
pageno);
607 pixWriteDebug(
"/tmp/lept/dewboxa/03.png", pix1, IFF_PNG);
620 "Dewarp Apply Disparity Boxa", debugfile);
621 fprintf(stderr,
"Dewarp Apply Disparity Boxa pdf file: %s\n",
648 l_int32 x, y,
w,
h, ib, ip, nbox, wpl;
650 l_float32 *data, *line;
656 PROCNAME(
"boxaApplyDisparity");
659 return (
BOXA *)ERROR_PTR(
"dew not defined", procName, NULL);
661 return (
BOXA *)ERROR_PTR(
"boxa not defined", procName, NULL);
662 if (direction == L_VERT)
664 else if (direction == L_HORIZ)
667 return (
BOXA *)ERROR_PTR(
"invalid direction", procName, NULL);
669 return (
BOXA *)ERROR_PTR(
"full disparity not defined", procName, NULL);
678 for (ib = 0; ib < nbox; ib++) {
682 for (ip = 0; ip < 4; ip++) {
684 line = data + y * wpl;
685 if (direction == L_VERT) {
733 PROCNAME(
"dewarpMinimize");
736 return ERROR_INT(
"dew not defined", procName, 1);
744 return ERROR_INT(
"dewt not found", procName, 1);
790 l_int32 width, height, fw, fh, deltaw, deltah,
redfactor;
791 FPIX *fpixt1, *fpixt2;
793 PROCNAME(
"dewarpPopulateFullRes");
796 return ERROR_INT(
"dew not defined", procName, 1);
798 return ERROR_INT(
"no sampled vert disparity", procName, 1);
813 if (width > fw || height > fw)
818 if (width > fw || height > fw)
823 deltaw = width - dew->
sampling * (dew->
nx - 1) + 2;
824 deltah = height - dew->
sampling * (dew->
ny - 1) + 2;
838 if (deltah == 0 && deltaw == 0) {
857 if (deltah == 0 && deltaw == 0) {
899 fpixSampledDisparity(
FPIX *fpixs,
902 l_int32
w,
h, wd, hd, i, j, is, js;
906 PROCNAME(
"fpixSampledDisparity");
909 return (
FPIX *)ERROR_PTR(
"fpixs not defined", procName, NULL);
911 return (
FPIX *)ERROR_PTR(
"sampling < 1", procName, NULL);
916 if (wd < 3 || hd < 3)
917 return (
FPIX *)ERROR_PTR(
"wd < 3 or hd < 3", procName, NULL);
919 for (i = 0; i < hd; i++) {
921 if (is >=
h)
continue;
922 for (j = 0; j < wd; j++) {
924 if (js >=
w)
continue;
958 fpixExtraHorizDisparity(
FPIX *fpixv,
962 l_int32
w,
h, i, j, fw, wpl, maxloc;
963 l_float32 val1, val2, vdisp, vdisp0, maxval;
964 l_float32 *data, *line, *fadiff;
968 PROCNAME(
"fpixExtraHorizDisparity");
971 return (
FPIX *)ERROR_PTR(
"fpixv not defined", procName, NULL);
973 return (
FPIX *)ERROR_PTR(
"&xwid not defined", procName, NULL);
975 factor = DEFAULT_SLOPE_FACTOR;
984 for (j = 0; j <
w; j++) {
987 vdisp = factor * (val2 - val1) / (l_float32)
h;
988 if (j == 0) vdisp0 = vdisp;
989 vdisp = vdisp0 - vdisp;
993 *pxwid = (l_int32)(maxval + 0.5);
1000 for (i = 0; i <
h; i++) {
1001 line = data + i * wpl;
1002 for (j = 0; j < fw; j++) {
1004 line[j] = fadiff[j];
static PIX * pixApplyVertDisparity(L_DEWARP *dew, PIX *pixs, l_int32 grayin)
pixApplyVertDisparity()
struct FPix * sampvdispar
l_ok dewarpaApplyDisparityBoxa(L_DEWARPA *dewa, l_int32 pageno, PIX *pixs, BOXA *boxas, l_int32 mapdir, l_int32 x, l_int32 y, BOXA **pboxad, const char *debugfile)
dewarpaApplyDisparityBoxa()
static PIX * pixApplyHorizDisparity(L_DEWARP *dew, PIX *pixs, l_int32 grayin)
pixApplyHorizDisparity()
struct FPix * samphdispar
PIX * pixConvertTo1(PIX *pixs, l_int32 threshold)
pixConvertTo1()
l_int32 lept_mkdir(const char *subdir)
lept_mkdir()
PIX * pixConvertTo32(PIX *pixs)
pixConvertTo32()
l_ok fpixGetPixel(FPIX *fpix, l_int32 x, l_int32 y, l_float32 *pval)
fpixGetPixel()
l_ok ptaAddPt(PTA *pta, l_float32 x, l_float32 y)
ptaAddPt()
l_ok numaAddNumber(NUMA *na, l_float32 val)
numaAddNumber()
static l_int32 dewarpaApplyInit(L_DEWARPA *dewa, l_int32 pageno, PIX *pixs, l_int32 x, l_int32 y, L_DEWARP **pdew, const char *debugfile)
dewarpaApplyInit()
l_ok dewarpaApplyDisparity(L_DEWARPA *dewa, l_int32 pageno, PIX *pixs, l_int32 grayin, l_int32 x, l_int32 y, PIX **ppixd, const char *debugfile)
dewarpaApplyDisparity()
PTA * ptaCreate(l_int32 n)
ptaCreate()
void ** pixGetLinePtrs(PIX *pix, l_int32 *psize)
pixGetLinePtrs()
#define GET_DATA_FOUR_BYTES(pdata, n)
l_ok fpixAddMultConstant(FPIX *fpix, l_float32 addc, l_float32 multc)
fpixAddMultConstant()
l_ok fpixGetDimensions(FPIX *fpix, l_int32 *pw, l_int32 *ph)
fpixGetDimensions()
BOXA * boxaCopy(BOXA *boxa, l_int32 copyflag)
boxaCopy()
NUMA * numaCreate(l_int32 n)
numaCreate()
void boxaDestroy(BOXA **pboxa)
boxaDestroy()
l_uint32 * pixGetData(PIX *pix)
pixGetData()
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 pixSetAllGray(PIX *pix, l_int32 grayval)
pixSetAllGray()
l_ok fpixSetPixel(FPIX *fpix, l_int32 x, l_int32 y, l_float32 val)
fpixSetPixel()
FPIX * fpixAddSlopeBorder(FPIX *fpixs, l_int32 left, l_int32 right, l_int32 top, l_int32 bot)
fpixAddSlopeBorder()
static BOXA * boxaApplyDisparity(L_DEWARP *dew, BOXA *boxa, l_int32 direction, l_int32 mapdir)
boxaApplyDisparity()
l_ok dewarpMinimize(L_DEWARP *dew)
dewarpMinimize()
l_ok boxaAddBox(BOXA *boxa, BOX *box, l_int32 copyflag)
boxaAddBox()
#define SET_DATA_BYTE(pdata, n, val)
l_ok dewarpPopulateFullRes(L_DEWARP *dew, PIX *pix, l_int32 x, l_int32 y)
dewarpPopulateFullRes()
#define GET_DATA_BYTE(pdata, n)
l_int32 fpixGetWpl(FPIX *fpix)
fpixGetWpl()
PIX * pixClone(PIX *pixs)
pixClone()
void pixDestroy(PIX **ppix)
pixDestroy()
BOX * boxaGetBox(BOXA *boxa, l_int32 index, l_int32 accessflag)
boxaGetBox()
FPIX * fpixScaleByInteger(FPIX *fpixs, l_int32 factor)
fpixScaleByInteger()
l_float32 * fpixGetData(FPIX *fpix)
fpixGetData()
void numaDestroy(NUMA **pna)
numaDestroy()
l_ok pixGetDimensions(const PIX *pix, l_int32 *pw, l_int32 *ph, l_int32 *pd)
pixGetDimensions()
PTA * boxConvertToPta(BOX *box, l_int32 ncorners)
boxConvertToPta()
FPIX * fpixCreate(l_int32 width, l_int32 height)
fpixCreate()
l_float32 * numaGetFArray(NUMA *na, l_int32 copyflag)
numaGetFArray()
l_ok pixRenderBoxaArb(PIX *pix, BOXA *boxa, l_int32 width, l_uint8 rval, l_uint8 gval, l_uint8 bval)
pixRenderBoxaArb()
l_ok pixCountTextColumns(PIX *pixs, l_float32 deltafract, l_float32 peakfract, l_float32 clipfract, l_int32 *pncols, PIXA *pixadb)
pixCountTextColumns()
struct FPix * fullvdispar
void ptaDestroy(PTA **ppta)
ptaDestroy()
BOXA * boxaCreate(l_int32 n)
boxaCreate()
FPIX * fpixCopy(FPIX *fpixd, FPIX *fpixs)
fpixCopy()
void boxDestroy(BOX **pbox)
boxDestroy()
l_int32 boxaGetCount(BOXA *boxa)
boxaGetCount()
struct FPix * fullhdispar
l_ok ptaGetIPt(PTA *pta, l_int32 index, l_int32 *px, l_int32 *py)
ptaGetIPt()
l_ok numaGetMax(NUMA *na, l_float32 *pmaxval, l_int32 *pimaxloc)
numaGetMax()
l_int32 lept_rmdir(const char *subdir)
lept_rmdir()
void fpixDestroy(FPIX **pfpix)
fpixDestroy()
l_ok dewarpaInsertRefModels(L_DEWARPA *dewa, l_int32 notests, l_int32 debug)
dewarpaInsertRefModels()
l_ok dewarpDebug(L_DEWARP *dew, const char *subdirs, l_int32 index)
dewarpDebug()
#define SET_DATA_BIT(pdata, n)
L_DEWARP * dewarpaGetDewarp(L_DEWARPA *dewa, l_int32 index)
dewarpaGetDewarp()
BOX * ptaConvertToBox(PTA *pta)
ptaConvertToBox()