66#include <config_auto.h>
70#include "allheaders.h"
72static l_float64 *generateRandomNumberArray(l_int32 size);
74 l_float32 xfreq, l_float32 yfreq,
75 l_float64 *randa, l_int32 nx, l_int32 ny,
76 l_int32 xp, l_int32 yp,
77 l_float32 *px, l_float32 *py);
79#define USE_SIN_TABLE 0
83static const l_float32 DefaultRedWeight = 0.0f;
84static const l_float32 DefaultGreenWeight = 0.7f;
85static const l_float32 DefaultBlueWeight = 0.3f;
119l_float32 xmag[] = {7.0f, 5.0f, 4.0f, 3.0f};
120l_float32 ymag[] = {10.0f, 8.0f, 6.0f, 5.0f};
121l_float32 xfreq[] = {0.12f, 0.10f, 0.10f, 0.11f};
122l_float32 yfreq[] = {0.15f, 0.13f, 0.13f, 0.11f};
123PIX *pixg, *pixgb, *pixw, *pixd;
126 return (
PIX *)ERROR_PTR(
"pixs not defined", __func__, NULL);
127 if (nterms < 1 || nterms > 4)
128 return (
PIX *)ERROR_PTR(
"nterms must be in {1,2,3,4}", __func__, NULL);
131 pixg = pixConvertTo8(pixs, 0);
132 pixgb = pixAddBorder(pixg, border, 255);
134 nterms, nterms, seed, 255);
135 pixd = pixColorizeGray(pixw, color, cmapflag);
193l_int32 w, h, d, i, j, wpls, wpld, val;
194l_uint32 *datas, *datad, *lined;
200 return (
PIX *)ERROR_PTR(
"pixs not defined", __func__, NULL);
201 pixGetDimensions(pixs, &w, &h, &d);
203 return (
PIX *)ERROR_PTR(
"pixs not 8 bpp", __func__, NULL);
211 randa = generateRandomNumberArray(5 * (nx + ny));
212 pixd = pixCreateTemplate(pixs);
213 datas = pixGetData(pixs);
214 wpls = pixGetWpl(pixs);
215 datad = pixGetData(pixd);
216 wpld = pixGetWpl(pixd);
218 for (i = 0; i < h; i++) {
219 lined = datad + i * wpld;
220 for (j = 0; j < w; j++) {
237generateRandomNumberArray(l_int32 size)
242 if ((randa = (l_float64 *)LEPT_CALLOC(size,
sizeof(l_float64))) == NULL)
243 return (l_float64 *)ERROR_PTR(
"calloc fail for randa", __func__, NULL);
246 for (i = 0; i < size; i++)
247 randa[i] = 0.5 * (1.0 + (l_float64)rand() / (l_float64)RAND_MAX);
272l_float64 twopi, x, y, anglex, angley;
275 for (i = 0, x = xp; i < nx; i++) {
276 anglex = xfreq * randa[3 * i + 1] * xp + twopi * randa[3 * i + 2];
277 angley = yfreq * randa[3 * i + 3] * yp + twopi * randa[3 * i + 4];
278 x += xmag * randa[3 * i] * sin(anglex) * sin(angley);
280 for (i = nx, y = yp; i < nx + ny; i++) {
281 angley = yfreq * randa[3 * i + 1] * yp + twopi * randa[3 * i + 2];
282 anglex = xfreq * randa[3 * i + 3] * xp + twopi * randa[3 * i + 4];
283 y += ymag * randa[3 * i] * sin(angley) * sin(anglex);
296static l_int32 applyWarpTransformLUT(l_float32 xmag, l_float32 ymag,
297 l_float32 xfreq, l_float32 yfreq,
298 l_float64 *randa, l_int32 nx, l_int32 ny,
299 l_int32 xp, l_int32 yp, l_float32 *lut,
300 l_int32 npts, l_float32 *px, l_float32 *py);
301static l_int32 makeSinLUT(l_int32 npts,
NUMA **pna);
302static l_float32 getSinFromLUT(l_float32 *tab, l_int32 npts,
326pixRandomHarmonicWarpLUT(
PIX *pixs,
336l_int32 w, h, d, i, j, wpls, wpld, val, npts;
337l_uint32 *datas, *datad, *lined;
345 return (
PIX *)ERROR_PTR(
"pixs not defined", __func__, NULL);
346 pixGetDimensions(pixs, &w, &h, &d);
348 return (
PIX *)ERROR_PTR(
"pixs not 8 bpp", __func__, NULL);
356 randa = generateRandomNumberArray(5 * (nx + ny));
357 pixd = pixCreateTemplate(pixs);
358 datas = pixGetData(pixs);
359 wpls = pixGetWpl(pixs);
360 datad = pixGetData(pixd);
361 wpld = pixGetWpl(pixd);
364 makeSinLUT(npts, &na);
366 for (i = 0; i < h; i++) {
367 lined = datad + i * wpld;
368 for (j = 0; j < w; j++) {
369 applyWarpTransformLUT(xmag, ymag, xfreq, yfreq, randa, nx, ny,
370 j, i, lut, npts, &x, &y);
390applyWarpTransformLUT(l_float32 xmag,
405l_float64 twopi, x, y, anglex, angley, sanglex, sangley;
408 for (i = 0, x = xp; i < nx; i++) {
409 anglex = xfreq * randa[3 * i + 1] * xp + twopi * randa[3 * i + 2];
410 angley = yfreq * randa[3 * i + 3] * yp + twopi * randa[3 * i + 4];
411 sanglex = getSinFromLUT(lut, npts, anglex);
412 sangley = getSinFromLUT(lut, npts, angley);
413 x += xmag * randa[3 * i] * sanglex * sangley;
415 for (i = nx, y = yp; i < nx + ny; i++) {
416 angley = yfreq * randa[3 * i + 1] * yp + twopi * randa[3 * i + 2];
417 anglex = xfreq * randa[3 * i + 3] * xp + twopi * randa[3 * i + 4];
418 sanglex = getSinFromLUT(lut, npts, anglex);
419 sangley = getSinFromLUT(lut, npts, angley);
420 y += ymag * randa[3 * i] * sangley * sanglex;
430makeSinLUT(l_int32 npts,
438 return ERROR_INT(
"&na not defined", __func__, 1);
441 return ERROR_INT(
"npts < 2", __func__, 1);
445 delx = 3.14159265 / (l_float32)npts;
446 numaSetParameters(na, 0.0, delx);
447 for (i = 0; i < n / 2; i++)
448 numaAddNumber(na, (l_float32)sin((l_float64)i * delx));
449 for (i = 0; i < n / 2; i++) {
450 numaGetFValue(na, i, &fval);
451 numaAddNumber(na, -fval);
453 numaAddNumber(na, 0);
460getSinFromLUT(l_float32 *tab,
465l_float32 twopi, invtwopi, findex, diff;
469 invtwopi = 0.1591549;
471 radang += twopi * (1.0 - (l_int32)(-radang * invtwopi));
472 else if (radang > 0.0)
473 radang -= twopi * (l_int32)(radang * invtwopi);
476 findex = (2.0 * (l_float32)npts) * (radang * invtwopi);
477 index = (l_int32)findex;
478 if (index == 2 * npts)
480 diff = findex - index;
481 return (1.0 - diff) * tab[index] + diff * tab[index + 1];
590BOX *boxleft, *boxright;
591PIX *pix1, *pix2, *pix3, *pix4, *pixr, *pixg, *pixb;
592PIX *pixv1, *pixv2, *pixv3, *pixv4;
597 return (
PIX *)ERROR_PTR(
"pixs not defined", __func__, NULL);
600 pix1 = pixConvertTo32(pixs);
604 pixGetDimensions(pixs, &w, &h, NULL);
605 boxleft = boxCreate(0, 0, w / 2, h);
606 boxright = boxCreate(w / 2, 0, w - w / 2, h);
607 if (ybendt != 0 || ybendb != 0) {
608 pixv1 = pixClipRectangle(pix1, boxleft, NULL);
609 pixv2 = pixClipRectangle(pix1, boxright, NULL);
616 pix2 = pixCreate(w, h, 32);
617 pixRasterop(pix2, 0, 0, w / 2, h,
PIX_SRC, pixv3, 0, 0);
618 pixRasterop(pix2, w / 2, 0, w - w / 2, h,
PIX_SRC, pixv4, 0, 0);
624 pix2 = pixClone(pix1);
629 pixr = pixGetRGBComponent(pix2,
COLOR_RED);
646 pixrs = pixClone(pixr);
648 pix1 = pixClipRectangle(pixr, boxleft, NULL);
649 pix2 = pixClipRectangle(pixr, boxright, NULL);
654 pixrs = pixCreate(w, h, 8);
655 pixRasterop(pixrs, 0, 0, w / 2, h,
PIX_SRC, pix3, 0, 0);
656 pixRasterop(pixrs, w / 2, 0, w - w / 2, h,
PIX_SRC, pix4, 0, 0);
666 if (zshiftt == 0 && zshiftb == 0) {
667 pixrss = pixClone(pixrs);
668 }
else if (zshiftt == zshiftb) {
671 angle = (l_float32)(zshiftb - zshiftt) /
672 L_MAX(1.0f, (l_float32)pixGetHeight(pixrs));
673 zshift = (zshiftt + zshiftb) / 2;
680 pixd = pixCreateRGBImage(pixrss, pixg, pixb);
682 boxDestroy(&boxleft);
683 boxDestroy(&boxright);
735 return (
PIX *)ERROR_PTR(
"pixs not defined", __func__, NULL);
736 d = pixGetDepth(pixs);
737 if (d != 1 && d != 8 && d != 32)
738 return (
PIX *)ERROR_PTR(
"pixs not 1, 8 or 32 bpp", __func__, NULL);
740 return (
PIX *)ERROR_PTR(
"invalid direction", __func__, NULL);
742 return (
PIX *)ERROR_PTR(
"invalid type", __func__, NULL);
744 return (
PIX *)ERROR_PTR(
"invalid operation", __func__, NULL);
746 return (
PIX *)ERROR_PTR(
"invalid incolor", __func__, NULL);
748 L_WARNING(
"Using sampling for 1 bpp\n", __func__);
781l_int32 i, j, jd, w, wm, h, d, wpls, wpld, val;
782l_uint32 *datas, *datad, *lines, *lined;
786 return (
PIX *)ERROR_PTR(
"pixs not defined", __func__, NULL);
787 pixGetDimensions(pixs, &w, &h, &d);
788 if (d != 1 && d != 8 && d != 32)
789 return (
PIX *)ERROR_PTR(
"pixs not 1, 8 or 32 bpp", __func__, NULL);
791 return (
PIX *)ERROR_PTR(
"invalid direction", __func__, NULL);
793 return (
PIX *)ERROR_PTR(
"invalid type", __func__, NULL);
795 return (
PIX *)ERROR_PTR(
"invalid incolor", __func__, NULL);
797 pixd = pixCreateTemplate(pixs);
799 datas = pixGetData(pixs);
800 datad = pixGetData(pixd);
801 wpls = pixGetWpl(pixs);
802 wpld = pixGetWpl(pixd);
804 for (jd = 0; jd < w; jd++) {
807 j = jd - (hmax * (wm - jd)) / wm;
809 j = jd - (hmax * (wm - jd) * (wm - jd)) / (wm * wm);
812 j = jd - (hmax * jd) / wm;
814 j = jd - (hmax * jd * jd) / (wm * wm);
816 if (j < 0 || j > w - 1)
continue;
821 for (i = 0; i < h; i++) {
822 lines = datas + i * wpls;
823 lined = datad + i * wpld;
830 for (i = 0; i < h; i++) {
831 lines = datas + i * wpls;
832 lined = datad + i * wpld;
838 for (i = 0; i < h; i++) {
839 lines = datas + i * wpls;
840 lined = datad + i * wpld;
841 lined[jd] = lines[j];
845 L_ERROR(
"invalid depth: %d\n", __func__, d);
877l_int32 i, j, jd, jp, jf, w, wm, h, d, wpls, wpld, val, rval, gval, bval;
878l_uint32 word0, word1;
879l_uint32 *datas, *datad, *lines, *lined;
883 return (
PIX *)ERROR_PTR(
"pixs not defined", __func__, NULL);
884 pixGetDimensions(pixs, &w, &h, &d);
885 if (d != 8 && d != 32)
886 return (
PIX *)ERROR_PTR(
"pixs not 8 or 32 bpp", __func__, NULL);
888 return (
PIX *)ERROR_PTR(
"invalid direction", __func__, NULL);
890 return (
PIX *)ERROR_PTR(
"invalid type", __func__, NULL);
892 return (
PIX *)ERROR_PTR(
"invalid incolor", __func__, NULL);
895 pixd = pixCreateTemplate(pixs);
897 datas = pixGetData(pixs);
898 datad = pixGetData(pixd);
899 wpls = pixGetWpl(pixs);
900 wpld = pixGetWpl(pixd);
902 for (jd = 0; jd < w; jd++) {
905 j = 64 * jd - 64 * (hmax * (wm - jd)) / wm;
907 j = 64 * jd - 64 * (hmax * (wm - jd) * (wm - jd)) / (wm * wm);
910 j = 64 * jd - 64 * (hmax * jd) / wm;
912 j = 64 * jd - 64 * (hmax * jd * jd) / (wm * wm);
916 if (jp < 0 || jp > wm)
continue;
922 for (i = 0; i < h; i++) {
923 lines = datas + i * wpls;
924 lined = datad + i * wpld;
930 for (i = 0; i < h; i++) {
931 lines = datas + i * wpls;
932 lined = datad + i * wpld;
940 for (i = 0; i < h; i++) {
941 lines = datas + i * wpls;
942 lined = datad + i * wpld;
943 word0 = *(lines + jp);
944 word1 = *(lines + jp + 1);
945 rval = ((63 - jf) * ((word0 >> L_RED_SHIFT) & 0xff) +
946 jf * ((word1 >> L_RED_SHIFT) & 0xff) + 31) / 63;
947 gval = ((63 - jf) * ((word0 >> L_GREEN_SHIFT) & 0xff) +
948 jf * ((word1 >> L_GREEN_SHIFT) & 0xff) + 31) / 63;
949 bval = ((63 - jf) * ((word0 >> L_BLUE_SHIFT) & 0xff) +
950 jf * ((word1 >> L_BLUE_SHIFT) & 0xff) + 31) / 63;
951 composeRGBPixel(rval, gval, bval, lined + jd);
954 for (i = 0; i < h; i++) {
955 lines = datas + i * wpls;
956 lined = datad + i * wpld;
957 lined[jd] = lines[jp];
962 L_ERROR(
"invalid depth: %d\n", __func__, d);
1015 return (
PIX *)ERROR_PTR(
"pixs not defined", __func__, NULL);
1016 pixGetDimensions(pixs, &w, &h, &d);
1017 if (d != 1 && d != 8 && d != 32)
1018 return (
PIX *)ERROR_PTR(
"pixs not 1, 8 or 32 bpp", __func__, NULL);
1020 return (
PIX *)ERROR_PTR(
"invalid direction", __func__, NULL);
1022 return (
PIX *)ERROR_PTR(
"invalid operation", __func__, NULL);
1024 return (
PIX *)ERROR_PTR(
"invalid incolor", __func__, NULL);
1026 if (vmaxt == 0 && vmaxb == 0)
1027 return pixCopy(NULL, pixs);
1030 L_WARNING(
"no interpolation for 1 bpp; using sampling\n", __func__);
1063l_int32 i, j, id, w, h, d, wm, hm, wpls, wpld, val;
1064l_uint32 *datas, *datad, *lines, *lined;
1065l_float32 delrowt, delrowb, denom1, denom2, dely;
1069 return (
PIX *)ERROR_PTR(
"pixs not defined", __func__, NULL);
1070 pixGetDimensions(pixs, &w, &h, &d);
1071 if (d != 1 && d != 8 && d != 32)
1072 return (
PIX *)ERROR_PTR(
"pixs not 1, 8 or 32 bpp", __func__, NULL);
1074 return (
PIX *)ERROR_PTR(
"invalid direction", __func__, NULL);
1076 return (
PIX *)ERROR_PTR(
"invalid incolor", __func__, NULL);
1078 if (vmaxt == 0 && vmaxb == 0)
1079 return pixCopy(NULL, pixs);
1081 pixd = pixCreateTemplate(pixs);
1083 datas = pixGetData(pixs);
1084 datad = pixGetData(pixd);
1085 wpls = pixGetWpl(pixs);
1086 wpld = pixGetWpl(pixd);
1089 denom1 = 1.f / (l_float32)h;
1090 denom2 = 1.f / (l_float32)(wm * wm);
1091 for (j = 0; j < w; j++) {
1093 delrowt = (l_float32)(vmaxt * (wm - j) * (wm - j)) * denom2;
1094 delrowb = (l_float32)(vmaxb * (wm - j) * (wm - j)) * denom2;
1096 delrowt = (l_float32)(vmaxt * j * j) * denom2;
1097 delrowb = (l_float32)(vmaxb * j * j) * denom2;
1102 for (
id = 0;
id < h;
id++) {
1103 dely = (delrowt * (hm - id) + delrowb * id) * denom1;
1104 i =
id - (l_int32)(dely + 0.5);
1105 if (i < 0 || i > hm)
continue;
1106 lines = datas + i * wpls;
1107 lined = datad +
id * wpld;
1114 for (
id = 0;
id < h;
id++) {
1115 dely = (delrowt * (hm - id) + delrowb * id) * denom1;
1116 i =
id - (l_int32)(dely + 0.5);
1117 if (i < 0 || i > hm)
continue;
1118 lines = datas + i * wpls;
1119 lined = datad +
id * wpld;
1125 for (
id = 0;
id < h;
id++) {
1126 dely = (delrowt * (hm - id) + delrowb * id) * denom1;
1127 i =
id - (l_int32)(dely + 0.5);
1128 if (i < 0 || i > hm)
continue;
1129 lines = datas + i * wpls;
1130 lined = datad +
id * wpld;
1131 lined[j] = lines[j];
1135 L_ERROR(
"invalid depth: %d\n", __func__, d);
1167l_int32 i, j, id, yp, yf, w, h, d, wm, hm, wpls, wpld;
1168l_int32 val, rval, gval, bval;
1169l_uint32 word0, word1;
1170l_uint32 *datas, *datad, *lines, *lined;
1171l_float32 delrowt, delrowb, denom1, denom2, dely;
1176 return (
PIX *)ERROR_PTR(
"pixs not defined", __func__, NULL);
1177 pixGetDimensions(pixs, &w, &h, &d);
1179 return (
PIX *)ERROR_PTR(
"pixs is 1 bpp", __func__, NULL);
1180 cmap = pixGetColormap(pixs);
1181 if (d != 8 && d != 32 && !cmap)
1182 return (
PIX *)ERROR_PTR(
"pixs not 8, 32 bpp, or cmap", __func__, NULL);
1184 return (
PIX *)ERROR_PTR(
"invalid direction", __func__, NULL);
1186 return (
PIX *)ERROR_PTR(
"invalid incolor", __func__, NULL);
1188 if (vmaxt == 0 && vmaxb == 0)
1189 return pixCopy(NULL, pixs);
1195 pix = pixClone(pixs);
1196 d = pixGetDepth(pix);
1197 if (d != 8 && d != 32) {
1199 return (
PIX *)ERROR_PTR(
"invalid depth", __func__, NULL);
1203 pixd = pixCreateTemplate(pix);
1205 datas = pixGetData(pix);
1206 datad = pixGetData(pixd);
1207 wpls = pixGetWpl(pix);
1208 wpld = pixGetWpl(pixd);
1211 denom1 = 1.0f / (l_float32)h;
1212 denom2 = 1.0f / (l_float32)(wm * wm);
1213 for (j = 0; j < w; j++) {
1215 delrowt = (l_float32)(vmaxt * (wm - j) * (wm - j)) * denom2;
1216 delrowb = (l_float32)(vmaxb * (wm - j) * (wm - j)) * denom2;
1218 delrowt = (l_float32)(vmaxt * j * j) * denom2;
1219 delrowb = (l_float32)(vmaxb * j * j) * denom2;
1224 for (
id = 0;
id < h;
id++) {
1225 dely = (delrowt * (hm - id) + delrowb * id) * denom1;
1226 i = 64 *
id - (l_int32)(64.0 * dely);
1229 if (yp < 0 || yp > hm)
continue;
1230 lines = datas + yp * wpls;
1231 lined = datad +
id * wpld;
1242 for (
id = 0;
id < h;
id++) {
1243 dely = (delrowt * (hm - id) + delrowb * id) * denom1;
1244 i = 64 *
id - (l_int32)(64.0 * dely);
1247 if (yp < 0 || yp > hm)
continue;
1248 lines = datas + yp * wpls;
1249 lined = datad +
id * wpld;
1251 word0 = *(lines + j);
1252 word1 = *(lines + wpls + j);
1253 rval = ((63 - yf) * ((word0 >> L_RED_SHIFT) & 0xff) +
1254 yf * ((word1 >> L_RED_SHIFT) & 0xff) + 31) / 63;
1255 gval = ((63 - yf) * ((word0 >> L_GREEN_SHIFT) & 0xff) +
1256 yf * ((word1 >> L_GREEN_SHIFT) & 0xff) + 31) / 63;
1257 bval = ((63 - yf) * ((word0 >> L_BLUE_SHIFT) & 0xff) +
1258 yf * ((word1 >> L_BLUE_SHIFT) & 0xff) + 31) / 63;
1259 composeRGBPixel(rval, gval, bval, lined + j);
1261 lined[j] = lines[j];
1266 L_ERROR(
"invalid depth: %d\n", __func__, d);
1318l_int32 i, j, w, h, wpl1, wpl2, rval, gval, bval;
1319l_uint32 word1, word2;
1320l_uint32 *data1, *data2, *datad, *line1, *line2, *lined;
1325 return (
PIX *)ERROR_PTR(
"pix1, pix2 not both defined", __func__, NULL);
1326 if (pixGetDepth(pix1) != 32 || pixGetDepth(pix2) != 32)
1327 return (
PIX *)ERROR_PTR(
"pix1, pix2 not both 32 bpp", __func__, NULL);
1331 if (rwt == 0.0 && gwt == 0.0 && bwt == 0.0) {
1332 rwt = DefaultRedWeight;
1333 gwt = DefaultGreenWeight;
1334 bwt = DefaultBlueWeight;
1336 sum = rwt + gwt + bwt;
1337 if (L_ABS(sum - 1.0) > 0.0001) {
1338 L_WARNING(
"weights don't sum to 1; maintaining ratios\n", __func__);
1344 pixGetDimensions(pix1, &w, &h, NULL);
1345 pixd = pixCreateTemplate(pix1);
1346 data1 = pixGetData(pix1);
1347 data2 = pixGetData(pix2);
1348 datad = pixGetData(pixd);
1349 wpl1 = pixGetWpl(pix1);
1350 wpl2 = pixGetWpl(pix2);
1351 for (i = 0; i < h; i++) {
1352 line1 = data1 + i * wpl1;
1353 line2 = data2 + i * wpl2;
1354 lined = datad + i * wpl1;
1355 for (j = 0; j < w; j++) {
1356 word1 = *(line1 + j);
1357 word2 = *(line2 + j);
1358 rval = (l_int32)(rwt * ((word1 >> L_RED_SHIFT) & 0xff) +
1359 gwt * ((word1 >> L_GREEN_SHIFT) & 0xff) +
1360 bwt * ((word1 >> L_BLUE_SHIFT) & 0xff) + 0.5);
1361 gval = (word2 >> L_GREEN_SHIFT) & 0xff;
1362 bval = (word2 >> L_BLUE_SHIFT) & 0xff;
1363 composeRGBPixel(rval, gval, bval, lined + j);
l_ok linearInterpolatePixelGray(l_uint32 *datas, l_int32 wpls, l_int32 w, l_int32 h, l_float32 x, l_float32 y, l_int32 grayval, l_int32 *pval)
linearInterpolatePixelGray()
#define SET_DATA_BIT(pdata, n)
#define GET_DATA_BYTE(pdata, n)
#define SET_DATA_BYTE(pdata, n, val)
#define GET_DATA_BIT(pdata, n)
@ REMOVE_CMAP_BASED_ON_SRC
PIX * pixRandomHarmonicWarp(PIX *pixs, l_float32 xmag, l_float32 ymag, l_float32 xfreq, l_float32 yfreq, l_int32 nx, l_int32 ny, l_uint32 seed, l_int32 grayval)
pixRandomHarmonicWarp()
PIX * pixStereoFromPair(PIX *pix1, PIX *pix2, l_float32 rwt, l_float32 gwt, l_float32 bwt)
pixStereoFromPair()
PIX * pixStretchHorizontalSampled(PIX *pixs, l_int32 dir, l_int32 type, l_int32 hmax, l_int32 incolor)
pixStretchHorizontalSampled()
PIX * pixQuadraticVShearLI(PIX *pixs, l_int32 dir, l_int32 vmaxt, l_int32 vmaxb, l_int32 incolor)
pixQuadraticVShearLI()
PIX * pixQuadraticVShearSampled(PIX *pixs, l_int32 dir, l_int32 vmaxt, l_int32 vmaxb, l_int32 incolor)
pixQuadraticVShearSampled()
static l_int32 applyWarpTransform(l_float32 xmag, l_float32 ymag, l_float32 xfreq, l_float32 yfreq, l_float64 *randa, l_int32 nx, l_int32 ny, l_int32 xp, l_int32 yp, l_float32 *px, l_float32 *py)
applyWarpTransform()
PIX * pixStretchHorizontal(PIX *pixs, l_int32 dir, l_int32 type, l_int32 hmax, l_int32 operation, l_int32 incolor)
pixStretchHorizontal()
PIX * pixStretchHorizontalLI(PIX *pixs, l_int32 dir, l_int32 type, l_int32 hmax, l_int32 incolor)
pixStretchHorizontalLI()
PIX * pixSimpleCaptcha(PIX *pixs, l_int32 border, l_int32 nterms, l_uint32 seed, l_uint32 color, l_int32 cmapflag)
pixSimpleCaptcha()
PIX * pixQuadraticVShear(PIX *pixs, l_int32 dir, l_int32 vmaxt, l_int32 vmaxb, l_int32 operation, l_int32 incolor)
pixQuadraticVShear()
PIX * pixWarpStereoscopic(PIX *pixs, l_int32 zbend, l_int32 zshiftt, l_int32 zshiftb, l_int32 ybendt, l_int32 ybendb, l_int32 redleft)
pixWarpStereoscopic()