83 #include <config_auto.h>
88 #include "allheaders.h"
120 l_int32 i, n, index, w, h, xb, yb, wb, hb;
122 PIX *pix1, *pix2, *pixd;
125 PROCNAME(
"pixConnCompTransform");
127 if (!pixs || pixGetDepth(pixs) != 1)
128 return (
PIX *)ERROR_PTR(
"pixs undefined or not 1 bpp", procName, NULL);
129 if (connect != 4 && connect != 8)
130 return (
PIX *)ERROR_PTR(
"connectivity must be 4 or 8", procName, NULL);
131 if (depth != 0 && depth != 8 && depth != 16 && depth != 32)
132 return (
PIX *)ERROR_PTR(
"depth must be 0, 8, 16 or 32", procName, NULL);
154 for (i = 0; i < n; i++) {
158 index = 1 + (i % 254);
160 }
else if (depth == 16) {
161 index = 1 + (i % 0xfffe);
199 l_int32 i, n, npix, w, h, xb, yb, wb, hb;
202 PIX *pix1, *pix2, *pixd;
205 PROCNAME(
"pixConnCompAreaTransform");
207 if (!pixs || pixGetDepth(pixs) != 1)
208 return (
PIX *)ERROR_PTR(
"pixs undefined or not 1 bpp", procName, NULL);
209 if (connect != 4 && connect != 8)
210 return (
PIX *)ERROR_PTR(
"connectivity must be 4 or 8", procName, NULL);
225 for (i = 0; i < n; i++) {
275 l_int32 empty, w, h, ncc;
280 PROCNAME(
"pixConnCompIncrInit");
282 if (ppixd) *ppixd = NULL;
283 if (pptaa) *pptaa = NULL;
285 if (!ppixd || !pptaa || !pncc)
286 return ERROR_INT(
"&pixd, &ptaa, &ncc not all defined", procName, 1);
287 if (!pixs || pixGetDepth(pixs) != 1)
288 return ERROR_INT(
"pixs undefined or not 1 bpp", procName, 1);
289 if (conn != 4 && conn != 8)
290 return ERROR_INT(
"connectivity must be 4 or 8", procName, 1);
296 pixSetSpp(*ppixd, 1);
297 pixSetSpecial(*ppixd, conn);
306 return ERROR_INT(
"pixd not made", procName, 1);
307 pixSetSpecial(pixd, conn);
310 return ERROR_INT(
"ptaa not made", procName, 1);
360 l_int32 conn, i, j, w, h, count, nvals, ns, firstindex;
365 PROCNAME(
"pixConnCompIncrAdd");
367 if (!pixs || pixGetDepth(pixs) != 32)
368 return ERROR_INT(
"pixs not defined or not 32 bpp", procName, 1);
370 return ERROR_INT(
"ptaa not defined", procName, 1);
372 return ERROR_INT(
"&ncc not defined", procName, 1);
374 if (conn != 4 && conn != 8)
375 return ERROR_INT(
"connectivity must be 4 or 8", procName, 1);
378 return ERROR_INT(
"invalid x pixel location", procName, 1);
380 return ERROR_INT(
"invalid y pixel location", procName, 1);
407 firstindex = neigh[0];
412 lept_stderr(
"nvals = %d: neigh = (%d)\n", nvals, neigh[0]);
425 if (debug >= 1 && debug <= 2) {
426 lept_stderr(
"nvals = %d: neigh = (%d,%d)\n", nvals,
429 }
else if (nvals == 3) {
430 if (debug >= 1 && debug <= 3) {
431 lept_stderr(
"nvals = %d: neigh = (%d,%d,%d)\n", nvals,
432 neigh[0], neigh[1], neigh[2]);
435 if (debug >= 1 && debug <= 4) {
436 lept_stderr(
"nvals = %d: neigh = (%d,%d,%d,%d)\n", nvals,
437 neigh[0], neigh[1], neigh[2], neigh[3]);
441 for (i = 1; i < nvals; i++) {
444 for (j = 0; j < ns; j++) {
490 l_int32 i, npt, index;
499 PROCNAME(
"pixGetSortedNeighborValues");
501 if (pneigh) *pneigh = NULL;
502 if (pnvals) *pnvals = 0;
503 if (!pneigh || !pnvals)
504 return ERROR_INT(
"&neigh and &nvals not both defined", procName, 1);
505 if (!pixs || pixGetDepth(pixs) < 8)
506 return ERROR_INT(
"pixs not defined or depth < 8", procName, 1);
510 return ERROR_INT(
"pta of neighbors not made", procName, 1);
513 aset = l_asetCreate(L_UINT_TYPE);
515 for (i = 0; i < npt; i++) {
519 l_asetInsert(aset, key);
525 node = l_asetGetFirst(aset);
528 val =
node->key.utype;
530 neigh[index++] = (l_int32)val;
535 *pneigh = (l_int32 *)LEPT_CALLOC(index,
sizeof(l_int32));
536 for (i = 0; i < index; i++)
537 (*pneigh)[i] = neigh[i];
541 l_asetDestroy(&aset);
571 l_int32 w, h, w2, h2, wpls, wplr, wplg, wplb, wplcc, i, j, rval, gval, bval;
572 l_float32 invw2, invh2;
573 l_uint32 *datas, *datar, *datag, *datab, *datacc;
574 l_uint32 *lines, *liner, *lineg, *lineb, *linecc;
575 PIX *pix1, *pixcc, *pixr, *pixg, *pixb, *pixd;
577 PROCNAME(
"pixLocToColorTransform");
579 if (!pixs || pixGetDepth(pixs) != 1)
580 return (
PIX *)ERROR_PTR(
"pixs undefined or not 1 bpp", procName, NULL);
588 invw2 = 255.0 / (l_float32)w2;
589 invh2 = 255.0 / (l_float32)h2;
599 wpls = pixGetWpl(pixs);
600 wplr = pixGetWpl(pixr);
601 wplg = pixGetWpl(pixg);
602 wplb = pixGetWpl(pixb);
603 wplcc = pixGetWpl(pixcc);
609 for (i = 0; i < h; i++) {
610 lines = datas + i * wpls;
611 liner = datar + i * wplr;
612 lineg = datag + i * wplg;
613 lineb = datab + i * wplb;
614 linecc = datacc+ i * wplcc;
615 for (j = 0; j < w; j++) {
618 rval = invh2 * L_ABS((l_float32)(i - h2));
619 gval = invw2 * L_ABS((l_float32)(j - w2));
621 rval = invw2 * L_ABS((l_float32)(j - w2));
622 gval = invh2 * L_ABS((l_float32)(i - h2));
#define GET_DATA_BYTE(pdata, n)
#define SET_DATA_BYTE(pdata, n, val)
#define GET_DATA_BIT(pdata, n)
void boxaDestroy(BOXA **pboxa)
boxaDestroy()
BOXA * pixConnComp(PIX *pixs, PIXA **ppixa, l_int32 connectivity)
pixConnComp()
l_uint32 * pixGetData(PIX *pix)
pixGetData()
void pixDestroy(PIX **ppix)
pixDestroy()
l_ok pixGetDimensions(const PIX *pix, l_int32 *pw, l_int32 *ph, l_int32 *pd)
pixGetDimensions()
PIX * pixCreate(l_int32 width, l_int32 height, l_int32 depth)
pixCreate()
l_ok pixSetPixel(PIX *pix, l_int32 x, l_int32 y, l_uint32 val)
pixSetPixel()
l_ok pixGetPixel(PIX *pix, l_int32 x, l_int32 y, l_uint32 *pval)
pixGetPixel()
PIX * pixCreateRGBImage(PIX *pixr, PIX *pixg, PIX *pixb)
pixCreateRGBImage()
l_ok pixZero(PIX *pix, l_int32 *pempty)
pixZero()
l_ok pixCountPixels(PIX *pixs, l_int32 *pcount, l_int32 *tab8)
pixCountPixels()
l_int32 * makePixelSumTab8(void)
makePixelSumTab8()
void pixaDestroy(PIXA **ppixa)
pixaDestroy()
l_int32 pixaGetCount(PIXA *pixa)
pixaGetCount()
l_ok pixaGetBoxGeometry(PIXA *pixa, l_int32 index, l_int32 *px, l_int32 *py, l_int32 *pw, l_int32 *ph)
pixaGetBoxGeometry()
PIX * pixaGetPix(PIXA *pixa, l_int32 index, l_int32 accesstype)
pixaGetPix()
PIX * pixConvert1To32(PIX *pixd, PIX *pixs, l_uint32 val0, l_uint32 val1)
pixConvert1To32()
PIX * pixConvert1To16(PIX *pixd, PIX *pixs, l_uint16 val0, l_uint16 val1)
pixConvert1To16()
PIX * pixConvert1To8(PIX *pixd, PIX *pixs, l_uint8 val0, l_uint8 val1)
pixConvert1To8()
PIX * pixConvert32To8(PIX *pixs, l_int32 type16, l_int32 type8)
pixConvert32To8()
l_ok pixConnCompIncrInit(PIX *pixs, l_int32 conn, PIX **ppixd, PTAA **pptaa, l_int32 *pncc)
pixConnCompIncrInit()
PIX * pixLocToColorTransform(PIX *pixs)
pixLocToColorTransform()
l_int32 pixConnCompIncrAdd(PIX *pixs, PTAA *ptaa, l_int32 *pncc, l_float32 x, l_float32 y, l_int32 debug)
pixConnCompIncrAdd()
PIX * pixConnCompTransform(PIX *pixs, l_int32 connect, l_int32 depth)
pixConnCompTransform()
l_ok pixGetSortedNeighborValues(PIX *pixs, l_int32 x, l_int32 y, l_int32 conn, l_int32 **pneigh, l_int32 *pnvals)
pixGetSortedNeighborValues()
PIX * pixConnCompAreaTransform(PIX *pixs, l_int32 connect)
pixConnCompAreaTransform()
PTAA * ptaaCreate(l_int32 n)
ptaaCreate()
l_ok ptaaAddPt(PTAA *ptaa, l_int32 ipta, l_float32 x, l_float32 y)
ptaaAddPt()
PTA * ptaaGetPta(PTAA *ptaa, l_int32 index, l_int32 accessflag)
ptaaGetPta()
l_ok ptaaAddPta(PTAA *ptaa, PTA *pta, l_int32 copyflag)
ptaaAddPta()
l_int32 ptaaGetCount(PTAA *ptaa)
ptaaGetCount()
l_ok ptaAddPt(PTA *pta, l_float32 x, l_float32 y)
ptaAddPt()
l_ok ptaGetPt(PTA *pta, l_int32 index, l_float32 *px, l_float32 *py)
ptaGetPt()
l_int32 ptaGetCount(PTA *pta)
ptaGetCount()
PTA * ptaCreate(l_int32 n)
ptaCreate()
void ptaDestroy(PTA **ppta)
ptaDestroy()
PTA * ptaGetNeighborPixLocs(PIX *pixs, l_int32 x, l_int32 y, l_int32 conn)
ptaGetNeighborPixLocs()
PTAA * ptaaIndexLabeledPixels(PIX *pixs, l_int32 *pncc)
ptaaIndexLabeledPixels()
l_ok ptaJoin(PTA *ptad, PTA *ptas, l_int32 istart, l_int32 iend)
ptaJoin()
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()
void lept_stderr(const char *fmt,...)
lept_stderr()