/* * classif.c */ #include #include #include #include #include "../floatimg.h" extern int verbosity; /* --------------------------------------------------------------------- */ /* nouveau 4 octobre 2020, juste avant sonoptic de la pluie craignos */ int fimg_contour_2x2(FloatImg *psrc, FloatImg *pdst, int reverse) { float avg[4]; int foo, x, y, q; float v1, v2; int tbl[] = /* deep magic inside */ { 0, 1, 1, 1, 1, 1, 0, 1, 1, 0, 1, 1, 1, 1, 1, 0 }; #if DEBUG_LEVEL fprintf(stderr, ">>> %s ( %p %p %d )\n", __func__, psrc, pdst, reverse); #endif if (FIMG_TYPE_RGB != psrc->type) { fprintf(stderr, "%s: bad src type %d\n", __func__, psrc->type); return -7; } if (fimg_images_not_compatible(psrc, pdst)) { fprintf(stderr, "%s: bad dst type %d\n", __func__, pdst->type); return -8; } if (reverse) { v1 = 0.0; v2 = 1.0; } else { v1 = 1.0; v2 = 0.0; } foo = fimg_meanvalues(psrc, avg); if (verbosity > 1) { fprintf(stderr, "mean values : %f %f %f\n", avg[0], avg[1], avg[2]); } #define RP(ix, iy) ( psrc->R[((iy)*psrc->width)+(ix)] < avg[0] ) #define GP(ix, iy) ( psrc->G[((iy)*psrc->width)+(ix)] < avg[1] ) #define BP(ix, iy) ( psrc->B[((iy)*psrc->width)+(ix)] < avg[2] ) for (y=0; yheight-1; y++) { for (x=0; xwidth-1; x++) { q = ( ( RP(x, y) << 3 ) | ( RP(x+1, y) << 2 ) | ( RP(x, y+1) << 1 ) | ( RP(x+1, y+1) ) ); pdst->R[(y*psrc->width)+x] = tbl[q] ? v1 : v2 ; q = ( ( GP(x, y) << 3 ) | ( GP(x+1, y) << 2 ) | ( GP(x, y+1) << 1 ) | ( GP(x+1, y+1) ) ); pdst->G[(y*psrc->width)+x] = tbl[q] ? v1 : v2 ; q = ( ( BP(x, y) << 3 ) | ( BP(x+1, y) << 2 ) | ( BP(x, y+1) << 1 ) | ( BP(x+1, y+1) ) ); pdst->B[(y*psrc->width)+x] = tbl[q] ? v1 : v2 ; } } return 0; } /* --------------------------------------------------------------------- */