/* * classif.c novembre 2002 * --------- ------------- */ #include #include #include "../tthimage.h" /*::------------------------------------------------------------------::*/ /* * A vrai dire, je ne sais pas trop comment traiter ce genre * de truc. Il va falloir que je me documente serieusement. */ static Une_Classe_Sph classes[] = { { 64, 64, 64, 50, 128, 128, 128 }, { 64, 192, 64, 50, 128, 255, 128 }, { 64, 64, 192, 50, 128, 128, 255 }, { 64, 192, 192, 50, 255, 255, 255 }, { 192, 64, 64, 50, 255, 128, 128 }, { 192, 192, 64, 50, 255, 255, 128 }, { 192, 64, 192, 50, 255, 128, 255 }, { 192, 192, 192, 50, 255, 255, 255 } }; #define NBC (sizeof(classes)/sizeof(Une_Classe_Sph)) #define CUB(x) ((x)*(x)) /*::------------------------------------------------------------------::*/ int Image_classif_0(Image_Desc *src, Image_Desc *dst) { int foo, x, y, z, r, g, b, plotted; long nbrplot; if ( (foo=Image_compare_desc(src, dst)) ) { fprintf(stderr, "Image classif 0: images are differents %d\n", foo); return foo; } #if DEBUG_LEVEL fprintf(stderr, "Classif 0: nombre de classes = %d\n", NBC); #endif nbrplot = 0; for (y=0; yheight; y++) { for (x=0; xwidth; x++) { Image_getRGB(src, x, y, &r, &g, &b); plotted = 0; for (foo=0; foo<(int)NBC; foo++) { z = CUB(r-classes[foo].rc) + CUB(g-classes[foo].gc) + CUB(b-classes[foo].bc); if (z < CUB(classes[foo].rad)) { Image_plotRGB(dst, x, y, classes[foo].r, classes[foo].g, classes[foo].b); plotted = 1; nbrplot++; break; } } if ( ! plotted ) Image_plotRGB(dst, x, y, 0, 0, 0); } /* fin for x */ } dst->modified = 1; #if DEBUG_LEVEL fprintf(stderr, " plotted: %ld / %d : %4.2f %%\n", nbrplot, src->width*src->height, ((float)nbrplot)/(float)(src->width*src->height) * 100.0); #endif return FUNC_IS_BETA; } /*::------------------------------------------------------------------::*/ /* new 14 mai 2007, avenue St Exupery */ int Image_classif_1(Image_Desc *src, Image_Desc *dst, Une_Classe_Sph *classes, int nbrclasses, int flag) { int foo, x, y, z, r, g, b, plotted; long nbrplot; if ( (foo=Image_compare_desc(src, dst)) ) { fprintf(stderr, "Image classif 1: images are differents %d\n", foo); return foo; } #if DEBUG_LEVEL fprintf(stderr, " Classif 1: nombre de classes = %d\n", nbrclasses); fprintf(stderr, " Classif 1: flag is %d\n", flag); #endif nbrplot = 0; for (y=0; yheight; y++) { for (x=0; xwidth; x++) { Image_getRGB(src, x, y, &r, &g, &b); plotted = 0; for (foo=0; foomodified = 1; #if DEBUG_LEVEL fprintf(stderr, " plotted: %ld / %d\n", nbrplot, src->width*src->height); #endif return FUNC_NOT_FINISH; } /*::------------------------------------------------------------------::*/ int Image_display_classes(Une_Classe_Sph *cla, int nbr, char *texte, int flags) { int foo; #if DEBUG_LEVEL fprintf(stderr, "%s ( %p %4d $%04x %s )\n", __func__, cla, nbr, flags, texte); #endif if (flags) { fprintf(stderr, "%s --> flags 0x%04X !\n", __func__, flags); /* return error ? */ } for (foo=0; foo */ return FUNC_IS_BETA; } /*::------------------------------------------------------------------::*/