forked from tTh/FloatImg
wouaou, what a nicer documentation
This commit is contained in:
parent
b5fa68864a
commit
a78d6c2a75
|
@ -2,6 +2,8 @@
|
|||
|
||||
DOC=the_floatimg_hack
|
||||
|
||||
bash ./mkgraf.sh
|
||||
|
||||
pdflatex $DOC.tex
|
||||
|
||||
makeindex $DOC
|
||||
|
|
|
@ -0,0 +1,19 @@
|
|||
#!/bin/bash
|
||||
|
||||
PI=" 3.141592654 "
|
||||
OUT="foo.tex"
|
||||
|
||||
gnuplot << __EOF__
|
||||
|
||||
set term latex
|
||||
set output "$OUT"
|
||||
set title "COS010"
|
||||
|
||||
plot \
|
||||
[0:1] [0:1] \
|
||||
(0.5 - 0.5 * cos(x*$PI)) \
|
||||
with line
|
||||
|
||||
__EOF__
|
||||
|
||||
wc $OUT
|
|
@ -21,6 +21,7 @@
|
|||
|
||||
\setlength \parskip {0.40em}
|
||||
|
||||
\setlength{\hoffset}{0em}
|
||||
\setlength{\textheight}{640pt}
|
||||
\setlength{\textwidth}{422pt}
|
||||
\setlength{\marginparwidth}{10pt}
|
||||
|
@ -82,8 +83,6 @@ visée. Les justifications mathématiques attendront le retour
|
|||
du schmod777. Ceci dit, rien ne nous empêche d'aller consulter
|
||||
Wikipedia~:
|
||||
|
||||
% XXX XXX XXX\vspace{1em}
|
||||
|
||||
\begin{quotation}
|
||||
An IEEE 754 32-bit base-2 floating-point variable has
|
||||
a maximum value of
|
||||
|
@ -99,7 +98,8 @@ IEEE 754-1985.
|
|||
|
||||
Ce qui nous conduit à estimer qu'il est possible de cumuler environ
|
||||
quelques milliers d'images standard à 256 niveaux, sans trop avoir
|
||||
à se soucier des éventuelles pertes de précision.
|
||||
à se soucier des éventuelles pertes de précision. Mais ça demande
|
||||
à être confirmé par des esprits supérieurs.
|
||||
|
||||
% -------------------------------------------------------------------
|
||||
|
||||
|
@ -109,19 +109,15 @@ quelques milliers d'images standard à 256 niveaux, sans trop avoir
|
|||
basiques en C, gérant la structure des données d'image en mémoire
|
||||
et sur disque. Ça a été imaginé de façon presque empirique,
|
||||
mais nous sommes tous là pour améliorer les choses, dans
|
||||
la mesure de nos moyes.
|
||||
la mesure de nos moyens.
|
||||
Nous allons donc directement rentrer au cœur du problème.
|
||||
|
||||
% XXX XXX XXX\vspace{1em}
|
||||
|
||||
Pour commencer par quelques chose de simple,
|
||||
nous allons créer une image RGB\index{RGB} complètement noire,
|
||||
puis l'enregistrer dans un fichier \texttt{.fimg}\index{.fimg},
|
||||
un format complètement inconnu, puisque je viens de l'inventer
|
||||
à l'instant même.
|
||||
|
||||
% XXX XXX XXX\vspace{1em}
|
||||
|
||||
Tout d'abord, nous devons déclarer et garnir quelques variables
|
||||
pour gérer la machinerie interne.
|
||||
|
||||
|
@ -173,8 +169,6 @@ Nous avons donc sous la main une mécanique qui ne demande qu'à
|
|||
faire des trucs futiles et des images qui clignotent.
|
||||
La suite vers la page \pageref{codaz}.
|
||||
|
||||
% XXX XXX XXX\vspace{1em}
|
||||
|
||||
Vous trouverez dans le répertoire \texttt{tools/}\index{tools/}
|
||||
d'autres exemples de mise en œuvre des fonctions disponibles
|
||||
sous formes d'outils en ligne de commande,
|
||||
|
@ -207,8 +201,6 @@ Dans chacun des répertoires à traiter, ce script devrait trouver
|
|||
un Makefile et un fichier \texttt{t.c} qui est le source de la cible
|
||||
par défaut du make.
|
||||
|
||||
% XXX XXX XXX\vspace{1em}
|
||||
|
||||
Pour le moment, la procédure d'installation est un peu rude,
|
||||
pour ne pas dire clairement sommaire.
|
||||
Si le résultat de l'étape compilation vous semble correct,
|
||||
|
@ -278,8 +270,6 @@ d'idées approximatives. C'est cette utilisation constructive de larache
|
|||
qui fait que seuls les champs documentés de cette structure ne sont
|
||||
pas explosifs.
|
||||
|
||||
% XXX XXX XXX\vspace{1em}
|
||||
|
||||
Mais revenons aux choses sérieuses\dots
|
||||
Les deux champs suivants (fval et count) sont à la disposition du
|
||||
\textsl{yuser}
|
||||
|
@ -288,8 +278,6 @@ chose : imaginons un périphérique de capture qui nous fournisse des
|
|||
images en gris sur 4 bits. Et que nous voulions cumuler\index{cumul}
|
||||
quelques images...
|
||||
|
||||
% XXX XXX XXX\vspace{1em}
|
||||
|
||||
Le champ \textsl{count} sera mis à 0 et
|
||||
le champ \textsl{fval} sera initialisé à 15.0
|
||||
(qui est la valeur maximale que peut renvoyer le capteur).
|
||||
|
@ -324,8 +312,6 @@ documentés dans ce document, et les autres sont dangereux à
|
|||
toucher. Les types d'images actuellement gérés sont les trois grands
|
||||
classiques : gray, rgb et rgba. et expliquées quelques lignes plus haut.
|
||||
|
||||
% XXX XXX XXX\vspace{1em}
|
||||
|
||||
C'est bien beau d'être enfin résident en mémoire centrale, mais
|
||||
pouvoir aussi exister à long terme en étant stocké dans la matrice
|
||||
est tout aussi pertinent. Il y a deux opérations qui supportent le
|
||||
|
@ -347,8 +333,11 @@ int fimg_fileinfos(char *fname, int datas[3]);
|
|||
\end{verbatim}
|
||||
|
||||
Si tout s'est bien passé (valeur retournée égale à 0),
|
||||
on va trouver la largeur dans datas[0],
|
||||
la hauteur dans datas[1] et le type dans datas[2].
|
||||
on va trouver la largeur dans \texttt{datas[0]},
|
||||
la hauteur dans \texttt{datas[1]} et le type dans \texttt{datas[2]}.
|
||||
|
||||
La fonction \texttt{fimg\_type\_is\_valid(int type)} peut
|
||||
vous aider.
|
||||
|
||||
% _________
|
||||
|
||||
|
@ -378,11 +367,13 @@ photographie\index{photographie} en cumul\index{cumul}.
|
|||
Certaines opérations d'ajustement du contraste d'une image
|
||||
semblent cohérents avec la notion d'image flottante.
|
||||
Certains d'entre eux, les plus simples, sont disponibles.
|
||||
Les autres sont à imaginer.
|
||||
|
||||
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
|
||||
maximale \textsl{supposée} de l'image source.
|
||||
maximale \textsl{supposée} de l'image source,
|
||||
valeur qui peut être déterminée de plusieurs manières.
|
||||
|
||||
\begin{verbatim}
|
||||
/* source in lib/contrast.c */
|
||||
|
@ -392,6 +383,11 @@ int fimg_cos_01(FloatImg *s, FloatImg *d, double maxval);
|
|||
int fimg_cos_010(FloatImg *s, FloatImg *d, double maxval);
|
||||
\end{verbatim}
|
||||
|
||||
\begin{figure}
|
||||
\input{foo.tex} % XXX XXX XXX
|
||||
\caption{Correcteur cos01}
|
||||
\end{figure}
|
||||
|
||||
Rappelons qu'il est possible pour un logiciel applicatif
|
||||
comme \texttt{grabvidseq} (Cf page \pageref{grabvidseq})
|
||||
de renseigner deux champs du descripteur d'image avec des
|
||||
|
@ -471,11 +467,11 @@ Les autres bits ne sont pas utilisés et doivent être à zéro.
|
|||
|
||||
\subsubsection{Vers PNG}\index{PNG}
|
||||
|
||||
Actuellement, on peut enregistrer uniquement en mode 8 bits par composante,
|
||||
mais avec une bonne compression.
|
||||
Actuellement, on peut enregistrer uniquement en mode RGB, 8 bits par composante,
|
||||
mais on a quand même une bonne compression, ça compense.
|
||||
|
||||
\begin{verbatim}
|
||||
int fimg_save_as_png(FloatImg *src, char *outname, int flags)
|
||||
int fimg_save_as_png(FloatImg *src, char *outname, int flags);
|
||||
\end{verbatim}
|
||||
|
||||
\subsubsection{Vers TIFF}\index{TIFF}
|
||||
|
@ -515,12 +511,20 @@ To be done\index{XXX}
|
|||
|
||||
\subsection{Exemple de fonction}\index{exemple}
|
||||
|
||||
Nous allons écrire une fonction qui va faire quelque chose
|
||||
Nous allons maintenant écrire une fonction intégrable dans
|
||||
le répertoire \texttt{funcs/}.
|
||||
Elle aura donc accès aux \textsl{internals}%
|
||||
\footnote{que je peux décider de changer n'importe quand}
|
||||
de \textsc{FloatImg},
|
||||
une chose qui est en principe interdit aux programmes
|
||||
\textsl{enduser}. Soyez prudents.
|
||||
|
||||
Cette fonction va faire quelque chose
|
||||
à partir d'une image source et d'une valeur, et écrire le
|
||||
résultat dans une image de destination.
|
||||
Pour simplifier les choses, nous n'allons traiter que les
|
||||
images de type \textsc{FIMG\_TYPE\_RGB}, de loin le plus
|
||||
répandu.
|
||||
répandu par les temps qui courent.
|
||||
|
||||
\begin{verbatim}
|
||||
int fimg_example(FloatImg *s, FloatImg *d, float value)
|
||||
|
@ -528,6 +532,7 @@ int fimg_example(FloatImg *s, FloatImg *d, float value)
|
|||
int size, index;
|
||||
|
||||
if ( s->type!=FIMG_TYPE_RGB || d->type!=FIMG_TYPE_RGB) {
|
||||
perror("fimg_example");
|
||||
return -1;
|
||||
}
|
||||
|
||||
|
@ -560,19 +565,19 @@ in-fine sur des objets que l'on peut considérer comme « physiques »,
|
|||
il est important de passer à une utilisation
|
||||
normale\footnote{Il y a une vie en dehors de git.} et construire
|
||||
des trucs qui mettent en action le code primitif.
|
||||
% XXX XXX XXX\vspace{1em}
|
||||
|
||||
Ces machins ont en commun deux options bien pratiques~:
|
||||
\texttt{-h} pour avoir un résumé des options disponibles
|
||||
et \texttt{-v} qui augmente la puissance de bavardage.
|
||||
Ces machins ont en commun quelques options bien pratiques~:
|
||||
\texttt{-h} pour avoir un résumé des options disponibles,
|
||||
\texttt{-v} qui augmente la puissance de bavardage, et
|
||||
\texttt{-K nn.nn} pour un paramètre flottant.
|
||||
Dans un avenir incertain, il existera des pages de man\index{man}.
|
||||
|
||||
% ---------------------
|
||||
|
||||
\subsection{mkfimg}\index{mkfimg}\label{mkfimg}
|
||||
|
||||
Création d'un fichier contenant une image de « teinte » constante
|
||||
(ou pas).
|
||||
Propose la création d'un fichier contenant une image de « teinte »
|
||||
constante (ou pas).
|
||||
Cette notion de teinte est assez inconsistante pour le moment,
|
||||
mais ça n'est pas si grave que ça.
|
||||
|
||||
|
@ -589,7 +594,7 @@ La plupart des types d'image générée prennent un paramètre flottant qui
|
|||
devra être donné avec l'option \texttt{-k F.F} avec une valeur par défaut
|
||||
à $1.0$.
|
||||
|
||||
\begin{description}
|
||||
\begin{description} \index{XXX}
|
||||
\item [black/gray/grey:] efface avec 0.0 (black) ou avec la valeur
|
||||
\texttt{-k} (gray).
|
||||
\item [drand48:] beaucoup de bruit dans chacun des canaux.
|
||||
|
@ -643,7 +648,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
|
||||
cos01 cos010 pow2 sqrt gray0 xper
|
||||
\end{verbatim}
|
||||
|
||||
Certaines de ces opérations ont besoin d'un paramètre flottant.
|
||||
|
@ -681,7 +686,9 @@ options:
|
|||
|
||||
Pour des operateurs paramétrable (comme \texttt{mix}), le paramêtre
|
||||
flottant doit être fourni en utilisant l'option \texttt{-k}.
|
||||
La véracité mathématique n'est pas garantie.
|
||||
La véracité mathématique n'est pas garantie. Et n'oubliez pas que
|
||||
les valeurs négatives peuvent être la cause de \textsl{glitches}
|
||||
de qualitay.
|
||||
|
||||
\subsection{fimg2png, fimg2pnm, fimg2tiff}
|
||||
\index{fimg2png}\label{fimg2png}
|
||||
|
@ -692,8 +699,6 @@ Quelques petits proggies pour exporter notre format\index{.fimg} secret
|
|||
vers des choses plus directement utilisables. À condition que le
|
||||
code soit écrit et documenté.
|
||||
|
||||
% XXX XXX XXX\vspace{1em}
|
||||
|
||||
D'un autre coté, écrire un greffon d'import/export pour
|
||||
Gimp\index{Gimp} ou Imagemagick\index{Imagemagick} ou Krita\index{Krita}
|
||||
ne devrait pas être trop difficile. Des volontaires ?
|
||||
|
@ -702,7 +707,6 @@ ne devrait pas être trop difficile. Des volontaires ?
|
|||
|
||||
Nous avons vu dans ce document que chaque image flottante pouvait
|
||||
avoir plusieurs plans de réalité. Il ne faut en négliger aucun.
|
||||
% XXX XXX XXX\vspace{1em}
|
||||
|
||||
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
|
||||
|
@ -713,8 +717,6 @@ de méthodes, toutes plus légitimes que les autres.
|
|||
|
||||
Il reste plein de choses à faire pour que ce soit vraiment utilisable.
|
||||
|
||||
% XXX XXX XXX\vspace{1em}
|
||||
|
||||
\begin{itemize}
|
||||
|
||||
\item Import/export au format \textsc{tiff}\index{tiff}.
|
||||
|
@ -733,8 +735,6 @@ 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.
|
||||
|
||||
% XXX XXX XXX\vspace{1em}
|
||||
|
||||
Nous savons générer une image contenant des pixels aux valeurs
|
||||
probablement aléatoires (drand48\index{drand48}). Que se passe-t-il si
|
||||
nous faisons la somme de plusieurs centaines\footnote{Des erreurs toxiques ?}
|
||||
|
@ -762,14 +762,40 @@ que votre \texttt{drand48} n'est pas si drand que ça. Séquence angoisse.
|
|||
|
||||
\subsection{Scripts}\index{scripts}\label{scripts}
|
||||
|
||||
Le script bash\index{bash} \texttt{shoot.sh} est un front-end rudimentaire
|
||||
Le script bash\index{bash} \texttt{scripts/shoot.sh} est un front-end
|
||||
encore un peu rudimentaire
|
||||
vers le programme de capture d'image décrit page \pageref{grabvidseq}.
|
||||
Il utilise deux fichiers dans le répertoire de travail~:
|
||||
\textit{reglages} et \textit{compteur}.
|
||||
\textit{reglages} et \textit{compteur}. Le premier est, en fait,
|
||||
un bout de shell affectant quelques variables, ou plutôt, les surchargent.
|
||||
|
||||
\begin{verbatim}
|
||||
OPTIONS="${OPTIONS} -v -c pow2 "
|
||||
SHOW="yes"
|
||||
NBRE=1000
|
||||
PERIOD=0
|
||||
OFORMAT="p_%04d.png"
|
||||
\end{verbatim}
|
||||
|
||||
La première ligne demande, en plus des options par défaut, plus de
|
||||
bavardage, et un changement de contraste. La seconde demande
|
||||
l'affichage de la photo. Les deux suivantes demandent la
|
||||
capture de 1000 images à la cadence méga-blast.
|
||||
La dernière est moins simple~: \texttt{man sprintf}\index{printf}
|
||||
pour comprendre.
|
||||
|
||||
Quand au second fichier, il contient un compteur (stocké en ascii) qui
|
||||
est incrémenté après chaque capture réussie. Et ce compteur est
|
||||
utilisable par la variable \texttt{OFORMAT} que nous avons
|
||||
vue quelques lignes plus haut.
|
||||
|
||||
\subsection{Fonderie}\index{fonderie}\label{fonderie}
|
||||
|
||||
Projet externe en cours d'expérimentation.
|
||||
Ce projet externe\footnote{... pour le moment, j'ai des soucis sur
|
||||
l'architecture du \textbf{pipdeprod} à adopter\dots} est destiné à la confection
|
||||
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}.
|
||||
|
||||
% -------------------------------------------------------------------
|
||||
\section{Video for Linux}\index{v4l2}
|
||||
|
@ -778,8 +804,6 @@ Donc, maintenant, nous savons un peu tripoter ces images flottantes.
|
|||
Et nous devons nous poser une question fondamentale\footnote{primitive ?}
|
||||
sur la provenance de ces données prétendant être des images.
|
||||
|
||||
% XXX XXX XXX\vspace{1em}
|
||||
|
||||
En fait, notre désir secret est la découverte des choses cachées du
|
||||
monde qui nous entoure. Nous voulons des images du \textbf{réel} et
|
||||
pour cela, l'outil le plus commun, le plus répandu,
|
||||
|
@ -839,8 +863,6 @@ Pour être rigoureux dans la prise de vue, ce $N$ doit
|
|||
N'hésitez pas à faire des essais, le résultat est parfois
|
||||
aléatoire, surtout avec une caméra qui bouge.
|
||||
|
||||
% XXX XXX XXX\vspace{1em}
|
||||
|
||||
\textbf{Là, il manque un schéma\dots}
|
||||
|
||||
\subsection{video-infos}\index{video-infos}\label{video-infos}
|
||||
|
@ -873,8 +895,6 @@ Sauf que c'est quand même un peu galère à déplacer, il faut
|
|||
avoir un shell pour déclencher, c'est pas facile à utiliser
|
||||
en mode portnawak\dots
|
||||
|
||||
% XXX XXX XXX\vspace{1em}
|
||||
|
||||
L'idée est donc de construire un appareil autonome, basé sur un Raspi et
|
||||
une webcam \textsc{usb}\index{USB}, pilotable par \textsc{lirc}\index{LIRC},
|
||||
alimenté par une (grosse) batterie et permettant d'aller
|
||||
|
|
Loading…
Reference in New Issue