Compare commits
2 Commits
ce6d6e58bb
...
004f24689b
Author | SHA1 | Date | |
---|---|---|---|
|
004f24689b | ||
|
5ac050fa10 |
@ -3,7 +3,7 @@
|
|||||||
Avec toutes ces fonctions disponibles et `grabvidseq`, nous
|
Avec toutes ces fonctions disponibles et `grabvidseq`, nous
|
||||||
savons faire des images **floues**. L'étape suivante, les plus
|
savons faire des images **floues**. L'étape suivante, les plus
|
||||||
pervers d'entre vous le savent déja, est celle de la création
|
pervers d'entre vous le savent déja, est celle de la création
|
||||||
de **films flous** dans le domaine spacial.
|
de **films flous** dans le domaine spacio-temporel.
|
||||||
|
|
||||||
À l'heure actuelle, il y a plusieurs programmes distincts. Le premier
|
À l'heure actuelle, il y a plusieurs programmes distincts. Le premier
|
||||||
(fonderie) fait une moyenne mobile sur N images consécutives,
|
(fonderie) fait une moyenne mobile sur N images consécutives,
|
||||||
@ -16,7 +16,7 @@ de filtres...
|
|||||||
## Chaine de filtres
|
## Chaine de filtres
|
||||||
|
|
||||||
Ce système connait un certain nombre de filtres et d'effets spéciaux
|
Ce système connait un certain nombre de filtres et d'effets spéciaux
|
||||||
destinés à la kitchitude du produit final. Ils peuvent être chainés
|
destinés à augmenter la kitchitude du produit final. Ils peuvent être chainés
|
||||||
les uns après les autres, à l'entrée et à la sortie du process
|
les uns après les autres, à l'entrée et à la sortie du process
|
||||||
de floutagement.
|
de floutagement.
|
||||||
|
|
||||||
@ -26,7 +26,8 @@ L'option `-L` de ces logiciels permet d'obtenir la liste des filtres.
|
|||||||
|
|
||||||
Une chaine de filtres est constituée d'une liste de nom ou de numéro
|
Une chaine de filtres est constituée d'une liste de nom ou de numéro
|
||||||
de filtre, séparés par le caractère `:`, une façon de faire très
|
de filtre, séparés par le caractère `:`, une façon de faire très
|
||||||
classique dans notre univers, en fait.
|
classique dans notre univers, en fait. Et si on veut prendre des risques,
|
||||||
|
on doit continuer à appeler les filtres par leur numéro, jdçjdr.
|
||||||
|
|
||||||
`mirsplit:ctr2x2:3:killlines`
|
`mirsplit:ctr2x2:3:killlines`
|
||||||
|
|
||||||
|
@ -995,17 +995,75 @@ ne devrait pas être trop difficile. Des volontaires ?
|
|||||||
\textsl{D'ailleurs, pourquoi $N$ logiciels indépendants alors q'un
|
\textsl{D'ailleurs, pourquoi $N$ logiciels indépendants alors q'un
|
||||||
seul devrait être nécessaire ?}
|
seul devrait être nécessaire ?}
|
||||||
|
|
||||||
|
% -------------------------
|
||||||
|
|
||||||
|
\subsection{fimg2text}
|
||||||
|
|
||||||
|
Voici donc quelque chose qui retourne vers la bonne vieille
|
||||||
|
tradition Unix\index{Unix} et permet de traiter des images
|
||||||
|
flottantes avec des outils classiques comme l'injustement
|
||||||
|
méconnu \texttt{Awk}\index{Awk}.
|
||||||
|
Dans le comportement par défaut (le seul actuellement) cet outil
|
||||||
|
sort, pour chaque pixel, cinq valeurs~:
|
||||||
|
|
||||||
|
\begin{itemize}
|
||||||
|
\item Les coordonnées entières $x,y$ du pixel
|
||||||
|
\item Les valeurs flottantes des composantes \textsc{rgb}
|
||||||
|
\end{itemize}
|
||||||
|
|
||||||
|
On peut même espérer qu'un jour, il soit possible de faire
|
||||||
|
la transformation inverse. Quelle joie de générer des images
|
||||||
|
flottantes avec un programme écrit en \textit{gw-basic} :)
|
||||||
|
|
||||||
|
\begin{verbatim}
|
||||||
|
tth@fubar:~/Devel/FloatImg/doc$ fimg2text -h
|
||||||
|
usage:
|
||||||
|
fimg2text [options] foo.fimg > bar.csv
|
||||||
|
options:
|
||||||
|
-v increase verbosity
|
||||||
|
-n 3.14 normalize picture
|
||||||
|
-s N steps on x & y
|
||||||
|
\end{verbatim}
|
||||||
|
|
||||||
|
Vous voulez un petit exemple ?
|
||||||
|
|
||||||
|
\begin{verbatim}
|
||||||
|
tth@fubar:~/Devel/FloatImg/doc$ mkfimg -t drand48 quux.fimg 4 2
|
||||||
|
tth@fubar:~/Devel/FloatImg/doc$ fimg2text -s 1 quux.fimg
|
||||||
|
0 0 142.518127 84.036987 20.688946
|
||||||
|
1 0 164.273315 68.397079 138.501587
|
||||||
|
2 0 45.887970 25.905518 93.683243
|
||||||
|
3 0 53.292942 222.000000 111.711548
|
||||||
|
0 1 82.289795 113.054855 180.530014
|
||||||
|
1 1 42.051765 114.543625 4.249123
|
||||||
|
2 1 71.826775 96.219109 63.222294
|
||||||
|
3 1 160.535675 136.104919 204.020691
|
||||||
|
tth@fubar:~/Devel/FloatImg/doc$
|
||||||
|
\end{verbatim}
|
||||||
|
|
||||||
|
Et maintenant, vous voulez un gros exemple ?
|
||||||
|
|
||||||
|
|
||||||
|
% -------------------------
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
\subsection{fimg2gray}\index{fimg2gray}\label{fimg2gray}
|
\subsection{fimg2gray}\index{fimg2gray}\label{fimg2gray}
|
||||||
|
|
||||||
Nous avons vu dans ce document que chaque image flottante pouvait
|
Nous avons vu dans ce document que chaque image flottante pouvait
|
||||||
avoir plusieurs plans de réalité. Il ne faut en négliger aucun.
|
avoir plusieurs plans de réalité. Il ne faut en négliger aucun,
|
||||||
|
voire même tenter de les faire se rencontrer, se combiner et
|
||||||
|
s'influencer mutuellement.
|
||||||
|
|
||||||
Il faut quand même deviner que pour passer de l'espace RGB\index{RGB}
|
Il faut quand même deviner que pour passer de l'espace RGB\index{RGB}
|
||||||
à une abstraction linéaire mono-dimensionnelle, il existe une foultitude
|
à une abstraction linéaire mono-dimensionnelle, il existe une foultitude
|
||||||
de méthodes, toutes plus légitimes que les autres.
|
de méthodes, toutes plus légitimes que les autres.
|
||||||
\index{procrastination}
|
\index{procrastination}
|
||||||
Et face à l'incertitude du choix, j'ai reporté l'écriture de ce
|
Et face à l'incertitude du choix, j'ai reporté l'écriture de ce
|
||||||
logiciel aux calendes grecques, voire même plus tard.
|
logiciel aux calendes grecques, voire même plus tard,
|
||||||
|
après la grande pandémie\dots
|
||||||
|
|
||||||
|
% -------------------------
|
||||||
|
|
||||||
\subsection{cumulfimgs}\index{cumulfimgs}\label{cumulfimgs}
|
\subsection{cumulfimgs}\index{cumulfimgs}\label{cumulfimgs}
|
||||||
|
|
||||||
|
@ -90,6 +90,11 @@ fprintf(stderr, ">>> %25s ( '%s' '%s' %d )\n", __func__,
|
|||||||
srcname, dstname, notused);
|
srcname, dstname, notused);
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
if (steps < 1) {
|
||||||
|
fprintf(stderr, "%s: steps MUST be > 0\n", __func__);
|
||||||
|
exit(1);
|
||||||
|
}
|
||||||
|
|
||||||
foo = fimg_fileinfos(srcname, infos);
|
foo = fimg_fileinfos(srcname, infos);
|
||||||
if (foo) {
|
if (foo) {
|
||||||
fprintf(stderr, "'%s' get dims -> %d\n", srcname, foo);
|
fprintf(stderr, "'%s' get dims -> %d\n", srcname, foo);
|
||||||
@ -142,11 +147,13 @@ exit(0);
|
|||||||
int main(int argc, char *argv[])
|
int main(int argc, char *argv[])
|
||||||
{
|
{
|
||||||
int foo, opt;
|
int foo, opt;
|
||||||
int steps = 16;
|
int steps = 1;
|
||||||
float norm_val = 222.0; /* < 0 : don't normalize */
|
float norm_val = 222.0; /* < 0 : don't normalize */
|
||||||
|
char separator = ' ';
|
||||||
|
|
||||||
while ((opt = getopt(argc, argv, "hn:s:v")) != -1) {
|
while ((opt = getopt(argc, argv, "f:hn:s:v")) != -1) {
|
||||||
switch(opt) {
|
switch(opt) {
|
||||||
|
case 'f': separator = optarg[0]; break;
|
||||||
case 'v': verbosity++; break;
|
case 'v': verbosity++; break;
|
||||||
case 'h': help(1); exit(1);
|
case 'h': help(1); exit(1);
|
||||||
case 's': steps = atoi(optarg); break;
|
case 's': steps = atoi(optarg); break;
|
||||||
|
Loading…
Reference in New Issue
Block a user