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/*.idx
|
||||||
doc/*.ilg
|
doc/*.ilg
|
||||||
doc/*.ind
|
doc/*.ind
|
||||||
doc/co*.tex
|
doc/foo.tex
|
||||||
|
|
||||||
funcs/t
|
funcs/t
|
||||||
funcs/*.o
|
funcs/*.o
|
||||||
funcs/*.png
|
funcs/*.png
|
||||||
|
@ -1,19 +1,13 @@
|
|||||||
#!/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] \
|
||||||
@ -23,25 +17,3 @@ 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,8 +9,6 @@
|
|||||||
\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}}}
|
||||||
@ -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})
|
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}
|
||||||
@ -343,7 +334,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\dots}.
|
\texttt{fimg\_type\_is\_valid(int type)} peut vous aider}.
|
||||||
|
|
||||||
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
|
||||||
@ -357,9 +348,6 @@ 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.
|
|
||||||
|
|
||||||
% _________
|
% _________
|
||||||
|
|
||||||
@ -370,7 +358,8 @@ 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, float r, float g, float b);
|
int fimg_plot_rgb (FloatImg *head, int x, int y,
|
||||||
|
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
|
||||||
@ -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
|
à 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.
|
|
||||||
|
|
||||||
% ----------------------------------
|
% ----------------------------------
|
||||||
|
|
||||||
@ -395,11 +379,6 @@ 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
|
||||||
@ -414,15 +393,9 @@ 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{cos010.tex} % XXX XXX XXX
|
\input{foo.tex} % XXX XXX XXX
|
||||||
\caption{Correcteur cos010}
|
\caption{Correcteur cos01}
|
||||||
\end{figure}
|
\end{figure}
|
||||||
|
|
||||||
Rappelons qu'il est possible pour un logiciel applicatif
|
Rappelons qu'il est possible pour un logiciel applicatif
|
||||||
@ -488,9 +461,7 @@ dans ce domaine\dots
|
|||||||
|
|
||||||
\subsubsection{Vers PNM}\index{PNM}
|
\subsubsection{Vers PNM}\index{PNM}
|
||||||
|
|
||||||
Nous avons ici 16 bits par composante, soit 65536 valeurs différentes,
|
Nous avons ici 16 bits par composante, mais au prix
|
||||||
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
|
||||||
@ -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);
|
int fimg_save_as_png(FloatImg *src, char *outname, int flags);
|
||||||
\end{verbatim}
|
\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
|
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 gros scanners corporates.
|
classique proposé par les scanners corporates.
|
||||||
|
|
||||||
To be done\index{XXX}
|
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
|
Nous allons maintenant écrire une fonction intégrable dans
|
||||||
le répertoire \texttt{funcs/}.
|
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}
|
\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, et beaucoup de simplification.
|
avec un peu de rache\index{rache} dedans. Ce qui est autorisé dans
|
||||||
Ce qui est autorisé dans les exemples, mais dans la vrai vie, il ne faut
|
les exemples, mais dans la vrai vie, il ne faut jamais négliger
|
||||||
jamais négliger le traitement des éventuelles erreurs.
|
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, avec la commande \texttt{mkfimg},
|
probablement aléatoires (drand48\index{drand48}). Que se passe-t-il si
|
||||||
qui utilise le \texttt{drand48}\index{drand48} de \textsc{posix}\index{POSIX}.
|
nous faisons la somme de plusieurs centaines\footnote{Des erreurs toxiques ?}
|
||||||
Maintenant, posons-nous une question de statisticien : ue se passe-t-il si
|
de ces images ?
|
||||||
nous faisons la somme de plusieurs centaines de ces images ?
|
|
||||||
|
|
||||||
\begin{verbatim}
|
\begin{verbatim}
|
||||||
#!/bin/bash
|
#!/bin/bash
|
||||||
@ -835,8 +802,7 @@ 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.
|
que votre \texttt{drand48} n'est pas si drand que ça. Séquence angoisse.
|
||||||
Et ce n'est pas à moi d'en tirer les conclusions...
|
|
||||||
|
|
||||||
\subsection{Scripts}\index{scripts}\label{scripts}
|
\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
|
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}
|
||||||
|
|
||||||
|
@ -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"
|
CMDPATH="/usr/local/bin"
|
||||||
|
|
||||||
WS="./tmp" # our workspace
|
GRAB="quux.fimg"
|
||||||
|
COS01="cos01.fimg"
|
||||||
GRABOPT=" -d /dev/video0 -vu -n 240 -p 0.04 "
|
COS010="cos010.fimg"
|
||||||
|
SQRT="sqrt.fimg"
|
||||||
GRAB=${WS}/"quux.fimg"
|
POW2="pow2.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 ()
|
||||||
@ -21,13 +17,11 @@ ${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
|
||||||
|
|
||||||
@ -40,7 +34,5 @@ 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
|
||||||
|
0
scripts/shoot.sh
Normal file → Executable file
0
scripts/shoot.sh
Normal file → Executable file
Loading…
Reference in New Issue
Block a user