103 #include "allheaders.h" 106 #define M_PI 3.14159265358979323846 128 PROCNAME(
"pixSubsample");
131 return (
PTA *)ERROR_PTR(
"ptas not defined", procName, NULL);
133 return (
PTA *)ERROR_PTR(
"subfactor < 1", procName, NULL);
137 for (i = 0; i < n; i++) {
138 if (i % subfactor != 0)
continue;
174 return ERROR_INT(
"ptad not defined", procName, 1);
181 if (iend < 0 || iend >= n)
184 return ERROR_INT(
"istart > iend; no pts", procName, 1);
186 for (i = istart; i <= iend; i++) {
220 PROCNAME(
"ptaaJoin");
223 return ERROR_INT(
"ptaad not defined", procName, 1);
230 if (iend < 0 || iend >= n)
233 return ERROR_INT(
"istart > iend; no pts", procName, 1);
235 for (i = istart; i <= iend; i++) {
255 l_int32 n, i, ix, iy;
259 PROCNAME(
"ptaReverse");
262 return (
PTA *)ERROR_PTR(
"ptas not defined", procName, NULL);
266 return (
PTA *)ERROR_PTR(
"ptad not made", procName, NULL);
267 for (i = n - 1; i >= 0; i--) {
294 PROCNAME(
"ptaTranspose");
297 return (
PTA *)ERROR_PTR(
"ptas not defined", procName, NULL);
301 return (
PTA *)ERROR_PTR(
"ptad not made", procName, NULL);
302 for (i = 0; i < n; i++) {
332 l_int32 n, i, x, y, j, index, state;
333 l_int32 x1, y1, x2, y2;
336 PROCNAME(
"ptaCyclicPerm");
339 return (
PTA *)ERROR_PTR(
"ptas not defined", procName, NULL);
346 if (x1 != x2 || y1 != y2)
347 return (
PTA *)ERROR_PTR(
"start and end pts not same", procName, NULL);
349 for (i = 0; i < n; i++) {
351 if (x == xs && y == ys) {
356 if (state == L_NOT_FOUND)
357 return (
PTA *)ERROR_PTR(
"start pt not in ptas", procName, NULL);
360 return (
PTA *)ERROR_PTR(
"ptad not made", procName, NULL);
361 for (j = 0; j < n - 1; j++) {
365 index = (i + j + 1) % n;
392 PROCNAME(
"ptaSelectRange");
395 return (
PTA *)ERROR_PTR(
"ptas not defined", procName, NULL);
397 L_WARNING(
"ptas is empty\n", procName);
400 first = L_MAX(0, first);
401 if (last < 0) last = n - 1;
403 return (
PTA *)ERROR_PTR(
"invalid first", procName, NULL);
405 L_WARNING(
"last = %d is beyond max index = %d; adjusting\n",
406 procName, last, n - 1);
410 return (
PTA *)ERROR_PTR(
"first > last", procName, NULL);
412 npt = last - first + 1;
414 for (i = first; i <= last; i++) {
441 l_int32 n, i, x, y, minx, maxx, miny, maxy;
443 PROCNAME(
"ptaGetBoundingRegion");
446 return (
BOX *)ERROR_PTR(
"pta not defined", procName, NULL);
453 for (i = 0; i < n; i++) {
455 if (x < minx) minx = x;
456 if (x > maxx) maxx = x;
457 if (y < miny) miny = y;
458 if (y > maxy) maxy = y;
461 return boxCreate(minx, miny, maxx - minx + 1, maxy - miny + 1);
490 l_float32 x, y, minx, maxx, miny, maxy;
492 PROCNAME(
"ptaGetRange");
494 if (!pminx && !pmaxx && !pminy && !pmaxy)
495 return ERROR_INT(
"no output requested", procName, 1);
496 if (pminx) *pminx = 0;
497 if (pmaxx) *pmaxx = 0;
498 if (pminy) *pminy = 0;
499 if (pmaxy) *pmaxy = 0;
501 return ERROR_INT(
"pta not defined", procName, 1);
503 return ERROR_INT(
"no points in pta", procName, 1);
510 for (i = 1; i < n; i++) {
512 if (x < minx) minx = x;
513 if (x > maxx) maxx = x;
514 if (y < miny) miny = y;
515 if (y > maxy) maxy = y;
517 if (pminx) *pminx = minx;
518 if (pmaxx) *pmaxx = maxx;
519 if (pminy) *pminy = miny;
520 if (pmaxy) *pmaxy = maxy;
537 l_int32 n, i, contains;
540 PROCNAME(
"ptaGetInsideBox");
543 return (
PTA *)ERROR_PTR(
"ptas not defined", procName, NULL);
545 return (
PTA *)ERROR_PTR(
"box not defined", procName, NULL);
549 for (i = 0; i < n; i++) {
575 l_int32 i, j, x, y, w, h, wpl, mindim, found;
576 l_uint32 *data, *line;
579 PROCNAME(
"pixFindCornerPixels");
582 return (
PTA *)ERROR_PTR(
"pixs not defined", procName, NULL);
583 if (pixGetDepth(pixs) != 1)
584 return (
PTA *)ERROR_PTR(
"pixs not 1 bpp", procName, NULL);
586 w = pixGetWidth(pixs);
587 h = pixGetHeight(pixs);
588 mindim = L_MIN(w, h);
590 wpl = pixGetWpl(pixs);
593 return (
PTA *)ERROR_PTR(
"pta not made", procName, NULL);
595 for (found = FALSE, i = 0; i < mindim; i++) {
596 for (j = 0; j <= i; j++) {
598 line = data + y * wpl;
609 for (found = FALSE, i = 0; i < mindim; i++) {
610 for (j = 0; j <= i; j++) {
612 line = data + y * wpl;
624 for (found = FALSE, i = 0; i < mindim; i++) {
625 for (j = 0; j <= i; j++) {
627 line = data + y * wpl;
638 for (found = FALSE, i = 0; i < mindim; i++) {
639 for (j = 0; j <= i; j++) {
641 line = data + y * wpl;
669 l_int32 i, n, ix, iy;
671 PROCNAME(
"ptaContainsPt");
674 return ERROR_INT(
"pta not defined", procName, 0);
677 for (i = 0; i < n; i++) {
679 if (x == ix && y == iy)
697 l_int32 i, j, n1, n2, x1, y1, x2, y2;
699 PROCNAME(
"ptaTestIntersection");
702 return ERROR_INT(
"pta1 not defined", procName, 0);
704 return ERROR_INT(
"pta2 not defined", procName, 0);
708 for (i = 0; i < n1; i++) {
710 for (j = 0; j < n2; j++) {
712 if (x1 == x2 && y1 == y2)
744 PROCNAME(
"ptaTransform");
747 return (
PTA *)ERROR_PTR(
"ptas not defined", procName, NULL);
750 for (i = 0; i < n; i++) {
752 x = (l_int32)(scalex * (x + shiftx) + 0.5);
753 y = (l_int32)(scaley * (y + shifty) + 0.5);
781 l_float32 sum, x1, y1, x2, y2, xp1, yp1, xp2, yp2;
783 PROCNAME(
"ptaPtInsidePolygon");
786 return ERROR_INT(
"&inside not defined", procName, 1);
789 return ERROR_INT(
"pta not defined", procName, 1);
795 for (i = 0; i < n; i++) {
797 ptaGetPt(pta, (i + 1) % n, &xp2, &yp2);
805 if (L_ABS(sum) > M_PI)
834 ang = atan2(y2, x2) - atan2(y1, x1);
835 if (ang > M_PI) ang -= 2.0 * M_PI;
836 if (ang < -M_PI) ang += 2.0 * M_PI;
863 l_float32 x, y, xmin, ymin, xmax, ymax;
865 PROCNAME(
"ptaGetMinMax");
867 if (pxmin) *pxmin = -1.0;
868 if (pymin) *pymin = -1.0;
869 if (pxmax) *pxmax = -1.0;
870 if (pymax) *pymax = -1.0;
872 return ERROR_INT(
"pta not defined", procName, 1);
873 if (!pxmin && !pxmax && !pymin && !pymax)
874 return ERROR_INT(
"no output requested", procName, 1);
876 L_WARNING(
"pta is empty\n", procName);
880 xmin = ymin = 1.0e20;
881 xmax = ymax = -1.0e20;
882 for (i = 0; i < n; i++) {
884 if (x < xmin) xmin = x;
885 if (y < ymin) ymin = y;
886 if (x > xmax) xmax = x;
887 if (y > ymax) ymax = y;
889 if (pxmin) *pxmin = xmin;
890 if (pymin) *pymin = ymin;
891 if (pxmax) *pxmax = xmax;
892 if (pymax) *pymax = ymax;
919 PROCNAME(
"ptaSelectByValue");
922 return (
PTA *)ERROR_PTR(
"ptas not defined", procName, NULL);
924 L_WARNING(
"ptas is empty\n", procName);
929 return (
PTA *)ERROR_PTR(
"invalid type", procName, NULL);
932 return (
PTA *)ERROR_PTR(
"invalid relation", procName, NULL);
936 for (i = 0; i < n; i++) {
984 PROCNAME(
"ptaCropToMask");
987 return (
PTA *)ERROR_PTR(
"ptas not defined", procName, NULL);
988 if (!pixm || pixGetDepth(pixm) != 1)
989 return (
PTA *)ERROR_PTR(
"pixm undefined or not 1 bpp", procName, NULL);
991 L_INFO(
"ptas is empty\n", procName);
997 for (i = 0; i < n; i++) {
1050 l_float32 a, b, factor, sx, sy, sxx, sxy, val;
1053 PROCNAME(
"ptaGetLinearLSF");
1057 if (pnafit) *pnafit = NULL;
1058 if (!pa && !pb && !pnafit)
1059 return ERROR_INT(
"no output requested", procName, 1);
1061 return ERROR_INT(
"pta not defined", procName, 1);
1063 return ERROR_INT(
"less than 2 pts found", procName, 1);
1067 sx = sy = sxx = sxy = 0.;
1069 for (i = 0; i < n; i++) {
1072 sxx += xa[i] * xa[i];
1073 sxy += xa[i] * ya[i];
1075 factor = n * sxx - sx * sx;
1077 return ERROR_INT(
"no solution found", procName, 1);
1078 factor = 1. / factor;
1080 a = factor * ((l_float32)n * sxy - sx * sy);
1081 b = factor * (sxx * sy - sx * sxy);
1083 for (i = 0; i < n; i++) {
1084 sxx += xa[i] * xa[i];
1085 sxy += xa[i] * ya[i];
1088 return ERROR_INT(
"no solution found", procName, 1);
1092 for (i = 0; i < n; i++)
1095 b = sy / (l_float32)n;
1100 for (i = 0; i < n; i++) {
1101 val = a * xa[i] + b;
1152 l_float32 x, y, sx, sy, sx2, sx3, sx4, sxy, sx2y;
1157 PROCNAME(
"ptaGetQuadraticLSF");
1162 if (pnafit) *pnafit = NULL;
1163 if (!pa && !pb && !pc && !pnafit)
1164 return ERROR_INT(
"no output requested", procName, 1);
1166 return ERROR_INT(
"pta not defined", procName, 1);
1168 return ERROR_INT(
"less than 3 pts found", procName, 1);
1172 sx = sy = sx2 = sx3 = sx4 = sxy = sx2y = 0.;
1173 for (i = 0; i < n; i++) {
1180 sx4 += x * x * x * x;
1185 for (i = 0; i < 3; i++)
1186 f[i] = (l_float32 *)LEPT_CALLOC(3,
sizeof(l_float32));
1202 for (i = 0; i < 3; i++)
1205 return ERROR_INT(
"quadratic solution failed", procName, 1);
1212 for (i = 0; i < n; i++) {
1214 y = g[0] * x * x + g[1] * x + g[2];
1266 l_float32 x, y, sx, sy, sx2, sx3, sx4, sx5, sx6, sxy, sx2y, sx3y;
1271 PROCNAME(
"ptaGetCubicLSF");
1277 if (pnafit) *pnafit = NULL;
1278 if (!pa && !pb && !pc && !pd && !pnafit)
1279 return ERROR_INT(
"no output requested", procName, 1);
1281 return ERROR_INT(
"pta not defined", procName, 1);
1283 return ERROR_INT(
"less than 4 pts found", procName, 1);
1287 sx = sy = sx2 = sx3 = sx4 = sx5 = sx6 = sxy = sx2y = sx3y = 0.;
1288 for (i = 0; i < n; i++) {
1295 sx4 += x * x * x * x;
1296 sx5 += x * x * x * x * x;
1297 sx6 += x * x * x * x * x * x;
1300 sx3y += x * x * x * y;
1303 for (i = 0; i < 4; i++)
1304 f[i] = (l_float32 *)LEPT_CALLOC(4,
sizeof(l_float32));
1328 for (i = 0; i < 4; i++)
1331 return ERROR_INT(
"cubic solution failed", procName, 1);
1339 for (i = 0; i < n; i++) {
1341 y = g[0] * x * x * x + g[1] * x * x + g[2] * x + g[3];
1397 l_float32 x, y, sx, sy, sx2, sx3, sx4, sx5, sx6, sx7, sx8;
1398 l_float32 sxy, sx2y, sx3y, sx4y;
1403 PROCNAME(
"ptaGetQuarticLSF");
1410 if (pnafit) *pnafit = NULL;
1411 if (!pa && !pb && !pc && !pd && !pe && !pnafit)
1412 return ERROR_INT(
"no output requested", procName, 1);
1414 return ERROR_INT(
"pta not defined", procName, 1);
1416 return ERROR_INT(
"less than 5 pts found", procName, 1);
1420 sx = sy = sx2 = sx3 = sx4 = sx5 = sx6 = sx7 = sx8 = 0;
1421 sxy = sx2y = sx3y = sx4y = 0.;
1422 for (i = 0; i < n; i++) {
1429 sx4 += x * x * x * x;
1430 sx5 += x * x * x * x * x;
1431 sx6 += x * x * x * x * x * x;
1432 sx7 += x * x * x * x * x * x * x;
1433 sx8 += x * x * x * x * x * x * x * x;
1436 sx3y += x * x * x * y;
1437 sx4y += x * x * x * x * y;
1440 for (i = 0; i < 5; i++)
1441 f[i] = (l_float32 *)LEPT_CALLOC(5,
sizeof(l_float32));
1475 for (i = 0; i < 5; i++)
1478 return ERROR_INT(
"quartic solution failed", procName, 1);
1487 for (i = 0; i < n; i++) {
1489 y = g[0] * x * x * x * x + g[1] * x * x * x + g[2] * x * x
1533 l_float32 x, y, yf, val, mederr;
1534 NUMA *nafit, *naerror;
1537 PROCNAME(
"ptaNoisyLinearLSF");
1539 if (pptad) *pptad = NULL;
1542 if (pmederr) *pmederr = 0.0;
1543 if (pnafit) *pnafit = NULL;
1544 if (!pptad && !pa && !pb && !pnafit)
1545 return ERROR_INT(
"no output requested", procName, 1);
1547 return ERROR_INT(
"pta not defined", procName, 1);
1549 return ERROR_INT(
"factor must be > 0.0", procName, 1);
1551 return ERROR_INT(
"less than 2 pts found", procName, 1);
1554 return ERROR_INT(
"error in linear LSF", procName, 1);
1558 for (i = 0; i < n; i++) {
1564 if (pmederr) *pmederr = mederr;
1569 for (i = 0; i < n; i++) {
1572 if (val <= factor * mederr)
1621 l_float32 x, y, yf, val, mederr;
1622 NUMA *nafit, *naerror;
1625 PROCNAME(
"ptaNoisyQuadraticLSF");
1627 if (pptad) *pptad = NULL;
1631 if (pmederr) *pmederr = 0.0;
1632 if (pnafit) *pnafit = NULL;
1633 if (!pptad && !pa && !pb && !pc && !pnafit)
1634 return ERROR_INT(
"no output requested", procName, 1);
1636 return ERROR_INT(
"factor must be > 0.0", procName, 1);
1638 return ERROR_INT(
"pta not defined", procName, 1);
1640 return ERROR_INT(
"less than 3 pts found", procName, 1);
1643 return ERROR_INT(
"error in quadratic LSF", procName, 1);
1647 for (i = 0; i < n; i++) {
1653 if (pmederr) *pmederr = mederr;
1658 for (i = 0; i < n; i++) {
1661 if (val <= factor * mederr)
1668 return ERROR_INT(
"less than 3 pts found", procName, 1);
1696 PROCNAME(
"applyLinearFit");
1699 return ERROR_INT(
"&y not defined", procName, 1);
1721 PROCNAME(
"applyQuadraticFit");
1724 return ERROR_INT(
"&y not defined", procName, 1);
1726 *py = a * x * x + b * x + c;
1747 PROCNAME(
"applyCubicFit");
1750 return ERROR_INT(
"&y not defined", procName, 1);
1752 *py = a * x * x * x + b * x * x + c * x + d;
1776 PROCNAME(
"applyQuarticFit");
1779 return ERROR_INT(
"&y not defined", procName, 1);
1782 *py = a * x2 * x2 + b * x2 * x + c * x2 + d * x + e;
1813 char *rtitle, *gtitle, *btitle;
1814 static l_int32 count = 0;
1815 l_int32 i, x, y, d, w, h, npts, rval, gval, bval;
1817 NUMA *na, *nar, *nag, *nab;
1820 PROCNAME(
"pixPlotAlongPta");
1825 return ERROR_INT(
"pixs not defined", procName, 1);
1827 return ERROR_INT(
"pta not defined", procName, 1);
1828 if (outformat != GPLOT_PNG && outformat != GPLOT_PS &&
1829 outformat != GPLOT_EPS && outformat != GPLOT_LATEX) {
1830 L_WARNING(
"outformat invalid; using GPLOT_PNG\n", procName);
1831 outformat = GPLOT_PNG;
1835 d = pixGetDepth(pixt);
1836 w = pixGetWidth(pixt);
1837 h = pixGetHeight(pixt);
1843 for (i = 0; i < npts; i++) {
1845 if (x < 0 || x >= w)
1847 if (y < 0 || y >= h)
1858 snprintf(buffer,
sizeof(buffer),
"/tmp/lept/plot/%03d", count++);
1861 snprintf(buffer,
sizeof(buffer),
"/tmp/lept/plot/%03d", count++);
1864 snprintf(buffer,
sizeof(buffer),
"/tmp/lept/plot/%03d", count++);
1875 for (i = 0; i < npts; i++) {
1877 if (x < 0 || x >= w)
1879 if (y < 0 || y >= h)
1885 snprintf(buffer,
sizeof(buffer),
"/tmp/lept/plot/%03d", count++);
1911 l_int32 i, j, w, h, wpl, xstart, xend, ystart, yend, bw, bh;
1912 l_uint32 *data, *line;
1915 PROCNAME(
"ptaGetPixelsFromPix");
1917 if (!pixs || (pixGetDepth(pixs) != 1))
1918 return (
PTA *)ERROR_PTR(
"pixs undefined or not 1 bpp", procName, NULL);
1922 wpl = pixGetWpl(pixs);
1923 xstart = ystart = 0;
1928 xend = xstart + bw - 1;
1929 yend = ystart + bh - 1;
1933 return (
PTA *)ERROR_PTR(
"pta not made", procName, NULL);
1934 for (i = ystart; i <= yend; i++) {
1935 line = data + i * wpl;
1936 for (j = xstart; j <= xend; j++) {
1968 PROCNAME(
"pixGenerateFromPta");
1971 return (
PIX *)ERROR_PTR(
"pta not defined", procName, NULL);
1974 return (
PIX *)ERROR_PTR(
"pix not made", procName, NULL);
1976 for (i = 0; i < n; i++) {
1978 if (x < 0 || x >= w || y < 0 || y >= h)
2008 PROCNAME(
"ptaGetBoundaryPixels");
2010 if (!pixs || (pixGetDepth(pixs) != 1))
2011 return (
PTA *)ERROR_PTR(
"pixs undefined or not 1 bpp", procName, NULL);
2012 if (type != L_BOUNDARY_FG && type != L_BOUNDARY_BG)
2013 return (
PTA *)ERROR_PTR(
"invalid type", procName, NULL);
2015 if (type == L_BOUNDARY_FG)
2019 pixXor(pixt, pixt, pixs);
2053 l_int32 connectivity,
2057 l_int32 i, n, w, h, x, y, bw, bh, left, right, top, bot;
2064 PROCNAME(
"ptaaGetBoundaryPixels");
2066 if (pboxa) *pboxa = NULL;
2067 if (ppixa) *ppixa = NULL;
2068 if (!pixs || (pixGetDepth(pixs) != 1))
2069 return (
PTAA *)ERROR_PTR(
"pixs undefined or not 1 bpp", procName, NULL);
2070 if (type != L_BOUNDARY_FG && type != L_BOUNDARY_BG)
2071 return (
PTAA *)ERROR_PTR(
"invalid type", procName, NULL);
2072 if (connectivity != 4 && connectivity != 8)
2073 return (
PTAA *)ERROR_PTR(
"connectivity not 4 or 8", procName, NULL);
2079 for (i = 0; i < n; i++) {
2082 left = right = top = bot = 0;
2083 if (type == L_BOUNDARY_BG) {
2084 if (x > 0) left = 1;
2086 if (x + bw < w) right = 1;
2087 if (y + bh < h) bot = 1;
2093 pta2 =
ptaTransform(pta1, x - left, y - top, 1.0, 1.0);
2137 l_int32 wpl, index, i, j, w, h;
2139 l_uint32 *data, *line;
2143 PROCNAME(
"ptaaIndexLabeledPixels");
2145 if (pncc) *pncc = 0;
2146 if (!pixs || (pixGetDepth(pixs) != 32))
2147 return (
PTAA *)ERROR_PTR(
"pixs undef or not 32 bpp", procName, NULL);
2152 if (pncc) *pncc = maxval;
2162 wpl = pixGetWpl(pixs);
2163 for (i = 0; i < h; i++) {
2164 line = data + wpl * i;
2165 for (j = 0; j < w; j++) {
2199 PROCNAME(
"ptaGetNeighborPixLocs");
2202 return (
PTA *)ERROR_PTR(
"pixs not defined", procName, NULL);
2204 if (x < 0 || x >= w || y < 0 || y >= h)
2205 return (
PTA *)ERROR_PTR(
"(x,y) not in pixs", procName, NULL);
2206 if (conn != 4 && conn != 8)
2207 return (
PTA *)ERROR_PTR(
"conn not 4 or 8", procName, NULL);
2250 l_float32 startx, delx, val;
2253 PROCNAME(
"numaConvertToPta1");
2256 return (
PTA *)ERROR_PTR(
"na not defined", procName, NULL);
2261 for (i = 0; i < n; i++) {
2263 ptaAddPt(pta, startx + i * delx, val);
2280 l_int32 i, n, nx, ny;
2281 l_float32 valx, valy;
2284 PROCNAME(
"numaConvertToPta2");
2287 return (
PTA *)ERROR_PTR(
"nax and nay not both defined", procName, NULL);
2293 L_WARNING(
"nx = %d does not equal ny = %d\n", procName, nx, ny);
2295 for (i = 0; i < n; i++) {
2318 l_float32 valx, valy;
2320 PROCNAME(
"ptaConvertToNuma");
2322 if (pnax) *pnax = NULL;
2323 if (pnay) *pnay = NULL;
2325 return ERROR_INT(
"&nax and &nay not both defined", procName, 1);
2327 return ERROR_INT(
"pta not defined", procName, 1);
2332 for (i = 0; i < n; i++) {
2368 l_int32 i, n, w, h, x, y;
2369 l_uint32 rpixel, gpixel, bpixel;
2371 PROCNAME(
"pixDisplayPta");
2374 return (
PIX *)ERROR_PTR(
"pixs not defined", procName, pixd);
2376 return (
PIX *)ERROR_PTR(
"pta not defined", procName, pixd);
2377 if (pixd && (pixd != pixs || pixGetDepth(pixd) != 32))
2378 return (
PIX *)ERROR_PTR(
"invalid pixd", procName, pixd);
2388 for (i = 0; i < n; i++) {
2390 if (x < 0 || x >= w || y < 0 || y >= h)
2442 PROCNAME(
"pixDisplayPtaaPattern");
2445 return (
PIX *)ERROR_PTR(
"pixs not defined", procName, pixd);
2447 return (
PIX *)ERROR_PTR(
"ptaa not defined", procName, pixd);
2448 if (pixd && (pixd != pixs || pixGetDepth(pixd) != 32))
2449 return (
PIX *)ERROR_PTR(
"invalid pixd", procName, pixd);
2451 return (
PIX *)ERROR_PTR(
"pixp not defined", procName, pixd);
2459 for (i = 0; i < n; i++) {
2505 l_int32 i, n, w, h, x, y;
2508 PROCNAME(
"pixDisplayPtaPattern");
2511 return (
PIX *)ERROR_PTR(
"pixs not defined", procName, pixd);
2513 return (
PIX *)ERROR_PTR(
"pta not defined", procName, pixd);
2514 if (pixd && (pixd != pixs || pixGetDepth(pixd) != 32))
2515 return (
PIX *)ERROR_PTR(
"invalid pixd", procName, pixd);
2517 return (
PIX *)ERROR_PTR(
"pixp not defined", procName, pixd);
2525 for (i = 0; i < n; i++) {
2527 if (x < 0 || x >= w || y < 0 || y >= h)
2565 l_int32 i, j, n, np, x, y, xp, yp, xf, yf;
2568 PROCNAME(
"ptaReplicatePattern");
2571 return (
PTA *)ERROR_PTR(
"ptas not defined", procName, NULL);
2573 return (
PTA *)ERROR_PTR(
"no pattern is defined", procName, NULL);
2575 L_WARNING(
"pixp and ptap defined; using ptap\n", procName);
2584 for (i = 0; i < n; i++) {
2586 for (j = 0; j < np; j++) {
2590 if (xf >= 0 && xf < w && yf >= 0 && yf < h)
2612 l_int32 i, j, w, h, npta, npt, x, y, rv, gv, bv;
2614 NUMA *na1, *na2, *na3;
2618 PROCNAME(
"pixDisplayPtaa");
2621 return (
PIX *)ERROR_PTR(
"pixs not defined", procName, NULL);
2623 return (
PIX *)ERROR_PTR(
"ptaa not defined", procName, NULL);
2626 return (
PIX *)ERROR_PTR(
"no pta", procName, NULL);
2629 return (
PIX *)ERROR_PTR(
"pixd not made", procName, NULL);
2633 if ((pixela = (l_uint32 *)LEPT_CALLOC(npta,
sizeof(l_uint32))) == NULL) {
2635 return (
PIX *)ERROR_PTR(
"calloc fail for pixela", procName, NULL);
2640 for (i = 0; i < npta; i++) {
2650 for (i = 0; i < npta; i++) {
2653 for (j = 0; j < npt; j++) {
2655 if (x < 0 || x >= w || y < 0 || y >= h)
l_ok applyQuarticFit(l_float32 a, l_float32 b, l_float32 c, l_float32 d, l_float32 e, l_float32 x, l_float32 *py)
applyQuarticFit()
l_int32 gaussjordan(l_float32 **a, l_float32 *b, l_int32 n)
gaussjordan()
l_ok ptaGetQuadraticLSF(PTA *pta, l_float32 *pa, l_float32 *pb, l_float32 *pc, NUMA **pnafit)
ptaGetQuadraticLSF()
l_ok ptaConvertToNuma(PTA *pta, NUMA **pnax, NUMA **pnay)
ptaConvertToNuma()
l_ok numaGetFValue(NUMA *na, l_int32 index, l_float32 *pval)
numaGetFValue()
PIX * pixRemoveColormap(PIX *pixs, l_int32 type)
pixRemoveColormap()
l_int32 lept_mkdir(const char *subdir)
lept_mkdir()
l_ok pixPlotAlongPta(PIX *pixs, PTA *pta, l_int32 outformat, const char *title)
pixPlotAlongPta()
PIX * pixConvertTo32(PIX *pixs)
pixConvertTo32()
PIX * pixGenerateFromPta(PTA *pta, l_int32 w, l_int32 h)
pixGenerateFromPta()
l_ok ptaaAddPt(PTAA *ptaa, l_int32 ipta, l_float32 x, l_float32 y)
ptaaAddPt()
l_ok ptaAddPt(PTA *pta, l_float32 x, l_float32 y)
ptaAddPt()
l_ok numaAddNumber(NUMA *na, l_float32 val)
numaAddNumber()
l_ok boxContainsPt(BOX *box, l_float32 x, l_float32 y, l_int32 *pcontains)
boxContainsPt()
l_ok ptaGetQuarticLSF(PTA *pta, l_float32 *pa, l_float32 *pb, l_float32 *pc, l_float32 *pd, l_float32 *pe, NUMA **pnafit)
ptaGetQuarticLSF()
PTA * ptaCreate(l_int32 n)
ptaCreate()
l_ok numaGetMedian(NUMA *na, l_float32 *pval)
numaGetMedian()
PIX * pixDisplayPtaaPattern(PIX *pixd, PIX *pixs, PTAA *ptaa, PIX *pixp, l_int32 cx, l_int32 cy)
pixDisplayPtaaPattern()
PIX * pixCreate(l_int32 width, l_int32 height, l_int32 depth)
pixCreate()
void pixcmapDestroy(PIXCMAP **pcmap)
pixcmapDestroy()
NUMA * numaCreate(l_int32 n)
numaCreate()
l_int32 ptaGetCount(PTA *pta)
ptaGetCount()
void boxaDestroy(BOXA **pboxa)
boxaDestroy()
l_uint32 * pixGetData(PIX *pix)
pixGetData()
PTA * ptaGetBoundaryPixels(PIX *pixs, l_int32 type)
ptaGetBoundaryPixels()
#define GET_DATA_BIT(pdata, n)
l_ok ptaGetLinearLSF(PTA *pta, l_float32 *pa, l_float32 *pb, NUMA **pnafit)
ptaGetLinearLSF()
PTA * ptaCropToMask(PTA *ptas, PIX *pixm)
ptaCropToMask()
l_ok applyCubicFit(l_float32 a, l_float32 b, l_float32 c, l_float32 d, l_float32 x, l_float32 *py)
applyCubicFit()
l_ok ptaJoin(PTA *ptad, PTA *ptas, l_int32 istart, l_int32 iend)
ptaJoin()
l_ok ptaNoisyLinearLSF(PTA *pta, l_float32 factor, PTA **pptad, l_float32 *pa, l_float32 *pb, l_float32 *pmederr, NUMA **pnafit)
ptaNoisyLinearLSF()
l_ok applyQuadraticFit(l_float32 a, l_float32 b, l_float32 c, l_float32 x, l_float32 *py)
applyQuadraticFit()
BOXA * pixConnComp(PIX *pixs, PIXA **ppixa, l_int32 connectivity)
pixConnComp()
PTA * ptaSubsample(PTA *ptas, l_int32 subfactor)
ptaSubsample()
NUMA * numaPseudorandomSequence(l_int32 size, l_int32 seed)
numaPseudorandomSequence()
l_int32 ptaPtInsidePolygon(PTA *pta, l_float32 x, l_float32 y, l_int32 *pinside)
ptaPtInsidePolygon()
PTA * ptaaGetPta(PTAA *ptaa, l_int32 index, l_int32 accessflag)
ptaaGetPta()
l_ok numaGetIValue(NUMA *na, l_int32 index, l_int32 *pival)
numaGetIValue()
PTA * numaConvertToPta1(NUMA *na)
numaConvertToPta1()
PIX * pixXor(PIX *pixd, PIX *pixs1, PIX *pixs2)
pixXor()
PIX * pixDisplayPtaa(PIX *pixs, PTAA *ptaa)
pixDisplayPtaa()
l_int32 numaGetCount(NUMA *na)
numaGetCount()
PTA * ptaClone(PTA *pta)
ptaClone()
l_ok boxaGetBoxGeometry(BOXA *boxa, l_int32 index, l_int32 *px, l_int32 *py, l_int32 *pw, l_int32 *ph)
boxaGetBoxGeometry()
l_ok pixSetPixel(PIX *pix, l_int32 x, l_int32 y, l_uint32 val)
pixSetPixel()
PIX * pixMorphSequence(PIX *pixs, const char *sequence, l_int32 dispsep)
pixMorphSequence()
l_ok ptaGetCubicLSF(PTA *pta, l_float32 *pa, l_float32 *pb, l_float32 *pc, l_float32 *pd, NUMA **pnafit)
ptaGetCubicLSF()
PTA * ptaCyclicPerm(PTA *ptas, l_int32 xs, l_int32 ys)
ptaCyclicPerm()
l_ok ptaGetPt(PTA *pta, l_int32 index, l_float32 *px, l_float32 *py)
ptaGetPt()
PTA * ptaGetNeighborPixLocs(PIX *pixs, l_int32 x, l_int32 y, l_int32 conn)
ptaGetNeighborPixLocs()
PTA * ptaSelectByValue(PTA *ptas, l_float32 xth, l_float32 yth, l_int32 type, l_int32 relation)
ptaSelectByValue()
l_int32 ptaContainsPt(PTA *pta, l_int32 x, l_int32 y)
ptaContainsPt()
#define GET_DATA_BYTE(pdata, n)
PTAA * ptaaGetBoundaryPixels(PIX *pixs, l_int32 type, l_int32 connectivity, BOXA **pboxa, PIXA **ppixa)
ptaaGetBoundaryPixels()
PTA * ptaGetInsideBox(PTA *ptas, BOX *box)
ptaGetInsideBox()
l_float32 l_angleBetweenVectors(l_float32 x1, l_float32 y1, l_float32 x2, l_float32 y2)
l_angleBetweenVectors()
l_ok ptaaInitFull(PTAA *ptaa, PTA *pta)
ptaaInitFull()
PIX * pixClone(PIX *pixs)
pixClone()
l_ok numaGetParameters(NUMA *na, l_float32 *pstartx, l_float32 *pdelx)
numaGetParameters()
void pixDestroy(PIX **ppix)
pixDestroy()
BOX * ptaGetBoundingRegion(PTA *pta)
ptaGetBoundingRegion()
l_ok ptaGetRange(PTA *pta, l_float32 *pminx, l_float32 *pmaxx, l_float32 *pminy, l_float32 *pmaxy)
ptaGetRange()
PTA * ptaCopy(PTA *pta)
ptaCopy()
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()
PTA * pixFindCornerPixels(PIX *pixs)
pixFindCornerPixels()
l_ok applyLinearFit(l_float32 a, l_float32 b, l_float32 x, l_float32 *py)
applyLinearFit()
l_int32 ptaaGetCount(PTAA *ptaa)
ptaaGetCount()
l_ok pixcmapGetColor32(PIXCMAP *cmap, l_int32 index, l_uint32 *pval32)
pixcmapGetColor32()
PTA * ptaReplicatePattern(PTA *ptas, PIX *pixp, PTA *ptap, l_int32 cx, l_int32 cy, l_int32 w, l_int32 h)
ptaReplicatePattern()
PIX * pixaGetPix(PIXA *pixa, l_int32 index, l_int32 accesstype)
pixaGetPix()
l_int32 ptaTestIntersection(PTA *pta1, PTA *pta2)
ptaTestIntersection()
PTA * numaConvertToPta2(NUMA *nax, NUMA *nay)
numaConvertToPta2()
PIX * pixDisplayPta(PIX *pixd, PIX *pixs, PTA *pta)
pixDisplayPta()
char * stringJoin(const char *src1, const char *src2)
stringJoin()
void ptaDestroy(PTA **ppta)
ptaDestroy()
l_ok pixGetMaxValueInRect(PIX *pixs, BOX *box, l_uint32 *pmaxval, l_int32 *pxmax, l_int32 *pymax)
pixGetMaxValueInRect()
l_ok ptaaJoin(PTAA *ptaad, PTAA *ptaas, l_int32 istart, l_int32 iend)
ptaaJoin()
PTA * ptaSelectRange(PTA *ptas, l_int32 first, l_int32 last)
ptaSelectRange()
PTAA * ptaaIndexLabeledPixels(PIX *pixs, l_int32 *pncc)
ptaaIndexLabeledPixels()
l_int32 boxaGetCount(BOXA *boxa)
boxaGetCount()
l_ok ptaGetMinMax(PTA *pta, l_float32 *pxmin, l_float32 *pymin, l_float32 *pxmax, l_float32 *pymax)
ptaGetMinMax()
PTA * ptaTransform(PTA *ptas, l_int32 shiftx, l_int32 shifty, l_float32 scalex, l_float32 scaley)
ptaTransform()
PIX * pixDisplayPtaPattern(PIX *pixd, PIX *pixs, PTA *pta, PIX *pixp, l_int32 cx, l_int32 cy, l_uint32 color)
pixDisplayPtaPattern()
l_ok ptaNoisyQuadraticLSF(PTA *pta, l_float32 factor, PTA **pptad, l_float32 *pa, l_float32 *pb, l_float32 *pc, l_float32 *pmederr, NUMA **pnafit)
ptaNoisyQuadraticLSF()
l_ok ptaGetIPt(PTA *pta, l_int32 index, l_int32 *px, l_int32 *py)
ptaGetIPt()
l_ok ptaaAddPta(PTAA *ptaa, PTA *pta, l_int32 copyflag)
ptaaAddPta()
l_ok composeRGBPixel(l_int32 rval, l_int32 gval, l_int32 bval, l_uint32 *ppixel)
composeRGBPixel()
PTA * ptaReverse(PTA *ptas, l_int32 type)
ptaReverse()
PTA * ptaGetPixelsFromPix(PIX *pixs, BOX *box)
ptaGetPixelsFromPix()
l_ok boxGetGeometry(BOX *box, l_int32 *px, l_int32 *py, l_int32 *pw, l_int32 *ph)
boxGetGeometry()
void pixaDestroy(PIXA **ppixa)
pixaDestroy()
BOX * boxCreate(l_int32 x, l_int32 y, l_int32 w, l_int32 h)
boxCreate()
PTAA * ptaaCreate(l_int32 n)
ptaaCreate()
l_ok gplotSimple1(NUMA *na, l_int32 outformat, const char *outroot, const char *title)
gplotSimple1()
PIX * pixAddBorderGeneral(PIX *pixs, l_int32 left, l_int32 right, l_int32 top, l_int32 bot, l_uint32 val)
pixAddBorderGeneral()
PTA * ptaTranspose(PTA *ptas)
ptaTranspose()
PIXCMAP * pixcmapCreateRandom(l_int32 depth, l_int32 hasblack, l_int32 haswhite)
pixcmapCreateRandom()