Compare commits
2 Commits
f034c77401
...
6a33b1d318
Author | SHA1 | Date | |
---|---|---|---|
6a33b1d318 | |||
a3e2cf55fc |
@ -898,6 +898,12 @@ sera lisible avec le sélecteur \texttt{-L}.
|
|||||||
\item [Déformations géométriques:] r90
|
\item [Déformations géométriques:] r90
|
||||||
\end{description}
|
\end{description}
|
||||||
|
|
||||||
|
Et pour les aventureux, la commande \texttt{xper} (abréviation
|
||||||
|
de \textsl{expérimental}) permet de tester la plus récente tentative
|
||||||
|
de friture du moment.
|
||||||
|
|
||||||
|
% ---------------------
|
||||||
|
|
||||||
\subsection{fimgops}\index{fimgops}\label{fimgops}
|
\subsection{fimgops}\index{fimgops}\label{fimgops}
|
||||||
|
|
||||||
Quelques opérations diverses entre deux images, qui doivent être
|
Quelques opérations diverses entre deux images, qui doivent être
|
||||||
|
@ -3,7 +3,7 @@
|
|||||||
* ugly code from tTh
|
* ugly code from tTh
|
||||||
*/
|
*/
|
||||||
|
|
||||||
#define FIMG_VERSION 108
|
#define FIMG_VERSION 109
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* in memory descriptor
|
* in memory descriptor
|
||||||
@ -97,6 +97,9 @@ int fimg_killborders(FloatImg *img);
|
|||||||
int fimg_lissage_2x2(FloatImg *img);
|
int fimg_lissage_2x2(FloatImg *img);
|
||||||
int fimg_filter_3x3(FloatImg *s, FloatImg *d, FimgFilter3x3 *filtr);
|
int fimg_filter_3x3(FloatImg *s, FloatImg *d, FimgFilter3x3 *filtr);
|
||||||
|
|
||||||
|
|
||||||
|
int fimg_contour_2x2(FloatImg *psrc, FloatImg *pdst, int notused);
|
||||||
|
|
||||||
/* 'sfx0' module */
|
/* 'sfx0' module */
|
||||||
int fimg_killcolors_a(FloatImg *fimg, float fval);
|
int fimg_killcolors_a(FloatImg *fimg, float fval);
|
||||||
int fimg_killcolors_b(FloatImg *fimg, float fval);
|
int fimg_killcolors_b(FloatImg *fimg, float fval);
|
||||||
|
@ -5,7 +5,7 @@ DEPS = ../floatimg.h Makefile
|
|||||||
OBJS = fimg-png.o fimg-tiff.o misc-plots.o filtrage.o utils.o \
|
OBJS = fimg-png.o fimg-tiff.o misc-plots.o filtrage.o utils.o \
|
||||||
fimg-libpnm.o rampes.o sfx0.o geometry.o rotate.o \
|
fimg-libpnm.o rampes.o sfx0.o geometry.o rotate.o \
|
||||||
equalize.o fimg-fits.o saturation.o histogram.o \
|
equalize.o fimg-fits.o saturation.o histogram.o \
|
||||||
hsv.o classif.o
|
hsv.o classif.o contour2x2.o
|
||||||
|
|
||||||
#---------------------------------------------------------------
|
#---------------------------------------------------------------
|
||||||
|
|
||||||
@ -55,6 +55,9 @@ equalize.o: equalize.c $(DEPS)
|
|||||||
sfx0.o: sfx0.c $(DEPS)
|
sfx0.o: sfx0.c $(DEPS)
|
||||||
gcc $(COPT) -c $<
|
gcc $(COPT) -c $<
|
||||||
|
|
||||||
|
contour2x2.o: contour2x2.c $(DEPS)
|
||||||
|
gcc $(COPT) -c $<
|
||||||
|
|
||||||
rampes.o: rampes.c $(DEPS)
|
rampes.o: rampes.c $(DEPS)
|
||||||
gcc $(COPT) -c $<
|
gcc $(COPT) -c $<
|
||||||
|
|
||||||
|
70
funcs/contour2x2.c
Normal file
70
funcs/contour2x2.c
Normal file
@ -0,0 +1,70 @@
|
|||||||
|
/*
|
||||||
|
* classif.c
|
||||||
|
*/
|
||||||
|
|
||||||
|
#include <stdio.h>
|
||||||
|
#include <stdlib.h>
|
||||||
|
#include <string.h>
|
||||||
|
#include <math.h>
|
||||||
|
|
||||||
|
#include "../floatimg.h"
|
||||||
|
|
||||||
|
int verbosity;
|
||||||
|
|
||||||
|
/* --------------------------------------------------------------------- */
|
||||||
|
/* nouveau 4 octobre 2020, juste avant sonoptic de la pluie craignos */
|
||||||
|
|
||||||
|
int fimg_contour_2x2(FloatImg *psrc, FloatImg *pdst, int notused)
|
||||||
|
{
|
||||||
|
float avg[4];
|
||||||
|
int foo, x, y, q;
|
||||||
|
int tbl[] =
|
||||||
|
{
|
||||||
|
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, notused);
|
||||||
|
#endif
|
||||||
|
|
||||||
|
foo = fimg_meanvalues(psrc, avg);
|
||||||
|
if (verbosity) {
|
||||||
|
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; y<psrc->height-1; y++) {
|
||||||
|
|
||||||
|
for (x=0; x<psrc->width-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] ? 1.0 : 0.0 ;
|
||||||
|
|
||||||
|
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] ? 1.0 : 0.0 ;
|
||||||
|
|
||||||
|
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] ? 1.0 : 0.0 ;
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
/* --------------------------------------------------------------------- */
|
51
funcs/t.c
51
funcs/t.c
@ -15,7 +15,47 @@ int verbosity;
|
|||||||
float global_fvalue;
|
float global_fvalue;
|
||||||
|
|
||||||
/* --------------------------------------------------------------------- */
|
/* --------------------------------------------------------------------- */
|
||||||
|
/*
|
||||||
|
* nouveau 5 octobre 2020 pendant sonoptic
|
||||||
|
*/
|
||||||
|
int essai_contour_2x2(char *infile)
|
||||||
|
{
|
||||||
|
FloatImg src, dst;
|
||||||
|
int foo;
|
||||||
|
|
||||||
|
if (NULL != infile) {
|
||||||
|
fprintf(stderr, "%s : loading %s\n", __func__, infile);
|
||||||
|
foo = fimg_create_from_dump(infile, &src);
|
||||||
|
if (foo) {
|
||||||
|
fprintf(stderr, "%s: error loading '%s'\n", __func__, infile);
|
||||||
|
return foo;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
fprintf(stderr, "%s : NOT INPUT FILE, FUBAR\n", __func__);
|
||||||
|
abort();
|
||||||
|
}
|
||||||
|
|
||||||
|
fimg_clone(&src, &dst, 1);
|
||||||
|
|
||||||
|
foo = fimg_contour_2x2(&src, &dst, 0);
|
||||||
|
if (foo) {
|
||||||
|
fprintf(stderr, "%s: err %d in contour_2x2\n", __func__, foo);
|
||||||
|
return foo;
|
||||||
|
}
|
||||||
|
|
||||||
|
foo = fimg_save_as_pnm(&dst, "out.pnm", 0);
|
||||||
|
if (foo) {
|
||||||
|
fprintf(stderr, "%s : err %d saving result\n", __func__, foo);
|
||||||
|
return foo;
|
||||||
|
}
|
||||||
|
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
/* --------------------------------------------------------------------- */
|
||||||
|
/*
|
||||||
|
* nouveau 5 octobre 2020 pendant sonoptic
|
||||||
|
*/
|
||||||
int essai_classif(char *infile)
|
int essai_classif(char *infile)
|
||||||
{
|
{
|
||||||
FloatImg src, dst;
|
FloatImg src, dst;
|
||||||
@ -36,6 +76,8 @@ else {
|
|||||||
|
|
||||||
fimg_clone(&src, &dst, 1);
|
fimg_clone(&src, &dst, 1);
|
||||||
|
|
||||||
|
fprintf(stderr, "%s : fvalue is %f\n", __func__, global_fvalue);
|
||||||
|
|
||||||
foo = fimg_classif_trial(&src, &dst, global_fvalue, 0);
|
foo = fimg_classif_trial(&src, &dst, global_fvalue, 0);
|
||||||
if (foo) {
|
if (foo) {
|
||||||
fprintf(stderr, "%s: err %d in classif_trial\n", __func__, foo);
|
fprintf(stderr, "%s: err %d in classif_trial\n", __func__, foo);
|
||||||
@ -469,7 +511,7 @@ return 0;
|
|||||||
}
|
}
|
||||||
/* --------------------------------------------------------------------- */
|
/* --------------------------------------------------------------------- */
|
||||||
enum nCmd { Equalize=1, Rotate, Sfx0, F3x3, MIRE, Wfits, Wpng, Wtiff,
|
enum nCmd { Equalize=1, Rotate, Sfx0, F3x3, MIRE, Wfits, Wpng, Wtiff,
|
||||||
Histo, Hsv,Classif };
|
Histo, Hsv, Classif, Ctr2x2 };
|
||||||
typedef struct {
|
typedef struct {
|
||||||
char *name;
|
char *name;
|
||||||
int Cmd;
|
int Cmd;
|
||||||
@ -487,6 +529,7 @@ Command commands[] = {
|
|||||||
{ "histo", Histo },
|
{ "histo", Histo },
|
||||||
{ "hsv", Hsv },
|
{ "hsv", Hsv },
|
||||||
{ "classif", Classif },
|
{ "classif", Classif },
|
||||||
|
{ "ctr2x2", Ctr2x2 },
|
||||||
{ NULL, 0 }
|
{ NULL, 0 }
|
||||||
} ;
|
} ;
|
||||||
|
|
||||||
@ -550,7 +593,8 @@ command = argv[optind];
|
|||||||
filename = argv[optind+1];
|
filename = argv[optind+1];
|
||||||
|
|
||||||
if (verbosity) {
|
if (verbosity) {
|
||||||
fprintf(stderr, "running command '%s' on '%s'\n", command, filename);
|
fprintf(stderr, "%s : running command '%s' on '%s'\n",
|
||||||
|
argv[0], command, filename);
|
||||||
fprintf(stderr, "global fvalue : %f\n", global_fvalue);
|
fprintf(stderr, "global fvalue : %f\n", global_fvalue);
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -587,6 +631,9 @@ switch(opt) {
|
|||||||
case Classif:
|
case Classif:
|
||||||
foo = essai_classif(filename);
|
foo = essai_classif(filename);
|
||||||
break;
|
break;
|
||||||
|
case Ctr2x2:
|
||||||
|
foo = essai_contour_2x2(filename);
|
||||||
|
break;
|
||||||
default:
|
default:
|
||||||
fprintf(stderr, "%s : bad command\n", command);
|
fprintf(stderr, "%s : bad command\n", command);
|
||||||
exit(1);
|
exit(1);
|
||||||
|
@ -2,15 +2,17 @@
|
|||||||
|
|
||||||
|
|
||||||
src=foo.fimg
|
src=foo.fimg
|
||||||
maxi=90
|
maxi=179
|
||||||
|
grabopt=" s 320x240 -vv -p 0 -n 100 -c none "
|
||||||
|
|
||||||
grabvidseq -s 640x480 -vv -p 0 -n 2000 -c cos01 -o $src
|
|
||||||
|
|
||||||
for foo in $(seq 0 $maxi)
|
for foo in $(seq 0 $maxi)
|
||||||
do
|
do
|
||||||
|
|
||||||
|
grabvidseq -$grabopt -o $src
|
||||||
|
|
||||||
fval=$(echo "$foo / $maxi" | bc -l)
|
fval=$(echo "$foo / $maxi" | bc -l)
|
||||||
./t -k $fval -v classif $src
|
./t -k $fval -v ctr2x2 $src
|
||||||
|
|
||||||
echo $foo $fval
|
echo $foo $fval
|
||||||
|
|
||||||
@ -21,4 +23,4 @@ do
|
|||||||
|
|
||||||
done
|
done
|
||||||
|
|
||||||
convert -delay 10 v_*.pnm foo.gif
|
convert -delay 20 v_*.pnm foo.gif
|
||||||
|
Loading…
Reference in New Issue
Block a user