diff --git a/doc/the_floatimg_hack.tex b/doc/the_floatimg_hack.tex index 640204f4..ed33f1df 100644 --- a/doc/the_floatimg_hack.tex +++ b/doc/the_floatimg_hack.tex @@ -21,6 +21,10 @@ \usepackage[verbose]{layout} \makeindex + +% ------ a few new commands +\newcommand{\interparagraphe { \vspace{60pt} } } + % ------------------------------------------------------------------- \title{Floating images processing} \author{tTh} @@ -31,6 +35,7 @@ \section{Image flottante ?} Mais de quoi parle-t-on exactement ? + \vspace{1em} Traditionnellement, les valeurs des pixels dans les images @@ -41,11 +46,15 @@ composante, mais c'est loin d'être le cas général. J'ai donc souhaité aller plus loin, et coder chaque canal de chaque pixel en virgule flottante sur 32bits, le type \texttt{float}\index{float} du langage C. + \vspace{1em} Attention, tout le code que nous allons voir ensemble est en perpétuelle évolution\footnote{voir page \pageref{TODO}}, et sa fiablité reste à démontrer\index{valgrind}. +Mais le service après-vente est assez réactif. Du moins +pour ceux qui suivent \texttt{\#tetalab} sur le réseau +IRC de Freenode. % ------------------------------------------------------------------- @@ -57,7 +66,9 @@ et sa fiablité reste à démontrer\index{valgrind}. \textsc{FloatImg} a débuté sous la forme de quelques fonctions basiques en C, gérant la structure des données d'image en mémoire -et sur disque. +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. Nous allons donc directement rentrer au cœur du problème. \vspace{1em} @@ -123,7 +134,7 @@ La suite vers la page \pageref{codaz}. 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, -décrits en page \pageref{outils}. +lesquels sont décrits en page \pageref{outils}. % ------------------------------------------------------------------- \section{Installation} @@ -134,8 +145,13 @@ Vous devez, en dehors des outils classiques (bash, gcc, make\dots), avoir quelques bibliothèques installées\footnote{Les \texttt{-dev} pour Debain et dérivées}~: libv4l2, libpnglite, libtiff, libpnm, et probablement d'autres choses. -Être familier avec l'utilisation du shell\index{shell} et l'écriture -de Makefile's sera un plus. + +\vspace{1em} + +Il est même quasiment certain que Bash soit indispensable, tout +comme \textsc{gnu}/make\index{make}. +Une connaissance de base de l'utilisation du shell\index{shell} +et de l'écriture de Makefile's sera un plus. \subsection{Compilation} @@ -145,6 +161,7 @@ de faire un Makefile récursif, mais\dots}. Dans chacun des répertoires à traiter, ce script devrait trouver un Makefile et un fichier \texttt{t.c} source de la cible par défaut du make. + \vspace{1em} Pour le moment, la procédure d'installation est un peu rude, @@ -155,6 +172,8 @@ dans un emplacement approprié, par exemple \texttt{/usr/local/include} et \texttt{/usr/local/lib}. + + % ------------------------------------------------------------------- \section{Utilisation coté codeur}\label{codaz} @@ -387,6 +406,7 @@ 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. \subsection{fimg2png, fimg2pnm, fimg2tiff} \index{fimg2png}\label{fimg2png} @@ -395,7 +415,11 @@ Pour des operateurs paramétrable (comme \texttt{mix}), le paramêtre flottant d Quelques petits proggies pour exporter notre format\index{.fimg} secret vers des choses plus directement utilisables. À condition que le -code soit écrit et documenté en page \pageref{funcs}. +code soit écrit et documenté. Peut-être en page \pageref{funcs}\dots + +D'un autre coté, écrire un greffon d'import/export pour +Gimp\index{Gimp} ou Imagemagick\index{Imagemagick} +ne devrait pas être trop difficile. Des volontaires ? \subsection{fimg2gray}\index{fimg2gray}\label{fimg2gray} @@ -426,25 +450,39 @@ Il reste plein de choses à faire pour que ce soit vraiment utilisable. % ------------------------------------------------------------------- \section{Exemples pour yusers}\index{example} +Nous allons \textsl{essayer d'improviser} un exemple presque réel, +avec un peu de rache\index{rache} dedans. + +\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 ?} +de ces images ? + \begin{verbatim} #!/bin/bash ACCU="quux.fimg" TMPF="tmp.fimg" -DIMS="640 480" +DIMS="320 240" -mkfimg ${ACCU} ${DIMS} +mkfimg $ACCU $DIMS -for i in {0..100} +for i in {0..1000} do - fname=$( printf "f%04d.pnm" $i ) - echo $fname mkfimg -t drand48 ${TMPF} ${DIMS} + fname=$( printf "xx%04d.pnm" $i ) + fimgops $ACCU $TMPF add $ACCU + fimg2pnm -v -g $ACCU $fname done + +convert -delay 10 xx*.pnm foo.gif \end{verbatim} -En fait, je n'ai pas la moindre idée de ce que peut bien -faire ce code\dots +Voilà, si les choses se passent mal, vous allez découvrir +que votre drand n'est pas si drand que ça. + % ------------------------------------------------------------------- \section{Video for Linux}\index{v4l2} @@ -462,8 +500,10 @@ v4l2. \subsection{grabvidseq}\index{grabvidseq}\label{grabvidseq} -Un logiciel en devenir, qui permet déja la capture d'images en -\textsl{longue pose} selon la méthode du cumul\index{cumul}. +Un logiciel en évolution, qui permet déja la capture d'images en +\textsl{longue pose} selon la méthode du cumul\index{cumul}, et +devrait bientôt retrouver sa capacité à enregistrer des +séquences. \begin{verbatim} tth@debian:~/Devel/FloatImg/v4l2$ ./grabvidseq -h @@ -477,13 +517,22 @@ options : -s WxH size of capture -u try upscaling... -v increase verbosity + -X arg Xperiment option \end{verbatim} La plupart de ces options ont un usage quasi-évident. L'option \texttt{-s} doit correspondre à une des résolutions possibles de votre capteur. Le type du fichier en sortie (option \texttt{-o}) est déterminé par -l'extension. +l'extension, actuellement +seulement \texttt{.fimg} et \texttt{.pnm} sont reconnus. +La conversion en gris (option \texttt{-g}) mérite un +peu plus de travail, et une paramétrisation plus facile. + +L'option \texttt{-X} me permet d'intégrer des \textit{fritures} +expérimentales dans le binaire, et ne doit donc pas être +utilisée dans des scripts si on a des visions à long +terme. \subsubsection{Upscaling}\index{upscaling}\label{upscaling} @@ -493,7 +542,16 @@ de l'image, en profitant du fait que l'on est capable de prendre $N$ images en rafale. Pour être rigoureux dans la prise de vue, ce $N$ doit -être un multiple de 4. +être un multiple de 4, surtout si le nombre de capture est faible.. + +\vspace{1em} + +\textbf{Là, il manque un schéma\dots} + +\subsubsection{shoot.sh}\index{shoot.sh}\label{shoot.sh} + +\hspace{4cm}XXX\index{XXX} + \subsection{video-infos}\index{video-infos}\label{video-infos} @@ -504,12 +562,16 @@ Quelles sont ses possibilités de réglage ? tth@debian:~/Devel/FloatImg$ v4l2/video-infos -h Options : -d select the video device - -K set the K parameter + -K nnn set the K parameter -l list video devices -T bla add a title -v increase verbosity \end{verbatim} +Je me sois d'avouer qu'il reste quelques points mystérieux dans +l'\textsc{api} de \textsc{v4l2}, et donc, que ce que raconte +ce logiciel doit être pris avec des pincettes. En particulier +la liste des résolutions disponibles. % ------------------------------------------------------------------- \section{Et pour la suite ?}