From 160a4afe7b55cf205955826c0b6905ef42fe60a9 Mon Sep 17 00:00:00 2001 From: tonton th Date: Thu, 3 Dec 2020 11:47:44 +0100 Subject: [PATCH] new: 3x3 smoother in crapulator --- Fonderie/crapulator.c | 43 +++++++++++++++++++++++++++++++++---------- Fonderie/fonderie.c | 4 ++-- funcs/filtrage.c | 13 ++++++++++--- 3 files changed, 45 insertions(+), 15 deletions(-) diff --git a/Fonderie/crapulator.c b/Fonderie/crapulator.c index 97ea2fd..a58969f 100644 --- a/Fonderie/crapulator.c +++ b/Fonderie/crapulator.c @@ -37,7 +37,6 @@ FloatImg img; int retval; fimg_clone(pimg, &img, 0); -// XXX fimg_clear(&img); retval = fimg_contour_2x2(pimg, &img, 0); if (retval) { fprintf(stderr, "%s : err contour %d\n", @@ -50,19 +49,43 @@ fimg_destroy(&img); return 0; } /* -------------------------------------------------------------- */ +static int insitu_filtre3x3(FloatImg *pimg) +{ +FloatImg img; +int retval; + +FimgFilter3x3 filtre = { + { + 1.0, 2.0, 1.0, + 2.0, 4.0, 2.0, + 1.0, 2.0, 1.0, + }, + 16.0, 0.0 + }; + +fimg_clone(pimg, &img, 0); +retval = fimg_filter_3x3(pimg, &img, &filtre); +if (retval) { + fprintf(stderr, "%s error %d on filter\n", __func__, retval); + exit(1); + } +fimg_copy_data(&img, pimg); +fimg_destroy(&img); + +return retval; +} +/* -------------------------------------------------------------- */ /* * This is the main filter engine * used both for input and output */ -#define DEBUG_THIS_CRAP 1 +#define DEBUG_THIS_CRAP 0 int crapulator(FloatImg *image, int idFx, float fval) { int retval; // FloatImg imgtmp; -static int count = 0; -int flag_debug = 0; #if DEBUG_LEVEL fprintf(stderr, ">>> %s ( %p %d %f )\n", __func__, @@ -72,6 +95,8 @@ fprintf(stderr, ">>> %s ( %p %d %f )\n", __func__, retval = 0; #if DEBUG_THIS_CRAP +static int count = 0; +int flag_debug = 0; if (666==count) { flag_debug = 1; fprintf(stderr, "DEBUG PT 1 in %s:%d\n", __func__, __LINE__); @@ -112,10 +137,6 @@ switch (idFx) { break; case 9: retval = fimg_classif_trial(image, image, 0.37, 0); - if (retval) { - fprintf(stderr, "err %d in classif\n", retval); - exit(1); - } break; case 10: retval = binarize(image, 0); @@ -126,6 +147,9 @@ switch (idFx) { case 12: retval = fimg_lissage_2x2(image); break; + case 13: + retval = insitu_filtre3x3(image); + break; case 24: /* experiment ! */ retval = des_bords_sombres_a(image, 160); break; @@ -146,9 +170,8 @@ if (flag_debug) { fimg_save_as_png(image, "crap_after.png", 0); flag_debug = 0; } -#endif - count++; +#endif return retval; } diff --git a/Fonderie/fonderie.c b/Fonderie/fonderie.c index 84a94db..f831cb3 100644 --- a/Fonderie/fonderie.c +++ b/Fonderie/fonderie.c @@ -99,7 +99,7 @@ fprintf(stderr, "glob '%s' -> %d, %ld files found\n", pattern, foo, /* get the size of the inputs images */ foo = fimg_fileinfos(globbuf.gl_pathv[0], datas); width = datas[0]; height = datas[1]; -fprintf(stderr, "image size %dx%d\n", width, height); +fprintf(stderr, "first image size %dx%d\n", width, height); fimg_create(&input, width, height, 3); @@ -111,7 +111,7 @@ if (foo) { exit(1); } maxvalue = fimg_get_maxvalue(&input); -fprintf(stderr, "maxvalue %f\n", maxvalue); +fprintf(stderr, "first image maxvalue %f\n", maxvalue); foo = create_fifo(szfifo, width, height, FIMG_TYPE_RGB); fprintf(stderr, "init fifo (%d slots) --> %d\n", szfifo, foo); diff --git a/funcs/filtrage.c b/funcs/filtrage.c index a1fbe59..5f46c38 100644 --- a/funcs/filtrage.c +++ b/funcs/filtrage.c @@ -6,8 +6,6 @@ #include "../floatimg.h" -/* -------------------------------------------------------------------- */ -/* -------------------------------------------------------------------- */ /* -------------------------------------------------------------------- */ int fimg_filter_3x3(FloatImg *src, FloatImg *dst, FimgFilter3x3 *filtr) { @@ -20,6 +18,15 @@ double dval; fprintf(stderr, ">>> %s ( %p %p %p)\n", __func__, src, dst, filtr); #endif +if (src->type != FIMG_TYPE_RGB) { + fprintf(stderr, "%s: src type %d invalid\n", __func__, src->type); + return -99; + } +if (dst->type != FIMG_TYPE_RGB) { + fprintf(stderr, "%s: dst type %d invalid\n", __func__, dst->type); + return -99; + } + /* aliasing some vars for cleaner code */ pr = src->R; pg = src->G; pb = src->B; w = src->width; h = src->height; @@ -69,7 +76,7 @@ for (y=1; y < h-1; y++) { } } -return -1; +return 0; } /* -------------------------------------------------------------------- */ /*