forked from tTh/FloatImg
Merge branch 'master' of ssh://tetalab.org:2213/tTh/FloatImg
Ok
This commit is contained in:
commit
9e4b0e795c
|
@ -317,7 +317,8 @@ dans l'upscaling.} effectuées.
|
||||||
L'autre façon de procéder est d'explorer notre image à la
|
L'autre façon de procéder est d'explorer notre image à la
|
||||||
recherche de la valeur maximale.
|
recherche de la valeur maximale.
|
||||||
La fonction \texttt{float fimg\_get\_maxvalue(\&fimg)} est
|
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}.
|
sert à faire les modifications de contraste (page \pageref{fimgfx}.
|
||||||
|
|
||||||
\vspace{1em}
|
\vspace{1em}
|
||||||
|
@ -370,7 +371,8 @@ return 0;
|
||||||
\end{verbatim}
|
\end{verbatim}
|
||||||
|
|
||||||
Je vous laisse imaginer les dégats que peut faire cette
|
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
|
En particulier tout le reste du code qui suppose qu'un pixel
|
||||||
ne peut \textbf{pas} être négatif.
|
ne peut \textbf{pas} être négatif.
|
||||||
Vous pouvez aussi remarquer qu'il n'y a pas de controle
|
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.
|
les valeurs moyennes de chaque composante.
|
||||||
|
|
||||||
Puis nous rajouterons\footnote{Les patchs sont les bienvenus}
|
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}
|
\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
|
Attention, je vais expérimenter un parsing un peu étrange
|
||||||
sur les arguments de la ligne de commande. coredump expected.}
|
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}
|
\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
|
||||||
|
|
|
@ -2,7 +2,7 @@
|
||||||
* floatimg.h
|
* floatimg.h
|
||||||
*/
|
*/
|
||||||
|
|
||||||
#define FIMG_VERSION 78
|
#define FIMG_VERSION 80
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* in memory descriptor
|
* in memory descriptor
|
||||||
|
@ -41,6 +41,7 @@ typedef struct {
|
||||||
#define CONTRAST_SQRT 1
|
#define CONTRAST_SQRT 1
|
||||||
#define CONTRAST_POW2 2
|
#define CONTRAST_POW2 2
|
||||||
#define CONTRAST_COS01 3
|
#define CONTRAST_COS01 3
|
||||||
|
#define CONTRAST_COS010 4
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* core module
|
* core module
|
||||||
|
@ -83,7 +84,7 @@ int fimg_id_contraste(char *name);
|
||||||
int fimg_square_root(FloatImg *s, FloatImg *d, double maxval);
|
int fimg_square_root(FloatImg *s, FloatImg *d, double maxval);
|
||||||
int fimg_power_2(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_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);
|
int fimg_mk_gray_from(FloatImg *src, FloatImg*dst, int k);
|
||||||
|
|
||||||
|
|
|
@ -20,6 +20,7 @@ if (!strcmp(str, "none")) return CONTRAST_NONE;
|
||||||
if (!strcmp(str, "sqrt")) return CONTRAST_SQRT;
|
if (!strcmp(str, "sqrt")) return CONTRAST_SQRT;
|
||||||
if (!strcmp(str, "pow2")) return CONTRAST_POW2;
|
if (!strcmp(str, "pow2")) return CONTRAST_POW2;
|
||||||
if (!strcmp(str, "cos01")) return CONTRAST_COS01;
|
if (!strcmp(str, "cos01")) return CONTRAST_COS01;
|
||||||
|
if (!strcmp(str, "cos010")) return CONTRAST_COS010;
|
||||||
|
|
||||||
return -1;
|
return -1;
|
||||||
}
|
}
|
||||||
|
@ -132,6 +133,38 @@ for (idx=0; idx<nbre; idx++) {
|
||||||
return 0;
|
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;
|
||||||
|
}
|
||||||
|
|
||||||
/* ---------------------------------------------------------------- */
|
/* ---------------------------------------------------------------- */
|
||||||
|
|
||||||
|
|
|
@ -19,10 +19,11 @@ typedef struct {
|
||||||
int nbarg;
|
int nbarg;
|
||||||
} Fx;
|
} Fx;
|
||||||
|
|
||||||
enum fxid { Fx_cos01, Fx_pow2, Fx_sqrt };
|
enum fxid { Fx_cos01, Fx_cos010, Fx_pow2, Fx_sqrt };
|
||||||
|
|
||||||
Fx fx_list[] = {
|
Fx fx_list[] = {
|
||||||
{ "cos01", Fx_cos01, 0 },
|
{ "cos01", Fx_cos01, 0 },
|
||||||
|
{ "cos010", Fx_cos010, 0 },
|
||||||
{ "pow2", Fx_pow2, 0 },
|
{ "pow2", Fx_pow2, 0 },
|
||||||
{ "sqrt", Fx_sqrt, 0 },
|
{ "sqrt", Fx_sqrt, 0 },
|
||||||
{ NULL, 0, 0 }
|
{ NULL, 0, 0 }
|
||||||
|
@ -52,11 +53,14 @@ return -1;
|
||||||
/* --------------------------------------------------------------------- */
|
/* --------------------------------------------------------------------- */
|
||||||
static void help(int lvl)
|
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);
|
exit(0);
|
||||||
}
|
}
|
||||||
/* --------------------------------------------------------------------- */
|
/* --------------------------------------------------------------------- */
|
||||||
|
@ -88,6 +92,8 @@ if (foo) {
|
||||||
switch (act) {
|
switch (act) {
|
||||||
case Fx_cos01:
|
case Fx_cos01:
|
||||||
fimg_cos_01(&src, &dest, maxval); break;
|
fimg_cos_01(&src, &dest, maxval); break;
|
||||||
|
case Fx_cos010:
|
||||||
|
fimg_cos_010(&src, &dest, maxval); break;
|
||||||
case Fx_pow2:
|
case Fx_pow2:
|
||||||
fimg_power_2(&src, &dest, maxval); break;
|
fimg_power_2(&src, &dest, maxval); break;
|
||||||
case Fx_sqrt:
|
case Fx_sqrt:
|
||||||
|
|
|
@ -122,6 +122,10 @@ FloatImg cumul;
|
||||||
while ((opt = getopt(argc, argv, "c:d:ghn:o:O:p:s:uv")) != -1) {
|
while ((opt = getopt(argc, argv, "c:d:ghn:o:O:p:s:uv")) != -1) {
|
||||||
switch(opt) {
|
switch(opt) {
|
||||||
case 'c': contrast = fimg_id_contraste(optarg);
|
case 'c': contrast = fimg_id_contraste(optarg);
|
||||||
|
if (contrast < 0) {
|
||||||
|
fputs("unknow contrast\n", stderr);
|
||||||
|
exit(1);
|
||||||
|
}
|
||||||
break;
|
break;
|
||||||
case 'd': dev_name = optarg; break;
|
case 'd': dev_name = optarg; break;
|
||||||
case 'g': to_gray = 1; break;
|
case 'g': to_gray = 1; break;
|
||||||
|
@ -234,8 +238,10 @@ cumul.count = 0;
|
||||||
type = V4L2_BUF_TYPE_VIDEO_CAPTURE;
|
type = V4L2_BUF_TYPE_VIDEO_CAPTURE;
|
||||||
xioctl(fd, VIDIOC_STREAMON, &type);
|
xioctl(fd, VIDIOC_STREAMON, &type);
|
||||||
|
|
||||||
|
#if 0
|
||||||
if (verbosity) fprintf(stderr,"pid %d grabbing %d picz...\n",
|
if (verbosity) fprintf(stderr,"pid %d grabbing %d picz...\n",
|
||||||
getpid(), nbre_capt);
|
getpid(), nbre_capt);
|
||||||
|
#endif
|
||||||
|
|
||||||
for (i = 0; i < nbre_capt; i++) {
|
for (i = 0; i < nbre_capt; i++) {
|
||||||
do {
|
do {
|
||||||
|
@ -331,7 +337,7 @@ if (verbosity) {
|
||||||
}
|
}
|
||||||
switch (contrast) {
|
switch (contrast) {
|
||||||
case CONTRAST_NONE:
|
case CONTRAST_NONE:
|
||||||
fprintf(stderr, "contrast: none\n");
|
// if (verbosity) fprintf(stderr, "contrast: none\n");
|
||||||
break;
|
break;
|
||||||
case CONTRAST_SQRT:
|
case CONTRAST_SQRT:
|
||||||
fimg_square_root(&cumul, NULL, maxvalue);
|
fimg_square_root(&cumul, NULL, maxvalue);
|
||||||
|
@ -342,6 +348,9 @@ switch (contrast) {
|
||||||
case CONTRAST_COS01:
|
case CONTRAST_COS01:
|
||||||
fimg_cos_01(&cumul, NULL, maxvalue);
|
fimg_cos_01(&cumul, NULL, maxvalue);
|
||||||
break;
|
break;
|
||||||
|
case CONTRAST_COS010:
|
||||||
|
fimg_cos_010(&cumul, NULL, maxvalue);
|
||||||
|
break;
|
||||||
default:
|
default:
|
||||||
fprintf(stderr, "bad contrast method\n");
|
fprintf(stderr, "bad contrast method\n");
|
||||||
break;
|
break;
|
||||||
|
|
Loading…
Reference in New Issue