75 #include "allheaders.h" 79 static const l_int32 MinWidth = 100;
80 static const l_int32 MinHeight = 100;
108 l_int32 w, h, htfound, tlfound;
109 PIX *pixr, *pix1, *pix2;
120 PROCNAME(
"pixGetRegionsBinary");
122 if (ppixhm) *ppixhm = NULL;
123 if (ppixtm) *ppixtm = NULL;
124 if (ppixtb) *ppixtb = NULL;
125 if (!pixs || pixGetDepth(pixs) != 1)
126 return ERROR_INT(
"pixs undefined or not 1 bpp", procName, 1);
128 if (w < MinWidth || h < MinHeight) {
129 L_ERROR(
"pix too small: w = %d, h = %d\n", procName, w, h);
160 pixOr(pixhm, pixhm, pix1);
207 ptaaWrite(
"/tmp/lept/pageseg/tb_outlines.ptaa", ptaa, 1);
209 cmap = pixGetColormap(pix1);
217 BOXA *bahm, *batm, *batb;
221 boxaWrite(
"/tmp/lept/pageseg/htmask.boxa", bahm);
222 boxaWrite(
"/tmp/lept/pageseg/textmask.boxa", batm);
223 boxaWrite(
"/tmp/lept/pageseg/textblock.boxa", batb);
230 "/tmp/lept/pageseg/debug.pdf");
231 L_INFO(
"Writing debug pdf to /tmp/lept/pageseg/debug.pdf\n", procName);
296 PIX *pix1, *pix2, *pixhs, *pixhm, *pixd;
298 PROCNAME(
"pixGenerateHalftoneMask");
300 if (ppixtext) *ppixtext = NULL;
301 if (phtfound) *phtfound = 0;
302 if (!pixs || pixGetDepth(pixs) != 1)
303 return (
PIX *)ERROR_PTR(
"pixs undefined or not 1 bpp", procName, NULL);
305 if (w < MinWidth || h < MinHeight) {
306 L_ERROR(
"pix too small: w = %d, h = %d\n", procName, w, h);
332 if (phtfound && !empty)
338 *ppixtext =
pixCopy(NULL, pixs);
379 PIX *pix1, *pix2, *pixvws, *pixd;
381 PROCNAME(
"pixGenTextlineMask");
383 if (ptlfound) *ptlfound = 0;
385 return (
PIX *)ERROR_PTR(
"&pixvws not defined", procName, NULL);
387 if (!pixs || pixGetDepth(pixs) != 1)
388 return (
PIX *)ERROR_PTR(
"pixs undefined or not 1 bpp", procName, NULL);
390 if (w < MinWidth || h < MinHeight) {
391 L_ERROR(
"pix too small: w = %d, h = %d\n", procName, w, h);
470 PIX *pix1, *pix2, *pix3, *pixd;
472 PROCNAME(
"pixGenTextblockMask");
474 if (!pixs || pixGetDepth(pixs) != 1)
475 return (
PIX *)ERROR_PTR(
"pixs undefined or not 1 bpp", procName, NULL);
477 if (w < MinWidth || h < MinHeight) {
478 L_ERROR(
"pix too small: w = %d, h = %d\n", procName, w, h);
482 return (
PIX *)ERROR_PTR(
"pixvws not defined", procName, NULL);
566 l_int32 flag, nbox, intersects;
567 l_int32 w, h, bx, by, bw, bh, left, right, top, bottom;
568 PIX *pixb, *pixb2, *pixseed, *pixsf, *pixm, *pix1, *pixg2;
569 BOX *box, *boxfg, *boxin, *boxd;
572 PROCNAME(
"pixFindPageForeground");
575 return (
BOX *)ERROR_PTR(
"pixs not defined", procName, NULL);
577 if (w < MinWidth || h < MinHeight) {
578 L_ERROR(
"pix too small: w = %d, h = %d\n", procName, w, h);
587 flag = (showmorph) ? -1 : 0;
595 if (display) pixDisplay(pixm, 100, 100);
603 if (flag == -1) flag = -2;
612 left = (bx > mindist) ? erasedist : 0;
613 right = (w - bx - bw > mindist) ? erasedist : 0;
614 top = (by > mindist) ? erasedist : 0;
615 bottom = (h - by - bh > mindist) ? erasedist : 0;
630 boxin =
boxCreate(0.1 * w, 0, 0.8 * w, h);
633 L_INFO(
"found only noise on page %d\n", procName, pagenum);
641 L_INFO(
"no fg region found for page %d\n", procName, pagenum);
650 snprintf(buf,
sizeof(buf),
"lept/%s", pdfdir);
655 snprintf(buf,
sizeof(buf),
"/tmp/lept/%s/%04d.png",
657 if (display) pixDisplay(pixg2, 700, 100);
658 pixWrite(buf, pixg2, IFF_PNG);
706 l_int32 ncomp, i, xoff, yoff;
707 BOXA *boxa1, *boxa2, *boxat1, *boxat2, *boxad;
709 PIX *pix, *pix1, *pix2, *pixdb;
710 PIXA *pixa1, *pixadb;
712 PROCNAME(
"pixSplitIntoCharacters");
714 if (pboxa) *pboxa = NULL;
715 if (ppixa) *ppixa = NULL;
716 if (ppixdebug) *ppixdebug = NULL;
717 if (!pixs || pixGetDepth(pixs) != 1)
718 return ERROR_INT(
"pixs not defined or not 1 bpp", procName, 1);
736 pixadb = (ppixdebug) ?
pixaCreate(ncomp) : NULL;
737 for (i = 0; i < ncomp; i++) {
805 l_int32 w, h, n2, i, firstmin, xmin, xshift;
806 l_int32 nmin, nleft, nright, nsplit, isplit, ncomp;
807 l_int32 *array1, *array2;
810 NUMA *na1, *na2, *nasplit;
813 PROCNAME(
"pixSplitComponentsWithProfile");
815 if (ppixdebug) *ppixdebug = NULL;
816 if (!pixs || pixGetDepth(pixs) != 1)
817 return (
BOXA *)ERROR_PTR(
"pixa undefined or not 1 bpp", procName, NULL);
843 firstmin = (array1[array2[0]] > array1[array2[1]]) ? 1 : 2;
845 for (i = firstmin; i < n2 - 1; i+= 2) {
848 if (xmin + 2 >= w)
break;
849 nleft = array1[xmin - 2];
850 nright = array1[xmin + 2];
853 "Splitting: xmin = %d, w = %d; nl = %d, nmin = %d, nr = %d\n",
854 xmin, w, nleft, nmin, nright);
856 if (nleft - nmin >= mindel && nright - nmin >= mindel)
862 if (ppixdebug && nsplit > 0) {
864 gplotSimple1(na1, GPLOT_PNG,
"/tmp/lept/split/split", NULL);
881 for (i = 0, xshift = 0; i < nsplit; i++) {
883 box =
boxCreate(xshift, 0, isplit - xshift, h);
887 box =
boxCreate(xshift, 0, w - xshift, h);
894 for (i = 0; i < ncomp; i++) {
966 l_int32 res, csize, empty;
967 BOXA *boxa1, *boxa2, *boxa3;
968 PIX *pix1, *pix2, *pix3;
969 PIXA *pixa1, *pixa2, *pixa3;
971 PROCNAME(
"pixExtractTextlines");
974 return (
PIXA *)ERROR_PTR(
"pixs not defined", procName, NULL);
977 if (pixGetDepth(pixs) > 1) {
989 L_INFO(
"no fg pixels in input image\n", procName);
1003 if ((res = pixGetXRes(pixs)) == 0) {
1004 L_INFO(
"Resolution is not set: setting to 300 ppi\n", procName);
1007 csize = L_MIN(120., 60.0 * res / 300.0);
1008 snprintf(buf,
sizeof(buf),
"c%d.1 + o%d.1", csize, csize / 3);
1021 minw = (minw != 0) ? minw : (l_int32)(0.12 * res);
1022 minh = (minh != 0) ? minh : (l_int32)(0.07 * res);
1104 l_int32 res, csize, empty;
1105 BOXA *boxa1, *boxa2, *boxa3;
1107 PIX *pix1, *pix2, *pix3;
1108 PIXA *pixa1, *pixa2;
1110 PROCNAME(
"pixExtractRawTextlines");
1113 return (
PIXA *)ERROR_PTR(
"pixs not defined", procName, NULL);
1116 if ((res = pixGetXRes(pixs)) == 0) {
1117 L_INFO(
"Resolution is not set: setting to 300 ppi\n", procName);
1120 maxw = (maxw != 0) ? maxw : (l_int32)(0.5 * res);
1121 maxh = (maxh != 0) ? maxh : (l_int32)(0.5 * res);
1124 if (pixGetDepth(pixs) > 1) {
1136 L_INFO(
"no fg pixels in input image\n", procName);
1149 csize = L_MIN(120., 60.0 * res / 300.0);
1150 snprintf(buf,
sizeof(buf),
"c%d.1", csize);
1225 l_float32 deltafract,
1226 l_float32 peakfract,
1227 l_float32 clipfract,
1231 l_int32 w, h, res, i, n, npeak;
1232 l_float32 scalefact, redfact, minval, maxval, val4, val5, fract;
1234 NUMA *na1, *na2, *na3, *na4, *na5;
1235 PIX *pix1, *pix2, *pix3, *pix4, *pix5;
1237 PROCNAME(
"pixCountTextColumns");
1240 return ERROR_INT(
"&ncols not defined", procName, 1);
1242 if (!pixs || pixGetDepth(pixs) != 1)
1243 return ERROR_INT(
"pixs not defined or not 1 bpp", procName, 1);
1244 if (deltafract < 0.15 || deltafract > 0.75)
1245 L_WARNING(
"deltafract not in [0.15 ... 0.75]\n", procName);
1246 if (peakfract < 0.25 || peakfract > 0.9)
1247 L_WARNING(
"peakfract not in [0.25 ... 0.9]\n", procName);
1248 if (clipfract < 0.0 || clipfract >= 0.5)
1249 return ERROR_INT(
"clipfract not in [0.0 ... 0.5)\n", procName, 1);
1253 if ((res = pixGetXRes(pixs)) == 0) {
1254 L_WARNING(
"resolution undefined; set to 300\n", procName);
1259 L_WARNING(
"resolution %d very low\n", procName, res);
1260 scalefact = 37.5 / res;
1261 pix1 =
pixScale(pixs, scalefact, scalefact);
1263 redfact = (l_float32)res / 37.5;
1266 else if (redfact < 4.0)
1268 else if (redfact < 8.0)
1270 else if (redfact < 16.0)
1279 box =
boxCreate(clipfract * w, clipfract * h,
1280 (1.0 - 2 * clipfract) * w, (1.0 - 2 * clipfract) * h);
1298 pix5 =
pixRead(
"/tmp/lept/plot.png");
1309 fract = (l_float32)(maxval - minval) / h;
1311 L_INFO(
"very little content on page; 0 text columns\n", procName);
1318 for (i = 0, npeak = 0; i < n; i++) {
1321 if (val4 > 0.3 && val4 < 0.7 && val5 >= peakfract) {
1323 L_INFO(
"Peak(loc,val) = (%5.3f,%5.3f)\n", procName, val4, val5);
1326 *pncols = npeak + 1;
1377 l_int32 i, empty, maxw, w, h, n1, n2, n3, minlines, big_comp;
1378 l_float32 ratio1, ratio2;
1380 BOXA *boxa1, *boxa2, *boxa3, *boxa4, *boxa5;
1381 PIX *pix1, *pix2, *pix3, *pix4, *pix5, *pix6, *pix7;
1385 PROCNAME(
"pixDecideIfText");
1388 return ERROR_INT(
"&istext not defined", procName, 1);
1391 return ERROR_INT(
"pixs not defined", procName, 1);
1395 return ERROR_INT(
"pix1 not made", procName, 1);
1400 L_INFO(
"pix is empty\n", procName);
1403 w = pixGetWidth(pix1);
1413 for (i = 0; i < 81; i++)
1422 pix3 =
pixHMT(NULL, pix1, sel1);
1424 pix5 =
pixXor(NULL, pix1, pix4);
1493 ratio1 = (l_float32)maxw / (l_float32)w;
1494 ratio2 = (l_float32)n3 / (l_float32)n2;
1495 minlines = L_MAX(2, h / 125);
1496 if (big_comp || ratio1 < 0.6 || ratio2 < 0.8 || n3 < minlines)
1501 if (*pistext == 1) {
1502 L_INFO(
"This is text: \n n1 = %d, n2 = %d, n3 = %d, " 1503 "minlines = %d\n maxw = %d, ratio1 = %4.2f, h = %d, " 1504 "big_comp = %d\n", procName, n1, n2, n3, minlines,
1505 maxw, ratio1, h, big_comp);
1507 L_INFO(
"This is not text: \n n1 = %d, n2 = %d, n3 = %d, " 1508 "minlines = %d\n maxw = %d, ratio1 = %4.2f, h = %d, " 1509 "big_comp = %d\n", procName, n1, n2, n3, minlines,
1510 maxw, ratio1, h, big_comp);
1547 PROCNAME(
"pixFindThreshFgExtent");
1549 if (ptop) *ptop = 0;
1550 if (pbot) *pbot = 0;
1552 return ERROR_INT(
"nothing to determine", procName, 1);
1553 if (!pixs || pixGetDepth(pixs) != 1)
1554 return ERROR_INT(
"pixs not defined or not 1 bpp", procName, 1);
1560 for (i = 0; i < n; i++) {
1561 if (array[i] >= thresh) {
1568 for (i = n - 1; i >= 0; i--) {
1569 if (array[i] >= thresh) {
1634 l_int32 empty, nhb, nvb, nvw, score, htfound;
1635 PIX *pix1, *pix2, *pix3, *pix4, *pix5, *pix6, *pix7, *pix8, *pix9;
1637 PROCNAME(
"pixDecideIfTable");
1640 return ERROR_INT(
"&score not defined", procName, 1);
1643 return ERROR_INT(
"pixs not defined", procName, 1);
1654 L_INFO(
"pix has an image region\n", procName);
1660 return ERROR_INT(
"pix1 not made", procName, 1);
1666 L_INFO(
"pix is empty\n", procName);
1701 pix6 =
pixOr(NULL, pix3, pix5);
1740 if (nhb > 1) score++;
1741 if (nvb > 2) score++;
1742 if (nvw > 3) score++;
1743 if (nvw > 6) score++;
1780 l_float32 cropfract,
1786 PIX *pix1, *pix2, *pix3, *pix4, *pix5;
1788 PROCNAME(
"pixPrepare1bpp");
1791 return (
PIX *)ERROR_PTR(
"pixs not defined", procName, NULL);
1800 box1 =
boxCreate((l_int32)(cropfract * w), (l_int32)(cropfract * h),
1801 (l_int32)((1.0 - 2 * cropfract) * w),
1802 (l_int32)((1.0 - 2 * cropfract) * h));
1808 if (pixGetDepth(pixs) > 1) {
1814 L_INFO(
"pix cleaning failed\n", procName);
1828 if ((res = pixGetXRes(pixs)) == 0) {
1829 L_WARNING(
"Resolution is not set: using 300 ppi\n", procName);
1832 if (res != outres) {
1833 factor = (l_float32)outres / (l_float32)res;
1834 pix5 =
pixScale(pix4, factor, factor);
1868 l_int32 w, h, sampling;
1871 PIX *pix1, *pix2, *pixm;
1873 PROCNAME(
"pixEstimateBackground");
1876 return ERROR_INT(
"&bg not defined", procName, 1);
1878 if (!pixs || pixGetDepth(pixs) != 8)
1879 return ERROR_INT(
"pixs not defined or not 8 bpp", procName, 1);
1880 if (darkthresh > 128)
1881 L_WARNING(
"darkthresh unusually large\n", procName);
1882 if (edgecrop < 0.0 || edgecrop >= 1.0)
1883 return ERROR_INT(
"edgecrop not in [0.0 ... 1.0)", procName, 1);
1889 if (edgecrop > 0.0) {
1890 box =
boxCreate(0.5 * edgecrop * w, 0.5 * edgecrop * h,
1891 (1.0 - edgecrop) * w, (1.0 - edgecrop) * h);
1899 sampling = L_MAX(1, (l_int32)sqrt((l_float64)(w * h) / 50000. + 0.5));
1903 if (darkthresh > 0) {
1909 *pbg = (l_int32)(fbg + 0.5);
1953 l_int32 i, op, bx, by, bw, bh;
1958 PROCNAME(
"pixFindLargeRectangles");
1960 if (ppixdb) *ppixdb = NULL;
1962 return ERROR_INT(
"&boxa not defined", procName, 1);
1964 if (!pixs || pixGetDepth(pixs) != 1)
1965 return ERROR_INT(
"pixs not defined or not 1 bpp", procName, 1);
1966 if (polarity != 0 && polarity != 1)
1967 return ERROR_INT(
"invalid polarity", procName, 1);
1969 L_WARNING(
"large num rectangles = %d requested; using 1000\n",
1978 for (i = 0; i < nrect; i++) {
1981 L_ERROR(
"failure in pixFindLargestRectangle\n", procName);
2054 l_int32 i, j, w, h, d, wpls, val;
2055 l_int32 wp, hp, w1, w2, h1, h2, wmin, hmin, area1, area2;
2057 l_int32 maxarea, wmax, hmax, vertdist, horizdist, prevfg;
2059 l_uint32 *datas, *lines;
2060 l_uint32 **linew, **lineh;
2065 PROCNAME(
"pixFindLargestRectangle");
2067 if (ppixdb) *ppixdb = NULL;
2069 return ERROR_INT(
"&box not defined", procName, 1);
2072 return ERROR_INT(
"pixs not defined", procName, 1);
2075 return ERROR_INT(
"pixs not 1 bpp", procName, 1);
2076 if (polarity != 0 && polarity != 1)
2077 return ERROR_INT(
"invalid polarity", procName, 1);
2080 lowestfg = (l_int32 *)LEPT_CALLOC(w,
sizeof(l_int32));
2081 for (i = 0; i < w; i++)
2092 wpls = pixGetWpl(pixs);
2093 maxarea = xmax = ymax = wmax = hmax = 0;
2094 for (i = 0; i < h; i++) {
2095 lines = datas + i * wpls;
2097 for (j = 0; j < w; j++) {
2099 if ((val ^ polarity) == 0) {
2100 if (i == 0 && j == 0) {
2102 }
else if (i == 0) {
2103 wp = linew[i][j - 1] + 1;
2105 }
else if (j == 0) {
2107 hp = lineh[i - 1][j] + 1;
2110 w1 = linew[i - 1][j];
2111 h1 = lineh[i - 1][j];
2112 horizdist = j - prevfg;
2113 wmin = L_MIN(w1, horizdist);
2114 area1 = wmin * (h1 + 1);
2117 w2 = linew[i][j - 1];
2118 h2 = lineh[i][j - 1];
2119 vertdist = i - lowestfg[j];
2120 hmin = L_MIN(h2, vertdist);
2121 area2 = hmin * (w2 + 1);
2123 if (area1 > area2) {
2138 if (wp * hp > maxarea) {
2149 box =
boxCreate(xmax - wmax + 1, ymax - hmax + 1, wmax, hmax);
2159 LEPT_FREE(lowestfg);
l_int32 pixGetRankValueMasked(PIX *pixs, PIX *pixm, l_int32 x, l_int32 y, l_int32 factor, l_float32 rank, l_float32 *pval, NUMA **pna)
pixGetRankValueMasked()
l_int32 pixEstimateBackground(PIX *pixs, l_int32 darkthresh, l_float32 edgecrop, l_int32 *pbg)
pixEstimateBackground()
NUMA * pixCountPixelsByRow(PIX *pix, l_int32 *tab8)
pixCountPixelsByRow()
void bmfDestroy(L_BMF **pbmf)
bmfDestroy()
PIX * pixConvertTo1(PIX *pixs, l_int32 threshold)
pixConvertTo1()
l_int32 gplotSimple1(NUMA *na, l_int32 outformat, const char *outroot, const char *title)
gplotSimple1()
NUMA * pixCountPixelsByColumn(PIX *pix)
pixCountPixelsByColumn()
PIX * pixRemoveColormap(PIX *pixs, l_int32 type)
pixRemoveColormap()
PIX * pixDeskew(PIX *pixs, l_int32 redsearch)
pixDeskew()
l_int32 lept_mkdir(const char *subdir)
lept_mkdir()
NUMA * numaFindExtrema(NUMA *nas, l_float32 delta, NUMA **pnav)
numaFindExtrema()
l_int32 numaAddNumber(NUMA *na, l_float32 val)
numaAddNumber()
PIXA * pixExtractRawTextlines(PIX *pixs, l_int32 maxw, l_int32 maxh, l_int32 adjw, l_int32 adjh, PIXA *pixadb)
pixExtractRawTextlines()
BOXA * boxaSort(BOXA *boxas, l_int32 sorttype, l_int32 sortorder, NUMA **pnaindex)
boxaSort()
l_int32 selSetElement(SEL *sel, l_int32 row, l_int32 col, l_int32 type)
selSetElement()
PIX * pixConvertTo32(PIX *pixs)
pixConvertTo32()
l_int32 boxaaGetExtent(BOXAA *baa, l_int32 *pw, l_int32 *ph, BOX **pbox, BOXA **pboxa)
boxaaGetExtent()
l_int32 boxaWrite(const char *filename, BOXA *boxa)
boxaWrite()
PIXA * pixaCreate(l_int32 n)
pixaCreate()
l_int32 pixZero(PIX *pix, l_int32 *pempty)
pixZero()
PIX * pixDeskewBoth(PIX *pixs, l_int32 redsearch)
pixDeskewBoth()
PIX * pixGenTextblockMask(PIX *pixs, PIX *pixvws, PIXA *pixadb)
pixGenTextblockMask()
l_int32 numaGetMax(NUMA *na, l_float32 *pmaxval, l_int32 *pimaxloc)
numaGetMax()
BOXA * boxaSelectBySize(BOXA *boxas, l_int32 width, l_int32 height, l_int32 type, l_int32 relation, l_int32 *pchanged)
boxaSelectBySize()
PIX * pixConvertTo8(PIX *pixs, l_int32 cmapflag)
pixConvertTo8()
void ** pixGetLinePtrs(PIX *pix, l_int32 *psize)
pixGetLinePtrs()
PIX * pixDilateBrick(PIX *pixd, PIX *pixs, l_int32 hsize, l_int32 vsize)
pixDilateBrick()
l_int32 boxaAddBox(BOXA *boxa, BOX *box, l_int32 copyflag)
boxaAddBox()
l_int32 numaGetFValue(NUMA *na, l_int32 index, l_float32 *pval)
numaGetFValue()
l_int32 pixFindLargestRectangle(PIX *pixs, l_int32 polarity, BOX **pbox, PIX **ppixdb)
pixFindLargestRectangle()
PIX * pixCreate(l_int32 width, l_int32 height, l_int32 depth)
pixCreate()
l_int32 pixSetOrClearBorder(PIX *pixs, l_int32 left, l_int32 right, l_int32 top, l_int32 bot, l_int32 op)
pixSetOrClearBorder()
BOX * pixFindPageForeground(PIX *pixs, l_int32 threshold, l_int32 mindist, l_int32 erasedist, l_int32 pagenum, l_int32 showmorph, l_int32 display, const char *pdfdir)
pixFindPageForeground()
PIX * pixSelectBySize(PIX *pixs, l_int32 width, l_int32 height, l_int32 connectivity, l_int32 type, l_int32 relation, l_int32 *pchanged)
pixSelectBySize()
PIX * pixInvert(PIX *pixd, PIX *pixs)
pixInvert()
NUMA * numaCreate(l_int32 n)
numaCreate()
void boxaDestroy(BOXA **pboxa)
boxaDestroy()
l_uint32 * pixGetData(PIX *pix)
pixGetData()
l_int32 pixRenderBoxaArb(PIX *pix, BOXA *boxa, l_int32 width, l_uint8 rval, l_uint8 gval, l_uint8 bval)
pixRenderBoxaArb()
BOX * boxTransform(BOX *box, l_int32 shiftx, l_int32 shifty, l_float32 scalex, l_float32 scaley)
boxTransform()
PIX * pixThresholdToBinary(PIX *pixs, l_int32 thresh)
pixThresholdToBinary()
l_int32 boxaJoin(BOXA *boxad, BOXA *boxas, l_int32 istart, l_int32 iend)
boxaJoin()
l_int32 boxaGetBoxGeometry(BOXA *boxa, l_int32 index, l_int32 *px, l_int32 *py, l_int32 *pw, l_int32 *ph)
boxaGetBoxGeometry()
#define GET_DATA_BIT(pdata, n)
PIX * pixDrawBoxaRandom(PIX *pixs, BOXA *boxa, l_int32 width)
pixDrawBoxaRandom()
PIX * pixClipRectangle(PIX *pixs, BOX *box, BOX **pboxc)
pixClipRectangle()
l_int32 pixGetRegionsBinary(PIX *pixs, PIX **ppixhm, PIX **ppixtm, PIX **ppixtb, PIXA *pixadb)
pixGetRegionsBinary()
l_int32 pixRenderBoxArb(PIX *pix, BOX *box, l_int32 width, l_uint8 rval, l_uint8 gval, l_uint8 bval)
pixRenderBoxArb()
PIX * pixGenTextlineMask(PIX *pixs, PIX **ppixvws, l_int32 *ptlfound, PIXA *pixadb)
pixGenTextlineMask()
l_int32 * numaGetIArray(NUMA *na)
numaGetIArray()
l_int32 pixRasterop(PIX *pixd, l_int32 dx, l_int32 dy, l_int32 dw, l_int32 dh, l_int32 op, PIX *pixs, l_int32 sx, l_int32 sy)
pixRasterop()
BOXA * pixConnComp(PIX *pixs, PIXA **ppixa, l_int32 connectivity)
pixConnComp()
PIXA * pixExtractTextlines(PIX *pixs, l_int32 maxw, l_int32 maxh, l_int32 minw, l_int32 minh, l_int32 adjw, l_int32 adjh, PIXA *pixadb)
pixExtractTextlines()
PIX * pixaDisplayRandomCmap(PIXA *pixa, l_int32 w, l_int32 h)
pixaDisplayRandomCmap()
void boxaaDestroy(BOXAA **pbaa)
boxaaDestroy()
static const l_int32 L_INSERT
PIX * pixCloseSafeBrick(PIX *pixd, PIX *pixs, l_int32 hsize, l_int32 vsize)
pixCloseSafeBrick()
l_int32 pixRenderBoxBlend(PIX *pix, BOX *box, l_int32 width, l_uint8 rval, l_uint8 gval, l_uint8 bval, l_float32 fract)
pixRenderBoxBlend()
PIX * pixXor(PIX *pixd, PIX *pixs1, PIX *pixs2)
pixXor()
BOXA * boxaTransform(BOXA *boxas, l_int32 shiftx, l_int32 shifty, l_float32 scalex, l_float32 scaley)
boxaTransform()
l_int32 numaGetCount(NUMA *na)
numaGetCount()
l_int32 pixaAddPix(PIXA *pixa, PIX *pix, l_int32 copyflag)
pixaAddPix()
l_int32 pixRenderHashBoxArb(PIX *pix, BOX *box, l_int32 spacing, l_int32 width, l_int32 orient, l_int32 outline, l_int32 rval, l_int32 gval, l_int32 bval)
pixRenderHashBoxArb()
void selDestroy(SEL **psel)
selDestroy()
PIX * pixCleanBackgroundToWhite(PIX *pixs, PIX *pixim, PIX *pixg, l_float32 gamma, l_int32 blackval, l_int32 whiteval)
pixCleanBackgroundToWhite()
l_int32 pixCountConnComp(PIX *pixs, l_int32 connectivity, l_int32 *pcount)
pixCountConnComp()
PIX * pixGenerateHalftoneMask(PIX *pixs, PIX **ppixtext, l_int32 *phtfound, PIXA *pixadb)
pixGenerateHalftoneMask()
PIX * pixaDisplayTiledInRows(PIXA *pixa, l_int32 outdepth, l_int32 maxwidth, l_float32 scalefactor, l_int32 background, l_int32 spacing, l_int32 border)
pixaDisplayTiledInRows()
PIX * pixMorphSequence(PIX *pixs, const char *sequence, l_int32 dispsep)
pixMorphSequence()
void ptaaDestroy(PTAA **pptaa)
ptaaDestroy()
PIXA * pixaSelectBySize(PIXA *pixas, l_int32 width, l_int32 height, l_int32 type, l_int32 relation, l_int32 *pchanged)
pixaSelectBySize()
PIXA * pixClipRectangles(PIX *pixs, BOXA *boxa)
pixClipRectangles()
l_int32 boxGetGeometry(BOX *box, l_int32 *px, l_int32 *py, l_int32 *pw, l_int32 *ph)
boxGetGeometry()
BOX * boxAdjustSides(BOX *boxd, BOX *boxs, l_int32 delleft, l_int32 delright, l_int32 deltop, l_int32 delbot)
boxAdjustSides()
PIX * pixRemoveBorderConnComps(PIX *pixs, l_int32 connectivity)
pixRemoveBorderConnComps()
PIX * pixClone(PIX *pixs)
pixClone()
PIX * pixSubtract(PIX *pixd, PIX *pixs1, PIX *pixs2)
pixSubtract()
l_int32 pixaConvertToPdf(PIXA *pixa, l_int32 res, l_float32 scalefactor, l_int32 type, l_int32 quality, const char *title, const char *fileout)
pixaConvertToPdf()
void pixDestroy(PIX **ppix)
pixDestroy()
BOX * boxaGetBox(BOXA *boxa, l_int32 index, l_int32 accessflag)
boxaGetBox()
PIX * pixRenderRandomCmapPtaa(PIX *pix, PTAA *ptaa, l_int32 polyflag, l_int32 width, l_int32 closeflag)
pixRenderRandomCmapPtaa()
l_int32 pixSplitIntoCharacters(PIX *pixs, l_int32 minw, l_int32 minh, BOXA **pboxa, PIXA **ppixa, PIX **ppixdebug)
pixSplitIntoCharacters()
PIX * pixSeedfillBinaryRestricted(PIX *pixd, PIX *pixs, PIX *pixm, l_int32 connectivity, l_int32 xmax, l_int32 ymax)
pixSeedfillBinaryRestricted()
l_int32 pixDecideIfText(PIX *pixs, BOX *box, l_int32 *pistext, PIXA *pixadb)
pixDecideIfText()
void numaDestroy(NUMA **pna)
numaDestroy()
PIX * pixOpenBrick(PIX *pixd, PIX *pixs, l_int32 hsize, l_int32 vsize)
pixOpenBrick()
l_int32 pixaAddPixWithText(PIXA *pixa, PIX *pixs, l_int32 reduction, L_BMF *bmf, const char *textstr, l_uint32 val, l_int32 location)
pixaAddPixWithText()
PIX * pixSeedfillBinary(PIX *pixd, PIX *pixs, PIX *pixm, l_int32 connectivity)
pixSeedfillBinary()
l_int32 pixSetResolution(PIX *pix, l_int32 xres, l_int32 yres)
pixSetResolution()
NUMA * numaTransform(NUMA *nas, l_float32 shift, l_float32 scale)
numaTransform()
PIX * pixPrepare1bpp(PIX *pixs, BOX *box, l_float32 cropfract, l_int32 outres)
pixPrepare1bpp()
PIX * pixOr(PIX *pixd, PIX *pixs1, PIX *pixs2)
pixOr()
NUMA * pixCountByColumn(PIX *pix, BOX *box)
pixCountByColumn()
l_int32 pixFindLargeRectangles(PIX *pixs, l_int32 polarity, l_int32 nrect, BOXA **pboxa, PIX **ppixdb)
pixFindLargeRectangles()
BOXA * boxaAdjustSides(BOXA *boxas, l_int32 delleft, l_int32 delright, l_int32 deltop, l_int32 delbot)
boxaAdjustSides()
PIX * pixRead(const char *filename)
pixRead()
l_int32 boxIntersects(BOX *box1, BOX *box2, l_int32 *presult)
boxIntersects()
l_int32 pixSetPixel(PIX *pix, l_int32 x, l_int32 y, l_uint32 val)
pixSetPixel()
l_int32 numaGetMin(NUMA *na, l_float32 *pminval, l_int32 *piminloc)
numaGetMin()
PIX * pixExpandReplicate(PIX *pixs, l_int32 factor)
pixExpandReplicate()
l_int32 pixcmapResetColor(PIXCMAP *cmap, l_int32 index, l_int32 rval, l_int32 gval, l_int32 bval)
pixcmapResetColor()
PIX * pixMorphSequenceByComponent(PIX *pixs, const char *sequence, l_int32 connectivity, l_int32 minw, l_int32 minh, BOXA **pboxa)
pixMorphSequenceByComponent()
PIX * pixHMT(PIX *pixd, PIX *pixs, SEL *sel)
pixHMT()
PIX * pixaGetPix(PIXA *pixa, l_int32 index, l_int32 accesstype)
pixaGetPix()
l_int32 pixClipToForeground(PIX *pixs, PIX **ppixd, BOX **pbox)
pixClipToForeground()
l_int32 pixaGetBoxGeometry(PIXA *pixa, l_int32 index, l_int32 *px, l_int32 *py, l_int32 *pw, l_int32 *ph)
pixaGetBoxGeometry()
PIX * pixConvert1To4Cmap(PIX *pixs)
pixConvert1To4Cmap()
l_int32 pixCountTextColumns(PIX *pixs, l_float32 deltafract, l_float32 peakfract, l_float32 clipfract, l_int32 *pncols, PIXA *pixadb)
pixCountTextColumns()
BOXA * boxaCreate(l_int32 n)
boxaCreate()
PIX * pixCopy(PIX *pixd, PIX *pixs)
pixCopy()
void boxDestroy(BOX **pbox)
boxDestroy()
BOXAA * boxaSort2d(BOXA *boxas, NUMAA **pnaad, l_int32 delta1, l_int32 delta2, l_int32 minh1)
boxaSort2d()
BOXA * pixSplitComponentWithProfile(PIX *pixs, l_int32 delta, l_int32 mindel, PIX **ppixdebug)
pixSplitComponentWithProfile()
l_int32 boxaGetCount(BOXA *boxa)
boxaGetCount()
l_int32 numaGetIValue(NUMA *na, l_int32 index, l_int32 *pival)
numaGetIValue()
PIX * pixRotate90(PIX *pixs, l_int32 direction)
pixRotate90()
l_int32 pixGetDimensions(PIX *pix, l_int32 *pw, l_int32 *ph, l_int32 *pd)
pixGetDimensions()
BOXA * boxaaFlattenToBoxa(BOXAA *baa, NUMA **pnaindex, l_int32 copyflag)
boxaaFlattenToBoxa()
SEL * selCreateFromPix(PIX *pix, l_int32 cy, l_int32 cx, const char *name)
selCreateFromPix()
PIX * pixScale(PIX *pixs, l_float32 scalex, l_float32 scaley)
pixScale()
PIX * pixReduceRankBinaryCascade(PIX *pixs, l_int32 level1, l_int32 level2, l_int32 level3, l_int32 level4)
pixReduceRankBinaryCascade()
void pixaDestroy(PIXA **ppixa)
pixaDestroy()
l_int32 ptaaWrite(const char *filename, PTAA *ptaa, l_int32 type)
ptaaWrite()
BOX * boxCreate(l_int32 x, l_int32 y, l_int32 w, l_int32 h)
boxCreate()
l_int32 pixaGetCount(PIXA *pixa)
pixaGetCount()
PTAA * pixGetOuterBordersPtaa(PIX *pixs)
pixGetOuterBordersPtaa()
l_int32 pixFindThreshFgExtent(PIX *pixs, l_int32 thresh, l_int32 *ptop, l_int32 *pbot)
pixFindThreshFgExtent()
l_int32 numaWriteStream(FILE *fp, NUMA *na)
numaWriteStream()
PIX * pixGenHalftoneMask(PIX *pixs, PIX **ppixtext, l_int32 *phtfound, l_int32 debug)
pixGenHalftoneMask()
PIX * pixMorphCompSequence(PIX *pixs, const char *sequence, l_int32 dispsep)
pixMorphCompSequence()
l_int32 pixDecideIfTable(PIX *pixs, BOX *box, l_int32 orient, l_int32 *pscore, PIXA *pixadb)
pixDecideIfTable()
L_BMF * bmfCreate(const char *dir, l_int32 fontsize)
bmfCreate()
BOXA * pixaGetBoxa(PIXA *pixa, l_int32 accesstype)
pixaGetBoxa()