Compare commits

...

3 Commits

Author SHA1 Message Date
tth
37ee68278b commit du soir, espoir 2020-02-20 23:20:31 +01:00
tth
33daa84530 nice hack : set ylabel '\rotatebox{90}{corrected value}' 2020-02-20 17:11:15 +01:00
tth
f9c6b65ca8 premier commit post-mercredi - UDMH 2020 2020-02-20 10:45:19 +01:00
6 changed files with 122 additions and 32 deletions

3
.gitignore vendored
View File

@ -23,8 +23,7 @@ doc/*.pdf
doc/*.idx doc/*.idx
doc/*.ilg doc/*.ilg
doc/*.ind doc/*.ind
doc/foo.tex doc/co*.tex
funcs/t funcs/t
funcs/*.o funcs/*.o
funcs/*.png funcs/*.png

View File

@ -1,13 +1,19 @@
#!/bin/bash #!/bin/bash
PI=" 3.141592654 " PI=" 3.141592654 "
OUT="foo.tex"
OUT="cos01.tex"
gnuplot << __EOF__ gnuplot << __EOF__
set term latex set term latex
set output "$OUT" set output "$OUT"
set title "COS01" set title "COS01"
set xlabel "input value"
set ylabel '\rotatebox{90}{corrected value}'
set grid
plot \ plot \
[0:1] [0:1] \ [0:1] [0:1] \
@ -16,4 +22,26 @@ plot \
__EOF__ __EOF__
wc $OUT wc $OUT
OUT="cos010.tex"
gnuplot << __EOF__
set term latex
set output "$OUT"
set title "COS010"
set xlabel "input value"
set ylabel '\rotatebox{90}{corrected value}'
set grid
plot \
[0:1] [0:1] \
(0.5 - 0.5 * cos(x*$PI*2)) \
with line
__EOF__
wc $OUT

View File

@ -9,6 +9,8 @@
\usepackage{listings} \usepackage{listings}
\usepackage{babel} \usepackage{babel}
\usepackage{graphicx} % for gnuplot ylabel rotate
\usepackage{pifont} % caractères rigolos \usepackage{pifont} % caractères rigolos
\usepackage{enumitem} \usepackage{enumitem}
\setitemize[1]{label={\ding{87}}} \setitemize[1]{label={\ding{87}}}
@ -214,6 +216,13 @@ faciliter un peu la chose. Il prend également en compte la copie
des divers binaires du dossier \texttt{tools/} (cf. page \pageref{outils}) des divers binaires du dossier \texttt{tools/} (cf. page \pageref{outils})
dans le répertoire prévu à cet effet : \texttt{/usr/local/bin}. dans le répertoire prévu à cet effet : \texttt{/usr/local/bin}.
Il reste enfin quelques exemples d'utilisation des outils de la
ligne de commande depuis un shell
dans le répertoire \texttt{scripts/}.
Ils sont décrits plus en détail page
\pageref{scripts}, et c'est à vous de les adapter à votre \textsl{usecase}.
Faites-en ce que vous voulez.
% ================================================================= % =================================================================
\section{Utilisation coté codeur}\label{codaz} \section{Utilisation coté codeur}\label{codaz}
@ -334,7 +343,7 @@ Si tout s'est bien passé (valeur retournée égale à 0),
on va trouver la largeur dans \texttt{datas[0]}, on va trouver la largeur dans \texttt{datas[0]},
la hauteur dans \texttt{datas[1]} et le type dans la hauteur dans \texttt{datas[1]} et le type dans
\texttt{datas[2]}\footnote{La fonction \texttt{datas[2]}\footnote{La fonction
\texttt{fimg\_type\_is\_valid(int type)} peut vous aider}. \texttt{fimg\_type\_is\_valid(int type)} peut vous aider\dots}.
Je sais aussi que certains d'entre vous aiment la facilité, aussi Je sais aussi que certains d'entre vous aiment la facilité, aussi
je vais vous révéler l'existence d'un nouveau truc bien plus je vais vous révéler l'existence d'un nouveau truc bien plus
@ -348,6 +357,9 @@ memset(&head, 0, sizeof(FloatImg));
foo = fimg_create_from_dump("lena.fimg", &head); foo = fimg_create_from_dump("lena.fimg", &head);
\end{verbatim} \end{verbatim}
Si la valeur retournée est différente de 0, c'est que quelque
chose s'est mal passé.
Certains messages sont parfois parfois explicites.
% _________ % _________
@ -358,8 +370,7 @@ Bon, vous avez une image latente, et vous souhaitez dessiner dessus
Il y a des fonctions pour ça, par exemple~: Il y a des fonctions pour ça, par exemple~:
\begin{verbatim} \begin{verbatim}
int fimg_plot_rgb (FloatImg *head, int x, int y, int fimg_plot_rgb(FloatImg *head, int x, int y, float r, float g, float b);
float r, float g, float b);
\end{verbatim} \end{verbatim}
Les paramètres sont explicites, mais leur validité doit être Les paramètres sont explicites, mais leur validité doit être
@ -369,6 +380,11 @@ qui ajoute du rgb à un pixel, laquelle fonction a d'ailleurs été
à la base de la seconde génération de la à la base de la seconde génération de la
photographie\index{photographie} en cumul\index{cumul}. photographie\index{photographie} en cumul\index{cumul}.
Inversement, la fonction
\texttt{fimg\_get\_rgb(FloatImg *head, int x, int y, float *rgb)}
permet de lire les valeurs des trois canaux d'un pixel donné.
Là aussi, il n'y a aucun contrôle sur la validité des valeurs
$x$ et $y$ de la demande.
% ---------------------------------- % ----------------------------------
@ -379,6 +395,11 @@ semblent cohérents avec la notion d'image flottante.
Certains d'entre eux, les plus simples, sont disponibles. Certains d'entre eux, les plus simples, sont disponibles.
Les autres sont à imaginer. Les autres sont à imaginer.
\begin{figure}
\input{cos01.tex} % XXX XXX XXX
\caption{Correcteur cos01}
\end{figure}
Ils prennent chacun trois paramètres, d'abord les images Ils prennent chacun trois paramètres, d'abord les images
source et destination (\texttt{* FloatImg}), et le troisième source et destination (\texttt{* FloatImg}), et le troisième
est un nombre en double précision donnant la valeur est un nombre en double précision donnant la valeur
@ -393,9 +414,15 @@ int fimg_cos_01(FloatImg *s, FloatImg *d, double maxval);
int fimg_cos_010(FloatImg *s, FloatImg *d, double maxval); int fimg_cos_010(FloatImg *s, FloatImg *d, double maxval);
\end{verbatim} \end{verbatim}
Si vous souhaitez rajouter votre propre méthode de modification
de contraste, il y a quelques explication en page \pageref{exemplefunc}.
\begin{figure} \begin{figure}
\input{foo.tex} % XXX XXX XXX \input{cos010.tex} % XXX XXX XXX
\caption{Correcteur cos01} \caption{Correcteur cos010}
\end{figure} \end{figure}
Rappelons qu'il est possible pour un logiciel applicatif Rappelons qu'il est possible pour un logiciel applicatif
@ -461,7 +488,9 @@ dans ce domaine\dots
\subsubsection{Vers PNM}\index{PNM} \subsubsection{Vers PNM}\index{PNM}
Nous avons ici 16 bits par composante, mais au prix Nous avons ici 16 bits par composante, soit 65536 valeurs différentes,
ce qui est bien au-delà de ce que peuvent percevoir vos yeux.
Hélas, c'est au prix
d'une taille énorme sur les fichiers. D'un autre coté, d'une taille énorme sur les fichiers. D'un autre coté,
l'utilisation du codage \textsc{ascii}\index{ascii} l'utilisation du codage \textsc{ascii}\index{ascii}
(alors qu'on pourrait mettre du binaire, plus compact) y est (alors qu'on pourrait mettre du binaire, plus compact) y est
@ -494,12 +523,13 @@ Mais je me soigne. Le mode 16 bits va bientôt arriver.
int fimg_save_as_png(FloatImg *src, char *outname, int flags); int fimg_save_as_png(FloatImg *src, char *outname, int flags);
\end{verbatim} \end{verbatim}
Tous les flags doivent être à zéro.
\subsubsection{Vers TIFF}\index{TIFF} \subsubsection{Vers/depuis TIFF}\index{TIFF}
Le format canonique de la PAO\index{PAO} du siècle dernier. Il permet Le format canonique de la PAO\index{PAO} du siècle dernier. Il permet
de gérer une foultitude de formats numériques. C'est aussi un format de gérer une foultitude de formats numériques. C'est aussi un format
classique proposé par les scanners corporates. classique proposé par les gros scanners corporates.
To be done\index{XXX} To be done\index{XXX}
@ -553,7 +583,7 @@ des bords d'image.
% ---------------------------------- % ----------------------------------
\subsection{Exemple de fonction}\index{exemple} \subsection{Exemple de fonction}\index{exemple}\label{exemplefunc}
Nous allons maintenant écrire une fonction intégrable dans Nous allons maintenant écrire une fonction intégrable dans
le répertoire \texttt{funcs/}. le répertoire \texttt{funcs/}.
@ -759,30 +789,33 @@ de méthodes, toutes plus légitimes que les autres.
% ------------------------------------------------------------------- % -------------------------------------------------------------------
\section{TODO}\index{TODO}\label{TODO} \section{TODO}\index{TODO}\label{TODO}
Il reste plein de choses à faire pour que ce soit vraiment utilisable. Il reste plein de choses à faire pour que ce soit vraiment utilisable,
surtout dans un contexte artistique à grande porosité.
C'est par ces frottements de techniques ayant du sens que les
choses seront acquises.
\begin{itemize} \begin{itemize}
\item Import/export au format \textsc{tiff}\index{tiff}. \item Import/export au format \textsc{tiff}\index{tiff}.
\item Remplacer le « fait-maison » par \textsc{libnetpnm}\index{pnm}. \item Remplacer le « fait-maison » par \textsc{libnetpnm}\index{pnm}.
\textsl{[en cours]}. \textsl{[en cours]}.
\item Compléter les traitements mathémathiques (eg le gamma\index{gamma}). \item Compléter les traitements mathémathiques (eg le gamma\index{gamma}).
\item Formaliser les codes d'erreur. \textbf{Urgent}. \item Formaliser les codes d'erreur. \textbf{Urgent}.
\item Faire une passe complète de Valgrind\index{valgrind}.
\end{itemize} \end{itemize}
% ------------------------------------------------------------------- % -------------------------------------------------------------------
\section{Exemples pour yusers}\index{exemple} \section{Exemples pour yusers}\index{exemple}
Nous allons \textsl{essayer d'improviser} un exemple presque réel, Nous allons \textsl{essayer d'improviser} un exemple presque réel,
avec un peu de rache\index{rache} dedans. Ce qui est autorisé dans avec un peu de rache\index{rache} dedans, et beaucoup de simplification.
les exemples, mais dans la vrai vie, il ne faut jamais négliger Ce qui est autorisé dans les exemples, mais dans la vrai vie, il ne faut
le traitement des éventuelles erreurs. jamais négliger le traitement des éventuelles erreurs.
Nous savons générer une image contenant des pixels aux valeurs Nous savons générer une image contenant des pixels aux valeurs
probablement aléatoires (drand48\index{drand48}). Que se passe-t-il si probablement aléatoires, avec la commande \texttt{mkfimg},
nous faisons la somme de plusieurs centaines\footnote{Des erreurs toxiques ?} qui utilise le \texttt{drand48}\index{drand48} de \textsc{posix}\index{POSIX}.
de ces images ? Maintenant, posons-nous une question de statisticien : ue se passe-t-il si
nous faisons la somme de plusieurs centaines de ces images ?
\begin{verbatim} \begin{verbatim}
#!/bin/bash #!/bin/bash
@ -802,7 +835,8 @@ convert -delay 10 xx*.pnm foo.gif
\end{verbatim} \end{verbatim}
Voilà, si les choses se passent mal, vous allez découvrir Voilà, si les choses se passent mal, vous allez découvrir
que votre \texttt{drand48} n'est pas si drand que ça. Séquence angoisse. que votre \texttt{drand48} n'est pas si "drand" que ça.
Et ce n'est pas à moi d'en tirer les conclusions...
\subsection{Scripts}\index{scripts}\label{scripts} \subsection{Scripts}\index{scripts}\label{scripts}
@ -841,6 +875,10 @@ de films flous\index{film} à partir de photos floues.
Le script \texttt{scripts/echomix.sh} est une première expérimentation Le script \texttt{scripts/echomix.sh} est une première expérimentation
en bash, utilisant deux outils en \textsc{cli}. en bash, utilisant deux outils en \textsc{cli}.
C'est juste une POC\index{POC}, et une implémentation bien plus
complète écrite en \textbf{C}\index{C} est déja en chantier,
avec une complexité prévue à un niveau assez réjouissant.
% ------------------------------------------------------------------- % -------------------------------------------------------------------
\section{Video for Linux}\index{v4l2} \section{Video for Linux}\index{v4l2}

17
scripts/README.md Normal file
View File

@ -0,0 +1,17 @@
# Exemples de scripts
_Attention_, ce ne sont que des exemples, pas forcément adaptés
à une utilisation dans le monde réel.
## shoot.sh
Front-end de prise de photographies floues
## contrast-test.sh
Démonstrateur d'ajustements de contraste.
## echomix.sh
Comment générer des videos psychotiques avec un peu de bash.

20
scripts/contrast-test.sh Executable file → Normal file
View File

@ -2,11 +2,15 @@
CMDPATH="/usr/local/bin" CMDPATH="/usr/local/bin"
GRAB="quux.fimg" WS="./tmp" # our workspace
COS01="cos01.fimg"
COS010="cos010.fimg" GRABOPT=" -d /dev/video0 -vu -n 240 -p 0.04 "
SQRT="sqrt.fimg"
POW2="pow2.fimg" GRAB=${WS}/"quux.fimg"
COS01=${WS}/"cos01.fimg"
COS010=${WS}/"cos010.fimg"
SQRT=${WS}/"sqrt.fimg"
POW2="${WS}/pow2.fimg"
# --------- conversion fimg -> pnm # --------- conversion fimg -> pnm
f2p () f2p ()
@ -17,11 +21,13 @@ ${CMDPATH}/fimg2pnm $1 $dst
} }
# --------- capturer une image # --------- capturer une image
${CMDPATH}/grabvidseq -v -u -n 2400 -p 0.04 -o ${GRAB} #
${CMDPATH}/grabvidseq ${GRABOPT} -o ${GRAB}
echo ERRCODE $? echo ERRCODE $?
f2p ${GRAB} f2p ${GRAB}
# ----------- traitements # ----------- traitements
#
${CMDPATH}/fimgfx pow2 $GRAB $POW2 ${CMDPATH}/fimgfx pow2 $GRAB $POW2
f2p $POW2 f2p $POW2
@ -34,5 +40,7 @@ f2p $COS01
${CMDPATH}/fimgfx cos010 $GRAB $COS010 ${CMDPATH}/fimgfx cos010 $GRAB $COS010
f2p $COS010 f2p $COS010
# ----------- présentation finale
#
echo == Making gif89a echo == Making gif89a
convert -delay 40 *.pnm foo.gif convert -delay 40 *.pnm foo.gif

6
scripts/shoot.sh Executable file → Normal file
View File

@ -18,9 +18,9 @@ SHOW="no"
# .pnm .fimg or .png # .pnm .fimg or .png
OFORMAT="P_%04d.pnm" OFORMAT="P_%04d.pnm"
# ces paramètres peuvent être surchargés avec # ces paramètres peuvent être surchargés avec
# un fichier nommé "reglages" dans le répertoire # un fichier nommé "reglages" dans le répertoire
# de travail. # de travail.
# ------------------------------------ # ------------------------------------
# overide parameters from $PWD # overide parameters from $PWD