233PIX *pix1, *pix2, *pix3;
237 return ERROR_INT(
"cf not defined", __func__, 1);
238 if (minmax <= 0) minmax = DefaultMinMax;
240 return ERROR_INT(
"minmax > 200; unreasonably large", __func__, 1);
244 if ((pix1 = pixColorShiftWhitePoint(cf->
pixs, rref, gref, bref)) == NULL)
245 return ERROR_INT(
"pix1 not returned", __func__, 1);
249 pixas = pixaCreateFromBoxa(pix1, cf->
boxas, 0, 0, NULL);
253 n = pixaGetCount(pixas);
254 pixam = pixaCreate(n);
256 for (i = 0; i < n; i++) {
257 pix2 = pixaGetPix(pixas, i,
L_COPY);
258 pix3 =
pixColorFill(pix2, minmax, maxdiff, smooth, minarea, 0);
303PIX *pixm, *pixm1, *pixv, *pixnc, *pixncd, *pixss, *pixf;
307 if (!pixs || pixGetDepth(pixs) != 32)
308 return (
PIX *)ERROR_PTR(
"pixs undefined or not 32 bpp", __func__, NULL);
311 pixGetDimensions(pixs, &w, &h, NULL);
312 pixnc = pixCreate(w, h, 1);
313 for (y = 0; y < h; y++) {
314 for (x = 0; x < w; x++) {
315 pixGetPixel(pixs, x, y, &val);
317 pixSetPixel(pixnc, x, y, 1);
318 pixSetPixel(pixs, x, y, 0x0);
324 pixncd = pixDilateBrick(NULL, pixnc, smooth, smooth);
332 kel = makeFlatKernel(smooth, smooth, smooth / 2, smooth / 2);
333 pixss = pixConvolveRGBSep(pixs, kel, kel);
336 pixss = pixCopy(NULL, pixs);
340 pixPaintThroughMask(pixss, pixncd, 0, 0, 0);
343 pixv = pixCreate(w, h, 1);
344 pixOr(pixv, pixv, pixncd);
345 pixSetBorderRingVal(pixv, 1, 1);
346 pixm = pixCreate(w, h, 1);
347 lq = lqueueCreate(0);
351 if (debug) lept_stderr(
"Start: x = %d, y = %d\n", x, y);
355 pixm1 = pixGenerateFromPta(pta1, w, h);
356 pixErodeBrick(pixm1, pixm1, 3, 3);
357 pixOr(pixm, pixm, pixm1);
365 pixSubtract(pixm, pixm, pixncd);
370 lqueueDestroy(&lq, 1);
409l_int32 i, j, x, y, rval, gval, bval, start, end;
413PIX *pix1, *pix2, *pix3, *pix4;
419 pta = ptaCreate(nseeds);
420 da = l_dnaCreate(nseeds);
422 start = 128 - range / 2;
423 end = 128 + (range - 1) / 2;
424 for (i = 0; i < nseeds; i++) {
425 genRandomIntOnInterval(0, w - 1, 0, &x);
426 genRandomIntOnInterval(0, h - 1, 0, &y);
428 genRandomIntOnInterval(start, end, 0, &rval);
429 genRandomIntOnInterval(start, end, 0, &gval);
430 genRandomIntOnInterval(start, end, 0, &bval);
431 composeRGBPixel(rval, gval, bval, &color);
432 l_dnaAddNumber(da, color);
436 pix1 = pixCreate(w, h, 8);
437 for (i = 0; i < nseeds; i++) {
438 ptaGetIPt(pta, i, &x, &y);
439 pixSetPixel(pix1, x, y, i + 1);
444 pix2 = pixSeedspread(pix1, 4);
447 cmap = pixcmapCreate(8);
448 pixcmapAddColor(cmap, 0, 0, 0);
449 for (i = 0; i < nseeds; i++) {
450 l_dnaGetDValue(da, i, &dval);
451 extractRGBValues(dval, &rval, &gval, &bval);
452 pixcmapAddColor(cmap, rval, gval, bval);
454 pixSetColormap(pix2, cmap);
460 pixa = pixaCreate(0);
461 pixaAddPix(pixa, pix2,
L_COPY);
464 pix3 = pixCopy(NULL, pix2);
465 for (i = 0; i < h; i++) {
466 for (j = 0; j < w; j++) {
468 pixSetPixel(pix3, j, i, 0);
475 cmap = pixcmapCreate(8);
476 pixcmapAddColor(cmap, 0, 0, 0);
477 for (i = 0; i < nseeds; i++)
478 pixcmapAddColor(cmap, rval, gval, bval);
479 pix4 = pixCopy(NULL, pix3);
480 pixSetColormap(pix4, cmap);
546 pixGetPixel(pixs, x, y, &val);
547 el = colorelCreate(x, y, val);
549 pixSetPixel(pixv, x, y, 1);
562 pixGetDimensions(pixs, &w, &h, NULL);
563 while (lqueueGetCount(lq) > 0) {
564 el = (
COLOREL *)lqueueRemove(lq);
571 pixGetPixel(pixs, x - 1, y, &val);
573 el = colorelCreate(x - 1, y, color);
575 ptaAddPt(pta, x - 1, y);
576 pixSetPixel(pixv, x - 1, y, 1);
580 pixGetPixel(pixs, x, y - 1, &val);
582 el = colorelCreate(x, y - 1, color);
584 ptaAddPt(pta, x, y - 1);
585 pixSetPixel(pixv, x, y - 1, 1);
589 pixGetPixel(pixs, x + 1, y, &val);
591 el = colorelCreate(x + 1, y, color);
593 ptaAddPt(pta, x + 1, y);
594 pixSetPixel(pixv, x + 1, y, 1);
598 pixGetPixel(pixs, x, y + 1, &val);
600 el = colorelCreate(x, y + 1, color);
602 ptaAddPt(pta, x, y + 1);
603 pixSetPixel(pixv, x, y + 1, 1);
607 pixGetPixel(pixs, x - 1, y - 1, &val);
609 el = colorelCreate(x - 1, y - 1, color);
611 ptaAddPt(pta, x - 1, y - 1);
612 pixSetPixel(pixv, x - 1, y - 1, 1);
616 pixGetPixel(pixs, x + 1, y - 1, &val);
618 el = colorelCreate(x + 1, y - 1, color);
620 ptaAddPt(pta, x + 1, y - 1);
621 pixSetPixel(pixv, x + 1, y - 1, 1);
625 pixGetPixel(pixs, x - 1, y + 1, &val);
627 el = colorelCreate(x - 1, y + 1, color);
629 ptaAddPt(pta, x - 1, y + 1);
630 pixSetPixel(pixv, x - 1, y + 1, 1);
634 pixGetPixel(pixs, x + 1, y + 1, &val);
636 el = colorelCreate(x + 1, y + 1, color);
638 ptaAddPt(pta, x + 1, y + 1);
639 pixSetPixel(pixv, x + 1, y + 1, 1);
647 np = ptaGetCount(pta);
649 if (debug) lept_stderr(
" Too small. End: x = %d, y = %d, np = %d\n",
653 if (debug) lept_stderr(
" Keep. End: x = %d, y = %d, np = %d\n",
684 pixGetPixel(pixs, x - 1, y, visited);
685 pixGetPixel(pixs, x, y - 1, visited + 1);
686 pixGetPixel(pixs, x + 1, y, visited + 2);
687 pixGetPixel(pixs, x, y + 1, visited + 3);
688 pixGetPixel(pixs, x - 1, y - 1, visited + 4);
689 pixGetPixel(pixs, x + 1, y - 1, visited + 5);
690 pixGetPixel(pixs, x - 1, y + 1, visited + 6);
691 pixGetPixel(pixs, x + 1, y + 1, visited + 7);
754l_int32 rdiff, gdiff, bdiff, maxindex, del1, del2, del3, maxdel;
757 extractRGBValues(val1, v1, v1 + 1, v1 + 2);
758 extractRGBValues(val2, v2, v2 + 1, v2 + 2);
759 rdiff = v1[0] - v2[0];
760 gdiff = v1[1] - v2[1];
761 bdiff = v1[2] - v2[2];
763 if (L_ABS(gdiff) > L_ABS(rdiff))
765 if (L_ABS(bdiff) > L_ABS(rdiff) && L_ABS(bdiff) > L_ABS(gdiff))
767 del1 = v1[maxindex] - v2[maxindex];
768 del2 = v1[(maxindex + 1) % 3] - v2[(maxindex + 1) % 3];
769 del3 = v1[(maxindex + 2) % 3] - v2[(maxindex + 2) % 3];
770 maxdel = L_MAX(L_ABS(del1 - del2), L_ABS(del1 - del3));
771 return (maxdel <= maxdiff) ? 1 : 0;
812 pixGetDimensions(pixs, &w, &h, NULL);
813 pixGetPixel(pixs, x, y, &val);
815 pixGetPixel(pixs, x - 1, y, &neigh);
816 if (neigh != val)
return TRUE;
819 pixGetPixel(pixs, x + 1, y, &neigh);
820 if (neigh != val)
return TRUE;
823 pixGetPixel(pixs, x, y - 1, &neigh);
824 if (neigh != val)
return TRUE;
827 pixGetPixel(pixs, x, y + 1, &neigh);
828 if (neigh != val)
return TRUE;
845l_int32 i, j, n, nc, w, h, x, y, count;
846l_float32 rval, gval, bval;
853PIX *pixm, *pix1, *pix2, *pixdb;
857 return ERROR_INT(
"cf not defind", __func__, 1);
859 tab = makePixelSumTab8();
861 for (i = 0; i < n; i++) {
864 pixGetDimensions(pix1, &w, &h, NULL);
865 boxa1 = pixConnComp(pixm, &pixa1, 4);
867 nc = pixaGetCount(pixa1);
870 pixdb = (debug) ? pixCreate(w, h, 32) : NULL;
871 for (j = 0; j < nc; j++) {
872 pix2 = pixaGetPix(pixa1, j,
L_COPY);
873 box1 = pixaGetBox(pixa1, j,
L_COPY);
874 boxGetGeometry(box1, &x, &y, NULL, NULL);
875 pixGetRankValueMaskedRGB(pix1, pix2, x, y, 1, 0.5,
876 &rval, &gval, &bval);
877 composeRGBPixel(rval, gval, bval, &pixel);
879 l_dnaAddNumber(da, pixel);
880 pixCountPixels(pix2, &count, tab);
881 numaAddNumber(na, count);
883 pixPaintThroughMask(pixdb, pix2, x, y, pixel);
897 lept_stderr(
"Size of components in tile 0:");
l_ok pixColorContentByLocation(L_COLORFILL *cf, l_int32 rref, l_int32 gref, l_int32 bref, l_int32 minmax, l_int32 maxdiff, l_int32 minarea, l_int32 smooth, l_int32 debug)
pixColorContentByLocation()