109 #include "allheaders.h" 112 l_int32 searchdir, l_int32 mindist,
113 l_int32 tsize, l_int32 ntiles);
115 #ifndef NO_CONSOLE_IO 116 #define EQUAL_SIZE_WARNING 0 159 l_int32 wd, hd, wm, hm, w, h, d, wpld, wplm;
160 l_int32 i, j, rval, gval, bval;
161 l_uint32 *datad, *datam, *lined, *linem;
163 PROCNAME(
"pixSetMasked");
166 return ERROR_INT(
"pixd not defined", procName, 1);
168 L_WARNING(
"no mask; nothing to do\n", procName);
171 if (pixGetColormap(pixd)) {
176 if (pixGetDepth(pixm) != 1)
177 return ERROR_INT(
"pixm not 1 bpp", procName, 1);
178 d = pixGetDepth(pixd);
190 return ERROR_INT(
"pixd not 1, 2, 4, 8, 16 or 32 bpp", procName, 1);
206 if (d < 32 && val == 0) {
214 if (d < 32 && val == ((1 << d) - 1)) {
224 if (L_ABS(wd - wm) > 7 || L_ABS(hd - hm) > 7)
225 L_WARNING(
"pixd and pixm sizes differ\n", procName);
229 wpld = pixGetWpl(pixd);
230 wplm = pixGetWpl(pixm);
231 for (i = 0; i < h; i++) {
232 lined = datad + i * wpld;
233 linem = datam + i * wplm;
234 for (j = 0; j < w; j++) {
254 return ERROR_INT(
"shouldn't get here", procName, 1);
303 PROCNAME(
"pixSetMaskedGeneral");
306 return ERROR_INT(
"pixd not defined", procName, 1);
310 d = pixGetDepth(pixd);
311 if (d != 8 && d != 16 && d != 32)
312 return ERROR_INT(
"pixd not 8, 16 or 32 bpp", procName, 1);
313 if (pixGetDepth(pixm) != 1)
314 return ERROR_INT(
"pixm not 1 bpp", procName, 1);
318 return ERROR_INT(
"pixmu not made", procName, 1);
327 return ERROR_INT(
"pixc not made", procName, 1);
333 pixAnd(pixmu, pixmu, pixc);
378 l_int32 w, h, d, ws, hs, ds, wm, hm, dm, wmin, hmin;
379 l_int32 wpl, wpls, wplm, i, j, val;
380 l_uint32 *data, *datas, *datam, *line, *lines, *linem;
383 PROCNAME(
"pixCombineMasked");
388 return ERROR_INT(
"pixd not defined", procName, 1);
390 return ERROR_INT(
"pixs not defined", procName, 1);
395 return ERROR_INT(
"pixs and pixd depths differ", procName, 1);
397 return ERROR_INT(
"pixm not 1 bpp", procName, 1);
398 if (d != 1 && d != 8 && d != 32)
399 return ERROR_INT(
"pixd not 1, 8 or 32 bpp", procName, 1);
400 if (pixGetColormap(pixd) || pixGetColormap(pixs))
401 return ERROR_INT(
"pixs and/or pixd is cmapped", procName, 1);
407 wmin = L_MIN(w, L_MIN(ws, wm));
408 hmin = L_MIN(h, L_MIN(hs, hm));
410 pixt =
pixAnd(NULL, pixs, pixm);
421 wpl = pixGetWpl(pixd);
422 wpls = pixGetWpl(pixs);
423 wplm = pixGetWpl(pixm);
425 for (i = 0; i < hmin; i++) {
426 line = data + i * wpl;
427 lines = datas + i * wpls;
428 linem = datam + i * wplm;
429 for (j = 0; j < wmin; j++) {
437 for (i = 0; i < hmin; i++) {
438 line = data + i * wpl;
439 lines = datas + i * wpls;
440 linem = datam + i * wplm;
441 for (j = 0; j < wmin; j++) {
499 l_int32 d, w, h, ws, hs, ds, wm, hm, dm, wmin, hmin;
500 l_int32 wpl, wpls, wplm, i, j, val;
501 l_uint32 *data, *datas, *datam, *line, *lines, *linem;
504 PROCNAME(
"pixCombineMaskedGeneral");
509 return ERROR_INT(
"pixd not defined", procName, 1);
511 return ERROR_INT(
"pixs not defined", procName, 1);
516 return ERROR_INT(
"pixs and pixd depths differ", procName, 1);
518 return ERROR_INT(
"pixm not 1 bpp", procName, 1);
519 if (d != 1 && d != 8 && d != 32)
520 return ERROR_INT(
"pixd not 1, 8 or 32 bpp", procName, 1);
521 if (pixGetColormap(pixd) || pixGetColormap(pixs))
522 return ERROR_INT(
"pixs and/or pixd is cmapped", procName, 1);
528 wmin = L_MIN(ws, wm);
529 hmin = L_MIN(hs, hm);
531 pixt =
pixAnd(NULL, pixs, pixm);
539 wpl = pixGetWpl(pixd);
541 wpls = pixGetWpl(pixs);
543 wplm = pixGetWpl(pixm);
546 for (i = 0; i < hmin; i++) {
547 if (y + i < 0 || y + i >= h)
continue;
548 line = data + (y + i) * wpl;
549 lines = datas + i * wpls;
550 linem = datam + i * wplm;
551 for (j = 0; j < wmin; j++) {
552 if (x + j < 0 || x + j >= w)
continue;
561 *(line + x + j) = *(lines + j);
564 return ERROR_INT(
"shouldn't get here", procName, 1);
624 l_int32 d, w, h, wm, hm, wpl, wplm, i, j, rval, gval, bval;
625 l_uint32 *data, *datam, *line, *linem;
627 PROCNAME(
"pixPaintThroughMask");
632 return ERROR_INT(
"pixd not defined", procName, 1);
633 if (pixGetColormap(pixd)) {
638 if (pixGetDepth(pixm) != 1)
639 return ERROR_INT(
"pixm not 1 bpp", procName, 1);
640 d = pixGetDepth(pixd);
652 return ERROR_INT(
"pixd not 1, 2, 4, 8, 16 or 32 bpp", procName, 1);
668 if (d < 32 && val == 0) {
676 if (d < 32 && val == ((1 << d) - 1)) {
685 wpl = pixGetWpl(pixd);
687 wplm = pixGetWpl(pixm);
689 for (i = 0; i < hm; i++) {
690 if (y + i < 0 || y + i >= h)
continue;
691 line = data + (y + i) * wpl;
692 linem = datam + i * wplm;
693 for (j = 0; j < wm; j++) {
694 if (x + j < 0 || x + j >= w)
continue;
711 *(line + x + j) = val;
714 return ERROR_INT(
"shouldn't get here", procName, 1);
796 l_int32 w, h, d, wm, hm, dm, i, n, bx, by, bw, bh, edgeblend, retval, minside;
798 BOX *box, *boxv, *boxh;
800 PIX *pixf, *pixv, *pixh, *pix1, *pix2, *pix3, *pix4, *pix5;
803 PROCNAME(
"pixPaintSelfThroughMask");
808 return ERROR_INT(
"pixd not defined", procName, 1);
809 if (pixGetColormap(pixd) != NULL)
810 return ERROR_INT(
"pixd has colormap", procName, 1);
812 if (d != 8 && d != 32)
813 return ERROR_INT(
"pixd not 8 or 32 bpp", procName, 1);
816 return ERROR_INT(
"pixm not 1 bpp", procName, 1);
818 return ERROR_INT(
"x and y must be non-negative", procName, 1);
819 if (searchdir != L_HORIZ && searchdir != L_VERT &&
820 searchdir != L_BOTH_DIRECTIONS)
821 return ERROR_INT(
"invalid searchdir", procName, 1);
823 return ERROR_INT(
"tilesize must be >= 2", procName, 1);
825 return ERROR_INT(
"distblend must be >= 0", procName, 1);
828 if (wm < w || hm < h) {
838 L_WARNING(
"no fg in mask\n", procName);
851 edgeblend = (n == 1 && distblend > 0) ? 1 : 0;
852 if (distblend > 0 && n > 1)
853 L_WARNING(
"%d components; can not blend at edges\n", procName, n);
855 for (i = 0; i < n; i++) {
863 minside = L_MIN(bw, bh);
866 if (searchdir == L_HORIZ || searchdir == L_BOTH_DIRECTIONS) {
868 L_MIN(minside, tilesize), ntiles, &boxh, 0);
870 if (searchdir == L_VERT || searchdir == L_BOTH_DIRECTIONS) {
872 L_MIN(minside, tilesize), ntiles, &boxv, 0);
874 if (!boxh && !boxv) {
875 L_WARNING(
"tile region not selected; paint color near boundary\n",
892 pix2 =
pixBlend(pixh, pixv, 0, 0, 0.5);
946 l_int32 w, h, d, i, j, sval, wpls, wpld;
947 l_uint32 *datas, *datad, *lines, *lined;
950 PROCNAME(
"pixMakeMaskFromVal");
953 return (
PIX *)ERROR_PTR(
"pixs not defined", procName, NULL);
955 if (d != 2 && d != 4 && d != 8)
956 return (
PIX *)ERROR_PTR(
"pix not 2, 4 or 8 bpp", procName, NULL);
959 pixCopyResolution(pixd, pixs);
960 pixCopyInputFormat(pixd, pixs);
963 wpls = pixGetWpl(pixs);
964 wpld = pixGetWpl(pixd);
965 for (i = 0; i < h; i++) {
966 lines = datas + i * wpls;
967 lined = datad + i * wpld;
968 for (j = 0; j < w; j++) {
1003 l_int32 w, h, d, i, j, val, wpls, wpld;
1004 l_uint32 *datas, *datad, *lines, *lined;
1007 PROCNAME(
"pixMakeMaskFromLUT");
1010 return (
PIX *)ERROR_PTR(
"pixs not defined", procName, NULL);
1012 return (
PIX *)ERROR_PTR(
"tab not defined", procName, NULL);
1014 if (d != 2 && d != 4 && d != 8)
1015 return (
PIX *)ERROR_PTR(
"pix not 2, 4 or 8 bpp", procName, NULL);
1018 pixCopyResolution(pixd, pixs);
1019 pixCopyInputFormat(pixd, pixs);
1022 wpls = pixGetWpl(pixs);
1023 wpld = pixGetWpl(pixd);
1024 for (i = 0; i < h; i++) {
1025 lines = datas + i * wpls;
1026 lined = datad + i * wpld;
1027 for (j = 0; j < w; j++) {
1077 PROCNAME(
"pixMakeArbMaskFromRGB");
1079 if (!pixs || pixGetDepth(pixs) != 32)
1080 return (
PIX *)ERROR_PTR(
"pixs undefined or not 32 bpp", procName, NULL);
1081 if (thresh >= 255.0) thresh = 254.0;
1084 return (
PIX *)ERROR_PTR(
"pix1 not made", procName, NULL);
1150 PIX *pixg, *pixm, *pixt, *pixd;
1152 PROCNAME(
"pixSetUnderTransparency");
1154 if (!pixs || pixGetDepth(pixs) != 32)
1155 return (
PIX *)ERROR_PTR(
"pixs not defined or not 32 bpp",
1158 if (pixGetSpp(pixs) != 4) {
1159 L_WARNING(
"no alpha channel; returning a copy\n", procName);
1178 pixDisplay(pixt, 0, 0);
1230 PROCNAME(
"pixMakeAlphaFromMask");
1232 if (pbox) *pbox = NULL;
1233 if (!pixs || pixGetDepth(pixs) != 1)
1234 return (
PIX *)ERROR_PTR(
"pixs undefined or not 1 bpp", procName, NULL);
1236 return (
PIX *)ERROR_PTR(
"dist must be >= 0", procName, NULL);
1242 L_WARNING(
"no ON pixels in mask\n", procName);
1299 l_int32 empty, bx, by;
1300 l_float32 rval, gval, bval;
1302 PIX *pix1, *pix2, *pix3;
1304 PROCNAME(
"pixGetColorNearMaskBoundary");
1307 return ERROR_INT(
"&pval not defined", procName, 1);
1309 if (!pixs || pixGetDepth(pixs) != 32)
1310 return ERROR_INT(
"pixs undefined or not 32 bpp", procName, 1);
1311 if (!pixm || pixGetDepth(pixm) != 1)
1312 return ERROR_INT(
"pixm undefined or not 1 bpp", procName, 1);
1314 return ERROR_INT(
"box not defined", procName, 1);
1316 return ERROR_INT(
"dist must be >= 0", procName, 1);
1321 box1 =
boxAdjustSides(NULL, box, -dist - 5, dist + 5, -dist - 5, dist + 5);
1328 snprintf(op,
sizeof(op),
"d%d.%d", 2 * dist, 2 * dist);
1336 pixXor(pix3, pix3, pix2);
1342 &rval, &gval, &bval);
1344 (l_int32)(bval + 0.5), pval);
1346 L_WARNING(
"no pixels found\n", procName);
1352 pixWrite(
"/tmp/masknear/input.png", pix1, IFF_PNG);
1353 pixWrite(
"/tmp/masknear/adjusted.png", pix2, IFF_PNG);
1354 pixWrite(
"/tmp/masknear/outerfive.png", pix3, IFF_PNG);
1355 fprintf(stderr,
"Input box; with adjusted sides; clipped\n");
1398 PROCNAME(
"pixInvert");
1401 return (
PIX *)ERROR_PTR(
"pixs not defined", procName, NULL);
1404 if ((pixd =
pixCopy(pixd, pixs)) == NULL)
1405 return (
PIX *)ERROR_PTR(
"pixd not made", procName, NULL);
1407 pixRasterop(pixd, 0, 0, pixGetWidth(pixd), pixGetHeight(pixd),
1453 return (
PIX *)ERROR_PTR(
"pixs1 not defined", procName, pixd);
1455 return (
PIX *)ERROR_PTR(
"pixs2 not defined", procName, pixd);
1457 return (
PIX *)ERROR_PTR(
"cannot have pixs2 == pixd", procName, pixd);
1458 if (pixGetDepth(pixs1) != pixGetDepth(pixs2))
1459 return (
PIX *)ERROR_PTR(
"depths of pixs* unequal", procName, pixd);
1461 #if EQUAL_SIZE_WARNING 1463 L_WARNING(
"pixs1 and pixs2 not equal sizes\n", procName);
1467 if ((pixd =
pixCopy(pixd, pixs1)) == NULL)
1468 return (
PIX *)ERROR_PTR(
"pixd not made", procName, pixd);
1471 pixRasterop(pixd, 0, 0, pixGetWidth(pixd), pixGetHeight(pixd),
1517 return (
PIX *)ERROR_PTR(
"pixs1 not defined", procName, pixd);
1519 return (
PIX *)ERROR_PTR(
"pixs2 not defined", procName, pixd);
1521 return (
PIX *)ERROR_PTR(
"cannot have pixs2 == pixd", procName, pixd);
1522 if (pixGetDepth(pixs1) != pixGetDepth(pixs2))
1523 return (
PIX *)ERROR_PTR(
"depths of pixs* unequal", procName, pixd);
1525 #if EQUAL_SIZE_WARNING 1527 L_WARNING(
"pixs1 and pixs2 not equal sizes\n", procName);
1531 if ((pixd =
pixCopy(pixd, pixs1)) == NULL)
1532 return (
PIX *)ERROR_PTR(
"pixd not made", procName, pixd);
1535 pixRasterop(pixd, 0, 0, pixGetWidth(pixd), pixGetHeight(pixd),
1581 return (
PIX *)ERROR_PTR(
"pixs1 not defined", procName, pixd);
1583 return (
PIX *)ERROR_PTR(
"pixs2 not defined", procName, pixd);
1585 return (
PIX *)ERROR_PTR(
"cannot have pixs2 == pixd", procName, pixd);
1586 if (pixGetDepth(pixs1) != pixGetDepth(pixs2))
1587 return (
PIX *)ERROR_PTR(
"depths of pixs* unequal", procName, pixd);
1589 #if EQUAL_SIZE_WARNING 1591 L_WARNING(
"pixs1 and pixs2 not equal sizes\n", procName);
1595 if ((pixd =
pixCopy(pixd, pixs1)) == NULL)
1596 return (
PIX *)ERROR_PTR(
"pixd not made", procName, pixd);
1599 pixRasterop(pixd, 0, 0, pixGetWidth(pixd), pixGetHeight(pixd),
1645 PROCNAME(
"pixSubtract");
1648 return (
PIX *)ERROR_PTR(
"pixs1 not defined", procName, pixd);
1650 return (
PIX *)ERROR_PTR(
"pixs2 not defined", procName, pixd);
1651 if (pixGetDepth(pixs1) != pixGetDepth(pixs2))
1652 return (
PIX *)ERROR_PTR(
"depths of pixs* unequal", procName, pixd);
1654 #if EQUAL_SIZE_WARNING 1656 L_WARNING(
"pixs1 and pixs2 not equal sizes\n", procName);
1664 }
else if (pixd == pixs1) {
1667 }
else if (pixd == pixs2) {
1705 l_int32 w, h, wpl, i, j, fullwords, endbits;
1707 l_uint32 *data, *line;
1709 PROCNAME(
"pixZero");
1712 return ERROR_INT(
"&empty not defined", procName, 1);
1715 return ERROR_INT(
"pix not defined", procName, 1);
1717 w = pixGetWidth(pix) * pixGetDepth(pix);
1718 h = pixGetHeight(pix);
1719 wpl = pixGetWpl(pix);
1723 endmask = (endbits == 0) ? 0 : (0xffffffffU << (32 - endbits));
1725 for (i = 0; i < h; i++) {
1726 line = data + wpl * i;
1727 for (j = 0; j < fullwords; j++)
1733 if (*line & endmask) {
1755 l_int32 w, h, count;
1757 PROCNAME(
"pixForegroundFraction");
1760 return ERROR_INT(
"&fract not defined", procName, 1);
1762 if (!pix || pixGetDepth(pix) != 1)
1763 return ERROR_INT(
"pix not defined or not 1 bpp", procName, 1);
1767 *pfract = (l_float32)count / (l_float32)(w * h);
1781 l_int32 d, i, n, count;
1786 PROCNAME(
"pixaCountPixels");
1789 return (
NUMA *)ERROR_PTR(
"pix not defined", procName, NULL);
1795 d = pixGetDepth(pix);
1798 return (
NUMA *)ERROR_PTR(
"pixa not 1 bpp", procName, NULL);
1801 return (
NUMA *)ERROR_PTR(
"na not made", procName, NULL);
1803 for (i = 0; i < n; i++) {
1829 l_int32 w, h, wpl, i, j;
1830 l_int32 fullwords, endbits, sum;
1834 PROCNAME(
"pixCountPixels");
1837 return ERROR_INT(
"&count not defined", procName, 1);
1839 if (!pixs || pixGetDepth(pixs) != 1)
1840 return ERROR_INT(
"pixs not defined or not 1 bpp", procName, 1);
1844 wpl = pixGetWpl(pixs);
1848 endmask = (endbits == 0) ? 0 : (0xffffffffU << (32 - endbits));
1851 for (i = 0; i < h; i++, data += wpl) {
1852 for (j = 0; j < fullwords; j++) {
1853 l_uint32 word = data[j];
1855 sum += tab[word & 0xff] +
1856 tab[(word >> 8) & 0xff] +
1857 tab[(word >> 16) & 0xff] +
1858 tab[(word >> 24) & 0xff];
1862 l_uint32 word = data[j] & endmask;
1864 sum += tab[word & 0xff] +
1865 tab[(word >> 8) & 0xff] +
1866 tab[(word >> 16) & 0xff] +
1867 tab[(word >> 24) & 0xff];
1873 if (!tab8) LEPT_FREE(tab);
1893 l_int32 bx, by, bw, bh;
1896 PROCNAME(
"pixCountPixelsInRect");
1899 return ERROR_INT(
"&count not defined", procName, 1);
1901 if (!pixs || pixGetDepth(pixs) != 1)
1902 return ERROR_INT(
"pixs not defined or not 1 bpp", procName, 1);
1935 l_int32 i, j, w, h, wpl, count, xstart, xend, ystart, yend, bw, bh;
1936 l_uint32 *line, *data;
1939 PROCNAME(
"pixCountByRow");
1941 if (!pix || pixGetDepth(pix) != 1)
1942 return (
NUMA *)ERROR_PTR(
"pix undefined or not 1 bpp", procName, NULL);
1949 return (
NUMA *)ERROR_PTR(
"invalid clipping box", procName, NULL);
1952 return (
NUMA *)ERROR_PTR(
"na not made", procName, NULL);
1955 wpl = pixGetWpl(pix);
1956 for (i = ystart; i < yend; i++) {
1958 line = data + i * wpl;
1959 for (j = xstart; j < xend; j++) {
1987 l_int32 i, j, w, h, wpl, count, xstart, xend, ystart, yend, bw, bh;
1988 l_uint32 *line, *data;
1991 PROCNAME(
"pixCountByColumn");
1993 if (!pix || pixGetDepth(pix) != 1)
1994 return (
NUMA *)ERROR_PTR(
"pix undefined or not 1 bpp", procName, NULL);
2001 return (
NUMA *)ERROR_PTR(
"invalid clipping box", procName, NULL);
2004 return (
NUMA *)ERROR_PTR(
"na not made", procName, NULL);
2007 wpl = pixGetWpl(pix);
2008 for (j = xstart; j < xend; j++) {
2010 for (i = ystart; i < yend; i++) {
2011 line = data + i * wpl;
2033 l_int32 h, i, count;
2037 PROCNAME(
"pixCountPixelsByRow");
2039 if (!pix || pixGetDepth(pix) != 1)
2040 return (
NUMA *)ERROR_PTR(
"pix undefined or not 1 bpp", procName, NULL);
2042 h = pixGetHeight(pix);
2044 return (
NUMA *)ERROR_PTR(
"na not made", procName, NULL);
2047 for (i = 0; i < h; i++) {
2052 if (!tab8) LEPT_FREE(tab);
2066 l_int32 i, j, w, h, wpl;
2067 l_uint32 *line, *data;
2071 PROCNAME(
"pixCountPixelsByColumn");
2073 if (!pix || pixGetDepth(pix) != 1)
2074 return (
NUMA *)ERROR_PTR(
"pix undefined or not 1 bpp", procName, NULL);
2078 return (
NUMA *)ERROR_PTR(
"na not made", procName, NULL);
2082 wpl = pixGetWpl(pix);
2083 for (i = 0; i < h; i++) {
2084 line = data + wpl * i;
2085 for (j = 0; j < w; j++) {
2110 l_uint32 word, endmask;
2111 l_int32 j, w, h, wpl;
2112 l_int32 fullwords, endbits, sum;
2116 PROCNAME(
"pixCountPixelsInRow");
2119 return ERROR_INT(
"&count not defined", procName, 1);
2121 if (!pix || pixGetDepth(pix) != 1)
2122 return ERROR_INT(
"pix not defined or not 1 bpp", procName, 1);
2125 if (row < 0 || row >= h)
2126 return ERROR_INT(
"row out of bounds", procName, 1);
2127 wpl = pixGetWpl(pix);
2131 endmask = (endbits == 0) ? 0 : (0xffffffffU << (32 - endbits));
2135 for (j = 0; j < fullwords; j++) {
2138 sum += tab[word & 0xff] +
2139 tab[(word >> 8) & 0xff] +
2140 tab[(word >> 16) & 0xff] +
2141 tab[(word >> 24) & 0xff];
2145 word = line[j] & endmask;
2147 sum += tab[word & 0xff] +
2148 tab[(word >> 8) & 0xff] +
2149 tab[(word >> 16) & 0xff] +
2150 tab[(word >> 24) & 0xff];
2155 if (!tab8) LEPT_FREE(tab);
2171 l_int32 i, j, w, h, wpl;
2172 l_uint32 *line, *data;
2176 PROCNAME(
"pixGetMomentByColumn");
2178 if (!pix || pixGetDepth(pix) != 1)
2179 return (
NUMA *)ERROR_PTR(
"pix undefined or not 1 bpp", procName, NULL);
2180 if (order != 1 && order != 2)
2181 return (
NUMA *)ERROR_PTR(
"order of moment not 1 or 2", procName, NULL);
2185 return (
NUMA *)ERROR_PTR(
"na not made", procName, NULL);
2189 wpl = pixGetWpl(pix);
2190 for (i = 0; i < h; i++) {
2191 line = data + wpl * i;
2192 for (j = 0; j < w; j++) {
2231 l_uint32 word, endmask;
2233 l_int32 w, h, wpl, i, j;
2234 l_int32 fullwords, endbits, sum;
2235 l_uint32 *line, *data;
2237 PROCNAME(
"pixThresholdPixelSum");
2240 return ERROR_INT(
"&above not defined", procName, 1);
2242 if (!pix || pixGetDepth(pix) != 1)
2243 return ERROR_INT(
"pix not defined or not 1 bpp", procName, 1);
2247 wpl = pixGetWpl(pix);
2251 endmask = 0xffffffff << (32 - endbits);
2254 for (i = 0; i < h; i++) {
2255 line = data + wpl * i;
2256 for (j = 0; j < fullwords; j++) {
2259 sum += tab[word & 0xff] +
2260 tab[(word >> 8) & 0xff] +
2261 tab[(word >> 16) & 0xff] +
2262 tab[(word >> 24) & 0xff];
2266 word = line[j] & endmask;
2268 sum += tab[word & 0xff] +
2269 tab[(word >> 8) & 0xff] +
2270 tab[(word >> 16) & 0xff] +
2271 tab[(word >> 24) & 0xff];
2276 if (!tab8) LEPT_FREE(tab);
2281 if (!tab8) LEPT_FREE(tab);
2304 PROCNAME(
"makePixelSumTab8");
2306 if ((tab = (l_int32 *)LEPT_CALLOC(256,
sizeof(l_int32))) == NULL)
2307 return (l_int32 *)ERROR_PTR(
"tab not made", procName, NULL);
2309 for (i = 0; i < 256; i++) {
2311 tab[i] = (byte & 0x1) +
2312 ((byte >> 1) & 0x1) +
2313 ((byte >> 2) & 0x1) +
2314 ((byte >> 3) & 0x1) +
2315 ((byte >> 4) & 0x1) +
2316 ((byte >> 5) & 0x1) +
2317 ((byte >> 6) & 0x1) +
2318 ((byte >> 7) & 0x1);
2348 PROCNAME(
"makePixelCentroidTab8");
2350 if ((tab = (l_int32 *)LEPT_CALLOC(256,
sizeof(l_int32))) == NULL)
2351 return (l_int32 *)ERROR_PTR(
"tab not made", procName, NULL);
2355 for (i = 2; i < 4; i++) {
2356 tab[i] = tab[i - 2] + 6;
2358 for (i = 4; i < 8; i++) {
2359 tab[i] = tab[i - 4] + 5;
2361 for (i = 8; i < 16; i++) {
2362 tab[i] = tab[i - 8] + 4;
2364 for (i = 16; i < 32; i++) {
2365 tab[i] = tab[i - 16] + 3;
2367 for (i = 32; i < 64; i++) {
2368 tab[i] = tab[i - 32] + 2;
2370 for (i = 64; i < 128; i++) {
2371 tab[i] = tab[i - 64] + 1;
2373 for (i = 128; i < 256; i++) {
2374 tab[i] = tab[i - 128];
2405 l_int32 i, j, w, h, d, wpl, xstart, xend, ystart, yend, bw, bh;
2406 l_uint32 *line, *data;
2407 l_float64 norm, sum;
2410 PROCNAME(
"pixAverageByRow");
2413 return (
NUMA *)ERROR_PTR(
"pix not defined", procName, NULL);
2415 if (d != 8 && d != 16)
2416 return (
NUMA *)ERROR_PTR(
"pix not 8 or 16 bpp", procName, NULL);
2418 return (
NUMA *)ERROR_PTR(
"invalid type", procName, NULL);
2419 if (pixGetColormap(pix) != NULL)
2420 return (
NUMA *)ERROR_PTR(
"pix colormapped", procName, NULL);
2424 return (
NUMA *)ERROR_PTR(
"invalid clipping box", procName, NULL);
2426 norm = 1. / (l_float32)bw;
2428 return (
NUMA *)ERROR_PTR(
"na not made", procName, NULL);
2431 wpl = pixGetWpl(pix);
2432 for (i = ystart; i < yend; i++) {
2434 line = data + i * wpl;
2436 for (j = xstart; j < xend; j++)
2439 sum = bw * 255 - sum;
2441 for (j = xstart; j < xend; j++)
2444 sum = bw * 0xffff - sum;
2474 l_int32 i, j, w, h, d, wpl, xstart, xend, ystart, yend, bw, bh;
2475 l_uint32 *line, *data;
2476 l_float32 norm, sum;
2479 PROCNAME(
"pixAverageByColumn");
2482 return (
NUMA *)ERROR_PTR(
"pix not defined", procName, NULL);
2485 if (d != 8 && d != 16)
2486 return (
NUMA *)ERROR_PTR(
"pix not 8 or 16 bpp", procName, NULL);
2488 return (
NUMA *)ERROR_PTR(
"invalid type", procName, NULL);
2489 if (pixGetColormap(pix) != NULL)
2490 return (
NUMA *)ERROR_PTR(
"pix colormapped", procName, NULL);
2494 return (
NUMA *)ERROR_PTR(
"invalid clipping box", procName, NULL);
2497 return (
NUMA *)ERROR_PTR(
"na not made", procName, NULL);
2499 norm = 1. / (l_float32)bh;
2501 wpl = pixGetWpl(pix);
2502 for (j = xstart; j < xend; j++) {
2505 for (i = ystart; i < yend; i++) {
2506 line = data + i * wpl;
2510 sum = bh * 255 - sum;
2512 for (i = ystart; i < yend; i++) {
2513 line = data + i * wpl;
2517 sum = bh * 0xffff - sum;
2539 l_int32 w, h, d, wpl, i, j, xstart, xend, ystart, yend, bw, bh;
2540 l_uint32 *data, *line;
2543 PROCNAME(
"pixAverageInRect");
2546 return ERROR_INT(
"&ave not defined", procName, 1);
2549 return ERROR_INT(
"pix not defined", procName, 1);
2551 if (d != 1 && d != 2 && d != 4 && d != 8)
2552 return ERROR_INT(
"pix not 1, 2, 4 or 8 bpp", procName, 1);
2553 if (pixGetColormap(pix) != NULL)
2554 return ERROR_INT(
"pix is colormapped", procName, 1);
2558 return ERROR_INT(
"invalid clipping box", procName, 1);
2560 wpl = pixGetWpl(pix);
2563 for (i = ystart; i < yend; i++) {
2564 line = data + i * wpl;
2565 for (j = xstart; j < xend; j++) {
2577 *pave = ave / ((l_float32)(bw) * bh);
2604 l_int32 i, j, w, h, d, wpl, xstart, xend, ystart, yend, bw, bh, val;
2605 l_uint32 *line, *data;
2606 l_float64 sum1, sum2, norm, ave, var, rootvar;
2609 PROCNAME(
"pixVarianceByRow");
2612 return (
NUMA *)ERROR_PTR(
"pix not defined", procName, NULL);
2614 if (d != 8 && d != 16)
2615 return (
NUMA *)ERROR_PTR(
"pix not 8 or 16 bpp", procName, NULL);
2616 if (pixGetColormap(pix) != NULL)
2617 return (
NUMA *)ERROR_PTR(
"pix colormapped", procName, NULL);
2621 return (
NUMA *)ERROR_PTR(
"invalid clipping box", procName, NULL);
2624 return (
NUMA *)ERROR_PTR(
"na not made", procName, NULL);
2626 norm = 1. / (l_float32)bw;
2628 wpl = pixGetWpl(pix);
2629 for (i = ystart; i < yend; i++) {
2631 line = data + i * wpl;
2632 for (j = xstart; j < xend; j++) {
2638 sum2 += (l_float64)(val) * val;
2641 var = norm * sum2 - ave * ave;
2642 rootvar = sqrt(var);
2669 l_int32 i, j, w, h, d, wpl, xstart, xend, ystart, yend, bw, bh, val;
2670 l_uint32 *line, *data;
2671 l_float64 sum1, sum2, norm, ave, var, rootvar;
2674 PROCNAME(
"pixVarianceByColumn");
2677 return (
NUMA *)ERROR_PTR(
"pix not defined", procName, NULL);
2679 if (d != 8 && d != 16)
2680 return (
NUMA *)ERROR_PTR(
"pix not 8 or 16 bpp", procName, NULL);
2681 if (pixGetColormap(pix) != NULL)
2682 return (
NUMA *)ERROR_PTR(
"pix colormapped", procName, NULL);
2686 return (
NUMA *)ERROR_PTR(
"invalid clipping box", procName, NULL);
2689 return (
NUMA *)ERROR_PTR(
"na not made", procName, NULL);
2691 norm = 1. / (l_float32)bh;
2693 wpl = pixGetWpl(pix);
2694 for (j = xstart; j < xend; j++) {
2696 for (i = ystart; i < yend; i++) {
2697 line = data + wpl * i;
2703 sum2 += (l_float64)(val) * val;
2706 var = norm * sum2 - ave * ave;
2707 rootvar = sqrt(var);
2726 l_float32 *prootvar)
2728 l_int32 w, h, d, wpl, i, j, xstart, xend, ystart, yend, bw, bh, val;
2729 l_uint32 *data, *line;
2730 l_float64 sum1, sum2, norm, ave, var;
2732 PROCNAME(
"pixVarianceInRect");
2735 return ERROR_INT(
"&rootvar not defined", procName, 1);
2738 return ERROR_INT(
"pix not defined", procName, 1);
2740 if (d != 1 && d != 2 && d != 4 && d != 8)
2741 return ERROR_INT(
"pix not 1, 2, 4 or 8 bpp", procName, 1);
2742 if (pixGetColormap(pix) != NULL)
2743 return ERROR_INT(
"pix is colormapped", procName, 1);
2747 return ERROR_INT(
"invalid clipping box", procName, 1);
2749 wpl = pixGetWpl(pix);
2752 for (i = ystart; i < yend; i++) {
2753 line = data + i * wpl;
2754 for (j = xstart; j < xend; j++) {
2758 sum2 += (l_float64)(val) * val;
2759 }
else if (d == 2) {
2762 sum2 += (l_float64)(val) * val;
2763 }
else if (d == 4) {
2766 sum2 += (l_float64)(val) * val;
2770 sum2 += (l_float64)(val) * val;
2774 norm = 1.0 / ((l_float64)(bw) * bh);
2776 var = norm * sum2 - ave * ave;
2777 *prootvar = (l_float32)sqrt(var);
2804 l_int32 i, j, w, h, wpl, xstart, xend, ystart, yend, bw, bh, val0, val1;
2805 l_uint32 *line, *data;
2806 l_float64 norm, sum;
2809 PROCNAME(
"pixAbsDiffByRow");
2811 if (!pix || pixGetDepth(pix) != 8)
2812 return (
NUMA *)ERROR_PTR(
"pix undefined or not 8 bpp", procName, NULL);
2813 if (pixGetColormap(pix) != NULL)
2814 return (
NUMA *)ERROR_PTR(
"pix colormapped", procName, NULL);
2819 return (
NUMA *)ERROR_PTR(
"invalid clipping box", procName, NULL);
2821 return (
NUMA *)ERROR_PTR(
"row width must be >= 2", procName, NULL);
2823 norm = 1. / (l_float32)(bw - 1);
2825 return (
NUMA *)ERROR_PTR(
"na not made", procName, NULL);
2828 wpl = pixGetWpl(pix);
2829 for (i = ystart; i < yend; i++) {
2831 line = data + i * wpl;
2833 for (j = xstart + 1; j < xend; j++) {
2835 sum += L_ABS(val1 - val0);
2865 l_int32 i, j, w, h, wpl, xstart, xend, ystart, yend, bw, bh, val0, val1;
2866 l_uint32 *line, *data;
2867 l_float64 norm, sum;
2870 PROCNAME(
"pixAbsDiffByColumn");
2872 if (!pix || pixGetDepth(pix) != 8)
2873 return (
NUMA *)ERROR_PTR(
"pix undefined or not 8 bpp", procName, NULL);
2874 if (pixGetColormap(pix) != NULL)
2875 return (
NUMA *)ERROR_PTR(
"pix colormapped", procName, NULL);
2880 return (
NUMA *)ERROR_PTR(
"invalid clipping box", procName, NULL);
2882 return (
NUMA *)ERROR_PTR(
"column height must be >= 2", procName, NULL);
2884 norm = 1. / (l_float32)(bh - 1);
2886 return (
NUMA *)ERROR_PTR(
"na not made", procName, NULL);
2889 wpl = pixGetWpl(pix);
2890 for (j = xstart; j < xend; j++) {
2892 line = data + ystart * wpl;
2894 for (i = ystart + 1; i < yend; i++) {
2895 line = data + i * wpl;
2897 sum += L_ABS(val1 - val0);
2928 l_float32 *pabsdiff)
2930 l_int32 w, h, wpl, i, j, xstart, xend, ystart, yend, bw, bh, val0, val1;
2931 l_uint32 *data, *line;
2932 l_float64 norm, sum;
2934 PROCNAME(
"pixAbsDiffInRect");
2937 return ERROR_INT(
"&absdiff not defined", procName, 1);
2939 if (!pix || pixGetDepth(pix) != 8)
2940 return ERROR_INT(
"pix undefined or not 8 bpp", procName, 1);
2942 return ERROR_INT(
"invalid direction", procName, 1);
2943 if (pixGetColormap(pix) != NULL)
2944 return ERROR_INT(
"pix is colormapped", procName, 1);
2949 return ERROR_INT(
"invalid clipping box", procName, 1);
2951 wpl = pixGetWpl(pix);
2954 norm = 1. / (l_float32)(bh * (bw - 1));
2956 for (i = ystart; i < yend; i++) {
2957 line = data + i * wpl;
2959 for (j = xstart + 1; j < xend; j++) {
2961 sum += L_ABS(val1 - val0);
2966 norm = 1. / (l_float32)(bw * (bh - 1));
2968 for (j = xstart; j < xend; j++) {
2969 line = data + ystart * wpl;
2971 for (i = ystart + 1; i < yend; i++) {
2972 line = data + i * wpl;
2974 sum += L_ABS(val1 - val0);
2979 *pabsdiff = (l_float32)(norm * sum);
3007 l_float32 *pabsdiff)
3009 l_int32 w, h, i, j, dir, size, sum;
3010 l_uint32 val0, val1;
3012 PROCNAME(
"pixAbsDiffOnLine");
3015 return ERROR_INT(
"&absdiff not defined", procName, 1);
3017 if (!pix || pixGetDepth(pix) != 8)
3018 return ERROR_INT(
"pix undefined or not 8 bpp", procName, 1);
3021 }
else if (x1 == x2) {
3024 return ERROR_INT(
"line is neither horiz nor vert", procName, 1);
3026 if (pixGetColormap(pix) != NULL)
3027 return ERROR_INT(
"pix is colormapped", procName, 1);
3033 x2 = L_MIN(x2, w - 1);
3035 return ERROR_INT(
"x1 >= x2", procName, 1);
3038 for (j = x1 + 1; j <= x2; j++) {
3040 sum += L_ABS((l_int32)val1 - (l_int32)val0);
3045 y2 = L_MIN(y2, h - 1);
3047 return ERROR_INT(
"y1 >= y2", procName, 1);
3050 for (i = y1 + 1; i <= y2; i++) {
3052 sum += L_ABS((l_int32)val1 - (l_int32)val0);
3056 *pabsdiff = (l_float32)sum / (l_float32)size;
3090 l_int32 i, j, bx, by, bw, bh, w, h, wpl, pixval;
3091 l_uint32 *data, *line;
3093 PROCNAME(
"pixCountArbInRect");
3096 return ERROR_INT(
"&count not defined", procName, 1);
3099 return ERROR_INT(
"pixs not defined", procName, 1);
3100 if (pixGetDepth(pixs) != 8 && !pixGetColormap(pixs))
3101 return ERROR_INT(
"pixs neither 8 bpp nor colormapped",
3104 return ERROR_INT(
"sampling factor < 1", procName, 1);
3108 wpl = pixGetWpl(pixs);
3111 for (i = 0; i < h; i += factor) {
3112 line = data + i * wpl;
3113 for (j = 0; j < w; j += factor) {
3115 if (pixval == val) (*pcount)++;
3120 for (i = 0; i < bh; i += factor) {
3121 if (by + i < 0 || by + i >= h)
continue;
3122 line = data + (by + i) * wpl;
3123 for (j = 0; j < bw; j += factor) {
3124 if (bx + j < 0 || bx + j >= w)
continue;
3126 if (pixval == val) (*pcount)++;
3132 *pcount = *pcount * factor * factor;
3166 l_int32 wt, ht, d, i, j, nx, ny;
3167 PIX *pixd, *pixsfx, *pixsfy, *pixsfxy, *pix;
3169 PROCNAME(
"pixMirroredTiling");
3172 return (
PIX *)ERROR_PTR(
"pixs not defined", procName, NULL);
3174 if (wt <= 0 || ht <= 0)
3175 return (
PIX *)ERROR_PTR(
"pixs size illegal", procName, NULL);
3176 if (d != 8 && d != 32)
3177 return (
PIX *)ERROR_PTR(
"depth not 32 bpp", procName, NULL);
3179 if ((pixd =
pixCreate(w, h, d)) == NULL)
3180 return (
PIX *)ERROR_PTR(
"pixd not made", procName, NULL);
3183 nx = (w + wt - 1) / wt;
3184 ny = (h + ht - 1) / ht;
3188 for (i = 0; i < ny; i++) {
3189 for (j = 0; j < nx; j++) {
3191 if ((i & 1) && !(j & 1))
3193 else if (!(i & 1) && (j & 1))
3195 else if ((i & 1) && (j & 1))
3246 l_int32 w, h, i, n, bestindex;
3247 l_float32 var_of_mean, median_of_mean, median_of_stdev, mean_val, stdev_val;
3248 l_float32 mindels, bestdelm, delm, dels, mean, stdev;
3250 NUMA *namean, *nastdev;
3254 PROCNAME(
"pixFindRepCloseTile");
3257 return ERROR_INT(
"&boxtile not defined", procName, 1);
3260 return ERROR_INT(
"pixs not defined", procName, 1);
3262 return ERROR_INT(
"box not defined", procName, 1);
3263 if (searchdir != L_HORIZ && searchdir != L_VERT)
3264 return ERROR_INT(
"invalid searchdir", procName, 1);
3266 return ERROR_INT(
"mindist must be >= 0", procName, 1);
3268 return ERROR_INT(
"tsize must be > 1", procName, 1);
3270 L_WARNING(
"ntiles = %d; larger than suggested max of 7\n",
3279 return ERROR_INT(
"no tiles found", procName, 1);
3286 for (i = 0; i < n; i++) {
3305 &median_of_mean, 0.0, NULL, NULL);
3307 &median_of_stdev, 0.0, NULL, NULL);
3311 for (i = 0; i < n; i++) {
3314 if (var_of_mean == 0.0) {
3318 delm = L_ABS(mean_val - median_of_mean) / sqrt(var_of_mean);
3319 dels = stdev_val / median_of_stdev;
3322 if (dels < mindels) {
3324 fprintf(stderr,
"i = %d, mean = %7.3f, delm = %7.3f," 3325 " stdev = %7.3f, dels = %7.3f\n",
3326 i, mean_val, delm, stdev_val, dels);
3337 L_INFO(
"median of mean = %7.3f\n", procName, median_of_mean);
3338 L_INFO(
"standard dev of mean = %7.3f\n", procName, sqrt(var_of_mean));
3339 L_INFO(
"median of stdev = %7.3f\n", procName, median_of_stdev);
3340 L_INFO(
"best tile: index = %d\n", procName, bestindex);
3341 L_INFO(
"delta from median in units of stdev = %5.3f\n",
3342 procName, bestdelm);
3343 L_INFO(
"stdev as fraction of median stdev = %5.3f\n",
3380 l_int32 bx, by, bw, bh, left, right, top, bot, i, j, nrows, ncols;
3381 l_int32 x0, y0, x, y, w_avail, w_needed, h_avail, h_needed, t_avail;
3385 PROCNAME(
"findTileRegionsForSearch");
3388 return (
BOXA *)ERROR_PTR(
"box not defined", procName, NULL);
3390 return (
BOXA *)ERROR_PTR(
"no tiles requested", procName, NULL);
3393 if (searchdir == L_HORIZ) {
3397 right = w - bx - bw + 1;
3398 w_avail = L_MAX(left, right) - mindist;
3399 if (tsize & 1) tsize++;
3400 if (w_avail < tsize) {
3401 L_ERROR(
"tsize = %d, w_avail = %d\n", procName, tsize, w_avail);
3404 w_needed = tsize + (ntiles - 1) * (tsize / 2);
3405 if (w_needed > w_avail) {
3406 t_avail = 1 + 2 * (w_avail - tsize) / tsize;
3407 L_WARNING(
"ntiles = %d; room for only %d\n", procName,
3410 w_needed = tsize + (ntiles - 1) * (tsize / 2);
3412 nrows = L_MAX(1, 1 + 2 * (bh - tsize) / tsize);
3419 x0 = bx + bw + mindist;
3420 for (i = 0; i < nrows; i++) {
3421 y = by + i * tsize / 2;
3422 for (j = 0; j < ntiles; j++) {
3423 x = x0 + j * tsize / 2;
3431 bot = h - by - bh + 1;
3432 h_avail = L_MAX(top, bot) - mindist;
3433 if (h_avail < tsize) {
3434 L_ERROR(
"tsize = %d, h_avail = %d\n", procName, tsize, h_avail);
3437 h_needed = tsize + (ntiles - 1) * (tsize / 2);
3438 if (h_needed > h_avail) {
3439 t_avail = 1 + 2 * (h_avail - tsize) / tsize;
3440 L_WARNING(
"ntiles = %d; room for only %d\n", procName,
3443 h_needed = tsize + (ntiles - 1) * (tsize / 2);
3445 ncols = L_MAX(1, 1 + 2 * (bw - tsize) / tsize);
3452 y0 = by + bh + mindist;
3453 for (j = 0; j < ncols; j++) {
3454 x = bx + j * tsize / 2;
3455 for (i = 0; i < ntiles; i++) {
3456 y = y0 + i * tsize / 2;
PIX * pixFlipLR(PIX *pixd, PIX *pixs)
pixFlipLR()
NUMA * pixCountPixelsByRow(PIX *pix, l_int32 *tab8)
pixCountPixelsByRow()
PIX * pixUnpackBinary(PIX *pixs, l_int32 depth, l_int32 invert)
pixUnpackBinary()
NUMA * pixCountByRow(PIX *pix, BOX *box)
pixCountByRow()
NUMA * pixCountPixelsByColumn(PIX *pix)
pixCountPixelsByColumn()
l_int32 numaSetCount(NUMA *na, l_int32 newcount)
numaSetCount()
l_int32 pixSetMaskedGeneral(PIX *pixd, PIX *pixm, l_uint32 val, l_int32 x, l_int32 y)
pixSetMaskedGeneral()
l_int32 lept_mkdir(const char *subdir)
lept_mkdir()
l_int32 numaAddNumber(NUMA *na, l_float32 val)
numaAddNumber()
l_int32 * makePixelCentroidTab8(void)
makePixelCentroidTab8()
NUMA * pixVarianceByRow(PIX *pix, BOX *box)
pixVarianceByRow()
l_int32 pixGetPixel(PIX *pix, l_int32 x, l_int32 y, l_uint32 *pval)
pixGetPixel()
l_int32 pixZero(PIX *pix, l_int32 *pempty)
pixZero()
l_int32 pixAverageInRect(PIX *pix, BOX *box, l_float32 *pave)
pixAverageInRect()
l_int32 pixSetAllArbitrary(PIX *pix, l_uint32 val)
pixSetAllArbitrary()
l_int32 pixSetMasked(PIX *pixd, PIX *pixm, l_uint32 val)
pixSetMasked()
static BOXA * findTileRegionsForSearch(BOX *box, l_int32 w, l_int32 h, l_int32 searchdir, l_int32 mindist, l_int32 tsize, l_int32 ntiles)
findTileRegionsForSearch()
PIX * pixMakeAlphaFromMask(PIX *pixs, l_int32 dist, BOX **pbox)
pixMakeAlphaFromMask()
PIX * pixDilateBrick(PIX *pixd, PIX *pixs, l_int32 hsize, l_int32 vsize)
pixDilateBrick()
l_int32 pixCountArbInRect(PIX *pixs, BOX *box, l_int32 val, l_int32 factor, l_int32 *pcount)
pixCountArbInRect()
l_int32 pixGetColorNearMaskBoundary(PIX *pixs, PIX *pixm, BOX *box, l_int32 dist, l_uint32 *pval, l_int32 debug)
pixGetColorNearMaskBoundary()
l_int32 boxaAddBox(BOXA *boxa, BOX *box, l_int32 copyflag)
boxaAddBox()
l_int32 numaGetFValue(NUMA *na, l_int32 index, l_float32 *pval)
numaGetFValue()
BOX * boxClipToRectangle(BOX *box, l_int32 wi, l_int32 hi)
boxClipToRectangle()
PIX * pixCreate(l_int32 width, l_int32 height, l_int32 depth)
pixCreate()
PIX * pixInvert(PIX *pixd, PIX *pixs)
pixInvert()
#define SET_DATA_QBIT(pdata, n, val)
NUMA * numaCreate(l_int32 n)
numaCreate()
void boxaDestroy(BOXA **pboxa)
boxaDestroy()
l_uint32 * pixGetData(PIX *pix)
pixGetData()
BOX * pixaGetBox(PIXA *pixa, l_int32 index, l_int32 accesstype)
pixaGetBox()
l_int32 boxPrintStreamInfo(FILE *fp, BOX *box)
boxPrintStreamInfo()
l_int32 pixCountPixelsInRect(PIX *pixs, BOX *box, l_int32 *pcount, l_int32 *tab8)
pixCountPixelsInRect()
PIX * pixThresholdToBinary(PIX *pixs, l_int32 thresh)
pixThresholdToBinary()
#define GET_DATA_BIT(pdata, n)
PIX * pixCreateTemplate(PIX *pixs)
pixCreateTemplate()
PIX * pixClipRectangle(PIX *pixs, BOX *box, BOX **pboxc)
pixClipRectangle()
PIX * pixGetRGBComponent(PIX *pixs, l_int32 comp)
pixGetRGBComponent()
#define SET_DATA_DIBIT(pdata, n, val)
PIX * pixMakeMaskFromVal(PIX *pixs, l_int32 val)
pixMakeMaskFromVal()
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()
PIX * pixSetUnderTransparency(PIX *pixs, l_uint32 val, l_int32 debug)
pixSetUnderTransparency()
BOXA * pixConnComp(PIX *pixs, PIXA **ppixa, l_int32 connectivity)
pixConnComp()
PIX * pixFlipTB(PIX *pixd, PIX *pixs)
pixFlipTB()
l_int32 pixCopySpp(PIX *pixd, PIX *pixs)
pixCopySpp()
static const l_int32 L_INSERT
PIX * pixXor(PIX *pixd, PIX *pixs1, PIX *pixs2)
pixXor()
PIX * pixBlend(PIX *pixs1, PIX *pixs2, l_int32 x, l_int32 y, l_float32 fract)
pixBlend()
l_int32 pixForegroundFraction(PIX *pix, l_float32 *pfract)
pixForegroundFraction()
PIX * pixAnd(PIX *pixd, PIX *pixs1, PIX *pixs2)
pixAnd()
NUMA * pixAbsDiffByRow(PIX *pix, BOX *box)
pixAbsDiffByRow()
l_int32 boxClipToRectangleParams(BOX *box, l_int32 w, l_int32 h, l_int32 *pxstart, l_int32 *pystart, l_int32 *pxend, l_int32 *pyend, l_int32 *pbw, l_int32 *pbh)
boxClipToRectangleParams()
PIX * pixMorphSequence(PIX *pixs, const char *sequence, l_int32 dispsep)
pixMorphSequence()
PIX * pixBlendWithGrayMask(PIX *pixs1, PIX *pixs2, PIX *pixg, l_int32 x, l_int32 y)
pixBlendWithGrayMask()
l_int32 * makePixelSumTab8(void)
makePixelSumTab8()
l_int32 pixMultConstantGray(PIX *pixs, l_float32 val)
pixMultConstantGray()
#define SET_DATA_BYTE(pdata, n, val)
PIXA * pixClipRectangles(PIX *pixs, BOXA *boxa)
pixClipRectangles()
l_int32 pixFindRepCloseTile(PIX *pixs, BOX *box, l_int32 searchdir, l_int32 mindist, l_int32 tsize, l_int32 ntiles, BOX **pboxtile, l_int32 debug)
pixFindRepCloseTile()
l_int32 boxGetGeometry(BOX *box, l_int32 *px, l_int32 *py, l_int32 *pw, l_int32 *ph)
boxGetGeometry()
#define GET_DATA_QBIT(pdata, n)
BOX * boxAdjustSides(BOX *boxd, BOX *boxs, l_int32 delleft, l_int32 delright, l_int32 deltop, l_int32 delbot)
boxAdjustSides()
l_int32 pixPaintSelfThroughMask(PIX *pixd, PIX *pixm, l_int32 x, l_int32 y, l_int32 searchdir, l_int32 mindist, l_int32 tilesize, l_int32 ntiles, l_int32 distblend)
pixPaintSelfThroughMask()
l_int32 pixSizesEqual(PIX *pix1, PIX *pix2)
pixSizesEqual()
#define GET_DATA_BYTE(pdata, n)
NUMA * pixAbsDiffByColumn(PIX *pix, BOX *box)
pixAbsDiffByColumn()
NUMA * pixAverageByColumn(PIX *pix, BOX *box, l_int32 type)
pixAverageByColumn()
PIX * pixClone(PIX *pixs)
pixClone()
PIX * pixSubtract(PIX *pixd, PIX *pixs1, PIX *pixs2)
pixSubtract()
void pixDestroy(PIX **ppix)
pixDestroy()
BOX * boxaGetBox(BOXA *boxa, l_int32 index, l_int32 accessflag)
boxaGetBox()
NUMA * pixGetMomentByColumn(PIX *pix, l_int32 order)
pixGetMomentByColumn()
l_int32 numaSetParameters(NUMA *na, l_float32 startx, l_float32 delx)
numaSetParameters()
PIX * pixMakeArbMaskFromRGB(PIX *pixs, l_float32 rc, l_float32 gc, l_float32 bc, l_float32 thresh)
pixMakeArbMaskFromRGB()
l_int32 pixCombineMasked(PIX *pixd, PIX *pixs, PIX *pixm)
pixCombineMasked()
l_int32 pixAbsDiffOnLine(PIX *pix, l_int32 x1, l_int32 y1, l_int32 x2, l_int32 y2, l_float32 *pabsdiff)
pixAbsDiffOnLine()
l_int32 pixPaintThroughMask(PIX *pixd, PIX *pixm, l_int32 x, l_int32 y, l_uint32 val)
pixPaintThroughMask()
l_int32 pixGetAverageMaskedRGB(PIX *pixs, PIX *pixm, l_int32 x, l_int32 y, l_int32 factor, l_int32 type, l_float32 *prval, l_float32 *pgval, l_float32 *pbval)
pixGetAverageMaskedRGB()
void numaDestroy(NUMA **pna)
numaDestroy()
l_int32 numaGetStatsUsingHistogram(NUMA *na, l_int32 maxbins, l_float32 *pmin, l_float32 *pmax, l_float32 *pmean, l_float32 *pvariance, l_float32 *pmedian, l_float32 rank, l_float32 *prval, NUMA **phisto)
numaGetStatsUsingHistogram()
PIX * pixConvertRGBToGray(PIX *pixs, l_float32 rwt, l_float32 gwt, l_float32 bwt)
pixConvertRGBToGray()
PIX * pixOr(PIX *pixd, PIX *pixs1, PIX *pixs2)
pixOr()
NUMA * pixCountByColumn(PIX *pix, BOX *box)
pixCountByColumn()
NUMA * pixaCountPixels(PIXA *pixa)
pixaCountPixels()
l_int32 pixCombineMaskedGeneral(PIX *pixd, PIX *pixs, PIX *pixm, l_int32 x, l_int32 y)
pixCombineMaskedGeneral()
NUMA * pixVarianceByColumn(PIX *pix, BOX *box)
pixVarianceByColumn()
PIX * pixConvertRGBToGrayArb(PIX *pixs, l_float32 rc, l_float32 gc, l_float32 bc)
pixConvertRGBToGrayArb()
l_int32 pixAbsDiffInRect(PIX *pix, BOX *box, l_int32 dir, l_float32 *pabsdiff)
pixAbsDiffInRect()
l_float32 * numaGetFArray(NUMA *na, l_int32 copyflag)
numaGetFArray()
#define GET_DATA_TWO_BYTES(pdata, n)
PIX * pixDistanceFunction(PIX *pixs, l_int32 connectivity, l_int32 outdepth, l_int32 boundcond)
pixDistanceFunction()
#define GET_DATA_DIBIT(pdata, n)
PIX * pixMirroredTiling(PIX *pixs, l_int32 w, l_int32 h)
pixMirroredTiling()
PIX * pixaGetPix(PIXA *pixa, l_int32 index, l_int32 accesstype)
pixaGetPix()
l_int32 composeRGBPixel(l_int32 rval, l_int32 gval, l_int32 bval, l_uint32 *ppixel)
composeRGBPixel()
PIX * pixMakeMaskFromLUT(PIX *pixs, l_int32 *tab)
pixMakeMaskFromLUT()
l_int32 pixClipToForeground(PIX *pixs, PIX **ppixd, BOX **pbox)
pixClipToForeground()
PIX * pixDisplayLayersRGBA(PIX *pixs, l_uint32 val, l_int32 maxw)
pixDisplayLayersRGBA()
l_int32 pixaGetBoxGeometry(PIXA *pixa, l_int32 index, l_int32 *px, l_int32 *py, l_int32 *pw, l_int32 *ph)
pixaGetBoxGeometry()
BOXA * boxaCreate(l_int32 n)
boxaCreate()
PIX * pixCopy(PIX *pixd, PIX *pixs)
pixCopy()
void boxDestroy(BOX **pbox)
boxDestroy()
PIX * pixConvert1To8(PIX *pixd, PIX *pixs, l_uint8 val0, l_uint8 val1)
pixConvert1To8()
NUMA * pixAverageByRow(PIX *pix, BOX *box, l_int32 type)
pixAverageByRow()
l_int32 pixGetDimensions(PIX *pix, l_int32 *pw, l_int32 *ph, l_int32 *pd)
pixGetDimensions()
l_int32 lept_rmdir(const char *subdir)
lept_rmdir()
l_int32 pixCountPixels(PIX *pixs, l_int32 *pcount, l_int32 *tab8)
pixCountPixels()
#define SET_DATA_TWO_BYTES(pdata, n, val)
void pixaDestroy(PIXA **ppixa)
pixaDestroy()
void extractRGBValues(l_uint32 pixel, l_int32 *prval, l_int32 *pgval, l_int32 *pbval)
extractRGBValues()
BOX * boxCreate(l_int32 x, l_int32 y, l_int32 w, l_int32 h)
boxCreate()
l_int32 pixaGetCount(PIXA *pixa)
pixaGetCount()
l_int32 pixVarianceInRect(PIX *pix, BOX *box, l_float32 *prootvar)
pixVarianceInRect()
#define SET_DATA_BIT(pdata, n)
l_int32 pixThresholdPixelSum(PIX *pix, l_int32 thresh, l_int32 *pabove, l_int32 *tab8)
pixThresholdPixelSum()
l_int32 pixCountPixelsInRow(PIX *pix, l_int32 row, l_int32 *pcount, l_int32 *tab8)
pixCountPixelsInRow()
l_int32 pixGetAverageMasked(PIX *pixs, PIX *pixm, l_int32 x, l_int32 y, l_int32 factor, l_int32 type, l_float32 *pval)
pixGetAverageMasked()
l_int32 pixSetMaskedCmap(PIX *pixs, PIX *pixm, l_int32 x, l_int32 y, l_int32 rval, l_int32 gval, l_int32 bval)
pixSetMaskedCmap()