84 #include "allheaders.h" 118 l_int32 i, n, index, w, h, xb, yb, wb, hb;
120 PIX *pix1, *pix2, *pixd;
123 PROCNAME(
"pixConnCompTransform");
125 if (!pixs || pixGetDepth(pixs) != 1)
126 return (
PIX *)ERROR_PTR(
"pixs undefined or not 1 bpp", procName, NULL);
127 if (connect != 4 && connect != 8)
128 return (
PIX *)ERROR_PTR(
"connectivity must be 4 or 8", procName, NULL);
129 if (depth != 0 && depth != 8 && depth != 16 && depth != 32)
130 return (
PIX *)ERROR_PTR(
"depth must be 0, 8, 16 or 32", procName, NULL);
152 for (i = 0; i < n; i++) {
156 index = 1 + (i % 254);
158 }
else if (depth == 16) {
159 index = 1 + (i % 0xfffe);
197 l_int32 i, n, npix, w, h, xb, yb, wb, hb;
200 PIX *pix1, *pix2, *pixd;
203 PROCNAME(
"pixConnCompAreaTransform");
205 if (!pixs || pixGetDepth(pixs) != 1)
206 return (
PIX *)ERROR_PTR(
"pixs undefined or not 1 bpp", procName, NULL);
207 if (connect != 4 && connect != 8)
208 return (
PIX *)ERROR_PTR(
"connectivity must be 4 or 8", procName, NULL);
223 for (i = 0; i < n; i++) {
273 l_int32 empty, w, h, ncc;
278 PROCNAME(
"pixConnCompIncrInit");
280 if (ppixd) *ppixd = NULL;
281 if (pptaa) *pptaa = NULL;
283 if (!ppixd || !pptaa || !pncc)
284 return ERROR_INT(
"&pixd, &ptaa, &ncc not all defined", procName, 1);
285 if (!pixs || pixGetDepth(pixs) != 1)
286 return ERROR_INT(
"pixs undefined or not 1 bpp", procName, 1);
287 if (conn != 4 && conn != 8)
288 return ERROR_INT(
"connectivity must be 4 or 8", procName, 1);
294 pixSetSpp(*ppixd, 1);
295 pixSetSpecial(*ppixd, conn);
304 return ERROR_INT(
"pixd not made", procName, 1);
305 pixSetSpecial(pixd, conn);
308 return ERROR_INT(
"ptaa not made", procName, 1);
358 l_int32 conn, i, j, w, h, count, nvals, ns, firstindex;
363 PROCNAME(
"pixConnCompIncrAdd");
365 if (!pixs || pixGetDepth(pixs) != 32)
366 return ERROR_INT(
"pixs not defined or not 32 bpp", procName, 1);
368 return ERROR_INT(
"ptaa not defined", procName, 1);
370 return ERROR_INT(
"&ncc not defined", procName, 1);
372 if (conn != 4 && conn != 8)
373 return ERROR_INT(
"connectivity must be 4 or 8", procName, 1);
376 return ERROR_INT(
"invalid x pixel location", procName, 1);
378 return ERROR_INT(
"invalid y pixel location", procName, 1);
405 firstindex = neigh[0];
410 fprintf(stderr,
"nvals = %d: neigh = (%d)\n", nvals, neigh[0]);
423 if (debug >= 1 && debug <= 2) {
424 fprintf(stderr,
"nvals = %d: neigh = (%d,%d)\n", nvals,
427 }
else if (nvals == 3) {
428 if (debug >= 1 && debug <= 3) {
429 fprintf(stderr,
"nvals = %d: neigh = (%d,%d,%d)\n", nvals,
430 neigh[0], neigh[1], neigh[2]);
433 if (debug >= 1 && debug <= 4) {
434 fprintf(stderr,
"nvals = %d: neigh = (%d,%d,%d,%d)\n", nvals,
435 neigh[0], neigh[1], neigh[2], neigh[3]);
439 for (i = 1; i < nvals; i++) {
442 for (j = 0; j < ns; j++) {
488 l_int32 i, npt, index;
497 PROCNAME(
"pixGetSortedNeighborValues");
499 if (pneigh) *pneigh = NULL;
500 if (pnvals) *pnvals = 0;
501 if (!pneigh || !pnvals)
502 return ERROR_INT(
"&neigh and &nvals not both defined", procName, 1);
503 if (!pixs || pixGetDepth(pixs) < 8)
504 return ERROR_INT(
"pixs not defined or depth < 8", procName, 1);
508 return ERROR_INT(
"pta of neighbors not made", procName, 1);
511 aset = l_asetCreate(L_UINT_TYPE);
513 for (i = 0; i < npt; i++) {
517 l_asetInsert(aset, key);
523 node = l_asetGetFirst(aset);
526 val =
node->key.utype;
528 neigh[index++] = (l_int32)val;
533 *pneigh = (l_int32 *)LEPT_CALLOC(index,
sizeof(l_int32));
534 for (i = 0; i < index; i++)
535 (*pneigh)[i] = neigh[i];
539 l_asetDestroy(&aset);
569 l_int32 w, h, w2, h2, wpls, wplr, wplg, wplb, wplcc, i, j, rval, gval, bval;
570 l_float32 invw2, invh2;
571 l_uint32 *datas, *datar, *datag, *datab, *datacc;
572 l_uint32 *lines, *liner, *lineg, *lineb, *linecc;
573 PIX *pix1, *pixcc, *pixr, *pixg, *pixb, *pixd;
575 PROCNAME(
"pixLocToColorTransform");
577 if (!pixs || pixGetDepth(pixs) != 1)
578 return (
PIX *)ERROR_PTR(
"pixs undefined or not 1 bpp", procName, NULL);
586 invw2 = 255.0 / (l_float32)w2;
587 invh2 = 255.0 / (l_float32)h2;
597 wpls = pixGetWpl(pixs);
598 wplr = pixGetWpl(pixr);
599 wplg = pixGetWpl(pixg);
600 wplb = pixGetWpl(pixb);
601 wplcc = pixGetWpl(pixcc);
607 for (i = 0; i < h; i++) {
608 lines = datas + i * wpls;
609 liner = datar + i * wplr;
610 lineg = datag + i * wplg;
611 lineb = datab + i * wplb;
612 linecc = datacc+ i * wplcc;
613 for (j = 0; j < w; j++) {
616 rval = invh2 * L_ABS((l_float32)(i - h2));
617 gval = invw2 * L_ABS((l_float32)(j - w2));
619 rval = invw2 * L_ABS((l_float32)(j - w2));
620 gval = invh2 * L_ABS((l_float32)(i - h2));
l_ok pixConnCompIncrInit(PIX *pixs, l_int32 conn, PIX **ppixd, PTAA **pptaa, l_int32 *pncc)
pixConnCompIncrInit()
PIX * pixLocToColorTransform(PIX *pixs)
pixLocToColorTransform()
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 pixGetSortedNeighborValues(PIX *pixs, l_int32 x, l_int32 y, l_int32 conn, l_int32 **pneigh, l_int32 *pnvals)
pixGetSortedNeighborValues()
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()
PTA * ptaCreate(l_int32 n)
ptaCreate()
PIX * pixCreate(l_int32 width, l_int32 height, l_int32 depth)
pixCreate()
PIX * pixConnCompAreaTransform(PIX *pixs, l_int32 connect)
pixConnCompAreaTransform()
l_int32 ptaGetCount(PTA *pta)
ptaGetCount()
void boxaDestroy(BOXA **pboxa)
boxaDestroy()
l_uint32 * pixGetData(PIX *pix)
pixGetData()
#define GET_DATA_BIT(pdata, n)
l_ok ptaJoin(PTA *ptad, PTA *ptas, l_int32 istart, l_int32 iend)
ptaJoin()
BOXA * pixConnComp(PIX *pixs, PIXA **ppixa, l_int32 connectivity)
pixConnComp()
PTA * ptaaGetPta(PTAA *ptaa, l_int32 index, l_int32 accessflag)
ptaaGetPta()
l_int32 pixConnCompIncrAdd(PIX *pixs, PTAA *ptaa, l_int32 *pncc, l_float32 x, l_float32 y, l_int32 debug)
pixConnCompIncrAdd()
l_ok pixSetPixel(PIX *pix, l_int32 x, l_int32 y, l_uint32 val)
pixSetPixel()
PIX * pixConvert1To32(PIX *pixd, PIX *pixs, l_uint32 val0, l_uint32 val1)
pixConvert1To32()
l_ok pixCountPixels(PIX *pixs, l_int32 *pcount, l_int32 *tab8)
pixCountPixels()
l_ok ptaGetPt(PTA *pta, l_int32 index, l_float32 *px, l_float32 *py)
ptaGetPt()
l_int32 * makePixelSumTab8(void)
makePixelSumTab8()
PTA * ptaGetNeighborPixLocs(PIX *pixs, l_int32 x, l_int32 y, l_int32 conn)
ptaGetNeighborPixLocs()
#define SET_DATA_BYTE(pdata, n, val)
#define GET_DATA_BYTE(pdata, n)
l_ok pixaGetBoxGeometry(PIXA *pixa, l_int32 index, l_int32 *px, l_int32 *py, l_int32 *pw, l_int32 *ph)
pixaGetBoxGeometry()
PIX * pixCreateRGBImage(PIX *pixr, PIX *pixg, PIX *pixb)
pixCreateRGBImage()
void pixDestroy(PIX **ppix)
pixDestroy()
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()
l_int32 ptaaGetCount(PTAA *ptaa)
ptaaGetCount()
PIX * pixaGetPix(PIXA *pixa, l_int32 index, l_int32 accesstype)
pixaGetPix()
PIX * pixConnCompTransform(PIX *pixs, l_int32 connect, l_int32 depth)
pixConnCompTransform()
void ptaDestroy(PTA **ppta)
ptaDestroy()
l_ok pixZero(PIX *pix, l_int32 *pempty)
pixZero()
PIX * pixConvert1To8(PIX *pixd, PIX *pixs, l_uint8 val0, l_uint8 val1)
pixConvert1To8()
PTAA * ptaaIndexLabeledPixels(PIX *pixs, l_int32 *pncc)
ptaaIndexLabeledPixels()
PIX * pixConvert1To16(PIX *pixd, PIX *pixs, l_uint16 val0, l_uint16 val1)
pixConvert1To16()
l_ok ptaaAddPta(PTAA *ptaa, PTA *pta, l_int32 copyflag)
ptaaAddPta()
void pixaDestroy(PIXA **ppixa)
pixaDestroy()
l_int32 pixaGetCount(PIXA *pixa)
pixaGetCount()
PTAA * ptaaCreate(l_int32 n)
ptaaCreate()
PIX * pixConvert32To8(PIX *pixs, l_int32 type16, l_int32 type8)
pixConvert32To8()