forked from tTh/FloatImg
more doc
This commit is contained in:
parent
a1657c8b18
commit
efac70ab2d
|
@ -21,6 +21,10 @@
|
||||||
\usepackage[verbose]{layout}
|
\usepackage[verbose]{layout}
|
||||||
|
|
||||||
\makeindex
|
\makeindex
|
||||||
|
|
||||||
|
% ------ a few new commands
|
||||||
|
\newcommand{\interparagraphe { \vspace{60pt} } }
|
||||||
|
|
||||||
% -------------------------------------------------------------------
|
% -------------------------------------------------------------------
|
||||||
\title{Floating images processing}
|
\title{Floating images processing}
|
||||||
\author{tTh}
|
\author{tTh}
|
||||||
|
@ -31,6 +35,7 @@
|
||||||
\section{Image flottante ?}
|
\section{Image flottante ?}
|
||||||
|
|
||||||
Mais de quoi parle-t-on exactement ?
|
Mais de quoi parle-t-on exactement ?
|
||||||
|
|
||||||
\vspace{1em}
|
\vspace{1em}
|
||||||
|
|
||||||
Traditionnellement, les valeurs des pixels dans les images
|
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
|
J'ai donc souhaité aller plus loin, et coder chaque canal de
|
||||||
chaque pixel en virgule flottante sur 32bits, le type
|
chaque pixel en virgule flottante sur 32bits, le type
|
||||||
\texttt{float}\index{float} du langage C.
|
\texttt{float}\index{float} du langage C.
|
||||||
|
|
||||||
\vspace{1em}
|
\vspace{1em}
|
||||||
|
|
||||||
Attention, tout le code que nous allons voir ensemble est en
|
Attention, tout le code que nous allons voir ensemble est en
|
||||||
perpétuelle évolution\footnote{voir page \pageref{TODO}},
|
perpétuelle évolution\footnote{voir page \pageref{TODO}},
|
||||||
et sa fiablité reste à démontrer\index{valgrind}.
|
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
|
\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
|
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.
|
Nous allons donc directement rentrer au cœur du problème.
|
||||||
|
|
||||||
\vspace{1em}
|
\vspace{1em}
|
||||||
|
@ -123,7 +134,7 @@ La suite vers la page \pageref{codaz}.
|
||||||
Vous trouverez dans le répertoire \texttt{tools/}\index{tools/}
|
Vous trouverez dans le répertoire \texttt{tools/}\index{tools/}
|
||||||
d'autres exemples de mise en œuvre des fonctions disponibles
|
d'autres exemples de mise en œuvre des fonctions disponibles
|
||||||
sous formes d'outils en ligne de commande,
|
sous formes d'outils en ligne de commande,
|
||||||
décrits en page \pageref{outils}.
|
lesquels sont décrits en page \pageref{outils}.
|
||||||
|
|
||||||
% -------------------------------------------------------------------
|
% -------------------------------------------------------------------
|
||||||
\section{Installation}
|
\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}
|
avoir quelques bibliothèques installées\footnote{Les \texttt{-dev}
|
||||||
pour Debain et dérivées}~: libv4l2, libpnglite, libtiff, libpnm,
|
pour Debain et dérivées}~: libv4l2, libpnglite, libtiff, libpnm,
|
||||||
et probablement d'autres choses.
|
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}
|
\subsection{Compilation}
|
||||||
|
|
||||||
|
@ -145,6 +161,7 @@ de faire un Makefile récursif, mais\dots}.
|
||||||
Dans chacun des
|
Dans chacun des
|
||||||
répertoires à traiter, ce script devrait trouver un Makefile et un fichier
|
répertoires à traiter, ce script devrait trouver un Makefile et un fichier
|
||||||
\texttt{t.c} source de la cible par défaut du make.
|
\texttt{t.c} source de la cible par défaut du make.
|
||||||
|
|
||||||
\vspace{1em}
|
\vspace{1em}
|
||||||
|
|
||||||
Pour le moment, la procédure d'installation est un peu rude,
|
Pour le moment, la procédure d'installation est un peu rude,
|
||||||
|
@ -155,6 +172,8 @@ dans un emplacement
|
||||||
approprié, par exemple
|
approprié, par exemple
|
||||||
\texttt{/usr/local/include} et \texttt{/usr/local/lib}.
|
\texttt{/usr/local/include} et \texttt{/usr/local/lib}.
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
% -------------------------------------------------------------------
|
% -------------------------------------------------------------------
|
||||||
\section{Utilisation coté codeur}\label{codaz}
|
\section{Utilisation coté codeur}\label{codaz}
|
||||||
|
|
||||||
|
@ -387,6 +406,7 @@ options:
|
||||||
|
|
||||||
Pour des operateurs paramétrable (comme \texttt{mix}), le paramêtre flottant doit
|
Pour des operateurs paramétrable (comme \texttt{mix}), le paramêtre flottant doit
|
||||||
être fourni en utilisant l'option \texttt{-k}.
|
être fourni en utilisant l'option \texttt{-k}.
|
||||||
|
La véracité mathématique n'est pas garantie.
|
||||||
|
|
||||||
\subsection{fimg2png, fimg2pnm, fimg2tiff}
|
\subsection{fimg2png, fimg2pnm, fimg2tiff}
|
||||||
\index{fimg2png}\label{fimg2png}
|
\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
|
Quelques petits proggies pour exporter notre format\index{.fimg} secret
|
||||||
vers des choses plus directement utilisables. À condition que le
|
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}
|
\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}
|
\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}
|
\begin{verbatim}
|
||||||
#!/bin/bash
|
#!/bin/bash
|
||||||
|
|
||||||
ACCU="quux.fimg"
|
ACCU="quux.fimg"
|
||||||
TMPF="tmp.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
|
do
|
||||||
fname=$( printf "f%04d.pnm" $i )
|
|
||||||
echo $fname
|
|
||||||
mkfimg -t drand48 ${TMPF} ${DIMS}
|
mkfimg -t drand48 ${TMPF} ${DIMS}
|
||||||
|
fname=$( printf "xx%04d.pnm" $i )
|
||||||
|
fimgops $ACCU $TMPF add $ACCU
|
||||||
|
fimg2pnm -v -g $ACCU $fname
|
||||||
done
|
done
|
||||||
|
|
||||||
|
convert -delay 10 xx*.pnm foo.gif
|
||||||
\end{verbatim}
|
\end{verbatim}
|
||||||
|
|
||||||
En fait, je n'ai pas la moindre idée de ce que peut bien
|
Voilà, si les choses se passent mal, vous allez découvrir
|
||||||
faire ce code\dots
|
que votre drand n'est pas si drand que ça.
|
||||||
|
|
||||||
|
|
||||||
% -------------------------------------------------------------------
|
% -------------------------------------------------------------------
|
||||||
\section{Video for Linux}\index{v4l2}
|
\section{Video for Linux}\index{v4l2}
|
||||||
|
@ -462,8 +500,10 @@ v4l2.
|
||||||
|
|
||||||
\subsection{grabvidseq}\index{grabvidseq}\label{grabvidseq}
|
\subsection{grabvidseq}\index{grabvidseq}\label{grabvidseq}
|
||||||
|
|
||||||
Un logiciel en devenir, qui permet déja la capture d'images en
|
Un logiciel en évolution, qui permet déja la capture d'images en
|
||||||
\textsl{longue pose} selon la méthode du cumul\index{cumul}.
|
\textsl{longue pose} selon la méthode du cumul\index{cumul}, et
|
||||||
|
devrait bientôt retrouver sa capacité à enregistrer des
|
||||||
|
séquences.
|
||||||
|
|
||||||
\begin{verbatim}
|
\begin{verbatim}
|
||||||
tth@debian:~/Devel/FloatImg/v4l2$ ./grabvidseq -h
|
tth@debian:~/Devel/FloatImg/v4l2$ ./grabvidseq -h
|
||||||
|
@ -477,13 +517,22 @@ options :
|
||||||
-s WxH size of capture
|
-s WxH size of capture
|
||||||
-u try upscaling...
|
-u try upscaling...
|
||||||
-v increase verbosity
|
-v increase verbosity
|
||||||
|
-X arg Xperiment option
|
||||||
\end{verbatim}
|
\end{verbatim}
|
||||||
|
|
||||||
La plupart de ces options ont un usage quasi-évident.
|
La plupart de ces options ont un usage quasi-évident.
|
||||||
L'option \texttt{-s} doit correspondre à une des
|
L'option \texttt{-s} doit correspondre à une des
|
||||||
résolutions possibles de votre capteur. Le type du
|
résolutions possibles de votre capteur. Le type du
|
||||||
fichier en sortie (option \texttt{-o}) est déterminé par
|
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}
|
\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.
|
de prendre $N$ images en rafale.
|
||||||
|
|
||||||
Pour être rigoureux dans la prise de vue, ce $N$ doit
|
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}
|
\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
|
tth@debian:~/Devel/FloatImg$ v4l2/video-infos -h
|
||||||
Options :
|
Options :
|
||||||
-d select the video device
|
-d select the video device
|
||||||
-K set the K parameter
|
-K nnn set the K parameter
|
||||||
-l list video devices
|
-l list video devices
|
||||||
-T bla add a title
|
-T bla add a title
|
||||||
-v increase verbosity
|
-v increase verbosity
|
||||||
\end{verbatim}
|
\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 ?}
|
\section{Et pour la suite ?}
|
||||||
|
|
Loading…
Reference in New Issue