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);
208 cmap = pixGetColormap(pix1);
216 BOXA *bahm, *batm, *batb;
229 "/tmp/lept/pageseg/debug.pdf");
230 L_INFO(
"Writing debug pdf to /tmp/lept/pageseg/debug.pdf\n", procName);
295 PIX *pix1, *pix2, *pixhs, *pixhm, *pixd;
297 PROCNAME(
"pixGenerateHalftoneMask");
299 if (ppixtext) *ppixtext = NULL;
300 if (phtfound) *phtfound = 0;
301 if (!pixs || pixGetDepth(pixs) != 1)
302 return (
PIX *)ERROR_PTR(
"pixs undefined or not 1 bpp", procName, NULL);
304 if (w < MinWidth || h < MinHeight) {
305 L_ERROR(
"pix too small: w = %d, h = %d\n", procName, w, h);
331 if (phtfound && !empty)
337 *ppixtext =
pixCopy(NULL, pixs);
378 PIX *pix1, *pix2, *pixvws, *pixd;
380 PROCNAME(
"pixGenTextlineMask");
382 if (ptlfound) *ptlfound = 0;
384 return (
PIX *)ERROR_PTR(
"&pixvws not defined", procName, NULL);
386 if (!pixs || pixGetDepth(pixs) != 1)
387 return (
PIX *)ERROR_PTR(
"pixs undefined or not 1 bpp", procName, NULL);
389 if (w < MinWidth || h < MinHeight) {
390 L_ERROR(
"pix too small: w = %d, h = %d\n", procName, w, h);
469 PIX *pix1, *pix2, *pix3, *pixd;
471 PROCNAME(
"pixGenTextblockMask");
473 if (!pixs || pixGetDepth(pixs) != 1)
474 return (
PIX *)ERROR_PTR(
"pixs undefined or not 1 bpp", procName, NULL);
476 if (w < MinWidth || h < MinHeight) {
477 L_ERROR(
"pix too small: w = %d, h = %d\n", procName, w, h);
481 return (
PIX *)ERROR_PTR(
"pixvws not defined", procName, NULL);
555 l_int32 flag, nbox, intersects;
556 l_int32 w, h, bx, by, bw, bh, left, right, top, bottom;
557 PIX *pixb, *pixb2, *pixseed, *pixsf, *pixm, *pix1, *pixg2;
558 BOX *box, *boxfg, *boxin, *boxd;
561 PROCNAME(
"pixFindPageForeground");
564 return (
BOX *)ERROR_PTR(
"pixs not defined", procName, NULL);
566 if (w < MinWidth || h < MinHeight) {
567 L_ERROR(
"pix too small: w = %d, h = %d\n", procName, w, h);
576 flag = (showmorph) ? 100 : 0;
581 pixOr(pixseed, pixseed, pix1);
584 pixOr(pixseed, pixseed, pix1);
604 left = (bx > mindist) ? erasedist : 0;
605 right = (w - bx - bw > mindist) ? erasedist : 0;
606 top = (by > mindist) ? erasedist : 0;
607 bottom = (h - by - bh > mindist) ? erasedist : 0;
622 boxin =
boxCreate(0.1 * w, 0, 0.8 * w, h);
685 l_int32 ncomp, i, xoff, yoff;
686 BOXA *boxa1, *boxa2, *boxat1, *boxat2, *boxad;
688 PIX *pix, *pix1, *pix2, *pixdb;
689 PIXA *pixa1, *pixadb;
691 PROCNAME(
"pixSplitIntoCharacters");
693 if (pboxa) *pboxa = NULL;
694 if (ppixa) *ppixa = NULL;
695 if (ppixdebug) *ppixdebug = NULL;
696 if (!pixs || pixGetDepth(pixs) != 1)
697 return ERROR_INT(
"pixs not defined or not 1 bpp", procName, 1);
715 pixadb = (ppixdebug) ?
pixaCreate(ncomp) : NULL;
716 for (i = 0; i < ncomp; i++) {
784 l_int32 w, h, n2, i, firstmin, xmin, xshift;
785 l_int32 nmin, nleft, nright, nsplit, isplit, ncomp;
786 l_int32 *array1, *array2;
789 NUMA *na1, *na2, *nasplit;
792 PROCNAME(
"pixSplitComponentsWithProfile");
794 if (ppixdebug) *ppixdebug = NULL;
795 if (!pixs || pixGetDepth(pixs) != 1)
796 return (
BOXA *)ERROR_PTR(
"pixa undefined or not 1 bpp", procName, NULL);
822 firstmin = (array1[array2[0]] > array1[array2[1]]) ? 1 : 2;
824 for (i = firstmin; i < n2 - 1; i+= 2) {
827 if (xmin + 2 >= w)
break;
828 nleft = array1[xmin - 2];
829 nright = array1[xmin + 2];
832 "Splitting: xmin = %d, w = %d; nl = %d, nmin = %d, nr = %d\n",
833 xmin, w, nleft, nmin, nright);
835 if (nleft - nmin >= mindel && nright - nmin >= mindel)
841 if (ppixdebug && nsplit > 0) {
843 gplotSimple1(na1, GPLOT_PNG,
"/tmp/lept/split/split", NULL);
860 for (i = 0, xshift = 0; i < nsplit; i++) {
862 box =
boxCreate(xshift, 0, isplit - xshift, h);
866 box =
boxCreate(xshift, 0, w - xshift, h);
873 for (i = 0; i < ncomp; i++) {
945 l_int32 res, csize, empty;
946 BOXA *boxa1, *boxa2, *boxa3;
947 PIX *pix1, *pix2, *pix3;
948 PIXA *pixa1, *pixa2, *pixa3;
950 PROCNAME(
"pixExtractTextlines");
953 return (
PIXA *)ERROR_PTR(
"pixs not defined", procName, NULL);
956 if (pixGetDepth(pixs) > 1) {
968 L_INFO(
"no fg pixels in input image\n", procName);
982 if ((res = pixGetXRes(pixs)) == 0) {
983 L_INFO(
"Resolution is not set: setting to 300 ppi\n", procName);
986 csize = L_MIN(120., 60.0 * res / 300.0);
987 snprintf(buf,
sizeof(buf),
"c%d.1 + o%d.1", csize, csize / 3);
1000 minw = (minw != 0) ? minw : (l_int32)(0.12 * res);
1001 minh = (minh != 0) ? minh : (l_int32)(0.07 * res);
1083 l_int32 res, csize, empty;
1084 BOXA *boxa1, *boxa2, *boxa3;
1086 PIX *pix1, *pix2, *pix3;
1087 PIXA *pixa1, *pixa2;
1089 PROCNAME(
"pixExtractRawTextlines");
1092 return (
PIXA *)ERROR_PTR(
"pixs not defined", procName, NULL);
1095 if ((res = pixGetXRes(pixs)) == 0) {
1096 L_INFO(
"Resolution is not set: setting to 300 ppi\n", procName);
1099 maxw = (maxw != 0) ? maxw : (l_int32)(0.5 * res);
1100 maxh = (maxh != 0) ? maxh : (l_int32)(0.5 * res);
1103 if (pixGetDepth(pixs) > 1) {
1115 L_INFO(
"no fg pixels in input image\n", procName);
1128 csize = L_MIN(120., 60.0 * res / 300.0);
1129 snprintf(buf,
sizeof(buf),
"c%d.1", csize);
1204 l_float32 deltafract,
1205 l_float32 peakfract,
1206 l_float32 clipfract,
1210 l_int32 w, h, res, i, n, npeak;
1211 l_float32 scalefact, redfact, minval, maxval, val4, val5, fract;
1213 NUMA *na1, *na2, *na3, *na4, *na5;
1214 PIX *pix1, *pix2, *pix3, *pix4, *pix5;
1216 PROCNAME(
"pixCountTextColumns");
1219 return ERROR_INT(
"&ncols not defined", procName, 1);
1221 if (!pixs || pixGetDepth(pixs) != 1)
1222 return ERROR_INT(
"pixs not defined or not 1 bpp", procName, 1);
1223 if (deltafract < 0.15 || deltafract > 0.75)
1224 L_WARNING(
"deltafract not in [0.15 ... 0.75]\n", procName);
1225 if (peakfract < 0.25 || peakfract > 0.9)
1226 L_WARNING(
"peakfract not in [0.25 ... 0.9]\n", procName);
1227 if (clipfract < 0.0 || clipfract >= 0.5)
1228 return ERROR_INT(
"clipfract not in [0.0 ... 0.5)\n", procName, 1);
1232 if ((res = pixGetXRes(pixs)) == 0) {
1233 L_WARNING(
"resolution undefined; set to 300\n", procName);
1238 L_WARNING(
"resolution %d very low\n", procName, res);
1239 scalefact = 37.5 / res;
1240 pix1 =
pixScale(pixs, scalefact, scalefact);
1242 redfact = (l_float32)res / 37.5;
1245 else if (redfact < 4.0)
1247 else if (redfact < 8.0)
1249 else if (redfact < 16.0)
1258 box =
boxCreate(clipfract * w, clipfract * h,
1259 (1.0 - 2 * clipfract) * w, (1.0 - 2 * clipfract) * h);
1277 pix5 =
pixRead(
"/tmp/lept/plot.png");
1288 fract = (l_float32)(maxval - minval) / h;
1290 L_INFO(
"very little content on page; 0 text columns\n", procName);
1297 for (i = 0, npeak = 0; i < n; i++) {
1300 if (val4 > 0.3 && val4 < 0.7 && val5 >= peakfract) {
1302 L_INFO(
"Peak(loc,val) = (%5.3f,%5.3f)\n", procName, val4, val5);
1305 *pncols = npeak + 1;
1356 l_int32 i, empty, maxw, w, h, n1, n2, n3, minlines, big_comp;
1357 l_float32 ratio1, ratio2;
1359 BOXA *boxa1, *boxa2, *boxa3, *boxa4, *boxa5;
1360 PIX *pix1, *pix2, *pix3, *pix4, *pix5, *pix6, *pix7;
1364 PROCNAME(
"pixDecideIfText");
1367 return ERROR_INT(
"&istext not defined", procName, 1);
1370 return ERROR_INT(
"pixs not defined", procName, 1);
1374 return ERROR_INT(
"pix1 not made", procName, 1);
1379 L_INFO(
"pix is empty\n", procName);
1382 w = pixGetWidth(pix1);
1392 for (i = 0; i < 81; i++)
1401 pix3 =
pixHMT(NULL, pix1, sel1);
1403 pix5 =
pixXor(NULL, pix1, pix4);
1472 ratio1 = (l_float32)maxw / (l_float32)w;
1473 ratio2 = (l_float32)n3 / (l_float32)n2;
1474 minlines = L_MAX(2, h / 125);
1475 if (big_comp || ratio1 < 0.6 || ratio2 < 0.8 || n3 < minlines)
1480 if (*pistext == 1) {
1481 L_INFO(
"This is text: \n n1 = %d, n2 = %d, n3 = %d, " 1482 "minlines = %d\n maxw = %d, ratio1 = %4.2f, h = %d, " 1483 "big_comp = %d\n", procName, n1, n2, n3, minlines,
1484 maxw, ratio1, h, big_comp);
1486 L_INFO(
"This is not text: \n n1 = %d, n2 = %d, n3 = %d, " 1487 "minlines = %d\n maxw = %d, ratio1 = %4.2f, h = %d, " 1488 "big_comp = %d\n", procName, n1, n2, n3, minlines,
1489 maxw, ratio1, h, big_comp);
1526 PROCNAME(
"pixFindThreshFgExtent");
1528 if (ptop) *ptop = 0;
1529 if (pbot) *pbot = 0;
1531 return ERROR_INT(
"nothing to determine", procName, 1);
1532 if (!pixs || pixGetDepth(pixs) != 1)
1533 return ERROR_INT(
"pixs not defined or not 1 bpp", procName, 1);
1539 for (i = 0; i < n; i++) {
1540 if (array[i] >= thresh) {
1547 for (i = n - 1; i >= 0; i--) {
1548 if (array[i] >= thresh) {
1613 l_int32 empty, nhb, nvb, nvw, score, htfound;
1614 PIX *pix1, *pix2, *pix3, *pix4, *pix5, *pix6, *pix7, *pix8, *pix9;
1616 PROCNAME(
"pixDecideIfTable");
1619 return ERROR_INT(
"&score not defined", procName, 1);
1622 return ERROR_INT(
"pixs not defined", procName, 1);
1633 L_INFO(
"pix has an image region\n", procName);
1639 return ERROR_INT(
"pix1 not made", procName, 1);
1645 L_INFO(
"pix is empty\n", procName);
1680 pix6 =
pixOr(NULL, pix3, pix5);
1719 if (nhb > 1) score++;
1720 if (nvb > 2) score++;
1721 if (nvw > 3) score++;
1722 if (nvw > 6) score++;
1759 l_float32 cropfract,
1765 PIX *pix1, *pix2, *pix3, *pix4, *pix5;
1767 PROCNAME(
"pixPrepare1bpp");
1770 return (
PIX *)ERROR_PTR(
"pixs not defined", procName, NULL);
1779 box1 =
boxCreate((l_int32)(cropfract * w), (l_int32)(cropfract * h),
1780 (l_int32)((1.0 - 2 * cropfract) * w),
1781 (l_int32)((1.0 - 2 * cropfract) * h));
1787 if (pixGetDepth(pixs) > 1) {
1793 L_INFO(
"pix cleaning failed\n", procName);
1807 if ((res = pixGetXRes(pixs)) == 0) {
1808 L_WARNING(
"Resolution is not set: using 300 ppi\n", procName);
1811 if (res != outres) {
1812 factor = (l_float32)outres / (l_float32)res;
1813 pix5 =
pixScale(pix4, factor, factor);
1847 l_int32 w, h, sampling;
1850 PIX *pix1, *pix2, *pixm;
1852 PROCNAME(
"pixEstimateBackground");
1855 return ERROR_INT(
"&bg not defined", procName, 1);
1857 if (!pixs || pixGetDepth(pixs) != 8)
1858 return ERROR_INT(
"pixs not defined or not 8 bpp", procName, 1);
1859 if (darkthresh > 128)
1860 L_WARNING(
"darkthresh unusually large\n", procName);
1861 if (edgecrop < 0.0 || edgecrop >= 1.0)
1862 return ERROR_INT(
"edgecrop not in [0.0 ... 1.0)", procName, 1);
1868 if (edgecrop > 0.0) {
1869 box =
boxCreate(0.5 * edgecrop * w, 0.5 * edgecrop * h,
1870 (1.0 - edgecrop) * w, (1.0 - edgecrop) * h);
1878 sampling = L_MAX(1, (l_int32)sqrt((l_float64)(w * h) / 50000. + 0.5));
1882 if (darkthresh > 0) {
1888 *pbg = (l_int32)(fbg + 0.5);
1932 l_int32 i, op, bx, by, bw, bh;
1937 PROCNAME(
"pixFindLargeRectangles");
1939 if (ppixdb) *ppixdb = NULL;
1941 return ERROR_INT(
"&boxa not defined", procName, 1);
1943 if (!pixs || pixGetDepth(pixs) != 1)
1944 return ERROR_INT(
"pixs not defined or not 1 bpp", procName, 1);
1945 if (polarity != 0 && polarity != 1)
1946 return ERROR_INT(
"invalid polarity", procName, 1);
1948 L_WARNING(
"large num rectangles = %d requested; using 1000\n",
1958 for (i = 0; i < nrect; i++) {
1961 L_ERROR(
"failure in pixFindLargestRectangle\n", procName);
2034 l_int32 i, j, w, h, d, wpls, val;
2035 l_int32 wp, hp, w1, w2, h1, h2, wmin, hmin, area1, area2;
2037 l_int32 maxarea, wmax, hmax, vertdist, horizdist, prevfg;
2039 l_uint32 *datas, *lines;
2040 l_uint32 **linew, **lineh;
2045 PROCNAME(
"pixFindLargestRectangle");
2047 if (ppixdb) *ppixdb = NULL;
2049 return ERROR_INT(
"&box not defined", procName, 1);
2052 return ERROR_INT(
"pixs not defined", procName, 1);
2055 return ERROR_INT(
"pixs not 1 bpp", procName, 1);
2056 if (polarity != 0 && polarity != 1)
2057 return ERROR_INT(
"invalid polarity", procName, 1);
2060 lowestfg = (l_int32 *)LEPT_CALLOC(w,
sizeof(l_int32));
2061 for (i = 0; i < w; i++)
2072 wpls = pixGetWpl(pixs);
2073 maxarea = xmax = ymax = wmax = hmax = 0;
2074 for (i = 0; i < h; i++) {
2075 lines = datas + i * wpls;
2077 for (j = 0; j < w; j++) {
2079 if ((val ^ polarity) == 0) {
2080 if (i == 0 && j == 0) {
2082 }
else if (i == 0) {
2083 wp = linew[i][j - 1] + 1;
2085 }
else if (j == 0) {
2087 hp = lineh[i - 1][j] + 1;
2090 w1 = linew[i - 1][j];
2091 h1 = lineh[i - 1][j];
2092 horizdist = j - prevfg;
2093 wmin = L_MIN(w1, horizdist);
2094 area1 = wmin * (h1 + 1);
2097 w2 = linew[i][j - 1];
2098 h2 = lineh[i][j - 1];
2099 vertdist = i - lowestfg[j];
2100 hmin = L_MIN(h2, vertdist);
2101 area2 = hmin * (w2 + 1);
2103 if (area1 > area2) {
2118 if (wp * hp > maxarea) {
2129 box =
boxCreate(xmax - wmax + 1, ymax - hmax + 1, wmax, hmax);
2139 LEPT_FREE(lowestfg);
NUMA * pixCountPixelsByRow(PIX *pix, l_int32 *tab8)
pixCountPixelsByRow()
void bmfDestroy(L_BMF **pbmf)
bmfDestroy()
PIX * pixConvertTo1(PIX *pixs, l_int32 threshold)
pixConvertTo1()
l_ok numaGetFValue(NUMA *na, l_int32 index, l_float32 *pval)
numaGetFValue()
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_ok boxaJoin(BOXA *boxad, BOXA *boxas, l_int32 istart, l_int32 iend)
boxaJoin()
l_ok pixacompAddPix(PIXAC *pixac, PIX *pix, l_int32 comptype)
pixacompAddPix()
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()
PIX * pixConvertTo32(PIX *pixs)
pixConvertTo32()
l_ok numaAddNumber(NUMA *na, l_float32 val)
numaAddNumber()
l_ok boxaaGetExtent(BOXAA *baa, l_int32 *pw, l_int32 *ph, BOX **pbox, BOXA **pboxa)
boxaaGetExtent()
PIXA * pixaCreate(l_int32 n)
pixaCreate()
PIX * pixDeskewBoth(PIX *pixs, l_int32 redsearch)
pixDeskewBoth()
PIX * pixGenTextblockMask(PIX *pixs, PIX *pixvws, PIXA *pixadb)
pixGenTextblockMask()
BOXA * boxaSelectBySize(BOXA *boxas, l_int32 width, l_int32 height, l_int32 type, l_int32 relation, l_int32 *pchanged)
boxaSelectBySize()
l_ok pixDecideIfText(PIX *pixs, BOX *box, l_int32 *pistext, PIXA *pixadb)
pixDecideIfText()
l_ok 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()
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()
PIX * pixCreate(l_int32 width, l_int32 height, l_int32 depth)
pixCreate()
PIX * pixSelectBySize(PIX *pixs, l_int32 width, l_int32 height, l_int32 connectivity, l_int32 type, l_int32 relation, l_int32 *pchanged)
pixSelectBySize()
l_ok pixRenderBoxBlend(PIX *pix, BOX *box, l_int32 width, l_uint8 rval, l_uint8 gval, l_uint8 bval, l_float32 fract)
pixRenderBoxBlend()
PIX * pixInvert(PIX *pixd, PIX *pixs)
pixInvert()
l_ok numaWriteStream(FILE *fp, NUMA *na)
numaWriteStream()
NUMA * numaCreate(l_int32 n)
numaCreate()
void boxaDestroy(BOXA **pboxa)
boxaDestroy()
l_uint32 * pixGetData(PIX *pix)
pixGetData()
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()
#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_ok pixSetOrClearBorder(PIX *pixs, l_int32 left, l_int32 right, l_int32 top, l_int32 bot, l_int32 op)
pixSetOrClearBorder()
PIX * pixGenTextlineMask(PIX *pixs, PIX **ppixvws, l_int32 *ptlfound, PIXA *pixadb)
pixGenTextlineMask()
l_ok pixClipToForeground(PIX *pixs, PIX **ppixd, BOX **pbox)
pixClipToForeground()
l_int32 * numaGetIArray(NUMA *na)
numaGetIArray()
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()
l_ok numaGetIValue(NUMA *na, l_int32 index, l_int32 *pival)
numaGetIValue()
l_ok pixaAddPix(PIXA *pixa, PIX *pix, l_int32 copyflag)
pixaAddPix()
void boxaaDestroy(BOXAA **pbaa)
boxaaDestroy()
PIX * pixCloseSafeBrick(PIX *pixd, PIX *pixs, l_int32 hsize, l_int32 vsize)
pixCloseSafeBrick()
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()
void selDestroy(SEL **psel)
selDestroy()
l_ok pixSplitIntoCharacters(PIX *pixs, l_int32 minw, l_int32 minh, BOXA **pboxa, PIXA **ppixa, PIX **ppixdebug)
pixSplitIntoCharacters()
PIX * pixCleanBackgroundToWhite(PIX *pixs, PIX *pixim, PIX *pixg, l_float32 gamma, l_int32 blackval, l_int32 whiteval)
pixCleanBackgroundToWhite()
l_ok boxaGetBoxGeometry(BOXA *boxa, l_int32 index, l_int32 *px, l_int32 *py, l_int32 *pw, l_int32 *ph)
boxaGetBoxGeometry()
l_ok pixaAddPixWithText(PIXA *pixa, PIX *pixs, l_int32 reduction, L_BMF *bmf, const char *textstr, l_uint32 val, l_int32 location)
pixaAddPixWithText()
PIX * pixGenerateHalftoneMask(PIX *pixs, PIX **ppixtext, l_int32 *phtfound, PIXA *pixadb)
pixGenerateHalftoneMask()
l_ok pixSetPixel(PIX *pix, l_int32 x, l_int32 y, l_uint32 val)
pixSetPixel()
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()
l_ok boxaAddBox(BOXA *boxa, BOX *box, l_int32 copyflag)
boxaAddBox()
PIXA * pixaSelectBySize(PIXA *pixas, l_int32 width, l_int32 height, l_int32 type, l_int32 relation, l_int32 *pchanged)
pixaSelectBySize()
l_ok boxaWriteDebug(const char *filename, BOXA *boxa)
boxaWriteDebug()
PIXA * pixClipRectangles(PIX *pixs, BOXA *boxa)
pixClipRectangles()
BOX * boxAdjustSides(BOX *boxd, BOX *boxs, l_int32 delleft, l_int32 delright, l_int32 deltop, l_int32 delbot)
boxAdjustSides()
l_ok pixaGetBoxGeometry(PIXA *pixa, l_int32 index, l_int32 *px, l_int32 *py, l_int32 *pw, l_int32 *ph)
pixaGetBoxGeometry()
PIX * pixRemoveBorderConnComps(PIX *pixs, l_int32 connectivity)
pixRemoveBorderConnComps()
l_ok pixFindLargeRectangles(PIX *pixs, l_int32 polarity, l_int32 nrect, BOXA **pboxa, PIX **ppixdb)
pixFindLargeRectangles()
PIX * pixClone(PIX *pixs)
pixClone()
PIX * pixSubtract(PIX *pixd, PIX *pixs1, PIX *pixs2)
pixSubtract()
l_ok pixGetRankValueMasked(PIX *pixs, PIX *pixm, l_int32 x, l_int32 y, l_int32 factor, l_float32 rank, l_float32 *pval, NUMA **pna)
pixGetRankValueMasked()
void pixDestroy(PIX **ppix)
pixDestroy()
l_ok pixFindThreshFgExtent(PIX *pixs, l_int32 thresh, l_int32 *ptop, l_int32 *pbot)
pixFindThreshFgExtent()
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()
BOX * pixFindPageForeground(PIX *pixs, l_int32 threshold, l_int32 mindist, l_int32 erasedist, l_int32 showmorph, PIXAC *pixac)
pixFindPageForeground()
l_ok pixcmapResetColor(PIXCMAP *cmap, l_int32 index, l_int32 rval, l_int32 gval, l_int32 bval)
pixcmapResetColor()
PIX * pixSeedfillBinaryRestricted(PIX *pixd, PIX *pixs, PIX *pixm, l_int32 connectivity, l_int32 xmax, l_int32 ymax)
pixSeedfillBinaryRestricted()
void numaDestroy(NUMA **pna)
numaDestroy()
PIX * pixOpenBrick(PIX *pixd, PIX *pixs, l_int32 hsize, l_int32 vsize)
pixOpenBrick()
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()
NUMA * numaTransform(NUMA *nas, l_float32 shift, l_float32 scale)
numaTransform()
PIX * pixPrepare1bpp(PIX *pixs, BOX *box, l_float32 cropfract, l_int32 outres)
pixPrepare1bpp()
l_ok pixFindLargestRectangle(PIX *pixs, l_int32 polarity, BOX **pbox, PIX **ppixdb)
pixFindLargestRectangle()
PIX * pixOr(PIX *pixd, PIX *pixs1, PIX *pixs2)
pixOr()
NUMA * pixCountByColumn(PIX *pix, BOX *box)
pixCountByColumn()
BOXA * boxaAdjustSides(BOXA *boxas, l_int32 delleft, l_int32 delright, l_int32 deltop, l_int32 delbot)
boxaAdjustSides()
PIX * pixRead(const char *filename)
pixRead()
l_ok 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()
PIX * pixExpandReplicate(PIX *pixs, l_int32 factor)
pixExpandReplicate()
l_ok pixaConvertToPdf(PIXA *pixa, l_int32 res, l_float32 scalefactor, l_int32 type, l_int32 quality, const char *title, const char *fileout)
pixaConvertToPdf()
PIX * pixMorphSequenceByComponent(PIX *pixs, const char *sequence, l_int32 connectivity, l_int32 minw, l_int32 minh, BOXA **pboxa)
pixMorphSequenceByComponent()
l_ok pixRenderBoxaArb(PIX *pix, BOXA *boxa, l_int32 width, l_uint8 rval, l_uint8 gval, l_uint8 bval)
pixRenderBoxaArb()
PIX * pixHMT(PIX *pixd, PIX *pixs, SEL *sel)
pixHMT()
PIX * pixaGetPix(PIXA *pixa, l_int32 index, l_int32 accesstype)
pixaGetPix()
l_ok pixRenderBoxArb(PIX *pix, BOX *box, l_int32 width, l_uint8 rval, l_uint8 gval, l_uint8 bval)
pixRenderBoxArb()
l_ok pixCountTextColumns(PIX *pixs, l_float32 deltafract, l_float32 peakfract, l_float32 clipfract, l_int32 *pncols, PIXA *pixadb)
pixCountTextColumns()
PIX * pixConvert1To4Cmap(PIX *pixs)
pixConvert1To4Cmap()
l_ok pixZero(PIX *pix, l_int32 *pempty)
pixZero()
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_ok boxIntersects(BOX *box1, BOX *box2, l_int32 *presult)
boxIntersects()
l_ok pixDecideIfTable(PIX *pixs, BOX *box, l_int32 orient, l_int32 *pscore, PIXA *pixadb)
pixDecideIfTable()
l_int32 boxaGetCount(BOXA *boxa)
boxaGetCount()
l_ok pixSetResolution(PIX *pix, l_int32 xres, l_int32 yres)
pixSetResolution()
PIX * pixRotate90(PIX *pixs, l_int32 direction)
pixRotate90()
BOXA * boxaaFlattenToBoxa(BOXAA *baa, NUMA **pnaindex, l_int32 copyflag)
boxaaFlattenToBoxa()
l_ok numaGetMax(NUMA *na, l_float32 *pmaxval, l_int32 *pimaxloc)
numaGetMax()
SEL * selCreateFromPix(PIX *pix, l_int32 cy, l_int32 cx, const char *name)
selCreateFromPix()
l_ok boxGetGeometry(BOX *box, l_int32 *px, l_int32 *py, l_int32 *pw, l_int32 *ph)
boxGetGeometry()
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()
BOX * boxCreate(l_int32 x, l_int32 y, l_int32 w, l_int32 h)
boxCreate()
l_ok pixCountConnComp(PIX *pixs, l_int32 connectivity, l_int32 *pcount)
pixCountConnComp()
l_ok pixGetRegionsBinary(PIX *pixs, PIX **ppixhm, PIX **ppixtm, PIX **ppixtb, PIXA *pixadb)
pixGetRegionsBinary()
l_int32 pixaGetCount(PIXA *pixa)
pixaGetCount()
PTAA * pixGetOuterBordersPtaa(PIX *pixs)
pixGetOuterBordersPtaa()
l_ok gplotSimple1(NUMA *na, l_int32 outformat, const char *outroot, const char *title)
gplotSimple1()
l_ok selSetElement(SEL *sel, l_int32 row, l_int32 col, l_int32 type)
selSetElement()
l_ok ptaaWriteDebug(const char *filename, PTAA *ptaa, l_int32 type)
ptaaWriteDebug()
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_ok pixEstimateBackground(PIX *pixs, l_int32 darkthresh, l_float32 edgecrop, l_int32 *pbg)
pixEstimateBackground()
L_BMF * bmfCreate(const char *dir, l_int32 fontsize)
bmfCreate()
BOXA * pixaGetBoxa(PIXA *pixa, l_int32 accesstype)
pixaGetBoxa()