écrire un peu plus de doc...

This commit is contained in:
tTh 2023-01-24 14:26:54 +01:00
parent c004f22b16
commit 1ad4b406d7

View File

@ -10,7 +10,7 @@
% \lstset{frame=single} % dessin d'un cadre autour du listing
\lstset{basicstyle=\ttfamily\small}
\lstset{aboveskip=0.1em,belowskip=0.1em}
\lstset{aboveskip=0.01em,belowskip=0.1em}
\usepackage{babel} % ?
@ -41,7 +41,7 @@
\makeindex
% ------ a few new commands
\newcommand{\interparagraphe { \vspace{60pt} } }
\newcommand{\interparagraphe { \vspace{50pt} } }
% -------------------------------------------------------------------
\title{Floating images processing (for fun and profit ?)}
@ -77,7 +77,8 @@ pour ceux qui suivent le canal \texttt{\#tetalab} sur le réseau
IRC de \textsl{libera.chat}.
\textbf{Attention !} ce document commence par une bonne rafale
de technique parfois \textsl{hardue}, avec des pointeurs dedans.
de technique parfois \textsl{hardue}\footnote{hard + ardue = private
joke Usenet}, avec des pointeurs dedans.
Vous avez parfaitement le droit de sauter directement à
la page \pageref{outils} pour quelque chose de plus concret.
@ -92,7 +93,7 @@ certains points. Je vais tenter de répondre à ces FAQ~:%
« Fréquentes et Absurdes Questions » avec des réponses
absurdes et précises.
\subsubsection*{c'est quoi un image d'un point de vue physique ?}
\subsubsection*{c'est quoi une image d'un point de vue physique ?}
Une représentation approximative d'un monde physique invisible.
L'infinie bio-complexité de notre système oculaire et ses interactions
@ -103,7 +104,7 @@ physique.
Les détails techniques sur cette représentation sont en page
\pageref{FloatImg desc}, avec des pointeurs dedans.
Ah, les pointeurs, la pire chose du monde\dots
Ah, les pointeurs, la pire chose du monde, mais pourquoi s'en passer\dots
\subsubsection*{quelques rappels de comment on acquiert et numérise une image}
@ -140,7 +141,7 @@ la glisser dans le capitalisme de surveillance.
\pagebreak
\setlength \parskip {0.40em}
\layout \pagebreak
% XXX \layout \pagebreak
% ===================================================================
\section{Théorie}\index{théorie}
@ -169,6 +170,8 @@ quelques milliers d'images standard à 256 niveaux, sans trop avoir
à se soucier des éventuelles pertes de précision. Mais ça demande
à être confirmé par des esprits supérieurs.
https://dl.acm.org/doi/pdf/10.1145/103162.103163
\subsection{Dynamique}\index{dynamique}
Dynamique, précision et \textsl{macheps} ? Peu de gens connaissent
@ -181,7 +184,10 @@ effectuée afin d'éviter les potentiels inconvénients.
Il est très difficle d'imaginer une lumière négative. Sauf peut-être
si nous songeons à des coefficients d'absorption, ou un canal
\textsl{alpha} qui inverserait les valeurs ? Un domaine dont
l'exploration peut confiner au mysticisme.
l'exploration peut confiner au mysticisme de part la multitude
des traitement possibles : valeur absolue, \textsl{clamping},
report sur les autres composantes. Votre imagination est
la limite.
% ===================================================================
@ -203,7 +209,7 @@ 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\footnote{Enfin, non, il y a déja longtemps,
avant la grande pandémie.}
avant la grande pandémie.}.
Tout d'abord, nous devons déclarer et garnir quelques variables
pour gérer la machinerie interne.
@ -1259,7 +1265,7 @@ if (foo) {
\end{verbatim}
À condition d'avoir bien réglé votre ulimit pour la génération d'un coredump,
vous aurez sous la main un fichier \textsc{core} qui vous permettra
vous aurez sous la main un fichier \texttt{core} qui vous permettra
de, par exemple, remonter la pile d'appel avec la commande \texttt{back} de
gdb. Mais pour le moment, juste une infime partie du code est instrumentée
avec ce dispositif.
@ -1489,11 +1495,11 @@ v4l2.
\subsection{grabvidseq}\index{grabvidseq}\label{grabvidseq}
Un logiciel en évolution (trop ?) lente, qui permet déja la capture
d'images en
Un logiciel en évolution (vraiment trop) lente, 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 d'images.
séquences d'images. (\textsl{workaround}~: écrire une boucle en shell)
\begin{verbatim}
tth@debian:~/Devel/FloatImg/v4l2$ ./grabvidseq -h
@ -1564,7 +1570,7 @@ Options :
Je me sens obligé 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.
des choses essentielles comme la liste des résolutions disponibles.
\subsection{nc-camcontrol}
@ -1596,7 +1602,7 @@ devez mettre ce bout de XML\index{XML} dans le fichier
C'est juste un hack rapide, qui ne fonctionne pas très bien avec
d'autres commande de IM, comme identify, qui a tendance à
raconter un peu n'importe quoi, puisqu'elle se base sur le
résultat de la conversion\dots
résultat de la conversion.
Je compte donc sur le bouquin de \textsl{Brunus} pour avancer\dots
\subsection{Gimp}\index{Gimp}
@ -1604,7 +1610,8 @@ Je compte donc sur le bouquin de \textsl{Brunus} pour avancer\dots
Mmmmm... Ça semble un peu plus compliqué.
La documentation à ce sujet me semble ésotérique.
D'un autre coté, il
faut faire ça en \textbf{C}, ce qui ne peut pas être négatif.
faut faire ça en \textbf{C}, ce qui ne peut pas être totalement négatif.
Sauf pour les riiRistes.
\subsection{ffmpeg}\index{ffmpeg}
@ -1617,23 +1624,33 @@ ffmpeg -nostdin \
-c:v libx264 \
-pix_fmt yuv420p \
-tune film \
-metadata artist='---[ tTh ]---' \
-metadata title='awesome video' \
stereo.mp4
\end{lstlisting}
Il existe environ un gazillion d'options pour encoder avec ffmpeg.
Bon courage pour toutes les explorer, voire même juste les comprendre.
\subsection{Et encore ?}\index{krita}\index{geeqie}
Il y a d'autres logiciels pour lesquels écrire une fonction d'importation
serait bien~: \textsl{Geeqie}, un visualiseur d'image fort pratique, ou
\textsl{Krita} qui semble avoir les faveurs de
dessinateurs de talent\footnote{Oui, David, c'est à toi que je pense.}.
Ce qui nous conduit à une question importante~: quels sont les logiciels
qui gèrent le chargement d'image par un système de
\textsl{plugin}\index{plugin},
parce que recompiler tout Gimp juste pour ça, c'est un peu overkill.
% ===================================================================
\section{Le flou temporel}
Et si nous jouions sur l'axe du temps ?
\textit{\hspace{7em}Et si nous jouions sur l'axe du temps ?}
Nous avons plus ou moins la magie du cumul sur la prise de vue
d'\textbf{image} en enchainant plusieurs capture d'image.
Nous avons déja plus ou moins la magie du cumul sur la prise de vue
d'\textbf{image} en enchainant plusieurs captures d'image accumulées
en une seule.
Maintenant, voyons ce que l'on peut faire à partir de plusieurs images.
On peut d'abord penser faire une moyenne (ou la somme, en fait) de toutes
ces images. Mais ce n'est qu'une façon déguisée de faire du cumul.
@ -1641,15 +1658,51 @@ C'est à ce moment que nous changeons l'axe de vue du défi.
Par ailleurs, il m'a semblé pertinent d'inclure dans le projet une
foultitude d'effets spéciaux.
Qui manquent cruellement de possibilités de paramétrage.
Mais peuvent être enchainés dans ce que j'appelle des
\textsl{filter-chains}~: ces effets seront appliqués dans
l'ordre aux image traitées soit en entrée soit en sortie.
Je pense qu'un schéma\footnote{omg, apprendre un nouveau truc en
\LaTeX, quel challenge étourdissant !} s'impose.
\subsection{\textsl{moving average}}
\texttt{./fonderie} : Basé sur la moyenne mobile, avec une structure de
\subsection{\texttt{./fonderie} : \textsl{moving average}}
Basé sur la moyenne mobile, avec une structure de
fifo\index{fifo} particulièrement mal conçue.
Qui, en fait, n'est pas vraiment un fifo, mais plutôt un buffer
circulaire. Pour chaque image source, elle est lue, passe dans la chaine de
filtre d'entrée et est insérée dans ce buffer.
Ensuite on calcule la moyenne des images contenues dans ce buffer.
Et pour conclure, cette image moyennée passe au travers de la
chaine de filtre de sortie, avant d'être enregistrée en PNG\index{PNG}
dans le répertoire de destination.
\begin{verbatim}
*** fonderie compiled Jan 23 2023, 10:43:56, pid 23366
options:
-E input:filter:chain
-F output:filter:chain
-I input glob pattern
-L list available filters
-O output directory
-T fifo size
-v increase verbosity
\end{verbatim}
Euh, c'est quoi '\texttt{input glob pattern}' ? C'est ce qui vous permet
de sélectionner un peu les images que vous voulez traiter, exactement
comme vous pourriez le faire avec un shell classique.
Par exemple pour choisir une image sur dix, le glob-pattern sera
'\texttt{frames/????0.fimg}', et vous trouverez les explications détaillées
dans le manuel~: \texttt{glob(7)}, et \texttt{glob(3)} pour la
fonction utilisée.
\subsection{Interpolator}\index{interpolator}
Juste des calculs pas si simple que ça.
Juste des calculs pas si simple que ça. Je pense qu'il faut
se lancer dans des calculs splinesques pour améliorer les choses dans
la création des images intermédiaires.
\subsection{Singlepass}
@ -1657,6 +1710,23 @@ Ce programme \texttt{singlepass} prétend vous permettre de tester
tous les filtres disponibles, dont on peut avoir la liste
avec l'option \texttt{-L}\footnote{liste hélas peu machinable.}
\begin{verbatim}
usage:
-F define:the:filter:chain
-g input glob pattern
-L list available filters
-O /output/directory (default ./p8)
-r N repetiiing factor
-v spit more messages
\end{verbatim}
Il n'y a pas de moyenne mobile, pas d'interpolation, mais un facteur de
répétition qui permet de dupliquer $N$ fois une image dans le flux de
sortie. Si bous globez \texttt{frames/????[02468]}, vous prenez
une image sur deux, alors un facteur de répétition à $2$ conservera
la 'vitesse' de la séquence, mais avec une petite sacade régulière
de bon aloi \textit{:)}
\subsection{Déviance}
Là, nous tombons dans de la \textsl{troiD}\index{3d} de haut niveau,