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
	
	Block a user
	 tTh
						tTh