bla bla
This commit is contained in:
parent
4095750024
commit
34ab825670
1
.gitignore
vendored
1
.gitignore
vendored
@ -24,6 +24,7 @@ doc/*.idx
|
||||
doc/*.ilg
|
||||
doc/*.ind
|
||||
doc/co*.tex
|
||||
doc/foo.html
|
||||
|
||||
funcs/t
|
||||
funcs/*.o
|
||||
|
11
doc/README.md
Normal file
11
doc/README.md
Normal file
@ -0,0 +1,11 @@
|
||||
# The FloatImg Hack
|
||||
|
||||
Et voilà la documentation...
|
||||
|
||||
|
||||
Pour la générer :
|
||||
|
||||
`bash mkdoc.sh`
|
||||
|
||||
|
||||
|
@ -12,11 +12,11 @@
|
||||
\lstset{basicstyle=\ttfamily\small}
|
||||
\lstset{aboveskip=0.222em,belowskip=0.222em}
|
||||
|
||||
\usepackage{babel}
|
||||
\usepackage{babel} % ?
|
||||
|
||||
\usepackage{graphicx} % for gnuplot ylabel rotate
|
||||
\usepackage{graphicx} % for gnuplot ylabel rotate
|
||||
|
||||
\usepackage{pifont} % caractères rigolos
|
||||
\usepackage{pifont} % caractères rigolos
|
||||
\usepackage{enumitem}
|
||||
\setitemize[1]{label={\ding{87}}}
|
||||
\frenchbsetup{CompactItemize=false}
|
||||
@ -29,7 +29,7 @@
|
||||
\setlength \parskip {0.35em}
|
||||
|
||||
\makeatletter
|
||||
% exlication de ce truc ?
|
||||
% explication de ce truc ?
|
||||
\def\verbatim@font{\normalfont\ttfamily\small}
|
||||
\makeatother
|
||||
|
||||
@ -145,6 +145,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.
|
||||
Enfin, non, il y a déja longtemps, avant la pandémie.
|
||||
|
||||
Tout d'abord, nous devons déclarer et garnir quelques variables
|
||||
pour gérer la machinerie interne.
|
||||
@ -155,9 +156,9 @@ char *fname = "exemple.fimg";
|
||||
FloatImg fimg;
|
||||
\end{lstlisting}
|
||||
|
||||
Ensuite, nous enchainerons trois étapes : création de l'image
|
||||
en mémoire centrale, initialisation des valeurs de chaque pixel à 0.0,
|
||||
et pour conclure, enregistrement dans un fichier\footnote{Au format
|
||||
Ensuite, nous enchainerons trois étapes : la création de l'image
|
||||
en mémoire centrale, l'initialisation des valeurs de chaque pixel à 0.0,
|
||||
et pour conclure, l'enregistrement dans un fichier\footnote{Au format
|
||||
ésotérique, mais très véloce.} binaire.
|
||||
|
||||
\begin{lstlisting}
|
||||
@ -206,13 +207,13 @@ lesquels sont décrits en page \pageref{outils}.
|
||||
\section{Installation}
|
||||
|
||||
Sauf indications contraires, ces instructions se réfèrent à
|
||||
une distribution Debian\index{Debian} récente.
|
||||
|
||||
\textit{Attention, ça devient un peu gore. Myrys, punk, toussa\dots}
|
||||
une distribution Debian\index{Debian} récente, mais ça marche
|
||||
quasiment pareil avec Fedora\index{Fedora}.
|
||||
\textit{Attention, ça devient un peu gore\dots}
|
||||
|
||||
\subsection{Prérequis}
|
||||
|
||||
Vous devez, en dehors des outils classiques (bash, gcc, make\dots),
|
||||
Vous devez, en dehors des outils classiques (gcc, Awk, make\dots),
|
||||
avoir quelques bibliothèques installées\footnote{Les \texttt{-dev}
|
||||
en plus pour Debian et dérivées}~:
|
||||
\textsf{
|
||||
@ -250,7 +251,7 @@ vous pouvez copier les deux fichiers \texttt{floatimg.h} et
|
||||
Le script \texttt{install.sh}, à la racine du projet, est censé
|
||||
faciliter un peu la chose. Il prend également en compte la copie
|
||||
des divers binaires du dossier \texttt{tools/} (cf page \pageref{outils})
|
||||
dans le répertoire prévu à cet effet : \texttt{/usr/local/bin}.
|
||||
dans le répertoire prévu à cet effet~: \texttt{/usr/local/bin}.
|
||||
|
||||
Il reste enfin quelques exemples d'utilisation des outils de la
|
||||
ligne de commande depuis un shell
|
||||
@ -274,7 +275,7 @@ Au niveau du code source, ces fonctions sont approximativement
|
||||
classées en deux catégories : \texttt{lib/} et \texttt{funcs/}.
|
||||
La première contient les choses qui sont relativement figées,
|
||||
et la seconde celles qui risquent de bouger. Cette classification
|
||||
est en fait arbitraire.
|
||||
est en fait indécement arbitraire.
|
||||
|
||||
\subsection{Structures, macros\dots}
|
||||
|
||||
@ -286,6 +287,7 @@ dans une jolie structure que nous allons examiner dès maintenant.
|
||||
\begin{lstlisting}
|
||||
/* in memory descriptor */
|
||||
typedef struct {
|
||||
int magic;
|
||||
int width;
|
||||
int height;
|
||||
int type;
|
||||
@ -296,7 +298,9 @@ typedef struct {
|
||||
} FloatImg;
|
||||
\end{lstlisting}\index{FloatImg}
|
||||
|
||||
Les deux premiers champs sont \textsl{obvious}.
|
||||
Le premier champ, \texttt{magic}, servira un de ces jours à
|
||||
robustifier l'ensemble du machin.
|
||||
Les deux suivants sont \textsl{obvious}.
|
||||
Le troisième est le type d'image : pour le moment, il y en a % trois
|
||||
un certain nombre
|
||||
qui sont définis\footnote{et plus ou moins bien gérés\dots} :
|
||||
@ -328,7 +332,7 @@ quelques images...
|
||||
|
||||
Le champ \textsl{count} sera mis à 0 et
|
||||
le champ \textsl{fval} sera initialisé à 15.0
|
||||
(qui est la valeur maximale que peut renvoyer le capteur).
|
||||
(qui est la valeur maximale que peut renvoyer ce capteur).
|
||||
Ensuite, dans la boucle capture/cumul, \textsl{count} sera
|
||||
incrémenté à chaque passe, et nous aurons donc, en finale,
|
||||
toutes les informations nécessaires pour exploiter au mieux la dynamique
|
||||
@ -338,11 +342,12 @@ maximale théorique est égale à $fval * count$.
|
||||
La fonction \texttt{fimg\_printhead(FloatImg *h)} affiche
|
||||
sommairement le contenu de ce descripteur,
|
||||
et \texttt{fimg\_describe(FloatImg *head, char *txt)} propose
|
||||
un affichage plus détaillé. Ça aide parfois.
|
||||
un affichage plus détaillé. Ça peut parfois aider.
|
||||
|
||||
Une bonne partie des fonctions que nous allons voir est indéterministe.
|
||||
Ce qui veut dire, en langage de tous les soirs, que ça risque de ne
|
||||
pas être la même chose dans l'avenir.
|
||||
pas être la même chose dans l'avenir. Mais après tout, ce n'est
|
||||
encore qu'un concept en devenir, n'est-ce pas ?
|
||||
|
||||
% ----------------------------------
|
||||
|
||||
@ -360,7 +365,8 @@ int fimg_destroy(FloatImg *fimg);
|
||||
|
||||
L'appelant doit lui-même gérer le descripteur d'image (une structure
|
||||
C décrite plus haut) en le considérant comme un type semi-opaque dont
|
||||
la forme peut varier. Certains membres de cette structure sont
|
||||
la forme \emph{peut} varier.
|
||||
Certains membres de cette structure sont
|
||||
documentés dans ce document, et les autres sont dangereux à
|
||||
toucher. Les types d'images actuellement gérés sont les trois grands
|
||||
classiques : gray, rgb et rgba. et expliquées quelques lignes plus haut.
|
||||
@ -444,7 +450,7 @@ $x$ et $y$ de la demande.
|
||||
Quand au canal \textsl{alpha}\index{alpha}, il est pour le moment
|
||||
superbement ignoré. Ceci dit, on vient de me faire remarquer qu'il
|
||||
peut être utilisable aussi pour faire du
|
||||
\textsl{z-buffer}\index{z-buffer}\index{rgbz} \dots
|
||||
\textsl{z-buffer}\index{z-buffer}\index{rgbz}\dots
|
||||
|
||||
% ----------------------------------
|
||||
|
||||
@ -529,12 +535,15 @@ inutile, en fait l'inverse de l'upscaling.
|
||||
|
||||
\begin{lstlisting}
|
||||
int fimg_halfsize_0(FloatImg *src, FloatImg *dst, int notused);
|
||||
int fimg_halfsize_1(FloatImg *src, FloatImg *dst, int notused);
|
||||
\end{lstlisting}
|
||||
|
||||
Attention lors de l'appel, le descripteur \texttt{dst} ne doit pas
|
||||
contenir d'image, et doit être effacé avec un bon
|
||||
\texttt{memset(\&result, 0, sizeof(FloatImg));} bien senti.
|
||||
Et le résultat est très moyen : il n'y a pas d'interpolation.
|
||||
|
||||
La première propose un résultat très moyen : il n'y a pas d'interpolation,
|
||||
alors que la seconde semble bien mieux.
|
||||
|
||||
\begin{lstlisting}
|
||||
int fimg_extract_0(FloatImg *src, FloatImg *dst, int x, int y);
|
||||
@ -572,6 +581,9 @@ typedef struct {
|
||||
la valeur maximale, la date de création, une longueur d'onde,
|
||||
et bien plus encore.
|
||||
|
||||
Le champ \texttt{magic[8]} doit contenir une valeur magique.
|
||||
Le champ \texttt{t} (le type de l'image) doit avoir les trois octets
|
||||
de poids fort à 0.
|
||||
|
||||
% ----------------------------------
|
||||
|
||||
@ -639,10 +651,10 @@ de gérer une foultitude de formats numériques. C'est aussi un format
|
||||
classique proposé par les gros scanners corporates.
|
||||
|
||||
\begin{lstlisting}
|
||||
int fimg_write_as_png(FloatImg *src, char *outname, int flags);
|
||||
int fimg_write_as_tiff(FloatImg *src, char *outname, int flags);
|
||||
\end{lstlisting}
|
||||
|
||||
Tous les flags doivent être à zéro.
|
||||
Tous les flags doivent être à zéro. Pour le moment.
|
||||
|
||||
|
||||
\subsubsection{Vers FITS}\index{FITS}
|
||||
@ -1157,7 +1169,8 @@ des deux valeurs \textsc{nbre} et \textsc{offs} calculées en préambule.
|
||||
\end{verbatim}
|
||||
|
||||
Cette seconde partie sert à calculer avec la commande
|
||||
\texttt{bc}\index{bc}
|
||||
\texttt{bc}\index{bc}%
|
||||
\footnote{\texttt{bc}, c'est vraiment un truc à découvrir.}
|
||||
un coefficient variable en fonction du temps :
|
||||
$sin(idx/16)$ afin d'avoir une oscillation du coefficient entre
|
||||
-1.0 et 1.0, deux valeurs probablement glitchantes.
|
||||
@ -1252,7 +1265,7 @@ vaguement expliqué page \pageref{contraste}.
|
||||
|
||||
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
|
||||
utilisée dans des scripts si on a des visions à long (ou même)
|
||||
terme.
|
||||
|
||||
\subsubsection{Upscaling}\index{upscaling}\label{upscaling}
|
||||
@ -1321,7 +1334,7 @@ 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 être négatif.
|
||||
faut faire ça en \textbf{C}, ce qui ne peut pas être négatif.
|
||||
|
||||
\subsection{ffmpeg}\index{ffmpeg}
|
||||
|
||||
@ -1341,9 +1354,37 @@ ffmpeg -nostdin \
|
||||
|
||||
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.
|
||||
\textsl{Krita} qui semble avoir les faveurs de
|
||||
dessinateurs de talent\footnote{Oui, David, c'est à toi que je pense.}.
|
||||
|
||||
% -------------------------------------------------------------------
|
||||
% ===================================================================
|
||||
\section{Le flou temporel}
|
||||
|
||||
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.
|
||||
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.
|
||||
C'est à ce moment que nous changeons l'axe de vue du défi.
|
||||
|
||||
\subsection{textsl{moving average}}
|
||||
|
||||
Moyenne mobile.
|
||||
|
||||
\subsection{Interpolator}\index{interpolator}
|
||||
|
||||
Juste des calculs pas si simple que ça.
|
||||
|
||||
\subsection{Déviance}
|
||||
|
||||
Là, nous tombons dans la troiD de haut niveau, avec plein de maths
|
||||
à l'intérieur.
|
||||
|
||||
% ===================================================================
|
||||
|
||||
\section{Et pour la suite ?}
|
||||
|
||||
En fait, je fait de la photo par la méthode du « cumul »\index{cumul}
|
||||
|
Loading…
Reference in New Issue
Block a user