Merge branch 'master' of ssh://tetalab.org:2213/tTh/FloatImg

Ok
This commit is contained in:
tonton Th 2019-12-04 11:29:19 +01:00
commit 9e4b0e795c
5 changed files with 74 additions and 11 deletions

View File

@ -317,7 +317,8 @@ dans l'upscaling.} effectuées.
L'autre façon de procéder est d'explorer notre image à la
recherche de la valeur maximale.
La fonction \texttt{float fimg\_get\_maxvalue(\&fimg)} est
faite pour ça. C'est la méthode utilisée par l'outil qui
faite pour ça.
C'est actuellement la méthode utilisée par l'outil qui
sert à faire les modifications de contraste (page \pageref{fimgfx}.
\vspace{1em}
@ -370,7 +371,8 @@ return 0;
\end{verbatim}
Je vous laisse imaginer les dégats que peut faire cette
fontion en utilisation réelle.
fontion en utilisation réelle. Mieux, je vous propose
d'essayer par vous-même.
En particulier tout le reste du code qui suppose qu'un pixel
ne peut \textbf{pas} être négatif.
Vous pouvez aussi remarquer qu'il n'y a pas de controle
@ -438,7 +440,8 @@ en première approche, alors commençont par le plus simple,
les valeurs moyennes de chaque composante.
Puis nous rajouterons\footnote{Les patchs sont les bienvenus}
le calcul de la variance\index{variance}.
le calcul de la variance\index{variance}. Les compétences
de \texttt{schmod777} sont attendues au dd2\index{dd2}.
\subsection{fimgfx}\index{fimgfx}\label{fimgfx}
@ -446,6 +449,17 @@ le calcul de la variance\index{variance}.
Attention, je vais expérimenter un parsing un peu étrange
sur les arguments de la ligne de commande. coredump expected.}
\vspace{1em}
À l'heure actuelle\footnote{décembre 2019, vers 15:30}, nous avons
déja quelques ajustements basiques de contraste.
\begin{verbatim}
tth@daubian:~/Devel/FloatImg/tools$ ./fimgfx -v -h
--- fimg special effects ---
cos01 cos010 pow2 sqrt
\end{verbatim}
\subsection{fimgops}\index{fimgops}\label{fimgops}
Quelques opérations diverses entre deux images, qui doivent être

View File

@ -2,7 +2,7 @@
* floatimg.h
*/
#define FIMG_VERSION 78
#define FIMG_VERSION 80
/*
* in memory descriptor
@ -41,6 +41,7 @@ typedef struct {
#define CONTRAST_SQRT 1
#define CONTRAST_POW2 2
#define CONTRAST_COS01 3
#define CONTRAST_COS010 4
/*
* core module
@ -83,7 +84,7 @@ int fimg_id_contraste(char *name);
int fimg_square_root(FloatImg *s, FloatImg *d, double maxval);
int fimg_power_2(FloatImg *s, FloatImg *d, double maxval);
int fimg_cos_01(FloatImg *s, FloatImg *d, double maxval);
int fimg_cos_010(FloatImg *s, FloatImg *d, double maxval);
int fimg_mk_gray_from(FloatImg *src, FloatImg*dst, int k);

View File

@ -20,6 +20,7 @@ if (!strcmp(str, "none")) return CONTRAST_NONE;
if (!strcmp(str, "sqrt")) return CONTRAST_SQRT;
if (!strcmp(str, "pow2")) return CONTRAST_POW2;
if (!strcmp(str, "cos01")) return CONTRAST_COS01;
if (!strcmp(str, "cos010")) return CONTRAST_COS010;
return -1;
}
@ -132,6 +133,38 @@ for (idx=0; idx<nbre; idx++) {
return 0;
}
/* ---------------------------------------------------------------- */
int fimg_cos_010(FloatImg *s, FloatImg *d, double maxval)
{
int nbre, idx;
double dval;
if (s->type != FIMG_TYPE_RGB) {
fprintf(stderr, "%s : type %d invalide\n",
__func__, s->type);
return -4;
}
if (NULL==d) {
d = s;
}
else {
if (d->type != FIMG_TYPE_RGB) {
fprintf(stderr, "%s : dst type %d invalide\n",
__func__, d->type);
return -4;
}
}
nbre = s->width * s->height * 3;
for (idx=0; idx<nbre; idx++) {
dval = s->R[idx] / maxval;
d->R[idx] = maxval * (0.5 - 0.5 * cos(2*3.141592654*dval));
}
return 0;
}
/* ---------------------------------------------------------------- */

View File

@ -19,10 +19,11 @@ typedef struct {
int nbarg;
} Fx;
enum fxid { Fx_cos01, Fx_pow2, Fx_sqrt };
enum fxid { Fx_cos01, Fx_cos010, Fx_pow2, Fx_sqrt };
Fx fx_list[] = {
{ "cos01", Fx_cos01, 0 },
{ "cos010", Fx_cos010, 0 },
{ "pow2", Fx_pow2, 0 },
{ "sqrt", Fx_sqrt, 0 },
{ NULL, 0, 0 }
@ -52,11 +53,14 @@ return -1;
/* --------------------------------------------------------------------- */
static void help(int lvl)
{
Fx *fx;
printf("fimg special effects (%d)\n", lvl);
puts("--- fimg special effects ---");
printf("\t");
for (fx=fx_list; fx->name; fx++) {
printf("%s ", fx->name);
}
puts("");
exit(0);
}
/* --------------------------------------------------------------------- */
@ -88,6 +92,8 @@ if (foo) {
switch (act) {
case Fx_cos01:
fimg_cos_01(&src, &dest, maxval); break;
case Fx_cos010:
fimg_cos_010(&src, &dest, maxval); break;
case Fx_pow2:
fimg_power_2(&src, &dest, maxval); break;
case Fx_sqrt:

View File

@ -122,6 +122,10 @@ FloatImg cumul;
while ((opt = getopt(argc, argv, "c:d:ghn:o:O:p:s:uv")) != -1) {
switch(opt) {
case 'c': contrast = fimg_id_contraste(optarg);
if (contrast < 0) {
fputs("unknow contrast\n", stderr);
exit(1);
}
break;
case 'd': dev_name = optarg; break;
case 'g': to_gray = 1; break;
@ -234,8 +238,10 @@ cumul.count = 0;
type = V4L2_BUF_TYPE_VIDEO_CAPTURE;
xioctl(fd, VIDIOC_STREAMON, &type);
#if 0
if (verbosity) fprintf(stderr,"pid %d grabbing %d picz...\n",
getpid(), nbre_capt);
#endif
for (i = 0; i < nbre_capt; i++) {
do {
@ -331,7 +337,7 @@ if (verbosity) {
}
switch (contrast) {
case CONTRAST_NONE:
fprintf(stderr, "contrast: none\n");
// if (verbosity) fprintf(stderr, "contrast: none\n");
break;
case CONTRAST_SQRT:
fimg_square_root(&cumul, NULL, maxvalue);
@ -342,6 +348,9 @@ switch (contrast) {
case CONTRAST_COS01:
fimg_cos_01(&cumul, NULL, maxvalue);
break;
case CONTRAST_COS010:
fimg_cos_010(&cumul, NULL, maxvalue);
break;
default:
fprintf(stderr, "bad contrast method\n");
break;