103 #include <config_auto.h> 107 #include "allheaders.h" 110 #define M_PI 3.14159265358979323846 131 PROCNAME(
"pixSubsample");
134 return (
PTA *)ERROR_PTR(
"ptas not defined", procName, NULL);
136 return (
PTA *)ERROR_PTR(
"subfactor < 1", procName, NULL);
140 for (i = 0; i < n; i++) {
141 if (i % subfactor != 0)
continue;
177 return ERROR_INT(
"ptad not defined", procName, 1);
184 if (iend < 0 || iend >= n)
187 return ERROR_INT(
"istart > iend; no pts", procName, 1);
189 for (i = istart; i <= iend; i++) {
192 L_ERROR(
"failed to add pt at i = %d\n", procName, i);
225 PROCNAME(
"ptaaJoin");
228 return ERROR_INT(
"ptaad not defined", procName, 1);
235 if (iend < 0 || iend >= n)
238 return ERROR_INT(
"istart > iend; no pts", procName, 1);
240 for (i = istart; i <= iend; i++) {
260 l_int32 n, i, ix, iy;
264 PROCNAME(
"ptaReverse");
267 return (
PTA *)ERROR_PTR(
"ptas not defined", procName, NULL);
271 return (
PTA *)ERROR_PTR(
"ptad not made", procName, NULL);
272 for (i = n - 1; i >= 0; i--) {
299 PROCNAME(
"ptaTranspose");
302 return (
PTA *)ERROR_PTR(
"ptas not defined", procName, NULL);
306 return (
PTA *)ERROR_PTR(
"ptad not made", procName, NULL);
307 for (i = 0; i < n; i++) {
337 l_int32 n, i, x, y, j, index, state;
338 l_int32 x1, y1, x2, y2;
341 PROCNAME(
"ptaCyclicPerm");
344 return (
PTA *)ERROR_PTR(
"ptas not defined", procName, NULL);
351 if (x1 != x2 || y1 != y2)
352 return (
PTA *)ERROR_PTR(
"start and end pts not same", procName, NULL);
354 for (i = 0; i < n; i++) {
356 if (x == xs && y == ys) {
361 if (state == L_NOT_FOUND)
362 return (
PTA *)ERROR_PTR(
"start pt not in ptas", procName, NULL);
365 return (
PTA *)ERROR_PTR(
"ptad not made", procName, NULL);
366 for (j = 0; j < n - 1; j++) {
370 index = (i + j + 1) % n;
397 PROCNAME(
"ptaSelectRange");
400 return (
PTA *)ERROR_PTR(
"ptas not defined", procName, NULL);
402 L_WARNING(
"ptas is empty\n", procName);
405 first = L_MAX(0, first);
406 if (last < 0) last = n - 1;
408 return (
PTA *)ERROR_PTR(
"invalid first", procName, NULL);
410 L_WARNING(
"last = %d is beyond max index = %d; adjusting\n",
411 procName, last, n - 1);
415 return (
PTA *)ERROR_PTR(
"first > last", procName, NULL);
417 npt = last - first + 1;
419 for (i = first; i <= last; i++) {
446 l_int32 n, i, x, y, minx, maxx, miny, maxy;
448 PROCNAME(
"ptaGetBoundingRegion");
451 return (
BOX *)ERROR_PTR(
"pta not defined", procName, NULL);
458 for (i = 0; i < n; i++) {
460 if (x < minx) minx = x;
461 if (x > maxx) maxx = x;
462 if (y < miny) miny = y;
463 if (y > maxy) maxy = y;
466 return boxCreate(minx, miny, maxx - minx + 1, maxy - miny + 1);
495 l_float32 x, y, minx, maxx, miny, maxy;
497 PROCNAME(
"ptaGetRange");
499 if (!pminx && !pmaxx && !pminy && !pmaxy)
500 return ERROR_INT(
"no output requested", procName, 1);
501 if (pminx) *pminx = 0;
502 if (pmaxx) *pmaxx = 0;
503 if (pminy) *pminy = 0;
504 if (pmaxy) *pmaxy = 0;
506 return ERROR_INT(
"pta not defined", procName, 1);
508 return ERROR_INT(
"no points in pta", procName, 1);
515 for (i = 1; i < n; i++) {
517 if (x < minx) minx = x;
518 if (x > maxx) maxx = x;
519 if (y < miny) miny = y;
520 if (y > maxy) maxy = y;
522 if (pminx) *pminx = minx;
523 if (pmaxx) *pmaxx = maxx;
524 if (pminy) *pminy = miny;
525 if (pmaxy) *pmaxy = maxy;
542 l_int32 n, i, contains;
545 PROCNAME(
"ptaGetInsideBox");
548 return (
PTA *)ERROR_PTR(
"ptas not defined", procName, NULL);
550 return (
PTA *)ERROR_PTR(
"box not defined", procName, NULL);
554 for (i = 0; i < n; i++) {
580 l_int32 i, j, x, y, w, h, wpl, mindim, found;
581 l_uint32 *data, *line;
584 PROCNAME(
"pixFindCornerPixels");
587 return (
PTA *)ERROR_PTR(
"pixs not defined", procName, NULL);
588 if (pixGetDepth(pixs) != 1)
589 return (
PTA *)ERROR_PTR(
"pixs not 1 bpp", procName, NULL);
591 w = pixGetWidth(pixs);
592 h = pixGetHeight(pixs);
593 mindim = L_MIN(w, h);
595 wpl = pixGetWpl(pixs);
598 return (
PTA *)ERROR_PTR(
"pta not made", procName, NULL);
600 for (found = FALSE, i = 0; i < mindim; i++) {
601 for (j = 0; j <= i; j++) {
603 line = data + y * wpl;
614 for (found = FALSE, i = 0; i < mindim; i++) {
615 for (j = 0; j <= i; j++) {
617 line = data + y * wpl;
629 for (found = FALSE, i = 0; i < mindim; i++) {
630 for (j = 0; j <= i; j++) {
632 line = data + y * wpl;
643 for (found = FALSE, i = 0; i < mindim; i++) {
644 for (j = 0; j <= i; j++) {
646 line = data + y * wpl;
674 l_int32 i, n, ix, iy;
676 PROCNAME(
"ptaContainsPt");
679 return ERROR_INT(
"pta not defined", procName, 0);
682 for (i = 0; i < n; i++) {
684 if (x == ix && y == iy)
702 l_int32 i, j, n1, n2, x1, y1, x2, y2;
704 PROCNAME(
"ptaTestIntersection");
707 return ERROR_INT(
"pta1 not defined", procName, 0);
709 return ERROR_INT(
"pta2 not defined", procName, 0);
713 for (i = 0; i < n1; i++) {
715 for (j = 0; j < n2; j++) {
717 if (x1 == x2 && y1 == y2)
749 PROCNAME(
"ptaTransform");
752 return (
PTA *)ERROR_PTR(
"ptas not defined", procName, NULL);
755 for (i = 0; i < n; i++) {
757 x = (l_int32)(scalex * (x + shiftx) + 0.5);
758 y = (l_int32)(scaley * (y + shifty) + 0.5);
786 l_float32 sum, x1, y1, x2, y2, xp1, yp1, xp2, yp2;
788 PROCNAME(
"ptaPtInsidePolygon");
791 return ERROR_INT(
"&inside not defined", procName, 1);
794 return ERROR_INT(
"pta not defined", procName, 1);
800 for (i = 0; i < n; i++) {
802 ptaGetPt(pta, (i + 1) % n, &xp2, &yp2);
810 if (L_ABS(sum) > M_PI)
839 ang = atan2(y2, x2) - atan2(y1, x1);
840 if (ang > M_PI) ang -= 2.0 * M_PI;
841 if (ang < -M_PI) ang += 2.0 * M_PI;
871 l_float32 x0, y0, x1, y1, x2, y2;
874 PROCNAME(
"ptaPolygonIsConvex");
877 return ERROR_INT(
"&isconvex not defined", procName, 1);
880 return ERROR_INT(
"pta not defined", procName, 1);
882 return ERROR_INT(
"pta has < 3 pts", procName, 1);
884 for (i = 0; i < n; i++) {
886 ptaGetPt(pta, (i + 1) % n, &x1, &y1);
887 ptaGetPt(pta, (i + 2) % n, &x2, &y2);
894 cprod = (x2 - x0) * (y1 - y0) - (x1 - x0) * (y2 - y0);
925 l_float32 x, y, xmin, ymin, xmax, ymax;
927 PROCNAME(
"ptaGetMinMax");
929 if (pxmin) *pxmin = -1.0;
930 if (pymin) *pymin = -1.0;
931 if (pxmax) *pxmax = -1.0;
932 if (pymax) *pymax = -1.0;
934 return ERROR_INT(
"pta not defined", procName, 1);
935 if (!pxmin && !pxmax && !pymin && !pymax)
936 return ERROR_INT(
"no output requested", procName, 1);
938 L_WARNING(
"pta is empty\n", procName);
942 xmin = ymin = 1.0e20;
943 xmax = ymax = -1.0e20;
944 for (i = 0; i < n; i++) {
946 if (x < xmin) xmin = x;
947 if (y < ymin) ymin = y;
948 if (x > xmax) xmax = x;
949 if (y > ymax) ymax = y;
951 if (pxmin) *pxmin = xmin;
952 if (pymin) *pymin = ymin;
953 if (pxmax) *pxmax = xmax;
954 if (pymax) *pymax = ymax;
981 PROCNAME(
"ptaSelectByValue");
984 return (
PTA *)ERROR_PTR(
"ptas not defined", procName, NULL);
986 L_WARNING(
"ptas is empty\n", procName);
991 return (
PTA *)ERROR_PTR(
"invalid type", procName, NULL);
994 return (
PTA *)ERROR_PTR(
"invalid relation", procName, NULL);
998 for (i = 0; i < n; i++) {
1046 PROCNAME(
"ptaCropToMask");
1049 return (
PTA *)ERROR_PTR(
"ptas not defined", procName, NULL);
1050 if (!pixm || pixGetDepth(pixm) != 1)
1051 return (
PTA *)ERROR_PTR(
"pixm undefined or not 1 bpp", procName, NULL);
1053 L_INFO(
"ptas is empty\n", procName);
1059 for (i = 0; i < n; i++) {
1112 l_float32 a, b, factor, sx, sy, sxx, sxy, val;
1115 PROCNAME(
"ptaGetLinearLSF");
1119 if (pnafit) *pnafit = NULL;
1120 if (!pa && !pb && !pnafit)
1121 return ERROR_INT(
"no output requested", procName, 1);
1123 return ERROR_INT(
"pta not defined", procName, 1);
1125 return ERROR_INT(
"less than 2 pts found", procName, 1);
1129 sx = sy = sxx = sxy = 0.;
1131 for (i = 0; i < n; i++) {
1134 sxx += xa[i] * xa[i];
1135 sxy += xa[i] * ya[i];
1137 factor = n * sxx - sx * sx;
1139 return ERROR_INT(
"no solution found", procName, 1);
1140 factor = 1. / factor;
1142 a = factor * ((l_float32)n * sxy - sx * sy);
1143 b = factor * (sxx * sy - sx * sxy);
1145 for (i = 0; i < n; i++) {
1146 sxx += xa[i] * xa[i];
1147 sxy += xa[i] * ya[i];
1150 return ERROR_INT(
"no solution found", procName, 1);
1154 for (i = 0; i < n; i++)
1157 b = sy / (l_float32)n;
1162 for (i = 0; i < n; i++) {
1163 val = a * xa[i] + b;
1214 l_float32 x, y, sx, sy, sx2, sx3, sx4, sxy, sx2y;
1219 PROCNAME(
"ptaGetQuadraticLSF");
1224 if (pnafit) *pnafit = NULL;
1225 if (!pa && !pb && !pc && !pnafit)
1226 return ERROR_INT(
"no output requested", procName, 1);
1228 return ERROR_INT(
"pta not defined", procName, 1);
1230 return ERROR_INT(
"less than 3 pts found", procName, 1);
1234 sx = sy = sx2 = sx3 = sx4 = sxy = sx2y = 0.;
1235 for (i = 0; i < n; i++) {
1242 sx4 += x * x * x * x;
1247 for (i = 0; i < 3; i++)
1248 f[i] = (l_float32 *)LEPT_CALLOC(3,
sizeof(l_float32));
1264 for (i = 0; i < 3; i++)
1267 return ERROR_INT(
"quadratic solution failed", procName, 1);
1274 for (i = 0; i < n; i++) {
1276 y = g[0] * x * x + g[1] * x + g[2];
1328 l_float32 x, y, sx, sy, sx2, sx3, sx4, sx5, sx6, sxy, sx2y, sx3y;
1333 PROCNAME(
"ptaGetCubicLSF");
1339 if (pnafit) *pnafit = NULL;
1340 if (!pa && !pb && !pc && !pd && !pnafit)
1341 return ERROR_INT(
"no output requested", procName, 1);
1343 return ERROR_INT(
"pta not defined", procName, 1);
1345 return ERROR_INT(
"less than 4 pts found", procName, 1);
1349 sx = sy = sx2 = sx3 = sx4 = sx5 = sx6 = sxy = sx2y = sx3y = 0.;
1350 for (i = 0; i < n; i++) {
1357 sx4 += x * x * x * x;
1358 sx5 += x * x * x * x * x;
1359 sx6 += x * x * x * x * x * x;
1362 sx3y += x * x * x * y;
1365 for (i = 0; i < 4; i++)
1366 f[i] = (l_float32 *)LEPT_CALLOC(4,
sizeof(l_float32));
1390 for (i = 0; i < 4; i++)
1393 return ERROR_INT(
"cubic solution failed", procName, 1);
1401 for (i = 0; i < n; i++) {
1403 y = g[0] * x * x * x + g[1] * x * x + g[2] * x + g[3];
1459 l_float32 x, y, sx, sy, sx2, sx3, sx4, sx5, sx6, sx7, sx8;
1460 l_float32 sxy, sx2y, sx3y, sx4y;
1465 PROCNAME(
"ptaGetQuarticLSF");
1472 if (pnafit) *pnafit = NULL;
1473 if (!pa && !pb && !pc && !pd && !pe && !pnafit)
1474 return ERROR_INT(
"no output requested", procName, 1);
1476 return ERROR_INT(
"pta not defined", procName, 1);
1478 return ERROR_INT(
"less than 5 pts found", procName, 1);
1482 sx = sy = sx2 = sx3 = sx4 = sx5 = sx6 = sx7 = sx8 = 0;
1483 sxy = sx2y = sx3y = sx4y = 0.;
1484 for (i = 0; i < n; i++) {
1491 sx4 += x * x * x * x;
1492 sx5 += x * x * x * x * x;
1493 sx6 += x * x * x * x * x * x;
1494 sx7 += x * x * x * x * x * x * x;
1495 sx8 += x * x * x * x * x * x * x * x;
1498 sx3y += x * x * x * y;
1499 sx4y += x * x * x * x * y;
1502 for (i = 0; i < 5; i++)
1503 f[i] = (l_float32 *)LEPT_CALLOC(5,
sizeof(l_float32));
1537 for (i = 0; i < 5; i++)
1540 return ERROR_INT(
"quartic solution failed", procName, 1);
1549 for (i = 0; i < n; i++) {
1551 y = g[0] * x * x * x * x + g[1] * x * x * x + g[2] * x * x
1595 l_float32 x, y, yf, val, mederr;
1596 NUMA *nafit, *naerror;
1599 PROCNAME(
"ptaNoisyLinearLSF");
1601 if (pptad) *pptad = NULL;
1604 if (pmederr) *pmederr = 0.0;
1605 if (pnafit) *pnafit = NULL;
1606 if (!pptad && !pa && !pb && !pnafit)
1607 return ERROR_INT(
"no output requested", procName, 1);
1609 return ERROR_INT(
"pta not defined", procName, 1);
1611 return ERROR_INT(
"factor must be > 0.0", procName, 1);
1613 return ERROR_INT(
"less than 2 pts found", procName, 1);
1616 return ERROR_INT(
"error in linear LSF", procName, 1);
1620 for (i = 0; i < n; i++) {
1626 if (pmederr) *pmederr = mederr;
1631 for (i = 0; i < n; i++) {
1634 if (val <= factor * mederr)
1683 l_float32 x, y, yf, val, mederr;
1684 NUMA *nafit, *naerror;
1687 PROCNAME(
"ptaNoisyQuadraticLSF");
1689 if (pptad) *pptad = NULL;
1693 if (pmederr) *pmederr = 0.0;
1694 if (pnafit) *pnafit = NULL;
1695 if (!pptad && !pa && !pb && !pc && !pnafit)
1696 return ERROR_INT(
"no output requested", procName, 1);
1698 return ERROR_INT(
"factor must be > 0.0", procName, 1);
1700 return ERROR_INT(
"pta not defined", procName, 1);
1702 return ERROR_INT(
"less than 3 pts found", procName, 1);
1705 return ERROR_INT(
"error in quadratic LSF", procName, 1);
1709 for (i = 0; i < n; i++) {
1715 if (pmederr) *pmederr = mederr;
1720 for (i = 0; i < n; i++) {
1723 if (val <= factor * mederr)
1730 return ERROR_INT(
"less than 3 pts found", procName, 1);
1758 PROCNAME(
"applyLinearFit");
1761 return ERROR_INT(
"&y not defined", procName, 1);
1783 PROCNAME(
"applyQuadraticFit");
1786 return ERROR_INT(
"&y not defined", procName, 1);
1788 *py = a * x * x + b * x + c;
1809 PROCNAME(
"applyCubicFit");
1812 return ERROR_INT(
"&y not defined", procName, 1);
1814 *py = a * x * x * x + b * x * x + c * x + d;
1838 PROCNAME(
"applyQuarticFit");
1841 return ERROR_INT(
"&y not defined", procName, 1);
1844 *py = a * x2 * x2 + b * x2 * x + c * x2 + d * x + e;
1875 char *rtitle, *gtitle, *btitle;
1876 static l_int32 count = 0;
1877 l_int32 i, x, y, d, w, h, npts, rval, gval, bval;
1879 NUMA *na, *nar, *nag, *nab;
1882 PROCNAME(
"pixPlotAlongPta");
1887 return ERROR_INT(
"pixs not defined", procName, 1);
1889 return ERROR_INT(
"pta not defined", procName, 1);
1890 if (outformat != GPLOT_PNG && outformat != GPLOT_PS &&
1891 outformat != GPLOT_EPS && outformat != GPLOT_LATEX) {
1892 L_WARNING(
"outformat invalid; using GPLOT_PNG\n", procName);
1893 outformat = GPLOT_PNG;
1897 d = pixGetDepth(pixt);
1898 w = pixGetWidth(pixt);
1899 h = pixGetHeight(pixt);
1905 for (i = 0; i < npts; i++) {
1907 if (x < 0 || x >= w)
1909 if (y < 0 || y >= h)
1920 snprintf(buffer,
sizeof(buffer),
"/tmp/lept/plot/%03d", count++);
1923 snprintf(buffer,
sizeof(buffer),
"/tmp/lept/plot/%03d", count++);
1926 snprintf(buffer,
sizeof(buffer),
"/tmp/lept/plot/%03d", count++);
1937 for (i = 0; i < npts; i++) {
1939 if (x < 0 || x >= w)
1941 if (y < 0 || y >= h)
1947 snprintf(buffer,
sizeof(buffer),
"/tmp/lept/plot/%03d", count++);
1973 l_int32 i, j, w, h, wpl, xstart, xend, ystart, yend, bw, bh;
1974 l_uint32 *data, *line;
1977 PROCNAME(
"ptaGetPixelsFromPix");
1979 if (!pixs || (pixGetDepth(pixs) != 1))
1980 return (
PTA *)ERROR_PTR(
"pixs undefined or not 1 bpp", procName, NULL);
1984 wpl = pixGetWpl(pixs);
1985 xstart = ystart = 0;
1990 xend = xstart + bw - 1;
1991 yend = ystart + bh - 1;
1995 return (
PTA *)ERROR_PTR(
"pta not made", procName, NULL);
1996 for (i = ystart; i <= yend; i++) {
1997 line = data + i * wpl;
1998 for (j = xstart; j <= xend; j++) {
2030 PROCNAME(
"pixGenerateFromPta");
2033 return (
PIX *)ERROR_PTR(
"pta not defined", procName, NULL);
2036 return (
PIX *)ERROR_PTR(
"pix not made", procName, NULL);
2038 for (i = 0; i < n; i++) {
2040 if (x < 0 || x >= w || y < 0 || y >= h)
2070 PROCNAME(
"ptaGetBoundaryPixels");
2072 if (!pixs || (pixGetDepth(pixs) != 1))
2073 return (
PTA *)ERROR_PTR(
"pixs undefined or not 1 bpp", procName, NULL);
2074 if (type != L_BOUNDARY_FG && type != L_BOUNDARY_BG)
2075 return (
PTA *)ERROR_PTR(
"invalid type", procName, NULL);
2077 if (type == L_BOUNDARY_FG)
2081 pixXor(pixt, pixt, pixs);
2115 l_int32 connectivity,
2119 l_int32 i, n, w, h, x, y, bw, bh, left, right, top, bot;
2126 PROCNAME(
"ptaaGetBoundaryPixels");
2128 if (pboxa) *pboxa = NULL;
2129 if (ppixa) *ppixa = NULL;
2130 if (!pixs || (pixGetDepth(pixs) != 1))
2131 return (
PTAA *)ERROR_PTR(
"pixs undefined or not 1 bpp", procName, NULL);
2132 if (type != L_BOUNDARY_FG && type != L_BOUNDARY_BG)
2133 return (
PTAA *)ERROR_PTR(
"invalid type", procName, NULL);
2134 if (connectivity != 4 && connectivity != 8)
2135 return (
PTAA *)ERROR_PTR(
"connectivity not 4 or 8", procName, NULL);
2141 for (i = 0; i < n; i++) {
2144 left = right = top = bot = 0;
2145 if (type == L_BOUNDARY_BG) {
2146 if (x > 0) left = 1;
2148 if (x + bw < w) right = 1;
2149 if (y + bh < h) bot = 1;
2155 pta2 =
ptaTransform(pta1, x - left, y - top, 1.0, 1.0);
2199 l_int32 wpl, index, i, j, w, h;
2201 l_uint32 *data, *line;
2205 PROCNAME(
"ptaaIndexLabeledPixels");
2207 if (pncc) *pncc = 0;
2208 if (!pixs || (pixGetDepth(pixs) != 32))
2209 return (
PTAA *)ERROR_PTR(
"pixs undef or not 32 bpp", procName, NULL);
2214 if (pncc) *pncc = maxval;
2224 wpl = pixGetWpl(pixs);
2225 for (i = 0; i < h; i++) {
2226 line = data + wpl * i;
2227 for (j = 0; j < w; j++) {
2261 PROCNAME(
"ptaGetNeighborPixLocs");
2264 return (
PTA *)ERROR_PTR(
"pixs not defined", procName, NULL);
2266 if (x < 0 || x >= w || y < 0 || y >= h)
2267 return (
PTA *)ERROR_PTR(
"(x,y) not in pixs", procName, NULL);
2268 if (conn != 4 && conn != 8)
2269 return (
PTA *)ERROR_PTR(
"conn not 4 or 8", procName, NULL);
2312 l_float32 startx, delx, val;
2315 PROCNAME(
"numaConvertToPta1");
2318 return (
PTA *)ERROR_PTR(
"na not defined", procName, NULL);
2323 for (i = 0; i < n; i++) {
2325 ptaAddPt(pta, startx + i * delx, val);
2342 l_int32 i, n, nx, ny;
2343 l_float32 valx, valy;
2346 PROCNAME(
"numaConvertToPta2");
2349 return (
PTA *)ERROR_PTR(
"nax and nay not both defined", procName, NULL);
2355 L_WARNING(
"nx = %d does not equal ny = %d\n", procName, nx, ny);
2357 for (i = 0; i < n; i++) {
2380 l_float32 valx, valy;
2382 PROCNAME(
"ptaConvertToNuma");
2384 if (pnax) *pnax = NULL;
2385 if (pnay) *pnay = NULL;
2387 return ERROR_INT(
"&nax and &nay not both defined", procName, 1);
2389 return ERROR_INT(
"pta not defined", procName, 1);
2394 for (i = 0; i < n; i++) {
2430 l_int32 i, n, w, h, x, y;
2431 l_uint32 rpixel, gpixel, bpixel;
2433 PROCNAME(
"pixDisplayPta");
2436 return (
PIX *)ERROR_PTR(
"pixs not defined", procName, pixd);
2438 return (
PIX *)ERROR_PTR(
"pta not defined", procName, pixd);
2439 if (pixd && (pixd != pixs || pixGetDepth(pixd) != 32))
2440 return (
PIX *)ERROR_PTR(
"invalid pixd", procName, pixd);
2450 for (i = 0; i < n; i++) {
2452 if (x < 0 || x >= w || y < 0 || y >= h)
2504 PROCNAME(
"pixDisplayPtaaPattern");
2507 return (
PIX *)ERROR_PTR(
"pixs not defined", procName, pixd);
2509 return (
PIX *)ERROR_PTR(
"ptaa not defined", procName, pixd);
2510 if (pixd && (pixd != pixs || pixGetDepth(pixd) != 32))
2511 return (
PIX *)ERROR_PTR(
"invalid pixd", procName, pixd);
2513 return (
PIX *)ERROR_PTR(
"pixp not defined", procName, pixd);
2521 for (i = 0; i < n; i++) {
2567 l_int32 i, n, w, h, x, y;
2570 PROCNAME(
"pixDisplayPtaPattern");
2573 return (
PIX *)ERROR_PTR(
"pixs not defined", procName, pixd);
2575 return (
PIX *)ERROR_PTR(
"pta not defined", procName, pixd);
2576 if (pixd && (pixd != pixs || pixGetDepth(pixd) != 32))
2577 return (
PIX *)ERROR_PTR(
"invalid pixd", procName, pixd);
2579 return (
PIX *)ERROR_PTR(
"pixp not defined", procName, pixd);
2587 for (i = 0; i < n; i++) {
2589 if (x < 0 || x >= w || y < 0 || y >= h)
2628 l_int32 i, j, n, np, x, y, xp, yp, xf, yf;
2631 PROCNAME(
"ptaReplicatePattern");
2634 return (
PTA *)ERROR_PTR(
"ptas not defined", procName, NULL);
2636 return (
PTA *)ERROR_PTR(
"no pattern is defined", procName, NULL);
2638 L_WARNING(
"pixp and ptap defined; using ptap\n", procName);
2647 for (i = 0; i < n; i++) {
2649 for (j = 0; j < np; j++) {
2653 if (xf >= 0 && xf < w && yf >= 0 && yf < h)
2675 l_int32 i, j, w, h, npta, npt, x, y, rv, gv, bv;
2677 NUMA *na1, *na2, *na3;
2681 PROCNAME(
"pixDisplayPtaa");
2684 return (
PIX *)ERROR_PTR(
"pixs not defined", procName, NULL);
2686 return (
PIX *)ERROR_PTR(
"ptaa not defined", procName, NULL);
2689 return (
PIX *)ERROR_PTR(
"no pta", procName, NULL);
2692 return (
PIX *)ERROR_PTR(
"pixd not made", procName, NULL);
2696 if ((pixela = (l_uint32 *)LEPT_CALLOC(npta,
sizeof(l_uint32))) == NULL) {
2698 return (
PIX *)ERROR_PTR(
"calloc fail for pixela", procName, NULL);
2703 for (i = 0; i < npta; i++) {
2713 for (i = 0; i < npta; i++) {
2716 for (j = 0; j < npt; j++) {
2718 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()
l_int32 ptaPolygonIsConvex(PTA *pta, l_int32 *pisconvex)
ptaPolygonIsConvex()
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()