Compare commits
2 Commits
beedc2e190
...
b1bf9715e0
Author | SHA1 | Date | |
---|---|---|---|
b1bf9715e0 | |||
cf42543659 |
@ -412,7 +412,7 @@ foo = fimg_create_from_dump("lena.fimg", &head);
|
||||
\end{lstlisting}
|
||||
|
||||
Si la valeur retournée est différente de 0, c'est que quelque
|
||||
chose s'est mal passé.
|
||||
chose s'est probablement mal passé.
|
||||
Certains messages sont parfois explicites.
|
||||
|
||||
% _________
|
||||
@ -884,7 +884,7 @@ pas vraiment compte du contenu de l'image.
|
||||
\begin{verbatim}
|
||||
tth@daubian:~/Devel/FloatImg/tools$ ./fimgfx -v -h
|
||||
--- fimg special effects ---
|
||||
cos01 cos010 pow2 sqrt gray0 xper
|
||||
cos01 cos010 pow2 sqrt gray0 cmixa xper desat
|
||||
\end{verbatim}
|
||||
|
||||
Certaines de ces opérations ont besoin d'un paramètre flottant.
|
||||
@ -955,9 +955,34 @@ avoir plusieurs plans de réalité. Il ne faut en négliger aucun.
|
||||
Il faut quand même deviner que pour passer de l'espace RGB\index{RGB}
|
||||
à une abstraction linéaire mono-dimensionnelle, il existe une foultitude
|
||||
de méthodes, toutes plus légitimes que les autres.
|
||||
\index{procrastination}
|
||||
Et face à l'incertitude du choix, j'ai reporté l'écriture de ce
|
||||
logiciel aux calendes grecques, voire même plus tard.
|
||||
|
||||
\subsection{cumulfimgs}\index{cumulfimgs}\label{cumulfimgs}
|
||||
|
||||
Cet outil accumule\index{cumul} une quantité d'images flottantes
|
||||
(même taille et même type) afin d'obtenir
|
||||
un flou de meilleure qualité. Aucune mise à l'échelle n'etant
|
||||
effctuée, les pixels de sortie peuvent atteindre des valeurs
|
||||
considérables\footnote{Prévoir une gestion des \textsf{overflows} ?}
|
||||
|
||||
\begin{verbatim}
|
||||
tth@delirium:~/Devel/FloatImg/tools$ ./cumulfimgs -h
|
||||
usage :
|
||||
cumulfimgs a.fimg b.fimg c-fimg ...
|
||||
cumulator options :
|
||||
-v increase verbosity
|
||||
-o name of output file
|
||||
-g convert to gray level
|
||||
\end{verbatim}
|
||||
|
||||
Le nom par défaut du fichier résultant est \texttt{out.fimg}.
|
||||
L'exportation "multiformat" est pour bientôt.
|
||||
|
||||
% -------------------------------------------------------------------
|
||||
\section{TODO}\index{TODO}\label{TODO}
|
||||
\section{TODO}\index{TODO}\label{TODO}\
|
||||
\index{XXX}
|
||||
|
||||
Il reste plein de choses à faire pour que ce soit vraiment utilisable,
|
||||
surtout dans un contexte artistique à grande porosité.
|
||||
@ -971,7 +996,8 @@ choses seront acquises.
|
||||
\item Compléter les traitements mathémathiques (eg le gamma\index{gamma}).
|
||||
\item Formaliser les codes d'erreur. \textbf{Urgent}.
|
||||
\item Faire une passe complète de Valgrind\index{valgrind}.
|
||||
\item Integrer la fonderie et l'interpolator.
|
||||
\item Intégrer la fonderie et l'interpolator.
|
||||
\item Vérifier le gestion des images mono-canal.
|
||||
\end{itemize}
|
||||
|
||||
% -------------------------------------------------------------------
|
||||
|
@ -5,7 +5,7 @@ DEPS = ../floatimg.h Makefile
|
||||
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 \
|
||||
equalize.o fimg-fits.o saturation.o histogram.o \
|
||||
hsv.o
|
||||
hsv.o classif.o
|
||||
|
||||
#---------------------------------------------------------------
|
||||
|
||||
@ -58,6 +58,9 @@ sfx0.o: sfx0.c $(DEPS)
|
||||
rampes.o: rampes.c $(DEPS)
|
||||
gcc $(COPT) -c $<
|
||||
|
||||
classif.o: classif.c $(DEPS)
|
||||
gcc $(COPT) -c $<
|
||||
|
||||
hsv.o: hsv.c $(DEPS)
|
||||
gcc $(COPT) -c $<
|
||||
|
||||
|
89
funcs/classif.c
Normal file
89
funcs/classif.c
Normal file
@ -0,0 +1,89 @@
|
||||
/*
|
||||
* classif.c
|
||||
*/
|
||||
|
||||
#include <stdio.h>
|
||||
#include <stdlib.h>
|
||||
#include <string.h>
|
||||
#include <math.h>
|
||||
|
||||
#include "../floatimg.h"
|
||||
|
||||
int verbosity;
|
||||
|
||||
/* --------------------------------------------------------------------- */
|
||||
/* nouveau 2 octobre 2020, juste avant sonoptic de la pluie craignos */
|
||||
|
||||
int fimg_classif_trial(FloatImg *psrc, FloatImg *pdst, int notused)
|
||||
{
|
||||
float minmax[6], delta[3], baryc[3];
|
||||
float range, dist, rgb[3], dr, dg, db;
|
||||
int x, y, on, off;
|
||||
|
||||
#if DEBUG_LEVEL
|
||||
fprintf(stderr, ">>> %s ( %p %p %d )\n", __func__, psrc, pdst, notused);
|
||||
#endif
|
||||
|
||||
/* calculer les amplitudes RGB de l'image source */
|
||||
fimg_get_minmax_rgb(psrc, minmax);
|
||||
delta[0] = minmax[1] - minmax[0];
|
||||
delta[1] = minmax[3] - minmax[2];
|
||||
delta[2] = minmax[5] - minmax[4];
|
||||
|
||||
/* chercher le plus petit des deltas */
|
||||
range = delta[0]; if (delta[1]<range) range=delta[1];
|
||||
if (delta[2]<range) range=delta[2];
|
||||
|
||||
/* convertir le diametre en rayon (magic inside) */
|
||||
range /= 2.0;
|
||||
|
||||
fprintf(stderr, "deltas : %f %f %f / %f\n",
|
||||
delta[0], delta[1], delta[2], range);
|
||||
|
||||
|
||||
/* calcul du "barycentre" chromatique */
|
||||
baryc[0] = (minmax[1] + minmax[0]) / 2;
|
||||
baryc[1] = (minmax[3] + minmax[2]) / 2;
|
||||
baryc[2] = (minmax[5] + minmax[4]) / 2;
|
||||
fprintf(stderr, "barycs : %f %f %f\n", baryc[0], baryc[1], baryc[2]);
|
||||
|
||||
on = off = 0;
|
||||
|
||||
for (y=0; y<psrc->height; y++) {
|
||||
for (x=0; x<psrc->width; x++) {
|
||||
|
||||
fimg_get_rgb(psrc, x, y, rgb);
|
||||
|
||||
/* calcul de la distance chromatique */
|
||||
dr = rgb[0] - baryc[0];
|
||||
dg = rgb[1] - baryc[1];
|
||||
db = rgb[2] - baryc[2];
|
||||
|
||||
dist = sqrtf( (dr*dr) + (dg*dg) + (db*db) );
|
||||
|
||||
#if DEBUG_LEVEL
|
||||
if (x==y) fprintf(stderr, "%4d %4d %f\n", x, y, dist);
|
||||
#endif
|
||||
|
||||
/* action !!! */
|
||||
if (dist > range) {
|
||||
rgb[0] = 0; on++;
|
||||
}
|
||||
else {
|
||||
rgb[1] = 0; off++;
|
||||
}
|
||||
|
||||
fimg_put_rgb(pdst, x, y, rgb);
|
||||
|
||||
/* MUST BE MORE CREATIVE HERE !!! */
|
||||
}
|
||||
}
|
||||
|
||||
fprintf(stderr, "on %d off %d\n", on, off);
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
/* --------------------------------------------------------------------- */
|
||||
|
||||
|
45
funcs/t.c
45
funcs/t.c
@ -14,6 +14,44 @@ int verbosity;
|
||||
|
||||
float global_fvalue;
|
||||
|
||||
/* --------------------------------------------------------------------- */
|
||||
|
||||
int fimg_classif_trial(FloatImg *src, FloatImg*dst, int notused);
|
||||
|
||||
int essai_classif(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_classif_trial(&src, &dst, 0);
|
||||
if (foo) {
|
||||
fprintf(stderr, "%s: err %d in classif_trial\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 foo;
|
||||
}
|
||||
/* --------------------------------------------------------------------- */
|
||||
/* nouveau 19 aout 2020, le matin avant la canicule */
|
||||
|
||||
@ -31,7 +69,6 @@ if (foo) {
|
||||
return foo;
|
||||
}
|
||||
|
||||
|
||||
return -7;
|
||||
}
|
||||
/* --------------------------------------------------------------------- */
|
||||
@ -434,7 +471,7 @@ return 0;
|
||||
}
|
||||
/* --------------------------------------------------------------------- */
|
||||
enum nCmd { Equalize=1, Rotate, Sfx0, F3x3, MIRE, Wfits, Wpng, Wtiff,
|
||||
Histo, Hsv };
|
||||
Histo, Hsv,Classif };
|
||||
typedef struct {
|
||||
char *name;
|
||||
int Cmd;
|
||||
@ -451,6 +488,7 @@ Command commands[] = {
|
||||
{ "wtiff", Wtiff },
|
||||
{ "histo", Histo },
|
||||
{ "hsv", Hsv },
|
||||
{ "classif", Classif },
|
||||
{ NULL, 0 }
|
||||
} ;
|
||||
|
||||
@ -547,6 +585,9 @@ switch(opt) {
|
||||
case Hsv:
|
||||
foo = fimg_essai_hsv(filename);
|
||||
break;
|
||||
case Classif:
|
||||
foo = essai_classif(filename);
|
||||
break;
|
||||
default:
|
||||
fprintf(stderr, "%s : bad command\n", command);
|
||||
exit(1);
|
||||
|
@ -36,11 +36,13 @@ return 0;
|
||||
/* --------------------------------------------------------------------- */
|
||||
void help(int v)
|
||||
{
|
||||
puts("");
|
||||
puts("$ cumulfimgs a.fimg b.fimg c-fimg ...");
|
||||
puts("cumulator options :");
|
||||
puts("\t-v\tincrease verbosity");
|
||||
puts("\t-o\tname of output file");
|
||||
puts("\t-g\tconvert to gray level");
|
||||
|
||||
puts("");
|
||||
if (verbosity) { puts(""); fimg_print_version(1); }
|
||||
exit(0);
|
||||
}
|
||||
@ -71,10 +73,6 @@ if (verbosity) fprintf(stderr, "------ cumulfimgs ------\n");
|
||||
fprintf(stderr, "argc = %d, optind = %d\n", argc, optind);
|
||||
#endif
|
||||
|
||||
// foo = testfile(output_file);
|
||||
// fprintf(stderr, "Output %s -> %d\n", output_file, foo);
|
||||
|
||||
|
||||
for (idx=optind; idx<argc; idx++) {
|
||||
|
||||
#if DEBUG_LEVEL
|
||||
@ -84,6 +82,7 @@ for (idx=optind; idx<argc; idx++) {
|
||||
foo = testfile(argv[idx]);
|
||||
if (foo) {
|
||||
fprintf(stderr, "testfile %s -> %d\n", argv[idx],foo);
|
||||
exit(1);
|
||||
}
|
||||
|
||||
if ( ! src_loaded ) {
|
||||
@ -112,6 +111,10 @@ if (to_gray) {
|
||||
}
|
||||
|
||||
foo = fimg_dump_to_file(&accu, output_file, 0);
|
||||
if (foo) {
|
||||
fprintf(stderr, "error %d while saving '%s'\n", foo, output_file);
|
||||
exit(1);
|
||||
}
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
@ -36,8 +36,10 @@ D=" 800 600 "
|
||||
./mkfimg -v -t hdeg hdeg.fimg $D
|
||||
./mkfimg -v -t vdeg vdeg.fimg $D
|
||||
./mkfimg -v -t drand48 rand.fimg $D
|
||||
./mkfimg -v -t tpat0 pat0.fimg $D
|
||||
|
||||
./cumulfimgs -v -g -o foo.fimg hdeg.fimg rand.fimg vdeg.fimg
|
||||
./cumulfimgs -v -g -o foo.fimg \
|
||||
hdeg.fimg pat0.fimg rand.fimg vdeg.fimg
|
||||
}
|
||||
# -----------------------------------------------------
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user