forked from tTh/FloatImg
bla bla
This commit is contained in:
parent
4095750024
commit
34ab825670
|
@ -24,6 +24,7 @@ doc/*.idx
|
||||||
doc/*.ilg
|
doc/*.ilg
|
||||||
doc/*.ind
|
doc/*.ind
|
||||||
doc/co*.tex
|
doc/co*.tex
|
||||||
|
doc/foo.html
|
||||||
|
|
||||||
funcs/t
|
funcs/t
|
||||||
funcs/*.o
|
funcs/*.o
|
||||||
|
|
|
@ -0,0 +1,11 @@
|
||||||
|
# The FloatImg Hack
|
||||||
|
|
||||||
|
Et voilà la documentation...
|
||||||
|
|
||||||
|
|
||||||
|
Pour la générer :
|
||||||
|
|
||||||
|
`bash mkdoc.sh`
|
||||||
|
|
||||||
|
|
||||||
|
|
|
@ -12,7 +12,7 @@
|
||||||
\lstset{basicstyle=\ttfamily\small}
|
\lstset{basicstyle=\ttfamily\small}
|
||||||
\lstset{aboveskip=0.222em,belowskip=0.222em}
|
\lstset{aboveskip=0.222em,belowskip=0.222em}
|
||||||
|
|
||||||
\usepackage{babel}
|
\usepackage{babel} % ?
|
||||||
|
|
||||||
\usepackage{graphicx} % for gnuplot ylabel rotate
|
\usepackage{graphicx} % for gnuplot ylabel rotate
|
||||||
|
|
||||||
|
@ -29,7 +29,7 @@
|
||||||
\setlength \parskip {0.35em}
|
\setlength \parskip {0.35em}
|
||||||
|
|
||||||
\makeatletter
|
\makeatletter
|
||||||
% exlication de ce truc ?
|
% explication de ce truc ?
|
||||||
\def\verbatim@font{\normalfont\ttfamily\small}
|
\def\verbatim@font{\normalfont\ttfamily\small}
|
||||||
\makeatother
|
\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},
|
puis l'enregistrer dans un fichier \texttt{.fimg}\index{.fimg},
|
||||||
un format complètement inconnu, puisque je viens de l'inventer
|
un format complètement inconnu, puisque je viens de l'inventer
|
||||||
à l'instant même.
|
à 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
|
Tout d'abord, nous devons déclarer et garnir quelques variables
|
||||||
pour gérer la machinerie interne.
|
pour gérer la machinerie interne.
|
||||||
|
@ -155,9 +156,9 @@ char *fname = "exemple.fimg";
|
||||||
FloatImg fimg;
|
FloatImg fimg;
|
||||||
\end{lstlisting}
|
\end{lstlisting}
|
||||||
|
|
||||||
Ensuite, nous enchainerons trois étapes : création de l'image
|
Ensuite, nous enchainerons trois étapes : la création de l'image
|
||||||
en mémoire centrale, initialisation des valeurs de chaque pixel à 0.0,
|
en mémoire centrale, l'initialisation des valeurs de chaque pixel à 0.0,
|
||||||
et pour conclure, enregistrement dans un fichier\footnote{Au format
|
et pour conclure, l'enregistrement dans un fichier\footnote{Au format
|
||||||
ésotérique, mais très véloce.} binaire.
|
ésotérique, mais très véloce.} binaire.
|
||||||
|
|
||||||
\begin{lstlisting}
|
\begin{lstlisting}
|
||||||
|
@ -206,13 +207,13 @@ lesquels sont décrits en page \pageref{outils}.
|
||||||
\section{Installation}
|
\section{Installation}
|
||||||
|
|
||||||
Sauf indications contraires, ces instructions se réfèrent à
|
Sauf indications contraires, ces instructions se réfèrent à
|
||||||
une distribution Debian\index{Debian} récente.
|
une distribution Debian\index{Debian} récente, mais ça marche
|
||||||
|
quasiment pareil avec Fedora\index{Fedora}.
|
||||||
\textit{Attention, ça devient un peu gore. Myrys, punk, toussa\dots}
|
\textit{Attention, ça devient un peu gore\dots}
|
||||||
|
|
||||||
\subsection{Prérequis}
|
\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}
|
avoir quelques bibliothèques installées\footnote{Les \texttt{-dev}
|
||||||
en plus pour Debian et dérivées}~:
|
en plus pour Debian et dérivées}~:
|
||||||
\textsf{
|
\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é
|
Le script \texttt{install.sh}, à la racine du projet, est censé
|
||||||
faciliter un peu la chose. Il prend également en compte la copie
|
faciliter un peu la chose. Il prend également en compte la copie
|
||||||
des divers binaires du dossier \texttt{tools/} (cf page \pageref{outils})
|
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
|
Il reste enfin quelques exemples d'utilisation des outils de la
|
||||||
ligne de commande depuis un shell
|
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/}.
|
classées en deux catégories : \texttt{lib/} et \texttt{funcs/}.
|
||||||
La première contient les choses qui sont relativement figées,
|
La première contient les choses qui sont relativement figées,
|
||||||
et la seconde celles qui risquent de bouger. Cette classification
|
et la seconde celles qui risquent de bouger. Cette classification
|
||||||
est en fait arbitraire.
|
est en fait indécement arbitraire.
|
||||||
|
|
||||||
\subsection{Structures, macros\dots}
|
\subsection{Structures, macros\dots}
|
||||||
|
|
||||||
|
@ -286,6 +287,7 @@ dans une jolie structure que nous allons examiner dès maintenant.
|
||||||
\begin{lstlisting}
|
\begin{lstlisting}
|
||||||
/* in memory descriptor */
|
/* in memory descriptor */
|
||||||
typedef struct {
|
typedef struct {
|
||||||
|
int magic;
|
||||||
int width;
|
int width;
|
||||||
int height;
|
int height;
|
||||||
int type;
|
int type;
|
||||||
|
@ -296,7 +298,9 @@ typedef struct {
|
||||||
} FloatImg;
|
} FloatImg;
|
||||||
\end{lstlisting}\index{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
|
Le troisième est le type d'image : pour le moment, il y en a % trois
|
||||||
un certain nombre
|
un certain nombre
|
||||||
qui sont définis\footnote{et plus ou moins bien gérés\dots} :
|
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{count} sera mis à 0 et
|
||||||
le champ \textsl{fval} sera initialisé à 15.0
|
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
|
Ensuite, dans la boucle capture/cumul, \textsl{count} sera
|
||||||
incrémenté à chaque passe, et nous aurons donc, en finale,
|
incrémenté à chaque passe, et nous aurons donc, en finale,
|
||||||
toutes les informations nécessaires pour exploiter au mieux la dynamique
|
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
|
La fonction \texttt{fimg\_printhead(FloatImg *h)} affiche
|
||||||
sommairement le contenu de ce descripteur,
|
sommairement le contenu de ce descripteur,
|
||||||
et \texttt{fimg\_describe(FloatImg *head, char *txt)} propose
|
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.
|
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
|
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
|
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
|
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 à
|
documentés dans ce document, et les autres sont dangereux à
|
||||||
toucher. Les types d'images actuellement gérés sont les trois grands
|
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.
|
classiques : gray, rgb et rgba. et expliquées quelques lignes plus haut.
|
||||||
|
@ -529,12 +535,15 @@ inutile, en fait l'inverse de l'upscaling.
|
||||||
|
|
||||||
\begin{lstlisting}
|
\begin{lstlisting}
|
||||||
int fimg_halfsize_0(FloatImg *src, FloatImg *dst, int notused);
|
int fimg_halfsize_0(FloatImg *src, FloatImg *dst, int notused);
|
||||||
|
int fimg_halfsize_1(FloatImg *src, FloatImg *dst, int notused);
|
||||||
\end{lstlisting}
|
\end{lstlisting}
|
||||||
|
|
||||||
Attention lors de l'appel, le descripteur \texttt{dst} ne doit pas
|
Attention lors de l'appel, le descripteur \texttt{dst} ne doit pas
|
||||||
contenir d'image, et doit être effacé avec un bon
|
contenir d'image, et doit être effacé avec un bon
|
||||||
\texttt{memset(\&result, 0, sizeof(FloatImg));} bien senti.
|
\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}
|
\begin{lstlisting}
|
||||||
int fimg_extract_0(FloatImg *src, FloatImg *dst, int x, int y);
|
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,
|
la valeur maximale, la date de création, une longueur d'onde,
|
||||||
et bien plus encore.
|
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.
|
classique proposé par les gros scanners corporates.
|
||||||
|
|
||||||
\begin{lstlisting}
|
\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}
|
\end{lstlisting}
|
||||||
|
|
||||||
Tous les flags doivent être à zéro.
|
Tous les flags doivent être à zéro. Pour le moment.
|
||||||
|
|
||||||
|
|
||||||
\subsubsection{Vers FITS}\index{FITS}
|
\subsubsection{Vers FITS}\index{FITS}
|
||||||
|
@ -1157,7 +1169,8 @@ des deux valeurs \textsc{nbre} et \textsc{offs} calculées en préambule.
|
||||||
\end{verbatim}
|
\end{verbatim}
|
||||||
|
|
||||||
Cette seconde partie sert à calculer avec la commande
|
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 :
|
un coefficient variable en fonction du temps :
|
||||||
$sin(idx/16)$ afin d'avoir une oscillation du coefficient entre
|
$sin(idx/16)$ afin d'avoir une oscillation du coefficient entre
|
||||||
-1.0 et 1.0, deux valeurs probablement glitchantes.
|
-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}
|
L'option \texttt{-X} me permet d'intégrer des \textit{fritures}
|
||||||
expérimentales dans le binaire, et ne doit donc pas être
|
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.
|
terme.
|
||||||
|
|
||||||
\subsubsection{Upscaling}\index{upscaling}\label{upscaling}
|
\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é.
|
Mmmmm... Ça semble un peu plus compliqué.
|
||||||
La documentation à ce sujet me semble ésotérique.
|
La documentation à ce sujet me semble ésotérique.
|
||||||
D'un autre coté, il
|
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}
|
\subsection{ffmpeg}\index{ffmpeg}
|
||||||
|
|
||||||
|
@ -1341,9 +1354,37 @@ ffmpeg -nostdin \
|
||||||
|
|
||||||
Il y a d'autres logiciels pour lesquels écrire une fonction d'importation
|
Il y a d'autres logiciels pour lesquels écrire une fonction d'importation
|
||||||
serait bien~: \textsl{Geeqie}, un visualiseur d'image fort pratique, ou
|
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 ?}
|
\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}
|
||||||
|
|
Loading…
Reference in New Issue