Compare commits
3 Commits
db715485a2
...
37ee68278b
Author | SHA1 | Date | |
---|---|---|---|
37ee68278b | |||
33daa84530 | |||
f9c6b65ca8 |
3
.gitignore
vendored
3
.gitignore
vendored
@ -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
|
||||||
|
@ -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
|
||||||
|
@ -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
17
scripts/README.md
Normal 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
20
scripts/contrast-test.sh
Executable file → Normal 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
6
scripts/shoot.sh
Executable file → Normal 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
|
||||||
|
Loading…
Reference in New Issue
Block a user