Compare commits
No commits in common. "37ee68278bdbc4c090727f9579313c0665c4497d" and "db715485a2ae84bd362815d8fc5d8d0ca5268def" have entirely different histories.
37ee68278b
...
db715485a2
3
.gitignore
vendored
3
.gitignore
vendored
@ -23,7 +23,8 @@ doc/*.pdf
|
||||
doc/*.idx
|
||||
doc/*.ilg
|
||||
doc/*.ind
|
||||
doc/co*.tex
|
||||
doc/foo.tex
|
||||
|
||||
funcs/t
|
||||
funcs/*.o
|
||||
funcs/*.png
|
||||
|
@ -1,19 +1,13 @@
|
||||
#!/bin/bash
|
||||
|
||||
PI=" 3.141592654 "
|
||||
|
||||
OUT="cos01.tex"
|
||||
OUT="foo.tex"
|
||||
|
||||
gnuplot << __EOF__
|
||||
|
||||
set term latex
|
||||
set output "$OUT"
|
||||
set title "COS01"
|
||||
set xlabel "input value"
|
||||
|
||||
set ylabel '\rotatebox{90}{corrected value}'
|
||||
|
||||
set grid
|
||||
|
||||
plot \
|
||||
[0:1] [0:1] \
|
||||
@ -23,25 +17,3 @@ plot \
|
||||
__EOF__
|
||||
|
||||
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
|
||||
|
@ -9,8 +9,6 @@
|
||||
\usepackage{listings}
|
||||
\usepackage{babel}
|
||||
|
||||
\usepackage{graphicx} % for gnuplot ylabel rotate
|
||||
|
||||
\usepackage{pifont} % caractères rigolos
|
||||
\usepackage{enumitem}
|
||||
\setitemize[1]{label={\ding{87}}}
|
||||
@ -216,13 +214,6 @@ faciliter un peu la chose. Il prend également en compte la copie
|
||||
des divers binaires du dossier \texttt{tools/} (cf. page \pageref{outils})
|
||||
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}
|
||||
@ -343,7 +334,7 @@ Si tout s'est bien passé (valeur retournée égale à 0),
|
||||
on va trouver la largeur dans \texttt{datas[0]},
|
||||
la hauteur dans \texttt{datas[1]} et le type dans
|
||||
\texttt{datas[2]}\footnote{La fonction
|
||||
\texttt{fimg\_type\_is\_valid(int type)} peut vous aider\dots}.
|
||||
\texttt{fimg\_type\_is\_valid(int type)} peut vous aider}.
|
||||
|
||||
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
|
||||
@ -357,9 +348,6 @@ memset(&head, 0, sizeof(FloatImg));
|
||||
foo = fimg_create_from_dump("lena.fimg", &head);
|
||||
\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.
|
||||
|
||||
% _________
|
||||
|
||||
@ -370,7 +358,8 @@ Bon, vous avez une image latente, et vous souhaitez dessiner dessus
|
||||
Il y a des fonctions pour ça, par exemple~:
|
||||
|
||||
\begin{verbatim}
|
||||
int fimg_plot_rgb(FloatImg *head, int x, int y, float r, float g, float b);
|
||||
int fimg_plot_rgb (FloatImg *head, int x, int y,
|
||||
float r, float g, float b);
|
||||
\end{verbatim}
|
||||
|
||||
Les paramètres sont explicites, mais leur validité doit être
|
||||
@ -380,11 +369,6 @@ qui ajoute du rgb à un pixel, laquelle fonction a d'ailleurs été
|
||||
à la base de la seconde génération de la
|
||||
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.
|
||||
|
||||
% ----------------------------------
|
||||
|
||||
@ -395,11 +379,6 @@ semblent cohérents avec la notion d'image flottante.
|
||||
Certains d'entre eux, les plus simples, sont disponibles.
|
||||
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
|
||||
source et destination (\texttt{* FloatImg}), et le troisième
|
||||
est un nombre en double précision donnant la valeur
|
||||
@ -414,15 +393,9 @@ int fimg_cos_01(FloatImg *s, FloatImg *d, double maxval);
|
||||
int fimg_cos_010(FloatImg *s, FloatImg *d, double maxval);
|
||||
\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}
|
||||
\input{cos010.tex} % XXX XXX XXX
|
||||
\caption{Correcteur cos010}
|
||||
\input{foo.tex} % XXX XXX XXX
|
||||
\caption{Correcteur cos01}
|
||||
\end{figure}
|
||||
|
||||
Rappelons qu'il est possible pour un logiciel applicatif
|
||||
@ -488,9 +461,7 @@ dans ce domaine\dots
|
||||
|
||||
\subsubsection{Vers PNM}\index{PNM}
|
||||
|
||||
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
|
||||
Nous avons ici 16 bits par composante, mais au prix
|
||||
d'une taille énorme sur les fichiers. D'un autre coté,
|
||||
l'utilisation du codage \textsc{ascii}\index{ascii}
|
||||
(alors qu'on pourrait mettre du binaire, plus compact) y est
|
||||
@ -523,13 +494,12 @@ Mais je me soigne. Le mode 16 bits va bientôt arriver.
|
||||
int fimg_save_as_png(FloatImg *src, char *outname, int flags);
|
||||
\end{verbatim}
|
||||
|
||||
Tous les flags doivent être à zéro.
|
||||
|
||||
\subsubsection{Vers/depuis TIFF}\index{TIFF}
|
||||
\subsubsection{Vers TIFF}\index{TIFF}
|
||||
|
||||
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
|
||||
classique proposé par les gros scanners corporates.
|
||||
classique proposé par les scanners corporates.
|
||||
|
||||
To be done\index{XXX}
|
||||
|
||||
@ -583,7 +553,7 @@ des bords d'image.
|
||||
|
||||
% ----------------------------------
|
||||
|
||||
\subsection{Exemple de fonction}\index{exemple}\label{exemplefunc}
|
||||
\subsection{Exemple de fonction}\index{exemple}
|
||||
|
||||
Nous allons maintenant écrire une fonction intégrable dans
|
||||
le répertoire \texttt{funcs/}.
|
||||
@ -789,33 +759,30 @@ de méthodes, toutes plus légitimes que les autres.
|
||||
% -------------------------------------------------------------------
|
||||
\section{TODO}\index{TODO}\label{TODO}
|
||||
|
||||
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.
|
||||
Il reste plein de choses à faire pour que ce soit vraiment utilisable.
|
||||
|
||||
\begin{itemize}
|
||||
|
||||
\item Import/export au format \textsc{tiff}\index{tiff}.
|
||||
\item Remplacer le « fait-maison » par \textsc{libnetpnm}\index{pnm}.
|
||||
\textsl{[en cours]}.
|
||||
\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}.
|
||||
|
||||
\end{itemize}
|
||||
|
||||
% -------------------------------------------------------------------
|
||||
\section{Exemples pour yusers}\index{exemple}
|
||||
|
||||
Nous allons \textsl{essayer d'improviser} un exemple presque réel,
|
||||
avec un peu de rache\index{rache} dedans, et beaucoup de simplification.
|
||||
Ce qui est autorisé dans les exemples, mais dans la vrai vie, il ne faut
|
||||
jamais négliger le traitement des éventuelles erreurs.
|
||||
avec un peu de rache\index{rache} dedans. Ce qui est autorisé dans
|
||||
les exemples, mais dans la vrai vie, il ne faut jamais négliger
|
||||
le traitement des éventuelles erreurs.
|
||||
|
||||
Nous savons générer une image contenant des pixels aux valeurs
|
||||
probablement aléatoires, avec la commande \texttt{mkfimg},
|
||||
qui utilise le \texttt{drand48}\index{drand48} de \textsc{posix}\index{POSIX}.
|
||||
Maintenant, posons-nous une question de statisticien : ue se passe-t-il si
|
||||
nous faisons la somme de plusieurs centaines de ces images ?
|
||||
probablement aléatoires (drand48\index{drand48}). Que se passe-t-il si
|
||||
nous faisons la somme de plusieurs centaines\footnote{Des erreurs toxiques ?}
|
||||
de ces images ?
|
||||
|
||||
\begin{verbatim}
|
||||
#!/bin/bash
|
||||
@ -835,8 +802,7 @@ convert -delay 10 xx*.pnm foo.gif
|
||||
\end{verbatim}
|
||||
|
||||
Voilà, si les choses se passent mal, vous allez découvrir
|
||||
que votre \texttt{drand48} n'est pas si "drand" que ça.
|
||||
Et ce n'est pas à moi d'en tirer les conclusions...
|
||||
que votre \texttt{drand48} n'est pas si drand que ça. Séquence angoisse.
|
||||
|
||||
\subsection{Scripts}\index{scripts}\label{scripts}
|
||||
|
||||
@ -875,10 +841,6 @@ de films flous\index{film} à partir de photos floues.
|
||||
Le script \texttt{scripts/echomix.sh} est une première expérimentation
|
||||
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}
|
||||
|
||||
|
@ -1,17 +0,0 @@
|
||||
# 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
Normal file → Executable file
20
scripts/contrast-test.sh
Normal file → Executable file
@ -2,15 +2,11 @@
|
||||
|
||||
CMDPATH="/usr/local/bin"
|
||||
|
||||
WS="./tmp" # our workspace
|
||||
|
||||
GRABOPT=" -d /dev/video0 -vu -n 240 -p 0.04 "
|
||||
|
||||
GRAB=${WS}/"quux.fimg"
|
||||
COS01=${WS}/"cos01.fimg"
|
||||
COS010=${WS}/"cos010.fimg"
|
||||
SQRT=${WS}/"sqrt.fimg"
|
||||
POW2="${WS}/pow2.fimg"
|
||||
GRAB="quux.fimg"
|
||||
COS01="cos01.fimg"
|
||||
COS010="cos010.fimg"
|
||||
SQRT="sqrt.fimg"
|
||||
POW2="pow2.fimg"
|
||||
|
||||
# --------- conversion fimg -> pnm
|
||||
f2p ()
|
||||
@ -21,13 +17,11 @@ ${CMDPATH}/fimg2pnm $1 $dst
|
||||
}
|
||||
|
||||
# --------- capturer une image
|
||||
#
|
||||
${CMDPATH}/grabvidseq ${GRABOPT} -o ${GRAB}
|
||||
${CMDPATH}/grabvidseq -v -u -n 2400 -p 0.04 -o ${GRAB}
|
||||
echo ERRCODE $?
|
||||
f2p ${GRAB}
|
||||
|
||||
# ----------- traitements
|
||||
#
|
||||
${CMDPATH}/fimgfx pow2 $GRAB $POW2
|
||||
f2p $POW2
|
||||
|
||||
@ -40,7 +34,5 @@ f2p $COS01
|
||||
${CMDPATH}/fimgfx cos010 $GRAB $COS010
|
||||
f2p $COS010
|
||||
|
||||
# ----------- présentation finale
|
||||
#
|
||||
echo == Making gif89a
|
||||
convert -delay 40 *.pnm foo.gif
|
||||
|
6
scripts/shoot.sh
Normal file → Executable file
6
scripts/shoot.sh
Normal file → Executable file
@ -18,9 +18,9 @@ SHOW="no"
|
||||
# .pnm .fimg or .png
|
||||
OFORMAT="P_%04d.pnm"
|
||||
|
||||
# ces paramètres peuvent être surchargés avec
|
||||
# un fichier nommé "reglages" dans le répertoire
|
||||
# de travail.
|
||||
# ces paramètres peuvent être surchargés avec
|
||||
# un fichier nommé "reglages" dans le répertoire
|
||||
# de travail.
|
||||
|
||||
# ------------------------------------
|
||||
# overide parameters from $PWD
|
||||
|
Loading…
Reference in New Issue
Block a user