134 #include "allheaders.h" 154 #ifndef NO_CONSOLE_IO 155 #define DEBUG_GLOBAL 0 195 PROCNAME(
"pixCleanBackgroundToWhite");
198 return (
PIX *)ERROR_PTR(
"pixs not defined", procName, NULL);
199 d = pixGetDepth(pixs);
200 if (d != 8 && d != 32)
201 return (
PIX *)ERROR_PTR(
"depth not 8 or 32", procName, NULL);
205 return (
PIX *)ERROR_PTR(
"background norm failedd", procName, NULL);
206 pixGammaTRC(pixd, pixd, gamma, blackval, whiteval);
314 PIX *pixm, *pixmi, *pixd;
315 PIX *pixmr, *pixmg, *pixmb, *pixmri, *pixmgi, *pixmbi;
317 PROCNAME(
"pixBackgroundNorm");
320 return (
PIX *)ERROR_PTR(
"pixs not defined", procName, NULL);
321 d = pixGetDepth(pixs);
322 if (d != 8 && d != 32)
323 return (
PIX *)ERROR_PTR(
"pixs not 8 or 32 bpp", procName, NULL);
324 if (sx < 4 || sy < 4)
325 return (
PIX *)ERROR_PTR(
"sx and sy must be >= 4", procName, NULL);
326 if (mincount > sx * sy) {
327 L_WARNING(
"mincount too large for tile size\n", procName);
328 mincount = (sx * sy) / 3;
337 return (
PIX *)ERROR_PTR(
"pixim all foreground", procName, NULL);
345 L_WARNING(
"map not made; return a copy of the source\n", procName);
351 L_WARNING(
"pixmi not made; return a copy of source\n", procName);
362 pixmr = pixmg = pixmb = NULL;
364 mincount, &pixmr, &pixmg, &pixmb);
365 if (!pixmr || !pixmg || !pixmb) {
369 L_WARNING(
"map not made; return a copy of the source\n", procName);
376 if (!pixmri || !pixmgi || !pixmbi) {
377 L_WARNING(
"not all pixm*i are made; return src copy\n", procName);
393 ERROR_PTR(
"pixd not made", procName, NULL);
394 pixCopyResolution(pixd, pixs);
446 PIX *pixm, *pixmi, *pixd;
447 PIX *pixmr, *pixmg, *pixmb, *pixmri, *pixmgi, *pixmbi;
449 PROCNAME(
"pixBackgroundNormMorph");
452 return (
PIX *)ERROR_PTR(
"pixs not defined", procName, NULL);
453 d = pixGetDepth(pixs);
454 if (d != 8 && d != 32)
455 return (
PIX *)ERROR_PTR(
"pixs not 8 or 32 bpp", procName, NULL);
456 if (reduction < 2 || reduction > 16)
457 return (
PIX *)ERROR_PTR(
"reduction must be between 2 and 16",
466 return (
PIX *)ERROR_PTR(
"pixim all foreground", procName, NULL);
473 return (
PIX *)ERROR_PTR(
"pixm not made", procName, NULL);
476 ERROR_PTR(
"pixmi not made", procName, NULL);
479 reduction, reduction);
484 pixmr = pixmg = pixmb = NULL;
486 &pixmr, &pixmg, &pixmb);
487 if (!pixmr || !pixmg || !pixmb) {
491 return (
PIX *)ERROR_PTR(
"not all pixm*", procName, NULL);
497 if (!pixmri || !pixmgi || !pixmbi)
498 ERROR_PTR(
"not all pixm*i are made", procName, NULL);
501 reduction, reduction);
512 ERROR_PTR(
"pixd not made", procName, NULL);
513 pixCopyResolution(pixd, pixs);
564 PROCNAME(
"pixBackgroundNormGrayArray");
567 return ERROR_INT(
"&pixd not defined", procName, 1);
569 if (!pixs || pixGetDepth(pixs) != 8)
570 return ERROR_INT(
"pixs not defined or not 8 bpp", procName, 1);
571 if (pixGetColormap(pixs))
572 return ERROR_INT(
"pixs is colormapped", procName, 1);
573 if (pixim && pixGetDepth(pixim) != 1)
574 return ERROR_INT(
"pixim not 1 bpp", procName, 1);
575 if (sx < 4 || sy < 4)
576 return ERROR_INT(
"sx and sy must be >= 4", procName, 1);
577 if (mincount > sx * sy) {
578 L_WARNING(
"mincount too large for tile size\n", procName);
579 mincount = (sx * sy) / 3;
588 return ERROR_INT(
"pixim all foreground", procName, 1);
593 return ERROR_INT(
"pixm not made", procName, 1);
595 pixCopyResolution(*ppixd, pixs);
642 PIX *pixmr, *pixmg, *pixmb;
644 PROCNAME(
"pixBackgroundNormRGBArrays");
646 if (!ppixr || !ppixg || !ppixb)
647 return ERROR_INT(
"&pixr, &pixg, &pixb not all defined", procName, 1);
648 *ppixr = *ppixg = *ppixb = NULL;
650 return ERROR_INT(
"pixs not defined", procName, 1);
651 if (pixGetDepth(pixs) != 32)
652 return ERROR_INT(
"pixs not 32 bpp", procName, 1);
653 if (pixim && pixGetDepth(pixim) != 1)
654 return ERROR_INT(
"pixim not 1 bpp", procName, 1);
655 if (sx < 4 || sy < 4)
656 return ERROR_INT(
"sx and sy must be >= 4", procName, 1);
657 if (mincount > sx * sy) {
658 L_WARNING(
"mincount too large for tile size\n", procName);
659 mincount = (sx * sy) / 3;
668 return ERROR_INT(
"pixim all foreground", procName, 1);
672 &pixmr, &pixmg, &pixmb);
673 if (!pixmr || !pixmg || !pixmb) {
677 return ERROR_INT(
"not all pixm* made", procName, 1);
720 PROCNAME(
"pixBackgroundNormGrayArrayMorph");
723 return ERROR_INT(
"&pixd not defined", procName, 1);
726 return ERROR_INT(
"pixs not defined", procName, 1);
727 if (pixGetDepth(pixs) != 8)
728 return ERROR_INT(
"pixs not 8 bpp", procName, 1);
729 if (pixim && pixGetDepth(pixim) != 1)
730 return ERROR_INT(
"pixim not 1 bpp", procName, 1);
731 if (reduction < 2 || reduction > 16)
732 return ERROR_INT(
"reduction must be between 2 and 16", procName, 1);
740 return ERROR_INT(
"pixim all foreground", procName, 1);
745 return ERROR_INT(
"pixm not made", procName, 1);
747 pixCopyResolution(*ppixd, pixs);
785 PIX *pixmr, *pixmg, *pixmb;
787 PROCNAME(
"pixBackgroundNormRGBArraysMorph");
789 if (!ppixr || !ppixg || !ppixb)
790 return ERROR_INT(
"&pixr, &pixg, &pixb not all defined", procName, 1);
791 *ppixr = *ppixg = *ppixb = NULL;
793 return ERROR_INT(
"pixs not defined", procName, 1);
794 if (pixGetDepth(pixs) != 32)
795 return ERROR_INT(
"pixs not 32 bpp", procName, 1);
796 if (pixim && pixGetDepth(pixim) != 1)
797 return ERROR_INT(
"pixim not 1 bpp", procName, 1);
798 if (reduction < 2 || reduction > 16)
799 return ERROR_INT(
"reduction must be between 2 and 16", procName, 1);
807 return ERROR_INT(
"pixim all foreground", procName, 1);
811 &pixmr, &pixmg, &pixmb);
812 if (!pixmr || !pixmg || !pixmb) {
816 return ERROR_INT(
"not all pixm* made", procName, 1);
860 l_int32 w, h, wd, hd, wim, him, wpls, wplim, wpld, wplf;
861 l_int32 xim, yim, delx, nx, ny, i, j, k, m;
862 l_int32 count, sum, val8;
863 l_int32 empty, fgpixels;
864 l_uint32 *datas, *dataim, *datad, *dataf, *lines, *lineim, *lined, *linef;
865 l_float32 scalex, scaley;
866 PIX *pixd, *piximi, *pixb, *pixf, *pixims;
868 PROCNAME(
"pixGetBackgroundGrayMap");
871 return ERROR_INT(
"&pixd not defined", procName, 1);
873 if (!pixs || pixGetDepth(pixs) != 8)
874 return ERROR_INT(
"pixs not defined or not 8 bpp", procName, 1);
875 if (pixGetColormap(pixs))
876 return ERROR_INT(
"pixs is colormapped", procName, 1);
877 if (pixim && pixGetDepth(pixim) != 1)
878 return ERROR_INT(
"pixim not 1 bpp", procName, 1);
879 if (sx < 4 || sy < 4)
880 return ERROR_INT(
"sx and sy must be >= 4", procName, 1);
881 if (mincount > sx * sy) {
882 L_WARNING(
"mincount too large for tile size\n", procName);
883 mincount = (sx * sy) / 3;
894 return ERROR_INT(
"pixim all fg; no background", procName, 1);
910 w = pixGetWidth(pixs);
911 h = pixGetHeight(pixs);
912 wd = (w + sx - 1) / sx;
913 hd = (h + sy - 1) / sy;
921 wpls = pixGetWpl(pixs);
923 wpld = pixGetWpl(pixd);
925 wplf = pixGetWpl(pixf);
927 for (i = 0; i < ny; i++) {
928 lines = datas + sy * i * wpls;
929 linef = dataf + sy * i * wplf;
930 lined = datad + i * wpld;
931 for (j = 0; j < nx; j++) {
935 for (k = 0; k < sy; k++) {
936 for (m = 0; m < sx; m++) {
943 if (count >= mincount) {
962 if (pixim && fgpixels) {
963 wim = pixGetWidth(pixim);
964 him = pixGetHeight(pixim);
966 wplim = pixGetWpl(pixim);
967 for (i = 0; i < ny; i++) {
968 yim = i * sy + sy / 2;
971 lineim = dataim + yim * wplim;
972 for (j = 0; j < nx; j++) {
973 xim = j * sx + sx / 2;
985 L_WARNING(
"can't make the map\n", procName);
994 if (pixim && fgpixels) {
995 scalex = 1. / (l_float32)sx;
996 scaley = 1. / (l_float32)sy;
1003 pixCopyResolution(*ppixd, pixs);
1041 l_int32 w, h, wm, hm, wim, him, wpls, wplim, wplf;
1042 l_int32 xim, yim, delx, nx, ny, i, j, k, m;
1043 l_int32 count, rsum, gsum, bsum, rval, gval, bval;
1044 l_int32 empty, fgpixels;
1046 l_uint32 *datas, *dataim, *dataf, *lines, *lineim, *linef;
1047 l_float32 scalex, scaley;
1048 PIX *piximi, *pixgc, *pixb, *pixf, *pixims;
1049 PIX *pixmr, *pixmg, *pixmb;
1051 PROCNAME(
"pixGetBackgroundRGBMap");
1053 if (!ppixmr || !ppixmg || !ppixmb)
1054 return ERROR_INT(
"&pixm* not all defined", procName, 1);
1055 *ppixmr = *ppixmg = *ppixmb = NULL;
1057 return ERROR_INT(
"pixs not defined", procName, 1);
1058 if (pixGetDepth(pixs) != 32)
1059 return ERROR_INT(
"pixs not 32 bpp", procName, 1);
1060 if (pixim && pixGetDepth(pixim) != 1)
1061 return ERROR_INT(
"pixim not 1 bpp", procName, 1);
1062 if (sx < 4 || sy < 4)
1063 return ERROR_INT(
"sx and sy must be >= 4", procName, 1);
1064 if (mincount > sx * sy) {
1065 L_WARNING(
"mincount too large for tile size\n", procName);
1066 mincount = (sx * sy) / 3;
1076 return ERROR_INT(
"pixim all fg; no background", procName, 1);
1094 w = pixGetWidth(pixs);
1095 h = pixGetHeight(pixs);
1096 wm = (w + sx - 1) / sx;
1097 hm = (h + sy - 1) / sy;
1108 wpls = pixGetWpl(pixs);
1110 wplf = pixGetWpl(pixf);
1112 for (i = 0; i < ny; i++) {
1113 lines = datas + sy * i * wpls;
1114 linef = dataf + sy * i * wplf;
1115 for (j = 0; j < nx; j++) {
1117 rsum = gsum = bsum = 0;
1119 for (k = 0; k < sy; k++) {
1120 for (m = 0; m < sx; m++) {
1122 pixel = *(lines + k * wpls + delx + m);
1123 rsum += (pixel >> 24);
1124 gsum += ((pixel >> 16) & 0xff);
1125 bsum += ((pixel >> 8) & 0xff);
1130 if (count >= mincount) {
1131 rval = rsum / count;
1132 gval = gsum / count;
1133 bval = bsum / count;
1148 wim = pixGetWidth(pixim);
1149 him = pixGetHeight(pixim);
1151 wplim = pixGetWpl(pixim);
1152 for (i = 0; i < ny; i++) {
1153 yim = i * sy + sy / 2;
1156 lineim = dataim + yim * wplim;
1157 for (j = 0; j < nx; j++) {
1158 xim = j * sx + sx / 2;
1177 L_WARNING(
"can't make the maps\n", procName);
1183 if (pixim && fgpixels) {
1184 scalex = 1. / (l_float32)sx;
1185 scaley = 1. / (l_float32)sy;
1196 pixCopyResolution(*ppixmr, pixs);
1197 pixCopyResolution(*ppixmg, pixs);
1198 pixCopyResolution(*ppixmb, pixs);
1221 l_int32 nx, ny, empty, fgpixels;
1223 PIX *pixm, *pix1, *pix2, *pix3, *pixims;
1225 PROCNAME(
"pixGetBackgroundGrayMapMorph");
1228 return ERROR_INT(
"&pixm not defined", procName, 1);
1230 if (!pixs || pixGetDepth(pixs) != 8)
1231 return ERROR_INT(
"pixs not defined or not 8 bpp", procName, 1);
1232 if (pixGetColormap(pixs))
1233 return ERROR_INT(
"pixs is colormapped", procName, 1);
1234 if (pixim && pixGetDepth(pixim) != 1)
1235 return ERROR_INT(
"pixim not 1 bpp", procName, 1);
1243 return ERROR_INT(
"pixim all fg; no background", procName, 1);
1251 scale = 1. / (l_float32)reduction;
1262 pixims =
pixScale(pixim, scale, scale);
1264 pixAnd(pixm, pixm, pix3);
1271 nx = pixGetWidth(pixs) / reduction;
1272 ny = pixGetHeight(pixs) / reduction;
1276 L_WARNING(
"can't make the map\n", procName);
1282 if (pixim && fgpixels)
1287 pixCopyResolution(*ppixm, pixs);
1314 l_int32 nx, ny, empty, fgpixels;
1316 PIX *pixm, *pixmr, *pixmg, *pixmb, *pix1, *pix2, *pix3, *pixims;
1318 PROCNAME(
"pixGetBackgroundRGBMapMorph");
1320 if (!ppixmr || !ppixmg || !ppixmb)
1321 return ERROR_INT(
"&pixm* not all defined", procName, 1);
1322 *ppixmr = *ppixmg = *ppixmb = NULL;
1324 return ERROR_INT(
"pixs not defined", procName, 1);
1325 if (pixGetDepth(pixs) != 32)
1326 return ERROR_INT(
"pixs not 32 bpp", procName, 1);
1327 if (pixim && pixGetDepth(pixim) != 1)
1328 return ERROR_INT(
"pixim not 1 bpp", procName, 1);
1336 return ERROR_INT(
"pixim all fg; no background", procName, 1);
1344 scale = 1. / (l_float32)reduction;
1348 pixims =
pixScale(pixim, scale, scale);
1359 pixmr =
pixAnd(NULL, pixm, pix3);
1370 pixmg =
pixAnd(NULL, pixm, pix3);
1381 pixmb =
pixAnd(NULL, pixm, pix3);
1390 nx = pixGetWidth(pixs) / reduction;
1391 ny = pixGetHeight(pixs) / reduction;
1399 L_WARNING(
"can't make the maps\n", procName);
1406 if (pixim && fgpixels) {
1416 pixCopyResolution(*ppixmr, pixs);
1417 pixCopyResolution(*ppixmg, pixs);
1418 pixCopyResolution(*ppixmb, pixs);
1465 l_int32 w, h, y, nmiss, goodcol, i, j, found, ival, valtest;
1466 l_uint32 val, lastval;
1470 PROCNAME(
"pixFillMapHoles");
1472 if (!pix || pixGetDepth(pix) != 8)
1473 return ERROR_INT(
"pix not defined or not 8 bpp", procName, 1);
1474 if (pixGetColormap(pix))
1475 return ERROR_INT(
"pix is colormapped", procName, 1);
1482 for (j = 0; j < nx; j++) {
1484 for (i = 0; i < ny; i++) {
1486 if (val != valtest) {
1492 if (found == FALSE) {
1498 for (i = y - 1; i >= 0; i--)
1501 for (i = 1; i < h; i++) {
1514 L_WARNING(
"no bg found; no data in any column\n", procName);
1523 for (j = 0; j < w; j++) {
1531 for (j = goodcol - 1; j >= 0; j--) {
1536 for (j = goodcol + 1; j < w; j++) {
1547 for (i = 0; i < h; i++) {
1580 PROCNAME(
"pixExtendByReplication");
1582 if (!pixs || pixGetDepth(pixs) != 8)
1583 return (
PIX *)ERROR_PTR(
"pixs undefined or not 8 bpp", procName, NULL);
1585 if (addw == 0 && addh == 0)
1589 if ((pixd =
pixCreate(w + addw, h + addh, 8)) == NULL)
1590 return (
PIX *)ERROR_PTR(
"pixd not made", procName, NULL);
1594 for (i = 0; i < h; i++) {
1596 for (j = 0; j < addw; j++)
1602 for (j = 0; j < w + addw; j++) {
1604 for (i = 0; i < addh; i++)
1609 pixCopyResolution(pixd, pixs);
1639 l_int32 empty, i, n, x, y;
1645 PROCNAME(
"pixSmoothConnectedRegions");
1647 if (!pixs || pixGetDepth(pixs) != 8)
1648 return ERROR_INT(
"pixs not defined or not 8 bpp", procName, 1);
1649 if (pixGetColormap(pixs))
1650 return ERROR_INT(
"pixs has colormap", procName, 1);
1652 L_INFO(
"pixm not defined\n", procName);
1655 if (pixGetDepth(pixm) != 1)
1656 return ERROR_INT(
"pixm not 1 bpp", procName, 1);
1659 L_INFO(
"pixm has no fg pixels; nothing to do\n", procName);
1665 for (i = 0; i < n; i++) {
1667 L_WARNING(
"missing pixmc!\n", procName);
1724 pixGetForegroundGrayMap(
PIX *pixs,
1731 l_int32 w, h, d, wd, hd;
1732 l_int32 empty, fgpixels;
1733 PIX *pixd, *piximi, *pixim2, *pixims, *pixs2, *pixb, *pixt1, *pixt2, *pixt3;
1735 PROCNAME(
"pixGetForegroundGrayMap");
1738 return ERROR_INT(
"&pixd not defined", procName, 1);
1741 return ERROR_INT(
"pixs not defined", procName, 1);
1744 return ERROR_INT(
"pixs not 8 bpp", procName, 1);
1745 if (pixim && pixGetDepth(pixim) != 1)
1746 return ERROR_INT(
"pixim not 1 bpp", procName, 1);
1747 if (sx < 2 || sy < 2)
1748 return ERROR_INT(
"sx and sy must be >= 2", procName, 1);
1751 wd = (w + sx - 1) / sx;
1752 hd = (h + sy - 1) / sy;
1772 if (pixim && fgpixels) {
1841 l_int32 w, h, wplsm, wpld, i, j;
1843 l_uint32 *datasm, *datad, *linesm, *lined;
1846 PROCNAME(
"pixGetInvBackgroundMap");
1848 if (!pixs || pixGetDepth(pixs) != 8)
1849 return (
PIX *)ERROR_PTR(
"pixs undefined or not 8 bpp", procName, NULL);
1850 if (pixGetColormap(pixs))
1851 return (
PIX *)ERROR_PTR(
"pixs has colormap", procName, NULL);
1854 return (
PIX *)ERROR_PTR(
"w and h must be >= 5", procName, NULL);
1859 wplsm = pixGetWpl(pixsm);
1864 wpld = pixGetWpl(pixd);
1865 for (i = 0; i < h; i++) {
1866 linesm = datasm + i * wplsm;
1867 lined = datad + i * wpld;
1868 for (j = 0; j < w; j++) {
1871 val16 = (256 * bgval) / val;
1873 L_WARNING(
"smoothed bg has 0 pixel!\n", procName);
1881 pixCopyResolution(pixd, pixs);
1904 l_int32 w, h, wm, hm, wpls, wpld, i, j, k, m, xoff, yoff;
1907 l_uint32 *datas, *datad, *lines, *lined, *flines, *flined;
1910 PROCNAME(
"pixApplyInvBackgroundGrayMap");
1912 if (!pixs || pixGetDepth(pixs) != 8)
1913 return (
PIX *)ERROR_PTR(
"pixs undefined or not 8 bpp", procName, NULL);
1914 if (pixGetColormap(pixs))
1915 return (
PIX *)ERROR_PTR(
"pixs has colormap", procName, NULL);
1916 if (!pixm || pixGetDepth(pixm) != 16)
1917 return (
PIX *)ERROR_PTR(
"pixm undefined or not 16 bpp", procName, NULL);
1918 if (sx == 0 || sy == 0)
1919 return (
PIX *)ERROR_PTR(
"invalid sx and/or sy", procName, NULL);
1922 wpls = pixGetWpl(pixs);
1926 return (
PIX *)ERROR_PTR(
"pixd not made", procName, NULL);
1928 wpld = pixGetWpl(pixd);
1929 for (i = 0; i < hm; i++) {
1930 lines = datas + sy * i * wpls;
1931 lined = datad + sy * i * wpld;
1933 for (j = 0; j < wm; j++) {
1936 for (k = 0; k < sy && yoff + k < h; k++) {
1937 flines = lines + k * wpls;
1938 flined = lined + k * wpld;
1939 for (m = 0; m < sx && xoff + m < w; m++) {
1941 vald = (vals * val16) / 256;
1942 vald = L_MIN(vald, 255);
1972 l_int32 w, h, wm, hm, wpls, wpld, i, j, k, m, xoff, yoff;
1973 l_int32 rvald, gvald, bvald;
1975 l_uint32 rval16, gval16, bval16;
1976 l_uint32 *datas, *datad, *lines, *lined, *flines, *flined;
1979 PROCNAME(
"pixApplyInvBackgroundRGBMap");
1982 return (
PIX *)ERROR_PTR(
"pixs not defined", procName, NULL);
1983 if (pixGetDepth(pixs) != 32)
1984 return (
PIX *)ERROR_PTR(
"pixs not 32 bpp", procName, NULL);
1985 if (!pixmr || !pixmg || !pixmb)
1986 return (
PIX *)ERROR_PTR(
"pix maps not all defined", procName, NULL);
1987 if (pixGetDepth(pixmr) != 16 || pixGetDepth(pixmg) != 16 ||
1988 pixGetDepth(pixmb) != 16)
1989 return (
PIX *)ERROR_PTR(
"pix maps not all 16 bpp", procName, NULL);
1990 if (sx == 0 || sy == 0)
1991 return (
PIX *)ERROR_PTR(
"invalid sx and/or sy", procName, NULL);
1994 wpls = pixGetWpl(pixs);
1995 w = pixGetWidth(pixs);
1996 h = pixGetHeight(pixs);
1997 wm = pixGetWidth(pixmr);
1998 hm = pixGetHeight(pixmr);
2000 return (
PIX *)ERROR_PTR(
"pixd not made", procName, NULL);
2002 wpld = pixGetWpl(pixd);
2003 for (i = 0; i < hm; i++) {
2004 lines = datas + sy * i * wpls;
2005 lined = datad + sy * i * wpld;
2007 for (j = 0; j < wm; j++) {
2012 for (k = 0; k < sy && yoff + k < h; k++) {
2013 flines = lines + k * wpls;
2014 flined = lined + k * wpld;
2015 for (m = 0; m < sx && xoff + m < w; m++) {
2016 vals = *(flines + xoff + m);
2017 rvald = ((vals >> 24) * rval16) / 256;
2018 rvald = L_MIN(rvald, 255);
2019 gvald = (((vals >> 16) & 0xff) * gval16) / 256;
2020 gvald = L_MIN(gvald, 255);
2021 bvald = (((vals >> 8) & 0xff) * bval16) / 256;
2022 bvald = L_MIN(bvald, 255);
2067 l_int32 i, j, w, h, d, wpls, wplg, wpld, vals, valg, vald;
2069 l_uint32 *datas, *datag, *datad, *lines, *lineg, *lined;
2073 PROCNAME(
"pixApplyVariableGrayMap");
2076 return (
PIX *)ERROR_PTR(
"pixs not defined", procName, NULL);
2078 return (
PIX *)ERROR_PTR(
"pixg not defined", procName, NULL);
2080 return (
PIX *)ERROR_PTR(
"pix sizes not equal", procName, NULL);
2083 return (
PIX *)ERROR_PTR(
"depth not 8 bpp", procName, NULL);
2093 if (w * h > 100000) {
2094 if ((lut = (l_uint8 *)LEPT_CALLOC(0x10000,
sizeof(l_uint8))) == NULL)
2095 return (
PIX *)ERROR_PTR(
"lut not made", procName, NULL);
2096 for (i = 0; i < 256; i++) {
2097 for (j = 0; j < 256; j++) {
2098 fval = (l_float32)(i * target) / (j + 0.5);
2099 lut[(i << 8) + j] = L_MIN(255, (l_int32)(fval + 0.5));
2106 return (
PIX *)ERROR_PTR(
"pixd not made", procName, NULL);
2108 pixCopyResolution(pixd, pixs);
2110 wpld = pixGetWpl(pixd);
2112 wpls = pixGetWpl(pixs);
2114 wplg = pixGetWpl(pixg);
2115 for (i = 0; i < h; i++) {
2116 lines = datas + i * wpls;
2117 lineg = datag + i * wplg;
2118 lined = datad + i * wpld;
2120 for (j = 0; j < w; j++) {
2123 vald = lut[(vals << 8) + valg];
2128 for (j = 0; j < w; j++) {
2131 fval = (l_float32)(vals * target) / (valg + 0.5);
2132 vald = L_MIN(255, (l_int32)(fval + 0.5));
2188 l_int32 w, h, d, i, j, ncolors, rv, gv, bv, wpl;
2189 l_int32 *rarray, *garray, *barray;
2190 l_uint32 *data, *line;
2191 NUMA *nar, *nag, *nab;
2194 PROCNAME(
"pixGlobalNormRGB");
2197 return (
PIX *)ERROR_PTR(
"pixs not defined", procName, NULL);
2198 cmap = pixGetColormap(pixs);
2200 if (!cmap && d != 32)
2201 return (
PIX *)ERROR_PTR(
"pixs not cmapped or 32 bpp", procName, NULL);
2203 L_WARNING(
"mapval must be > 0; setting to 255\n", procName);
2208 if ((pixd =
pixCopy(pixd, pixs)) == NULL)
2209 return (
PIX *)ERROR_PTR(
"pixd not made", procName, NULL);
2213 nar =
numaGammaTRC(1.0, 0, L_MAX(1, 255 * rval / mapval));
2214 nag =
numaGammaTRC(1.0, 0, L_MAX(1, 255 * gval / mapval));
2215 nab =
numaGammaTRC(1.0, 0, L_MAX(1, 255 * bval / mapval));
2221 if (!nar || !nag || !nab || !rarray || !garray || !barray) {
2222 L_ERROR(
"allocation failure in arrays\n", procName);
2223 goto cleanup_arrays;
2228 for (i = 0; i < ncolors; i++) {
2235 wpl = pixGetWpl(pixd);
2236 for (i = 0; i < h; i++) {
2237 line = data + i * wpl;
2238 for (j = 0; j < w; j++) {
2299 l_float32 rankrval, rankgval, rankbval;
2300 l_float32 rfract, gfract, bfract, maxfract;
2302 PROCNAME(
"pixGlobalNormNoSatRGB");
2305 return (
PIX *)ERROR_PTR(
"pixs not defined", procName, NULL);
2306 if (pixGetDepth(pixs) != 32)
2307 return (
PIX *)ERROR_PTR(
"pixs not 32 bpp", procName, NULL);
2309 return (
PIX *)ERROR_PTR(
"sampling factor < 1", procName, NULL);
2310 if (rank < 0.0 || rank > 1.0)
2311 return (
PIX *)ERROR_PTR(
"rank not in [0.0 ... 1.0]", procName, NULL);
2312 if (rval <= 0 || gval <= 0 || bval <= 0)
2313 return (
PIX *)ERROR_PTR(
"invalid estim. color values", procName, NULL);
2326 &rankgval, &rankbval);
2327 rfract = rankrval / (l_float32)rval;
2328 gfract = rankgval / (l_float32)gval;
2329 bfract = rankbval / (l_float32)bval;
2330 maxfract = L_MAX(rfract, gfract);
2331 maxfract = L_MAX(maxfract, bfract);
2333 fprintf(stderr,
"rankrval = %7.2f, rankgval = %7.2f, rankbval = %7.2f\n",
2334 rankrval, rankgval, rankbval);
2335 fprintf(stderr,
"rfract = %7.4f, gfract = %7.4f, bfract = %7.4f\n",
2336 rfract, gfract, bfract);
2339 mapval = (l_int32)(255. / maxfract);
2398 l_int32 targetthresh,
2403 PIX *pixe, *pixet, *pixsd, *pixg1, *pixg2, *pixth;
2405 PROCNAME(
"pixThresholdSpreadNorm");
2407 if (ppixth) *ppixth = NULL;
2408 if (ppixb) *ppixb = NULL;
2409 if (ppixd) *ppixd = NULL;
2410 if (!pixs || pixGetDepth(pixs) != 8)
2411 return ERROR_INT(
"pixs not defined or not 8 bpp", procName, 1);
2412 if (pixGetColormap(pixs))
2413 return ERROR_INT(
"pixs is colormapped", procName, 1);
2414 if (!ppixth && !ppixb && !ppixd)
2415 return ERROR_INT(
"no output requested", procName, 1);
2417 return ERROR_INT(
"invalid filter type", procName, 1);
2438 pixth =
pixGammaTRC(NULL, pixg2, gamma, minval, maxval);
2503 l_float32 scalex, scaley;
2504 PIX *pixt, *pixsd, *pixmin, *pixbg, *pixbgi, *pixd;
2506 PROCNAME(
"pixBackgroundNormFlex");
2508 if (!pixs || pixGetDepth(pixs) != 8)
2509 return (
PIX *)ERROR_PTR(
"pixs undefined or not 8 bpp", procName, NULL);
2510 if (pixGetColormap(pixs))
2511 return (
PIX *)ERROR_PTR(
"pixs is colormapped", procName, NULL);
2512 if (sx < 3 || sy < 3)
2513 return (
PIX *)ERROR_PTR(
"sx and/or sy less than 3", procName, NULL);
2514 if (sx > 10 || sy > 10)
2515 return (
PIX *)ERROR_PTR(
"sx and/or sy exceed 10", procName, NULL);
2516 if (smoothx < 1 || smoothy < 1)
2517 return (
PIX *)ERROR_PTR(
"smooth params less than 1", procName, NULL);
2518 if (smoothx > 3 || smoothy > 3)
2519 return (
PIX *)ERROR_PTR(
"smooth params exceed 3", procName, NULL);
2522 scalex = 1. / (l_float32)sx;
2523 scaley = 1. / (l_float32)sy;
2599 PIX *pixmin, *pixmax;
2601 PROCNAME(
"pixContrastNorm");
2603 if (!pixs || pixGetDepth(pixs) != 8)
2604 return (
PIX *)ERROR_PTR(
"pixs undefined or not 8 bpp", procName, pixd);
2605 if (pixd && pixd != pixs)
2606 return (
PIX *)ERROR_PTR(
"pixd not null or == pixs", procName, pixd);
2607 if (pixGetColormap(pixs))
2608 return (
PIX *)ERROR_PTR(
"pixs is colormapped", procName, pixd);
2609 if (sx < 5 || sy < 5)
2610 return (
PIX *)ERROR_PTR(
"sx and/or sy less than 5", procName, pixd);
2611 if (smoothx < 0 || smoothy < 0)
2612 return (
PIX *)ERROR_PTR(
"smooth params less than 0", procName, pixd);
2613 if (smoothx > 8 || smoothy > 8)
2614 return (
PIX *)ERROR_PTR(
"smooth params exceed 8", procName, pixd);
2618 pixMinMaxTiles(pixs, sx, sy, mindiff, smoothx, smoothy, &pixmin, &pixmax);
2661 PIX *pixmin1, *pixmax1, *pixmin2, *pixmax2;
2663 PROCNAME(
"pixMinMaxTiles");
2665 if (ppixmin) *ppixmin = NULL;
2666 if (ppixmax) *ppixmax = NULL;
2667 if (!ppixmin || !ppixmax)
2668 return ERROR_INT(
"&pixmin or &pixmax undefined", procName, 1);
2669 if (!pixs || pixGetDepth(pixs) != 8)
2670 return ERROR_INT(
"pixs undefined or not 8 bpp", procName, 1);
2671 if (pixGetColormap(pixs))
2672 return ERROR_INT(
"pixs is colormapped", procName, 1);
2673 if (sx < 5 || sy < 5)
2674 return ERROR_INT(
"sx and/or sy less than 3", procName, 1);
2675 if (smoothx < 0 || smoothy < 0)
2676 return ERROR_INT(
"smooth params less than 0", procName, 1);
2677 if (smoothx > 5 || smoothy > 5)
2678 return ERROR_INT(
"smooth params exceed 5", procName, 1);
2702 if (smoothx > 0 || smoothy > 0) {
2703 smoothx = L_MIN(smoothx, (w - 1) / 2);
2704 smoothy = L_MIN(smoothy, (h - 1) / 2);
2712 pixCopyResolution(*ppixmin, pixs);
2713 pixCopyResolution(*ppixmax, pixs);
2746 l_int32 i, j, w, h, d, wpl, val1, val2, found;
2747 l_uint32 *data1, *data2, *line1, *line2;
2749 PROCNAME(
"pixSetLowContrast");
2751 if (!pixs1 || !pixs2)
2752 return ERROR_INT(
"pixs1 and pixs2 not both defined", procName, 1);
2754 return ERROR_INT(
"pixs1 and pixs2 not equal size", procName, 1);
2757 return ERROR_INT(
"depth not 8 bpp", procName, 1);
2758 if (mindiff > 254)
return 0;
2762 wpl = pixGetWpl(pixs1);
2764 for (i = 0; i < h; i++) {
2765 line1 = data1 + i * wpl;
2766 line2 = data2 + i * wpl;
2767 for (j = 0; j < w; j++) {
2770 if (L_ABS(val1 - val2) >= mindiff) {
2778 L_WARNING(
"no pixel pair diffs as large as mindiff\n", procName);
2784 for (i = 0; i < h; i++) {
2785 line1 = data1 + i * wpl;
2786 line2 = data2 + i * wpl;
2787 for (j = 0; j < w; j++) {
2790 if (L_ABS(val1 - val2) < mindiff) {
2832 l_int32 i, j, k, m, w, h, wt, ht, wpl, wplt, xoff, yoff;
2833 l_int32 minval, maxval, val, sval;
2836 l_uint32 *data, *datamin, *datamax, *line, *tline, *linemin, *linemax;
2838 PROCNAME(
"pixLinearTRCTiled");
2840 if (!pixs || pixGetDepth(pixs) != 8)
2841 return (
PIX *)ERROR_PTR(
"pixs undefined or not 8 bpp", procName, pixd);
2842 if (pixd && pixd != pixs)
2843 return (
PIX *)ERROR_PTR(
"pixd not null or == pixs", procName, pixd);
2844 if (pixGetColormap(pixs))
2845 return (
PIX *)ERROR_PTR(
"pixs is colormapped", procName, pixd);
2846 if (!pixmin || !pixmax)
2847 return (
PIX *)ERROR_PTR(
"pixmin & pixmax not defined", procName, pixd);
2848 if (sx < 5 || sy < 5)
2849 return (
PIX *)ERROR_PTR(
"sx and/or sy less than 5", procName, pixd);
2851 if ((iaa = (l_int32 **)LEPT_CALLOC(256,
sizeof(l_int32 *))) == NULL)
2852 return (
PIX *)ERROR_PTR(
"iaa not made", procName, NULL);
2853 if ((pixd =
pixCopy(pixd, pixs)) == NULL) {
2855 return (
PIX *)ERROR_PTR(
"pixd not made", procName, NULL);
2860 wpl = pixGetWpl(pixd);
2863 wplt = pixGetWpl(pixmin);
2865 for (i = 0; i < ht; i++) {
2866 line = data + sy * i * wpl;
2867 linemin = datamin + i * wplt;
2868 linemax = datamax + i * wplt;
2870 for (j = 0; j < wt; j++) {
2874 if (maxval == minval) {
2875 L_ERROR(
"shouldn't happen! i,j = %d,%d, minval = %d\n",
2876 procName, i, j, minval);
2880 L_ERROR(
"failure to make ia for j = %d!\n", procName, j);
2883 for (k = 0; k < sy && yoff + k < h; k++) {
2884 tline = line + k * wpl;
2885 for (m = 0; m < sx && xoff + m < w; m++) {
2887 sval = val - minval;
2888 sval = L_MAX(0, sval);
2895 for (i = 0; i < 256; i++)
2919 PROCNAME(
"iaaGetLinearTRC");
2922 return (l_int32 *)ERROR_PTR(
"iaa not defined", procName, NULL);
2924 if (iaa[diff] != NULL)
2927 if ((ia = (l_int32 *)LEPT_CALLOC(256,
sizeof(l_int32))) == NULL)
2928 return (l_int32 *)ERROR_PTR(
"ia not made", procName, NULL);
2931 for (i = 0; i < 256; i++)
2935 factor = 255. / (l_float32)diff;
2936 for (i = 0; i < diff + 1; i++)
2937 ia[i] = (l_int32)(factor * i + 0.5);
2938 for (i = diff + 1; i < 256; i++)
l_ok pixBackgroundNormGrayArray(PIX *pixs, PIX *pixim, l_int32 sx, l_int32 sy, l_int32 thresh, l_int32 mincount, l_int32 bgval, l_int32 smoothx, l_int32 smoothy, PIX **ppixd)
pixBackgroundNormGrayArray()
l_ok pixGetBackgroundGrayMap(PIX *pixs, PIX *pixim, l_int32 sx, l_int32 sy, l_int32 thresh, l_int32 mincount, PIX **ppixd)
pixGetBackgroundGrayMap()
PIX * pixApplyInvBackgroundGrayMap(PIX *pixs, PIX *pixm, l_int32 sx, l_int32 sy)
pixApplyInvBackgroundGrayMap()
static l_int32 * iaaGetLinearTRC(l_int32 **iaa, l_int32 diff)
iaaGetLinearTRC()
l_ok pixGetBackgroundGrayMapMorph(PIX *pixs, PIX *pixim, l_int32 reduction, l_int32 size, PIX **ppixm)
pixGetBackgroundGrayMapMorph()
l_ok pixSmoothConnectedRegions(PIX *pixs, PIX *pixm, l_int32 factor)
pixSmoothConnectedRegions()
PIX * pixSeedspread(PIX *pixs, l_int32 connectivity)
pixSeedspread()
static const l_int32 DEFAULT_Y_SMOOTH_SIZE
PIX * pixApplyVariableGrayMap(PIX *pixs, PIX *pixg, l_int32 target)
pixApplyVariableGrayMap()
PIX * pixScaleRGBToGrayFast(PIX *pixs, l_int32 factor, l_int32 color)
pixScaleRGBToGrayFast()
l_ok numaAddNumber(NUMA *na, l_float32 val)
numaAddNumber()
PIX * pixScaleGrayMinMax(PIX *pixs, l_int32 xfact, l_int32 yfact, l_int32 type)
pixScaleGrayMinMax()
NUMA * numaGammaTRC(l_float32 gamma, l_int32 minval, l_int32 maxval)
numaGammaTRC()
PIX * pixCloseGray(PIX *pixs, l_int32 hsize, l_int32 vsize)
pixCloseGray()
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()
l_ok pixLocalExtrema(PIX *pixs, l_int32 maxmin, l_int32 minmax, PIX **ppixmin, PIX **ppixmax)
pixLocalExtrema()
static const l_int32 DEFAULT_MIN_COUNT
PIX * pixCreate(l_int32 width, l_int32 height, l_int32 depth)
pixCreate()
PIX * pixInvert(PIX *pixd, PIX *pixs)
pixInvert()
NUMA * numaCreate(l_int32 n)
numaCreate()
void boxaDestroy(BOXA **pboxa)
boxaDestroy()
l_uint32 * pixGetData(PIX *pix)
pixGetData()
PIX * pixThresholdToBinary(PIX *pixs, l_int32 thresh)
pixThresholdToBinary()
PIX * pixScaleBySampling(PIX *pixs, l_float32 scalex, l_float32 scaley)
pixScaleBySampling()
#define GET_DATA_BIT(pdata, n)
PIX * pixCreateTemplate(PIX *pixs)
pixCreateTemplate()
l_ok pixBackgroundNormGrayArrayMorph(PIX *pixs, PIX *pixim, l_int32 reduction, l_int32 size, l_int32 bgval, PIX **ppixd)
pixBackgroundNormGrayArrayMorph()
l_ok pixPaintThroughMask(PIX *pixd, PIX *pixm, l_int32 x, l_int32 y, l_uint32 val)
pixPaintThroughMask()
PIX * pixTwoSidedEdgeFilter(PIX *pixs, l_int32 orientflag)
pixTwoSidedEdgeFilter()
l_ok pixCombineMasked(PIX *pixd, PIX *pixs, PIX *pixm)
pixCombineMasked()
l_int32 * numaGetIArray(NUMA *na)
numaGetIArray()
PIX * pixConvertRGBToGrayFast(PIX *pixs)
pixConvertRGBToGrayFast()
BOXA * pixConnComp(PIX *pixs, PIXA **ppixa, l_int32 connectivity)
pixConnComp()
l_ok numaGetIValue(NUMA *na, l_int32 index, l_int32 *pival)
numaGetIValue()
l_ok pixGetAverageMasked(PIX *pixs, PIX *pixm, l_int32 x, l_int32 y, l_int32 factor, l_int32 type, l_float32 *pval)
pixGetAverageMasked()
PIX * pixBackgroundNormFlex(PIX *pixs, l_int32 sx, l_int32 sy, l_int32 smoothx, l_int32 smoothy, l_int32 delta)
pixBackgroundNormFlex()
l_ok pixClearAll(PIX *pix)
pixClearAll()
PIX * pixLinearTRCTiled(PIX *pixd, PIX *pixs, l_int32 sx, l_int32 sy, PIX *pixmin, PIX *pixmax)
pixLinearTRCTiled()
PIX * pixGetInvBackgroundMap(PIX *pixs, l_int32 bgval, l_int32 smoothx, l_int32 smoothy)
pixGetInvBackgroundMap()
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()
PIX * pixAnd(PIX *pixd, PIX *pixs1, PIX *pixs2)
pixAnd()
static const l_int32 DEFAULT_TILE_HEIGHT
l_ok pixSetPixel(PIX *pix, l_int32 x, l_int32 y, l_uint32 val)
pixSetPixel()
l_ok pixcmapGetColor(PIXCMAP *cmap, l_int32 index, l_int32 *prval, l_int32 *pgval, l_int32 *pbval)
pixcmapGetColor()
PIX * pixMorphSequence(PIX *pixs, const char *sequence, l_int32 dispsep)
pixMorphSequence()
PIX * pixContrastNorm(PIX *pixd, PIX *pixs, l_int32 sx, l_int32 sy, l_int32 mindiff, l_int32 smoothx, l_int32 smoothy)
pixContrastNorm()
#define SET_DATA_BYTE(pdata, n, val)
l_ok pixBackgroundNormRGBArrays(PIX *pixs, PIX *pixim, PIX *pixg, l_int32 sx, l_int32 sy, l_int32 thresh, l_int32 mincount, l_int32 bgval, l_int32 smoothx, l_int32 smoothy, PIX **ppixr, PIX **ppixg, PIX **ppixb)
pixBackgroundNormRGBArrays()
#define GET_DATA_BYTE(pdata, n)
PIX * pixApplyInvBackgroundRGBMap(PIX *pixs, PIX *pixmr, PIX *pixmg, PIX *pixmb, l_int32 sx, l_int32 sy)
pixApplyInvBackgroundRGBMap()
PIX * pixExtendByReplication(PIX *pixs, l_int32 addw, l_int32 addh)
pixExtendByReplication()
l_ok pixMinMaxTiles(PIX *pixs, l_int32 sx, l_int32 sy, l_int32 mindiff, l_int32 smoothx, l_int32 smoothy, PIX **ppixmin, PIX **ppixmax)
pixMinMaxTiles()
PIX * pixCreateNoInit(l_int32 width, l_int32 height, l_int32 depth)
pixCreateNoInit()
PIX * pixClone(PIX *pixs)
pixClone()
static const l_int32 DEFAULT_BG_VAL
void pixDestroy(PIX **ppix)
pixDestroy()
l_ok pixcmapResetColor(PIXCMAP *cmap, l_int32 index, l_int32 rval, l_int32 gval, l_int32 bval)
pixcmapResetColor()
void numaDestroy(NUMA **pna)
numaDestroy()
l_ok pixSetLowContrast(PIX *pixs1, PIX *pixs2, l_int32 mindiff)
pixSetLowContrast()
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()
static const l_int32 DEFAULT_TILE_WIDTH
PIX * pixReduceBinary2(PIX *pixs, l_uint8 *intab)
pixReduceBinary2()
static const l_int32 DEFAULT_X_SMOOTH_SIZE
PIX * pixExpandReplicate(PIX *pixs, l_int32 factor)
pixExpandReplicate()
l_ok pixGetBackgroundRGBMap(PIX *pixs, PIX *pixim, PIX *pixg, l_int32 sx, l_int32 sy, l_int32 thresh, l_int32 mincount, PIX **ppixmr, PIX **ppixmg, PIX **ppixmb)
pixGetBackgroundRGBMap()
l_ok pixBackgroundNormRGBArraysMorph(PIX *pixs, PIX *pixim, l_int32 reduction, l_int32 size, l_int32 bgval, PIX **ppixr, PIX **ppixg, PIX **ppixb)
pixBackgroundNormRGBArraysMorph()
PIX * pixaGetPix(PIXA *pixa, l_int32 index, l_int32 accesstype)
pixaGetPix()
PIX * pixBackgroundNorm(PIX *pixs, PIX *pixim, PIX *pixg, l_int32 sx, l_int32 sy, l_int32 thresh, l_int32 mincount, l_int32 bgval, l_int32 smoothx, l_int32 smoothy)
pixBackgroundNorm()
static const l_int32 DEFAULT_FG_THRESHOLD
l_int32 pixcmapGetCount(PIXCMAP *cmap)
pixcmapGetCount()
PIX * pixBackgroundNormSimple(PIX *pixs, PIX *pixim, PIX *pixg)
pixBackgroundNormSimple()
PIX * pixSobelEdgeFilter(PIX *pixs, l_int32 orientflag)
pixSobelEdgeFilter()
l_ok pixZero(PIX *pix, l_int32 *pempty)
pixZero()
PIX * pixCopy(PIX *pixd, PIX *pixs)
pixCopy()
PIX * pixGammaTRC(PIX *pixd, PIX *pixs, l_float32 gamma, l_int32 minval, l_int32 maxval)
pixGammaTRC()
PIX * pixBlockconv(PIX *pix, l_int32 wc, l_int32 hc)
pixBlockconv()
PIX * pixBackgroundNormMorph(PIX *pixs, PIX *pixim, l_int32 reduction, l_int32 size, l_int32 bgval)
pixBackgroundNormMorph()
l_int32 boxaGetCount(BOXA *boxa)
boxaGetCount()
l_ok pixFillMapHoles(PIX *pix, l_int32 nx, l_int32 ny, l_int32 filltype)
pixFillMapHoles()
l_ok composeRGBPixel(l_int32 rval, l_int32 gval, l_int32 bval, l_uint32 *ppixel)
composeRGBPixel()
l_ok pixGetRankValueMaskedRGB(PIX *pixs, PIX *pixm, l_int32 x, l_int32 y, l_int32 factor, l_float32 rank, l_float32 *prval, l_float32 *pgval, l_float32 *pbval)
pixGetRankValueMaskedRGB()
l_ok pixGetBackgroundRGBMapMorph(PIX *pixs, PIX *pixim, l_int32 reduction, l_int32 size, PIX **ppixmr, PIX **ppixmg, PIX **ppixmb)
pixGetBackgroundRGBMapMorph()
l_int32 pixSizesEqual(const PIX *pix1, const PIX *pix2)
pixSizesEqual()
PIX * pixScaleSmooth(PIX *pix, l_float32 scalex, l_float32 scaley)
pixScaleSmooth()
PIX * pixVarThresholdToBinary(PIX *pixs, PIX *pixg)
pixVarThresholdToBinary()
PIX * pixGlobalNormRGB(PIX *pixd, PIX *pixs, l_int32 rval, l_int32 gval, l_int32 bval, l_int32 mapval)
pixGlobalNormRGB()
PIX * pixScale(PIX *pixs, l_float32 scalex, l_float32 scaley)
pixScale()
#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()
l_ok pixThresholdSpreadNorm(PIX *pixs, l_int32 filtertype, l_int32 edgethresh, l_int32 smoothx, l_int32 smoothy, l_float32 gamma, l_int32 minval, l_int32 maxval, l_int32 targetthresh, PIX **ppixth, PIX **ppixb, PIX **ppixd)
pixThresholdSpreadNorm()
PIX * pixSeedfillGrayBasin(PIX *pixb, PIX *pixm, l_int32 delta, l_int32 connectivity)
pixSeedfillGrayBasin()
PIX * pixGlobalNormNoSatRGB(PIX *pixd, PIX *pixs, l_int32 rval, l_int32 gval, l_int32 bval, l_int32 factor, l_float32 rank)
pixGlobalNormNoSatRGB()
l_ok pixAddConstantGray(PIX *pixs, l_int32 val)
pixAddConstantGray()