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 pixWriteDebug(
"/tmp/masknear/input.png", pix1, IFF_PNG);
1353 pixWriteDebug(
"/tmp/masknear/adjusted.png", pix2, IFF_PNG);
1354 pixWriteDebug(
"/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) {
1704 l_int32 w, h, wpl, i, j, fullwords, endbits;
1706 l_uint32 *data, *line;
1708 PROCNAME(
"pixZero");
1711 return ERROR_INT(
"&empty not defined", procName, 1);
1714 return ERROR_INT(
"pix not defined", procName, 1);
1716 w = pixGetWidth(pix) * pixGetDepth(pix);
1717 h = pixGetHeight(pix);
1718 wpl = pixGetWpl(pix);
1722 endmask = (endbits == 0) ? 0 : (0xffffffffU << (32 - endbits));
1724 for (i = 0; i < h; i++) {
1725 line = data + wpl * i;
1726 for (j = 0; j < fullwords; j++)
1732 if (*line & endmask) {
1754 l_int32 w, h, count;
1756 PROCNAME(
"pixForegroundFraction");
1759 return ERROR_INT(
"&fract not defined", procName, 1);
1761 if (!pix || pixGetDepth(pix) != 1)
1762 return ERROR_INT(
"pix not defined or not 1 bpp", procName, 1);
1766 *pfract = (l_float32)count / (l_float32)(w * h);
1780 l_int32 d, i, n, count;
1785 PROCNAME(
"pixaCountPixels");
1788 return (
NUMA *)ERROR_PTR(
"pix not defined", procName, NULL);
1794 d = pixGetDepth(pix);
1797 return (
NUMA *)ERROR_PTR(
"pixa not 1 bpp", procName, NULL);
1800 return (
NUMA *)ERROR_PTR(
"na not made", procName, NULL);
1802 for (i = 0; i < n; i++) {
1828 l_int32 w, h, wpl, i, j;
1829 l_int32 fullwords, endbits, sum;
1833 PROCNAME(
"pixCountPixels");
1836 return ERROR_INT(
"&count not defined", procName, 1);
1838 if (!pixs || pixGetDepth(pixs) != 1)
1839 return ERROR_INT(
"pixs not defined or not 1 bpp", procName, 1);
1843 wpl = pixGetWpl(pixs);
1847 endmask = (endbits == 0) ? 0 : (0xffffffffU << (32 - endbits));
1850 for (i = 0; i < h; i++, data += wpl) {
1851 for (j = 0; j < fullwords; j++) {
1852 l_uint32 word = data[j];
1854 sum += tab[word & 0xff] +
1855 tab[(word >> 8) & 0xff] +
1856 tab[(word >> 16) & 0xff] +
1857 tab[(word >> 24) & 0xff];
1861 l_uint32 word = data[j] & endmask;
1863 sum += tab[word & 0xff] +
1864 tab[(word >> 8) & 0xff] +
1865 tab[(word >> 16) & 0xff] +
1866 tab[(word >> 24) & 0xff];
1872 if (!tab8) LEPT_FREE(tab);
1892 l_int32 bx, by, bw, bh;
1895 PROCNAME(
"pixCountPixelsInRect");
1898 return ERROR_INT(
"&count not defined", procName, 1);
1900 if (!pixs || pixGetDepth(pixs) != 1)
1901 return ERROR_INT(
"pixs not defined or not 1 bpp", procName, 1);
1934 l_int32 i, j, w, h, wpl, count, xstart, xend, ystart, yend, bw, bh;
1935 l_uint32 *line, *data;
1938 PROCNAME(
"pixCountByRow");
1940 if (!pix || pixGetDepth(pix) != 1)
1941 return (
NUMA *)ERROR_PTR(
"pix undefined or not 1 bpp", procName, NULL);
1948 return (
NUMA *)ERROR_PTR(
"invalid clipping box", procName, NULL);
1951 return (
NUMA *)ERROR_PTR(
"na not made", procName, NULL);
1954 wpl = pixGetWpl(pix);
1955 for (i = ystart; i < yend; i++) {
1957 line = data + i * wpl;
1958 for (j = xstart; j < xend; j++) {
1986 l_int32 i, j, w, h, wpl, count, xstart, xend, ystart, yend, bw, bh;
1987 l_uint32 *line, *data;
1990 PROCNAME(
"pixCountByColumn");
1992 if (!pix || pixGetDepth(pix) != 1)
1993 return (
NUMA *)ERROR_PTR(
"pix undefined or not 1 bpp", procName, NULL);
2000 return (
NUMA *)ERROR_PTR(
"invalid clipping box", procName, NULL);
2003 return (
NUMA *)ERROR_PTR(
"na not made", procName, NULL);
2006 wpl = pixGetWpl(pix);
2007 for (j = xstart; j < xend; j++) {
2009 for (i = ystart; i < yend; i++) {
2010 line = data + i * wpl;
2032 l_int32 h, i, count;
2036 PROCNAME(
"pixCountPixelsByRow");
2038 if (!pix || pixGetDepth(pix) != 1)
2039 return (
NUMA *)ERROR_PTR(
"pix undefined or not 1 bpp", procName, NULL);
2041 h = pixGetHeight(pix);
2043 return (
NUMA *)ERROR_PTR(
"na not made", procName, NULL);
2046 for (i = 0; i < h; i++) {
2051 if (!tab8) LEPT_FREE(tab);
2065 l_int32 i, j, w, h, wpl;
2066 l_uint32 *line, *data;
2070 PROCNAME(
"pixCountPixelsByColumn");
2072 if (!pix || pixGetDepth(pix) != 1)
2073 return (
NUMA *)ERROR_PTR(
"pix undefined or not 1 bpp", procName, NULL);
2077 return (
NUMA *)ERROR_PTR(
"na not made", procName, NULL);
2081 wpl = pixGetWpl(pix);
2082 for (i = 0; i < h; i++) {
2083 line = data + wpl * i;
2084 for (j = 0; j < w; j++) {
2109 l_uint32 word, endmask;
2110 l_int32 j, w, h, wpl;
2111 l_int32 fullwords, endbits, sum;
2115 PROCNAME(
"pixCountPixelsInRow");
2118 return ERROR_INT(
"&count not defined", procName, 1);
2120 if (!pix || pixGetDepth(pix) != 1)
2121 return ERROR_INT(
"pix not defined or not 1 bpp", procName, 1);
2124 if (row < 0 || row >= h)
2125 return ERROR_INT(
"row out of bounds", procName, 1);
2126 wpl = pixGetWpl(pix);
2130 endmask = (endbits == 0) ? 0 : (0xffffffffU << (32 - endbits));
2134 for (j = 0; j < fullwords; j++) {
2137 sum += tab[word & 0xff] +
2138 tab[(word >> 8) & 0xff] +
2139 tab[(word >> 16) & 0xff] +
2140 tab[(word >> 24) & 0xff];
2144 word = line[j] & endmask;
2146 sum += tab[word & 0xff] +
2147 tab[(word >> 8) & 0xff] +
2148 tab[(word >> 16) & 0xff] +
2149 tab[(word >> 24) & 0xff];
2154 if (!tab8) LEPT_FREE(tab);
2170 l_int32 i, j, w, h, wpl;
2171 l_uint32 *line, *data;
2175 PROCNAME(
"pixGetMomentByColumn");
2177 if (!pix || pixGetDepth(pix) != 1)
2178 return (
NUMA *)ERROR_PTR(
"pix undefined or not 1 bpp", procName, NULL);
2179 if (order != 1 && order != 2)
2180 return (
NUMA *)ERROR_PTR(
"order of moment not 1 or 2", procName, NULL);
2184 return (
NUMA *)ERROR_PTR(
"na not made", procName, NULL);
2188 wpl = pixGetWpl(pix);
2189 for (i = 0; i < h; i++) {
2190 line = data + wpl * i;
2191 for (j = 0; j < w; j++) {
2230 l_uint32 word, endmask;
2232 l_int32 w, h, wpl, i, j;
2233 l_int32 fullwords, endbits, sum;
2234 l_uint32 *line, *data;
2236 PROCNAME(
"pixThresholdPixelSum");
2239 return ERROR_INT(
"&above not defined", procName, 1);
2241 if (!pix || pixGetDepth(pix) != 1)
2242 return ERROR_INT(
"pix not defined or not 1 bpp", procName, 1);
2246 wpl = pixGetWpl(pix);
2250 endmask = 0xffffffff << (32 - endbits);
2253 for (i = 0; i < h; i++) {
2254 line = data + wpl * i;
2255 for (j = 0; j < fullwords; j++) {
2258 sum += tab[word & 0xff] +
2259 tab[(word >> 8) & 0xff] +
2260 tab[(word >> 16) & 0xff] +
2261 tab[(word >> 24) & 0xff];
2265 word = line[j] & endmask;
2267 sum += tab[word & 0xff] +
2268 tab[(word >> 8) & 0xff] +
2269 tab[(word >> 16) & 0xff] +
2270 tab[(word >> 24) & 0xff];
2275 if (!tab8) LEPT_FREE(tab);
2280 if (!tab8) LEPT_FREE(tab);
2303 tab = (l_int32 *)LEPT_CALLOC(256,
sizeof(l_int32));
2304 for (i = 0; i < 256; i++) {
2306 tab[i] = (byte & 0x1) +
2307 ((byte >> 1) & 0x1) +
2308 ((byte >> 2) & 0x1) +
2309 ((byte >> 3) & 0x1) +
2310 ((byte >> 4) & 0x1) +
2311 ((byte >> 5) & 0x1) +
2312 ((byte >> 6) & 0x1) +
2313 ((byte >> 7) & 0x1);
2342 tab = (l_int32 *)LEPT_CALLOC(256,
sizeof(l_int32));
2345 for (i = 2; i < 4; i++) {
2346 tab[i] = tab[i - 2] + 6;
2348 for (i = 4; i < 8; i++) {
2349 tab[i] = tab[i - 4] + 5;
2351 for (i = 8; i < 16; i++) {
2352 tab[i] = tab[i - 8] + 4;
2354 for (i = 16; i < 32; i++) {
2355 tab[i] = tab[i - 16] + 3;
2357 for (i = 32; i < 64; i++) {
2358 tab[i] = tab[i - 32] + 2;
2360 for (i = 64; i < 128; i++) {
2361 tab[i] = tab[i - 64] + 1;
2363 for (i = 128; i < 256; i++) {
2364 tab[i] = tab[i - 128];
2394 l_int32 i, j, w, h, d, wpl, xstart, xend, ystart, yend, bw, bh;
2395 l_uint32 *line, *data;
2396 l_float64 norm, sum;
2399 PROCNAME(
"pixAverageByRow");
2402 return (
NUMA *)ERROR_PTR(
"pix not defined", procName, NULL);
2404 if (d != 8 && d != 16)
2405 return (
NUMA *)ERROR_PTR(
"pix not 8 or 16 bpp", procName, NULL);
2407 return (
NUMA *)ERROR_PTR(
"invalid type", procName, NULL);
2408 if (pixGetColormap(pix) != NULL)
2409 return (
NUMA *)ERROR_PTR(
"pix colormapped", procName, NULL);
2413 return (
NUMA *)ERROR_PTR(
"invalid clipping box", procName, NULL);
2415 norm = 1. / (l_float32)bw;
2417 return (
NUMA *)ERROR_PTR(
"na not made", procName, NULL);
2420 wpl = pixGetWpl(pix);
2421 for (i = ystart; i < yend; i++) {
2423 line = data + i * wpl;
2425 for (j = xstart; j < xend; j++)
2428 sum = bw * 255 - sum;
2430 for (j = xstart; j < xend; j++)
2433 sum = bw * 0xffff - sum;
2463 l_int32 i, j, w, h, d, wpl, xstart, xend, ystart, yend, bw, bh;
2464 l_uint32 *line, *data;
2465 l_float32 norm, sum;
2468 PROCNAME(
"pixAverageByColumn");
2471 return (
NUMA *)ERROR_PTR(
"pix not defined", procName, NULL);
2474 if (d != 8 && d != 16)
2475 return (
NUMA *)ERROR_PTR(
"pix not 8 or 16 bpp", procName, NULL);
2477 return (
NUMA *)ERROR_PTR(
"invalid type", procName, NULL);
2478 if (pixGetColormap(pix) != NULL)
2479 return (
NUMA *)ERROR_PTR(
"pix colormapped", procName, NULL);
2483 return (
NUMA *)ERROR_PTR(
"invalid clipping box", procName, NULL);
2486 return (
NUMA *)ERROR_PTR(
"na not made", procName, NULL);
2488 norm = 1. / (l_float32)bh;
2490 wpl = pixGetWpl(pix);
2491 for (j = xstart; j < xend; j++) {
2494 for (i = ystart; i < yend; i++) {
2495 line = data + i * wpl;
2499 sum = bh * 255 - sum;
2501 for (i = ystart; i < yend; i++) {
2502 line = data + i * wpl;
2506 sum = bh * 0xffff - sum;
2528 l_int32 w, h, d, wpl, i, j, xstart, xend, ystart, yend, bw, bh;
2529 l_uint32 *data, *line;
2532 PROCNAME(
"pixAverageInRect");
2535 return ERROR_INT(
"&ave not defined", procName, 1);
2538 return ERROR_INT(
"pix not defined", procName, 1);
2540 if (d != 1 && d != 2 && d != 4 && d != 8)
2541 return ERROR_INT(
"pix not 1, 2, 4 or 8 bpp", procName, 1);
2542 if (pixGetColormap(pix) != NULL)
2543 return ERROR_INT(
"pix is colormapped", procName, 1);
2547 return ERROR_INT(
"invalid clipping box", procName, 1);
2549 wpl = pixGetWpl(pix);
2552 for (i = ystart; i < yend; i++) {
2553 line = data + i * wpl;
2554 for (j = xstart; j < xend; j++) {
2566 *pave = ave / ((l_float32)(bw) * bh);
2593 l_int32 i, j, w, h, d, wpl, xstart, xend, ystart, yend, bw, bh, val;
2594 l_uint32 *line, *data;
2595 l_float64 sum1, sum2, norm, ave, var, rootvar;
2598 PROCNAME(
"pixVarianceByRow");
2601 return (
NUMA *)ERROR_PTR(
"pix not defined", procName, NULL);
2603 if (d != 8 && d != 16)
2604 return (
NUMA *)ERROR_PTR(
"pix not 8 or 16 bpp", procName, NULL);
2605 if (pixGetColormap(pix) != NULL)
2606 return (
NUMA *)ERROR_PTR(
"pix colormapped", procName, NULL);
2610 return (
NUMA *)ERROR_PTR(
"invalid clipping box", procName, NULL);
2613 return (
NUMA *)ERROR_PTR(
"na not made", procName, NULL);
2615 norm = 1. / (l_float32)bw;
2617 wpl = pixGetWpl(pix);
2618 for (i = ystart; i < yend; i++) {
2620 line = data + i * wpl;
2621 for (j = xstart; j < xend; j++) {
2627 sum2 += (l_float64)(val) * val;
2630 var = norm * sum2 - ave * ave;
2631 rootvar = sqrt(var);
2658 l_int32 i, j, w, h, d, wpl, xstart, xend, ystart, yend, bw, bh, val;
2659 l_uint32 *line, *data;
2660 l_float64 sum1, sum2, norm, ave, var, rootvar;
2663 PROCNAME(
"pixVarianceByColumn");
2666 return (
NUMA *)ERROR_PTR(
"pix not defined", procName, NULL);
2668 if (d != 8 && d != 16)
2669 return (
NUMA *)ERROR_PTR(
"pix not 8 or 16 bpp", procName, NULL);
2670 if (pixGetColormap(pix) != NULL)
2671 return (
NUMA *)ERROR_PTR(
"pix colormapped", procName, NULL);
2675 return (
NUMA *)ERROR_PTR(
"invalid clipping box", procName, NULL);
2678 return (
NUMA *)ERROR_PTR(
"na not made", procName, NULL);
2680 norm = 1. / (l_float32)bh;
2682 wpl = pixGetWpl(pix);
2683 for (j = xstart; j < xend; j++) {
2685 for (i = ystart; i < yend; i++) {
2686 line = data + wpl * i;
2692 sum2 += (l_float64)(val) * val;
2695 var = norm * sum2 - ave * ave;
2696 rootvar = sqrt(var);
2715 l_float32 *prootvar)
2717 l_int32 w, h, d, wpl, i, j, xstart, xend, ystart, yend, bw, bh, val;
2718 l_uint32 *data, *line;
2719 l_float64 sum1, sum2, norm, ave, var;
2721 PROCNAME(
"pixVarianceInRect");
2724 return ERROR_INT(
"&rootvar not defined", procName, 1);
2727 return ERROR_INT(
"pix not defined", procName, 1);
2729 if (d != 1 && d != 2 && d != 4 && d != 8)
2730 return ERROR_INT(
"pix not 1, 2, 4 or 8 bpp", procName, 1);
2731 if (pixGetColormap(pix) != NULL)
2732 return ERROR_INT(
"pix is colormapped", procName, 1);
2736 return ERROR_INT(
"invalid clipping box", procName, 1);
2738 wpl = pixGetWpl(pix);
2741 for (i = ystart; i < yend; i++) {
2742 line = data + i * wpl;
2743 for (j = xstart; j < xend; j++) {
2747 sum2 += (l_float64)(val) * val;
2748 }
else if (d == 2) {
2751 sum2 += (l_float64)(val) * val;
2752 }
else if (d == 4) {
2755 sum2 += (l_float64)(val) * val;
2759 sum2 += (l_float64)(val) * val;
2763 norm = 1.0 / ((l_float64)(bw) * bh);
2765 var = norm * sum2 - ave * ave;
2766 *prootvar = (l_float32)sqrt(var);
2793 l_int32 i, j, w, h, wpl, xstart, xend, ystart, yend, bw, bh, val0, val1;
2794 l_uint32 *line, *data;
2795 l_float64 norm, sum;
2798 PROCNAME(
"pixAbsDiffByRow");
2800 if (!pix || pixGetDepth(pix) != 8)
2801 return (
NUMA *)ERROR_PTR(
"pix undefined or not 8 bpp", procName, NULL);
2802 if (pixGetColormap(pix) != NULL)
2803 return (
NUMA *)ERROR_PTR(
"pix colormapped", procName, NULL);
2808 return (
NUMA *)ERROR_PTR(
"invalid clipping box", procName, NULL);
2810 return (
NUMA *)ERROR_PTR(
"row width must be >= 2", procName, NULL);
2812 norm = 1. / (l_float32)(bw - 1);
2814 return (
NUMA *)ERROR_PTR(
"na not made", procName, NULL);
2817 wpl = pixGetWpl(pix);
2818 for (i = ystart; i < yend; i++) {
2820 line = data + i * wpl;
2822 for (j = xstart + 1; j < xend; j++) {
2824 sum += L_ABS(val1 - val0);
2854 l_int32 i, j, w, h, wpl, xstart, xend, ystart, yend, bw, bh, val0, val1;
2855 l_uint32 *line, *data;
2856 l_float64 norm, sum;
2859 PROCNAME(
"pixAbsDiffByColumn");
2861 if (!pix || pixGetDepth(pix) != 8)
2862 return (
NUMA *)ERROR_PTR(
"pix undefined or not 8 bpp", procName, NULL);
2863 if (pixGetColormap(pix) != NULL)
2864 return (
NUMA *)ERROR_PTR(
"pix colormapped", procName, NULL);
2869 return (
NUMA *)ERROR_PTR(
"invalid clipping box", procName, NULL);
2871 return (
NUMA *)ERROR_PTR(
"column height must be >= 2", procName, NULL);
2873 norm = 1. / (l_float32)(bh - 1);
2875 return (
NUMA *)ERROR_PTR(
"na not made", procName, NULL);
2878 wpl = pixGetWpl(pix);
2879 for (j = xstart; j < xend; j++) {
2881 line = data + ystart * wpl;
2883 for (i = ystart + 1; i < yend; i++) {
2884 line = data + i * wpl;
2886 sum += L_ABS(val1 - val0);
2917 l_float32 *pabsdiff)
2919 l_int32 w, h, wpl, i, j, xstart, xend, ystart, yend, bw, bh, val0, val1;
2920 l_uint32 *data, *line;
2921 l_float64 norm, sum;
2923 PROCNAME(
"pixAbsDiffInRect");
2926 return ERROR_INT(
"&absdiff not defined", procName, 1);
2928 if (!pix || pixGetDepth(pix) != 8)
2929 return ERROR_INT(
"pix undefined or not 8 bpp", procName, 1);
2931 return ERROR_INT(
"invalid direction", procName, 1);
2932 if (pixGetColormap(pix) != NULL)
2933 return ERROR_INT(
"pix is colormapped", procName, 1);
2938 return ERROR_INT(
"invalid clipping box", procName, 1);
2940 wpl = pixGetWpl(pix);
2943 norm = 1. / (l_float32)(bh * (bw - 1));
2945 for (i = ystart; i < yend; i++) {
2946 line = data + i * wpl;
2948 for (j = xstart + 1; j < xend; j++) {
2950 sum += L_ABS(val1 - val0);
2955 norm = 1. / (l_float32)(bw * (bh - 1));
2957 for (j = xstart; j < xend; j++) {
2958 line = data + ystart * wpl;
2960 for (i = ystart + 1; i < yend; i++) {
2961 line = data + i * wpl;
2963 sum += L_ABS(val1 - val0);
2968 *pabsdiff = (l_float32)(norm * sum);
2996 l_float32 *pabsdiff)
2998 l_int32 w, h, i, j, dir, size, sum;
2999 l_uint32 val0, val1;
3001 PROCNAME(
"pixAbsDiffOnLine");
3004 return ERROR_INT(
"&absdiff not defined", procName, 1);
3006 if (!pix || pixGetDepth(pix) != 8)
3007 return ERROR_INT(
"pix undefined or not 8 bpp", procName, 1);
3010 }
else if (x1 == x2) {
3013 return ERROR_INT(
"line is neither horiz nor vert", procName, 1);
3015 if (pixGetColormap(pix) != NULL)
3016 return ERROR_INT(
"pix is colormapped", procName, 1);
3022 x2 = L_MIN(x2, w - 1);
3024 return ERROR_INT(
"x1 >= x2", procName, 1);
3027 for (j = x1 + 1; j <= x2; j++) {
3029 sum += L_ABS((l_int32)val1 - (l_int32)val0);
3034 y2 = L_MIN(y2, h - 1);
3036 return ERROR_INT(
"y1 >= y2", procName, 1);
3039 for (i = y1 + 1; i <= y2; i++) {
3041 sum += L_ABS((l_int32)val1 - (l_int32)val0);
3045 *pabsdiff = (l_float32)sum / (l_float32)size;
3079 l_int32 i, j, bx, by, bw, bh, w, h, wpl, pixval;
3080 l_uint32 *data, *line;
3082 PROCNAME(
"pixCountArbInRect");
3085 return ERROR_INT(
"&count not defined", procName, 1);
3088 return ERROR_INT(
"pixs not defined", procName, 1);
3089 if (pixGetDepth(pixs) != 8 && !pixGetColormap(pixs))
3090 return ERROR_INT(
"pixs neither 8 bpp nor colormapped",
3093 return ERROR_INT(
"sampling factor < 1", procName, 1);
3097 wpl = pixGetWpl(pixs);
3100 for (i = 0; i < h; i += factor) {
3101 line = data + i * wpl;
3102 for (j = 0; j < w; j += factor) {
3104 if (pixval == val) (*pcount)++;
3109 for (i = 0; i < bh; i += factor) {
3110 if (by + i < 0 || by + i >= h)
continue;
3111 line = data + (by + i) * wpl;
3112 for (j = 0; j < bw; j += factor) {
3113 if (bx + j < 0 || bx + j >= w)
continue;
3115 if (pixval == val) (*pcount)++;
3121 *pcount = *pcount * factor * factor;
3155 l_int32 wt, ht, d, i, j, nx, ny;
3156 PIX *pixd, *pixsfx, *pixsfy, *pixsfxy, *pix;
3158 PROCNAME(
"pixMirroredTiling");
3161 return (
PIX *)ERROR_PTR(
"pixs not defined", procName, NULL);
3163 if (wt <= 0 || ht <= 0)
3164 return (
PIX *)ERROR_PTR(
"pixs size illegal", procName, NULL);
3165 if (d != 8 && d != 32)
3166 return (
PIX *)ERROR_PTR(
"depth not 32 bpp", procName, NULL);
3168 if ((pixd =
pixCreate(w, h, d)) == NULL)
3169 return (
PIX *)ERROR_PTR(
"pixd not made", procName, NULL);
3172 nx = (w + wt - 1) / wt;
3173 ny = (h + ht - 1) / ht;
3177 for (i = 0; i < ny; i++) {
3178 for (j = 0; j < nx; j++) {
3180 if ((i & 1) && !(j & 1))
3182 else if (!(i & 1) && (j & 1))
3184 else if ((i & 1) && (j & 1))
3235 l_int32 w, h, i, n, bestindex;
3236 l_float32 var_of_mean, median_of_mean, median_of_stdev, mean_val, stdev_val;
3237 l_float32 mindels, bestdelm, delm, dels, mean, stdev;
3239 NUMA *namean, *nastdev;
3243 PROCNAME(
"pixFindRepCloseTile");
3246 return ERROR_INT(
"&boxtile not defined", procName, 1);
3249 return ERROR_INT(
"pixs not defined", procName, 1);
3251 return ERROR_INT(
"box not defined", procName, 1);
3252 if (searchdir != L_HORIZ && searchdir != L_VERT)
3253 return ERROR_INT(
"invalid searchdir", procName, 1);
3255 return ERROR_INT(
"mindist must be >= 0", procName, 1);
3257 return ERROR_INT(
"tsize must be > 1", procName, 1);
3259 L_WARNING(
"ntiles = %d; larger than suggested max of 7\n",
3268 return ERROR_INT(
"no tiles found", procName, 1);
3275 for (i = 0; i < n; i++) {
3294 &median_of_mean, 0.0, NULL, NULL);
3296 &median_of_stdev, 0.0, NULL, NULL);
3300 for (i = 0; i < n; i++) {
3303 if (var_of_mean == 0.0) {
3307 delm = L_ABS(mean_val - median_of_mean) / sqrt(var_of_mean);
3308 dels = stdev_val / median_of_stdev;
3311 if (dels < mindels) {
3313 fprintf(stderr,
"i = %d, mean = %7.3f, delm = %7.3f," 3314 " stdev = %7.3f, dels = %7.3f\n",
3315 i, mean_val, delm, stdev_val, dels);
3326 L_INFO(
"median of mean = %7.3f\n", procName, median_of_mean);
3327 L_INFO(
"standard dev of mean = %7.3f\n", procName, sqrt(var_of_mean));
3328 L_INFO(
"median of stdev = %7.3f\n", procName, median_of_stdev);
3329 L_INFO(
"best tile: index = %d\n", procName, bestindex);
3330 L_INFO(
"delta from median in units of stdev = %5.3f\n",
3331 procName, bestdelm);
3332 L_INFO(
"stdev as fraction of median stdev = %5.3f\n",
3369 l_int32 bx, by, bw, bh, left, right, top, bot, i, j, nrows, ncols;
3370 l_int32 x0, y0, x, y, w_avail, w_needed, h_avail, h_needed, t_avail;
3374 PROCNAME(
"findTileRegionsForSearch");
3377 return (
BOXA *)ERROR_PTR(
"box not defined", procName, NULL);
3379 return (
BOXA *)ERROR_PTR(
"no tiles requested", procName, NULL);
3382 if (searchdir == L_HORIZ) {
3386 right = w - bx - bw + 1;
3387 w_avail = L_MAX(left, right) - mindist;
3388 if (tsize & 1) tsize++;
3389 if (w_avail < tsize) {
3390 L_ERROR(
"tsize = %d, w_avail = %d\n", procName, tsize, w_avail);
3393 w_needed = tsize + (ntiles - 1) * (tsize / 2);
3394 if (w_needed > w_avail) {
3395 t_avail = 1 + 2 * (w_avail - tsize) / tsize;
3396 L_WARNING(
"ntiles = %d; room for only %d\n", procName,
3399 w_needed = tsize + (ntiles - 1) * (tsize / 2);
3401 nrows = L_MAX(1, 1 + 2 * (bh - tsize) / tsize);
3408 x0 = bx + bw + mindist;
3409 for (i = 0; i < nrows; i++) {
3410 y = by + i * tsize / 2;
3411 for (j = 0; j < ntiles; j++) {
3412 x = x0 + j * tsize / 2;
3420 bot = h - by - bh + 1;
3421 h_avail = L_MAX(top, bot) - mindist;
3422 if (h_avail < tsize) {
3423 L_ERROR(
"tsize = %d, h_avail = %d\n", procName, tsize, h_avail);
3426 h_needed = tsize + (ntiles - 1) * (tsize / 2);
3427 if (h_needed > h_avail) {
3428 t_avail = 1 + 2 * (h_avail - tsize) / tsize;
3429 L_WARNING(
"ntiles = %d; room for only %d\n", procName,
3432 h_needed = tsize + (ntiles - 1) * (tsize / 2);
3434 ncols = L_MAX(1, 1 + 2 * (bw - tsize) / tsize);
3441 y0 = by + bh + mindist;
3442 for (j = 0; j < ncols; j++) {
3443 x = bx + j * tsize / 2;
3444 for (i = 0; i < ntiles; i++) {
3445 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()
l_ok numaGetFValue(NUMA *na, l_int32 index, l_float32 *pval)
numaGetFValue()
NUMA * pixCountPixelsByColumn(PIX *pix)
pixCountPixelsByColumn()
l_int32 lept_mkdir(const char *subdir)
lept_mkdir()
l_ok pixCountPixelsInRow(PIX *pix, l_int32 row, l_int32 *pcount, l_int32 *tab8)
pixCountPixelsInRow()
l_ok pixFindRepCloseTile(PIX *pixs, BOX *box, l_int32 searchdir, l_int32 mindist, l_int32 tsize, l_int32 ntiles, BOX **pboxtile, l_int32 debug)
pixFindRepCloseTile()
l_ok pixSetMasked(PIX *pixd, PIX *pixm, l_uint32 val)
pixSetMasked()
l_int32 * makePixelCentroidTab8(void)
makePixelCentroidTab8()
NUMA * pixVarianceByRow(PIX *pix, BOX *box)
pixVarianceByRow()
l_ok numaAddNumber(NUMA *na, l_float32 val)
numaAddNumber()
l_ok pixAbsDiffInRect(PIX *pix, BOX *box, l_int32 dir, l_float32 *pabsdiff)
pixAbsDiffInRect()
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()
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 * 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()
BOX * boxClipToRectangle(BOX *box, l_int32 wi, l_int32 hi)
boxClipToRectangle()
PIX * pixCreate(l_int32 width, l_int32 height, l_int32 depth)
pixCreate()
l_ok pixSetMaskedGeneral(PIX *pixd, PIX *pixm, l_uint32 val, l_int32 x, l_int32 y)
pixSetMaskedGeneral()
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_ok numaSetCount(NUMA *na, l_int32 newcount)
numaSetCount()
PIX * pixThresholdToBinary(PIX *pixs, l_int32 thresh)
pixThresholdToBinary()
l_ok pixGetColorNearMaskBoundary(PIX *pixs, PIX *pixm, BOX *box, l_int32 dist, l_uint32 *pval, l_int32 debug)
pixGetColorNearMaskBoundary()
#define GET_DATA_BIT(pdata, n)
PIX * pixCreateTemplate(PIX *pixs)
pixCreateTemplate()
PIX * pixClipRectangle(PIX *pixs, BOX *box, BOX **pboxc)
pixClipRectangle()
l_ok pixThresholdPixelSum(PIX *pix, l_int32 thresh, l_int32 *pabove, l_int32 *tab8)
pixThresholdPixelSum()
PIX * pixGetRGBComponent(PIX *pixs, l_int32 comp)
pixGetRGBComponent()
#define SET_DATA_DIBIT(pdata, n, val)
l_ok pixPaintThroughMask(PIX *pixd, PIX *pixm, l_int32 x, l_int32 y, l_uint32 val)
pixPaintThroughMask()
l_ok pixSetAllArbitrary(PIX *pix, l_uint32 val)
pixSetAllArbitrary()
l_ok pixCombineMasked(PIX *pixd, PIX *pixs, PIX *pixm)
pixCombineMasked()
l_ok pixClipToForeground(PIX *pixs, PIX **ppixd, BOX **pbox)
pixClipToForeground()
PIX * pixMakeMaskFromVal(PIX *pixs, l_int32 val)
pixMakeMaskFromVal()
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_ok pixGetAverageMasked(PIX *pixs, PIX *pixm, l_int32 x, l_int32 y, l_int32 factor, l_int32 type, l_float32 *pval)
pixGetAverageMasked()
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_ok pixForegroundFraction(PIX *pix, l_float32 *pfract)
pixForegroundFraction()
PIX * pixAnd(PIX *pixd, PIX *pixs1, PIX *pixs2)
pixAnd()
NUMA * pixAbsDiffByRow(PIX *pix, BOX *box)
pixAbsDiffByRow()
PIX * pixMorphSequence(PIX *pixs, const char *sequence, l_int32 dispsep)
pixMorphSequence()
l_ok pixCountPixels(PIX *pixs, l_int32 *pcount, l_int32 *tab8)
pixCountPixels()
l_ok boxaAddBox(BOXA *boxa, BOX *box, l_int32 copyflag)
boxaAddBox()
PIX * pixBlendWithGrayMask(PIX *pixs1, PIX *pixs2, PIX *pixg, l_int32 x, l_int32 y)
pixBlendWithGrayMask()
l_int32 * makePixelSumTab8(void)
makePixelSumTab8()
#define SET_DATA_BYTE(pdata, n, val)
PIXA * pixClipRectangles(PIX *pixs, BOXA *boxa)
pixClipRectangles()
#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_ok 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()
l_ok pixSetMaskedCmap(PIX *pixs, PIX *pixm, l_int32 x, l_int32 y, l_int32 rval, l_int32 gval, l_int32 bval)
pixSetMaskedCmap()
#define GET_DATA_BYTE(pdata, n)
l_ok numaSetParameters(NUMA *na, l_float32 startx, l_float32 delx)
numaSetParameters()
NUMA * pixAbsDiffByColumn(PIX *pix, BOX *box)
pixAbsDiffByColumn()
l_ok pixaGetBoxGeometry(PIXA *pixa, l_int32 index, l_int32 *px, l_int32 *py, l_int32 *pw, l_int32 *ph)
pixaGetBoxGeometry()
l_ok pixCountPixelsInRect(PIX *pixs, BOX *box, l_int32 *pcount, l_int32 *tab8)
pixCountPixelsInRect()
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()
PIX * pixMakeArbMaskFromRGB(PIX *pixs, l_float32 rc, l_float32 gc, l_float32 bc, l_float32 thresh)
pixMakeArbMaskFromRGB()
void numaDestroy(NUMA **pna)
numaDestroy()
l_ok pixGetPixel(PIX *pix, l_int32 x, l_int32 y, l_uint32 *pval)
pixGetPixel()
l_ok pixGetDimensions(const PIX *pix, l_int32 *pw, l_int32 *ph, l_int32 *pd)
pixGetDimensions()
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_ok pixVarianceInRect(PIX *pix, BOX *box, l_float32 *prootvar)
pixVarianceInRect()
NUMA * pixVarianceByColumn(PIX *pix, BOX *box)
pixVarianceByColumn()
PIX * pixConvertRGBToGrayArb(PIX *pixs, l_float32 rc, l_float32 gc, l_float32 bc)
pixConvertRGBToGrayArb()
l_ok pixAverageInRect(PIX *pix, BOX *box, l_float32 *pave)
pixAverageInRect()
l_float32 * numaGetFArray(NUMA *na, l_int32 copyflag)
numaGetFArray()
l_ok 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()
l_ok 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()
#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)
l_ok pixCombineMaskedGeneral(PIX *pixd, PIX *pixs, PIX *pixm, l_int32 x, l_int32 y)
pixCombineMaskedGeneral()
PIX * pixMirroredTiling(PIX *pixs, l_int32 w, l_int32 h)
pixMirroredTiling()
PIX * pixaGetPix(PIXA *pixa, l_int32 index, l_int32 accesstype)
pixaGetPix()
PIX * pixMakeMaskFromLUT(PIX *pixs, l_int32 *tab)
pixMakeMaskFromLUT()
PIX * pixDisplayLayersRGBA(PIX *pixs, l_uint32 val, l_int32 maxw)
pixDisplayLayersRGBA()
l_ok pixMultConstantGray(PIX *pixs, l_float32 val)
pixMultConstantGray()
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()
PIX * pixConvert1To8(PIX *pixd, PIX *pixs, l_uint8 val0, l_uint8 val1)
pixConvert1To8()
NUMA * pixAverageByRow(PIX *pix, BOX *box, l_int32 type)
pixAverageByRow()
l_ok boxPrintStreamInfo(FILE *fp, BOX *box)
boxPrintStreamInfo()
l_ok composeRGBPixel(l_int32 rval, l_int32 gval, l_int32 bval, l_uint32 *ppixel)
composeRGBPixel()
l_int32 lept_rmdir(const char *subdir)
lept_rmdir()
l_ok pixAbsDiffOnLine(PIX *pix, l_int32 x1, l_int32 y1, l_int32 x2, l_int32 y2, l_float32 *pabsdiff)
pixAbsDiffOnLine()
l_ok pixCopySpp(PIX *pixd, const PIX *pixs)
pixCopySpp()
l_int32 pixSizesEqual(const PIX *pix1, const PIX *pix2)
pixSizesEqual()
l_ok boxGetGeometry(BOX *box, l_int32 *px, l_int32 *py, l_int32 *pw, l_int32 *ph)
boxGetGeometry()
#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()
#define SET_DATA_BIT(pdata, n)
l_ok 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()