forked from tTh/FloatImg
écrire un peu plus de doc...
This commit is contained in:
parent
c004f22b16
commit
1ad4b406d7
|
@ -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,
|
||||
|
|
Loading…
Reference in New Issue