forked from tTh/FloatImg
cosmetic + bla
This commit is contained in:
parent
556e1ad825
commit
f473a58f75
@ -27,8 +27,8 @@
|
|||||||
\usepackage[verbose]{layout}
|
\usepackage[verbose]{layout}
|
||||||
\usepackage{ulem}
|
\usepackage{ulem}
|
||||||
|
|
||||||
\setlength \parskip {0.15em}
|
\setlength \parskip {0.18em}
|
||||||
\setcounter{tocdepth}{1} % XXX à regarder un de ces jours ?
|
\setcounter{tocdepth}{2} % XXX à regarder un de ces jours ?
|
||||||
|
|
||||||
\makeatletter
|
\makeatletter
|
||||||
% explication de ce truc ?
|
% explication de ce truc ?
|
||||||
@ -54,11 +54,9 @@
|
|||||||
|
|
||||||
\section*{Une image flottante ?}
|
\section*{Une image flottante ?}
|
||||||
|
|
||||||
\textsl{Back in a far past part of history.}
|
\vspace{2em}
|
||||||
|
|
||||||
\textsl{Mais de quoi parle-t-on exactement ?}
|
\textsl{Mais de quoi parle-t-on exactement ?}
|
||||||
|
\vspace{2em}
|
||||||
% XXX XXX XXX\vspace{1em}
|
|
||||||
|
|
||||||
Traditionnellement, les valeurs des pixels dans les images
|
Traditionnellement, les valeurs des pixels dans les images
|
||||||
informatiques sont mémorisées sur 8 bits, un octet\index{octet},
|
informatiques sont mémorisées sur 8 bits, un octet\index{octet},
|
||||||
@ -112,7 +110,8 @@ numériques quand certains ont songé à passer du flou mental à la grille
|
|||||||
physique.
|
physique.
|
||||||
|
|
||||||
Les détails techniques sur cette représentation sont en page
|
Les détails techniques sur cette représentation sont en page
|
||||||
\pageref{FloatImg desc}, avec des pointeurs dedans.
|
\pageref{FloatImg desc}, avec des pointeurs et des
|
||||||
|
tableaux dedans.
|
||||||
Ah, les pointeurs, la pire chose du monde, mais pourquoi s'en passer\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}
|
\subsubsection*{quelques rappels de comment on acquiert et numérise une image}
|
||||||
@ -159,7 +158,8 @@ la glisser dans le capitalisme de surveillance.
|
|||||||
|
|
||||||
Pour le moment, seule la quête de l'empirisme absolu a été
|
Pour le moment, seule la quête de l'empirisme absolu a été
|
||||||
visée. Les justifications mathématiques attendront le retour
|
visée. Les justifications mathématiques attendront le retour
|
||||||
du schmod777. Ceci dit, rien ne nous empêche d'aller consulter
|
de monsieur Schmod777.
|
||||||
|
Ceci dit, rien ne nous empêche d'aller consulter
|
||||||
Wikipedia, afin de mieux connaitre ces nombres flottants
|
Wikipedia, afin de mieux connaitre ces nombres flottants
|
||||||
que nous allons utiliser~:
|
que nous allons utiliser~:
|
||||||
|
|
||||||
@ -193,7 +193,8 @@ effectuée afin d'éviter les potentiels inconvénients.
|
|||||||
|
|
||||||
Ceci dit, le standard \textsl{ieee754}\index{ieee754} nous indique qu'il
|
Ceci dit, le standard \textsl{ieee754}\index{ieee754} nous indique qu'il
|
||||||
y a 23 bits pour la mantisse, ce qui nous propose déja
|
y a 23 bits pour la mantisse, ce qui nous propose déja
|
||||||
plus de huit millions de valeurs. Considérons un cas typique~:
|
plus de huit millions de valeurs possibles.
|
||||||
|
Considérons un cas typique~:
|
||||||
le cumul de $N$ images ayant un niveau maximum $Vm$.
|
le cumul de $N$ images ayant un niveau maximum $Vm$.
|
||||||
|
|
||||||
\subsection{Pixel négatif ?}
|
\subsection{Pixel négatif ?}
|
||||||
@ -217,7 +218,7 @@ mais nous sommes tous là pour améliorer les choses, dans
|
|||||||
la mesure de nos moyens.
|
la mesure de nos moyens.
|
||||||
Nous allons donc directement rentrer au cœur du problème,
|
Nous allons donc directement rentrer au cœur du problème,
|
||||||
en écrivant quelques lignes de code montrant le fonctionnement
|
en écrivant quelques lignes de code montrant le fonctionnement
|
||||||
général de la chose.
|
général de la chose vu du coté de la machine.
|
||||||
|
|
||||||
\subsection{L'idée}
|
\subsection{L'idée}
|
||||||
|
|
||||||
@ -242,8 +243,8 @@ en mémoire centrale, l'initialisation des valeurs de chaque pixel à 0.0
|
|||||||
(une valeur que certains associent au noir complet, et d'autres à une
|
(une valeur que certains associent au noir complet, et d'autres à une
|
||||||
impossibilité quantique),
|
impossibilité quantique),
|
||||||
et pour conclure, l'enregistrement de cette image dans un
|
et pour conclure, l'enregistrement de cette image dans un
|
||||||
fichier\footnote{Au format
|
fichier\footnote{Au format ésotérique, mais très véloce.}
|
||||||
ésotérique, mais très véloce.} binaire.
|
binaire.
|
||||||
|
|
||||||
\begin{lstlisting}
|
\begin{lstlisting}
|
||||||
memset(fimg, 0, sizeof(FloatImg));
|
memset(fimg, 0, sizeof(FloatImg));
|
||||||
@ -260,7 +261,6 @@ if (foo) {
|
|||||||
}
|
}
|
||||||
\end{lstlisting}
|
\end{lstlisting}
|
||||||
|
|
||||||
|
|
||||||
Une fois ce code enrobé dans un \texttt{main()}, compilé puis exécuté,
|
Une fois ce code enrobé dans un \texttt{main()}, compilé puis exécuté,
|
||||||
nous pouvons entrevoir, grâce au logiciel
|
nous pouvons entrevoir, grâce au logiciel
|
||||||
\texttt{fimgstats} (décrit en page \pageref{fimgstats}),
|
\texttt{fimgstats} (décrit en page \pageref{fimgstats}),
|
||||||
@ -299,7 +299,8 @@ une distribution Debian\index{Debian} récente (amd64 et x86),
|
|||||||
mais ça marche quasiment pareil avec Fedora\index{Fedora} 64,
|
mais ça marche quasiment pareil avec Fedora\index{Fedora} 64,
|
||||||
et
|
et
|
||||||
probablement Raspbian\index{Raspbian}, modulo les éventuels
|
probablement Raspbian\index{Raspbian}, modulo les éventuels
|
||||||
soucis de boutisme.
|
soucis de boutisme que j'ai absolument négligés de prendre
|
||||||
|
en compte.
|
||||||
\textit{Attention, ça va devenir un peu gore\dots}
|
\textit{Attention, ça va devenir un peu gore\dots}
|
||||||
|
|
||||||
\subsection{Prérequis}
|
\subsection{Prérequis}
|
||||||
@ -475,17 +476,18 @@ toucher. Les types d'images actuellement gérés sont les trois grands
|
|||||||
classiques : niveau de gris, rouge-vert-bleu et rgb avec un canal alpha,
|
classiques : niveau de gris, rouge-vert-bleu et rgb avec un canal alpha,
|
||||||
et expliquées quelques lignes plus haut.
|
et expliquées quelques lignes plus haut.
|
||||||
|
|
||||||
|
XXX\index{XXX} raconter fimg\_clone
|
||||||
|
|
||||||
Comme vous allez le voir plus loin, il y a plein de fonctions qui
|
Comme vous allez le voir plus loin, il y a plein de fonctions qui
|
||||||
prennent en argument deux images: la source et la destination.
|
prennent en argument deux images: la source et la destination.
|
||||||
Dans la plupart des cas, ces deux images doivent être compatibles,
|
Dans la plupart des cas, ces deux images doivent être compatibles,
|
||||||
c'est à dire même type et mêmes dimensions.
|
c'est à dire de même type et de mêmes dimensions.
|
||||||
|
|
||||||
\begin{lstlisting}
|
\begin{lstlisting}
|
||||||
/* return 0 if pictures are compatible */
|
/* return 0 if pictures are compatible */
|
||||||
int fimg_images_not_compatible(FloatImg *a, FloatImg *b);
|
int fimg_images_not_compatible(FloatImg *a, FloatImg *b);
|
||||||
\end{lstlisting}
|
\end{lstlisting}
|
||||||
|
|
||||||
|
|
||||||
C'est bien beau d'être enfin une image résidente en mémoire centrale, mais
|
C'est bien beau d'être enfin une image résidente en mémoire centrale, mais
|
||||||
pouvoir aussi exister à long terme en étant stocké dans la matrice
|
pouvoir aussi exister à long terme en étant stocké dans la matrice
|
||||||
est tout aussi pertinent.
|
est tout aussi pertinent.
|
||||||
@ -532,12 +534,13 @@ intégral\footnote{Un vrai désastre, même...}.
|
|||||||
|
|
||||||
\subsection{Dessiner}
|
\subsection{Dessiner}
|
||||||
|
|
||||||
Bon, vous avez une image latente, et vous souhaitez dessiner dessus
|
Bon, vous avez en mémoire centrale une image latente,
|
||||||
(ou dedans ?) avec vos encres flottantes ?
|
et vous souhaitez dessiner dessus (ou dedans ?) avec vos encres flottantes ?
|
||||||
Il y a des fonctions pour ça, par exemple~:
|
Il y a actuellement deux fonctions pour ça, légèrement différentes~:
|
||||||
|
|
||||||
\begin{lstlisting}
|
\begin{lstlisting}
|
||||||
int fimg_plot_rgb(FloatImg *head, int x, int y, float r, float g, float b);
|
int fimg_plot_rgb(FloatImg *head, int x, int y, float r, float g, float b);
|
||||||
|
int fimg_put_rgb(FloatImg *head, int x, int y, float rgb[3]);
|
||||||
\end{lstlisting}
|
\end{lstlisting}
|
||||||
|
|
||||||
Les paramètres sont explicites, mais leur validité doit être
|
Les paramètres sont explicites, mais leur validité doit être
|
||||||
@ -676,10 +679,11 @@ aux bonnes dimensions (échange W et H).
|
|||||||
|
|
||||||
D'un design très empirique, c'est certainement à revoir pour l'avenir.
|
D'un design très empirique, c'est certainement à revoir pour l'avenir.
|
||||||
La force du \textsl{legacy} va-t-elle dominer le monde ?
|
La force du \textsl{legacy} va-t-elle dominer le monde ?
|
||||||
Il faudrait normaliser l'endianess et le packing dans les structs%
|
Il faudrait normaliser l'endianess et le packing dans les
|
||||||
\footnote{Directives du compilateur ?}, et surtout l'ajout
|
structuress\footnote{Directives du compilateur ?}, et surtout l'ajout
|
||||||
de données sur la prise de vue, du genre type de capteur, date et heure,
|
de données sur la prise de vue, du genre type de capteur, date et heure,
|
||||||
réglages divers\dots
|
réglages divers. Nous appelerons ça les metadonnées, et
|
||||||
|
nous en parlons dans quelques pages.\dots
|
||||||
|
|
||||||
\begin{lstlisting}
|
\begin{lstlisting}
|
||||||
typedef struct {
|
typedef struct {
|
||||||
@ -924,7 +928,8 @@ int fimg_filter_3x3(FloatImg *src, FloatImg *dst, FimgFilter3x3 *filtr)
|
|||||||
Comme dans la plupart des cas, la gestion des valeurs négatives
|
Comme dans la plupart des cas, la gestion des valeurs négatives
|
||||||
de pixel est laissé au hasard, qui fait souvent du portnawak.
|
de pixel est laissé au hasard, qui fait souvent du portnawak.
|
||||||
Quoique, il doit bien exister
|
Quoique, il doit bien exister
|
||||||
quelques solutions de contournement : clamping ou shift ?
|
quelques solutions de contournement :
|
||||||
|
valeur absolue, clamping ou shiftup ?
|
||||||
|
|
||||||
\textsl{To be continued\index{XXX}\dots}
|
\textsl{To be continued\index{XXX}\dots}
|
||||||
|
|
||||||
@ -937,8 +942,8 @@ le répertoire \texttt{funcs/}.
|
|||||||
Elle aura donc accès aux \textsl{internals}%
|
Elle aura donc accès aux \textsl{internals}%
|
||||||
\footnote{que je peux décider de changer n'importe quand}
|
\footnote{que je peux décider de changer n'importe quand}
|
||||||
de \textsc{FloatImg},
|
de \textsc{FloatImg},
|
||||||
une chose qui est en principe interdit aux programmes
|
une chose qui est en principe interdite aux programmes
|
||||||
\textsl{enduser}. Soyez prudents.
|
\textsl{enduser}. Soyez donc prudents.
|
||||||
|
|
||||||
Cette fonction va faire quelque chose
|
Cette fonction va faire quelque chose
|
||||||
à partir d'une image source et d'une valeur, et écrire le
|
à partir d'une image source et d'une valeur, et écrire le
|
||||||
@ -981,14 +986,17 @@ de fonctions prévues à cet effet, mais il fallait rester simple\dots
|
|||||||
% ===================================================================
|
% ===================================================================
|
||||||
\section{Les outils}\label{outils}
|
\section{Les outils}\label{outils}
|
||||||
|
|
||||||
\textsf{3615mavie} : sur des projets comme celui-ci, qui travaillent
|
\textsf{3615mavie} : pour des projets comme celui-ci, qui travaillent
|
||||||
in-fine sur des objets que l'on peut considérer comme « physiques »,
|
\textit{in-fine} sur des objets que l'on peut considérer
|
||||||
|
comme « physiques »,
|
||||||
il est important de passer à une utilisation
|
il est important de passer à une utilisation
|
||||||
normale\footnote{Il y a une vie en dehors de git.} et construire
|
normale\footnote{Il y a une vie en dehors de git et des compilations.}
|
||||||
des trucs qui mettent en action le code primitif pour partir
|
et construire
|
||||||
sur des bases saines.
|
des briques de base qui mettent en action le code primitif pour
|
||||||
|
partir sur des bases stables, documentées (ahem\dots), et
|
||||||
|
directement utilisables.
|
||||||
|
|
||||||
Ces machins ont en commun quelques options bien pratiques~:
|
Ces cliwares\index{cliware} ont en commun quelques options bien pratiques~:
|
||||||
\texttt{-h} pour avoir un résumé des options disponibles,
|
\texttt{-h} pour avoir un résumé des options disponibles,
|
||||||
\texttt{-v} qui augmente la puissance de bavardage, et
|
\texttt{-v} qui augmente la puissance de bavardage, et
|
||||||
\texttt{-K nn.nn} pour un paramètre flottant.
|
\texttt{-K nn.nn} pour un paramètre flottant.
|
||||||
@ -1227,7 +1235,8 @@ après la grande pandémie\dots
|
|||||||
|
|
||||||
Cet outil accumule\index{cumul} une quantité d'images flottantes
|
Cet outil accumule\index{cumul} une quantité d'images flottantes
|
||||||
(de même taille et de même type) afin d'obtenir
|
(de même taille et de même type) afin d'obtenir
|
||||||
un flou temporel de meilleure qualité. Aucune mise à l'échelle n'etant
|
un flou temporel de meilleure qualité.
|
||||||
|
Aucune mise à l'échelle n'etant
|
||||||
effectuée, les pixels de sortie peuvent atteindre des valeurs
|
effectuée, les pixels de sortie peuvent atteindre des valeurs
|
||||||
considérables\footnote{Faut-il prévoir une gestion des \textsf{overflows} ?}
|
considérables\footnote{Faut-il prévoir une gestion des \textsf{overflows} ?}
|
||||||
|
|
||||||
@ -1615,7 +1624,8 @@ des choses essentielles comme la liste des résolutions disponibles.
|
|||||||
|
|
||||||
Ajustement \textsl{Brightness Contrast Saturation Hue\dots}
|
Ajustement \textsl{Brightness Contrast Saturation Hue\dots}
|
||||||
|
|
||||||
Probablement pilotable au joystick\index{joystick}.
|
Probablement pilotable au joystick\index{joystick} et surtout
|
||||||
|
par OSC (Open Sound Control).
|
||||||
|
|
||||||
% ===================================================================
|
% ===================================================================
|
||||||
\section{À l'extérieur}
|
\section{À l'extérieur}
|
||||||
@ -1625,6 +1635,8 @@ il est souvent nécessaire de pouvoir communiquer facilement
|
|||||||
avec eux. Nous avons déja quelques possibilité d'exportation,
|
avec eux. Nous avons déja quelques possibilité d'exportation,
|
||||||
mais passer par cette étape intermédiaire est parfois délicat
|
mais passer par cette étape intermédiaire est parfois délicat
|
||||||
à gérer dans un \textsl{pipedeprod} autrement bien huilé.
|
à gérer dans un \textsl{pipedeprod} autrement bien huilé.
|
||||||
|
De même, nos capacités d'importation sont vraiment trop
|
||||||
|
réduites, Jpeg et PNG étant les deux priorités.
|
||||||
|
|
||||||
\subsection{ImageMagick}\index{ImageMagick}
|
\subsection{ImageMagick}\index{ImageMagick}
|
||||||
|
|
||||||
@ -1700,7 +1712,8 @@ ces images. Mais ce n'est qu'une façon déguisée de faire du cumul.
|
|||||||
C'est à ce moment que nous changeons l'axe de vue du défi.
|
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
|
Par ailleurs, il m'a semblé pertinent d'inclure dans le projet une
|
||||||
foultitude d'effets spéciaux.
|
foultitude d'effets spéciaux%
|
||||||
|
\footnote{\textsl{aka} IBM\index{IBM} (image brotching module)}.
|
||||||
Qui manquent cruellement de possibilités de paramétrage.
|
Qui manquent cruellement de possibilités de paramétrage.
|
||||||
Mais peuvent être enchainés dans ce que j'appelle des
|
Mais peuvent être enchainés dans ce que j'appelle des
|
||||||
\textsl{filter-chains}~: ces effets seront appliqués dans
|
\textsl{filter-chains}~: ces effets seront appliqués dans
|
||||||
@ -1800,8 +1813,9 @@ usage:
|
|||||||
|
|
||||||
Il n'y a pas de moyenne mobile, pas d'interpolation, mais un facteur de
|
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
|
répétition qui permet de dupliquer $N$ fois une image dans le flux de
|
||||||
sortie. Si vous globez \texttt{frames/????[02468]}, vous prenez
|
sortie. Si vous globez \texttt{rush/????[02468]}, vous prenez
|
||||||
une image sur deux, alors un facteur de répétition à $2$ conservera
|
en compte une image sur deux de la séquence capturée,
|
||||||
|
alors un facteur de répétition à $2$ conservera
|
||||||
la 'vitesse' de la séquence, mais avec une petite saccade régulière
|
la 'vitesse' de la séquence, mais avec une petite saccade régulière
|
||||||
de bon aloi \textit{:)}
|
de bon aloi \textit{:)}
|
||||||
|
|
||||||
@ -1829,12 +1843,18 @@ et sans but précis. Je le \textit{runne} et je le \textit{re-runne}
|
|||||||
un gazillion de fois dans mon cerveau processique.
|
un gazillion de fois dans mon cerveau processique.
|
||||||
Quel va être son facteur $O$ ? Je fais donc des essais.
|
Quel va être son facteur $O$ ? Je fais donc des essais.
|
||||||
|
|
||||||
|
\subsection{movepixels}
|
||||||
|
|
||||||
|
\subsection{muxplanes}
|
||||||
|
|
||||||
% ===================================================================
|
% ===================================================================
|
||||||
|
|
||||||
\section{Et pour la suite ?}
|
\section{Et pour la suite ?}
|
||||||
|
|
||||||
En fait, je fait de la photo par la méthode du « cumul »\index{cumul}
|
En fait, je fait de la photo par la méthode du « cumul »\index{cumul}
|
||||||
depuis plusieurs années. Une webcam\index{webcam},
|
depuis plusieurs années, au début avec vgrabbj et convert,
|
||||||
|
puis avec floatimg et ses satellites.
|
||||||
|
Une webcam\index{webcam},
|
||||||
un Linux\index{Linux}, et ça \textsl{juste marche}.
|
un Linux\index{Linux}, et ça \textsl{juste marche}.
|
||||||
Sauf que c'est quand même un peu galère à déplacer, il faut
|
Sauf que c'est quand même un peu galère à déplacer, il faut
|
||||||
avoir un shell pour déclencher, c'est pas facile à utiliser
|
avoir un shell pour déclencher, c'est pas facile à utiliser
|
||||||
@ -1843,8 +1863,9 @@ en mode portnawak\dots
|
|||||||
L'idée est donc de construire un appareil autonome, basé sur un Raspi et
|
L'idée est donc de construire un appareil autonome, basé sur un Raspi et
|
||||||
une webcam \textsc{usb}\index{USB}, pilotable par \textsc{lirc}\index{LIRC},
|
une webcam \textsc{usb}\index{USB}, pilotable par \textsc{lirc}\index{LIRC},
|
||||||
alimenté par une (grosse) batterie et permettant d'aller
|
alimenté par une (grosse) batterie et permettant d'aller
|
||||||
faire des images au bord d'un lac ou dans la campagne de l'Ariège.
|
faire des images au bord d'un lac ou dans la campagne du Gers%
|
||||||
Et, comme le dit la sagesse populaire : « fimg at 11 ».
|
\footnote{Aux Bourtoulots, par exemple.}.
|
||||||
|
Et comme le dit la sagesse populaire : « fimg at 11 ».
|
||||||
|
|
||||||
% -------------------------------------------------------------------
|
% -------------------------------------------------------------------
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user