Compare commits
2 Commits
2b03f3f516
...
4872ec698c
Author | SHA1 | Date | |
---|---|---|---|
|
4872ec698c | ||
|
1f03709b6c |
@ -10,7 +10,7 @@
|
|||||||
|
|
||||||
% \lstset{frame=single} % dessin d'un cadre autour du listing
|
% \lstset{frame=single} % dessin d'un cadre autour du listing
|
||||||
\lstset{basicstyle=\ttfamily\small}
|
\lstset{basicstyle=\ttfamily\small}
|
||||||
\lstset{aboveskip=0.222em,belowskip=0.222em}
|
\lstset{aboveskip=0.1em,belowskip=0.1em}
|
||||||
|
|
||||||
\usepackage{babel} % ?
|
\usepackage{babel} % ?
|
||||||
|
|
||||||
@ -50,7 +50,7 @@
|
|||||||
\begin{document}
|
\begin{document}
|
||||||
\maketitle
|
\maketitle
|
||||||
|
|
||||||
\section{Image flottante ?}
|
\section*{Image flottante ?}
|
||||||
|
|
||||||
Mais de quoi parle-t-on exactement ?
|
Mais de quoi parle-t-on exactement ?
|
||||||
|
|
||||||
@ -89,9 +89,9 @@ la page \pageref{outils} pour quelque chose de plus concret.
|
|||||||
\pagebreak
|
\pagebreak
|
||||||
\setlength \parskip {0.40em}
|
\setlength \parskip {0.40em}
|
||||||
|
|
||||||
% \layout \pagebreak
|
\layout \pagebreak
|
||||||
|
|
||||||
% -------------------------------------------------------------------
|
% ===================================================================
|
||||||
\section{Théorie}\index{théorie}
|
\section{Théorie}\index{théorie}
|
||||||
|
|
||||||
|
|
||||||
@ -128,7 +128,7 @@ 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
|
si nous songeons à des coefficients d'absorption, ou un canal
|
||||||
\textsl{alpha} qui inverserait les valeurs ?
|
\textsl{alpha} qui inverserait les valeurs ?
|
||||||
|
|
||||||
% -------------------------------------------------------------------
|
% ===================================================================
|
||||||
|
|
||||||
\section{Premier exemple}\index{exemple}\label{exemple}
|
\section{Premier exemple}\index{exemple}\label{exemple}
|
||||||
|
|
||||||
@ -203,7 +203,7 @@ d'autres exemples de mise en œuvre des fonctions disponibles
|
|||||||
sous formes d'outils en ligne de commande,
|
sous formes d'outils en ligne de commande,
|
||||||
lesquels sont décrits en page \pageref{outils}.
|
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 à
|
||||||
@ -734,7 +734,7 @@ int fimg_lissage_2x2(FloatImg *img);
|
|||||||
int fimg_killborders(FloatImg *img);
|
int fimg_killborders(FloatImg *img);
|
||||||
\end{lstlisting}
|
\end{lstlisting}
|
||||||
|
|
||||||
Bon, oké, ça marche ? Passons à l'tape suivante.
|
Bon, oké, ça marche ? Passons à l'étape suivante.
|
||||||
La convolution avec une matrice 3x3, c'est possible.
|
La convolution avec une matrice 3x3, c'est possible.
|
||||||
Et pas trop compliqué à faire.
|
Et pas trop compliqué à faire.
|
||||||
Bon, il reste le souci avec les bordures, souci qui ne peut
|
Bon, il reste le souci avec les bordures, souci qui ne peut
|
||||||
@ -753,7 +753,7 @@ typedef struct {
|
|||||||
|
|
||||||
L'usage des champs \texttt{mult} et \texttt{offset} n'est pas
|
L'usage des champs \texttt{mult} et \texttt{offset} n'est pas
|
||||||
clairement défini. Le prototype de la fonction de filtrage
|
clairement défini. Le prototype de la fonction de filtrage
|
||||||
non plus, mais assez simpe quand même. Source et destination
|
non plus, mais assez simple quand même. Source et destination
|
||||||
ne peuvent désigner la même image, et le champ \texttt{matrix}
|
ne peuvent désigner la même image, et le champ \texttt{matrix}
|
||||||
du filtre doit contenir des valeurs cohérentes.
|
du filtre doit contenir des valeurs cohérentes.
|
||||||
|
|
||||||
@ -817,7 +817,7 @@ de cohérence sur les dimensions des deux images, malgré l'existence
|
|||||||
de fonctions prévues à cet effet..
|
de fonctions prévues à cet effet..
|
||||||
|
|
||||||
|
|
||||||
% -------------------------------------------------------------------
|
% ===================================================================
|
||||||
\section{Les outils}\label{outils}
|
\section{Les outils}\label{outils}
|
||||||
|
|
||||||
\textsf{3615mavie} : sur des projets comme celui-ci, qui travaillent
|
\textsf{3615mavie} : sur des projets comme celui-ci, qui travaillent
|
||||||
@ -861,7 +861,6 @@ devra être donné avec l'option \texttt{-k F.F} avec une valeur par défaut
|
|||||||
\item [hdeg/vdeg:] dégradé du noir au blanc (relatif à \texttt{-k}).
|
\item [hdeg/vdeg:] dégradé du noir au blanc (relatif à \texttt{-k}).
|
||||||
\end{description}
|
\end{description}
|
||||||
|
|
||||||
|
|
||||||
% ---------------------
|
% ---------------------
|
||||||
|
|
||||||
\subsection{png2fimg}\index{png2fimg}\label{png2fimg}
|
\subsection{png2fimg}\index{png2fimg}\label{png2fimg}
|
||||||
@ -1008,9 +1007,9 @@ cumulator options :
|
|||||||
\end{verbatim}
|
\end{verbatim}
|
||||||
|
|
||||||
Le nom par défaut du fichier résultant est \texttt{out.fimg}.
|
Le nom par défaut du fichier résultant est \texttt{out.fimg}.
|
||||||
L'exportation "multiformat" est pour bientôt.
|
L'exportation « multiformat » est pour bientôt.
|
||||||
|
|
||||||
% -------------------------------------------------------------------
|
% ===================================================================
|
||||||
\section{TODO}\index{TODO}\label{TODO}\
|
\section{TODO}\index{TODO}\label{TODO}\
|
||||||
\index{XXX}
|
\index{XXX}
|
||||||
|
|
||||||
@ -1030,7 +1029,7 @@ choses seront acquises.
|
|||||||
\item Vérifier le gestion des images mono-canal.
|
\item Vérifier le gestion des images mono-canal.
|
||||||
\end{itemize}
|
\end{itemize}
|
||||||
|
|
||||||
% -------------------------------------------------------------------
|
% ===================================================================
|
||||||
\section{Exemples pour yusers}\index{exemple}
|
\section{Exemples pour yusers}\index{exemple}
|
||||||
|
|
||||||
Nous allons \textsl{essayer d'improviser} un exemple presque réel,
|
Nous allons \textsl{essayer d'improviser} un exemple presque réel,
|
||||||
@ -1209,7 +1208,7 @@ C'est juste une POC\index{POC}, et une implémentation bien plus
|
|||||||
complète écrite en \textbf{C}\index{C} est déja en chantier,
|
complète écrite en \textbf{C}\index{C} est déja en chantier,
|
||||||
avec une complexité prévue à un niveau assez réjouissant.
|
avec une complexité prévue à un niveau assez réjouissant.
|
||||||
|
|
||||||
% -------------------------------------------------------------------
|
% ===================================================================
|
||||||
\section{Video for Linux}\index{v4l2}
|
\section{Video for Linux}\index{v4l2}
|
||||||
|
|
||||||
Donc, maintenant, nous savons un peu tripoter ces images flottantes.
|
Donc, maintenant, nous savons un peu tripoter ces images flottantes.
|
||||||
@ -1306,7 +1305,7 @@ la liste des résolutions disponibles.
|
|||||||
|
|
||||||
Ajustement \textsl{Brightness Contrast Saturation Hue\dots}
|
Ajustement \textsl{Brightness Contrast Saturation Hue\dots}
|
||||||
|
|
||||||
% -------------------------------------------------------------------
|
% ===================================================================
|
||||||
\section{À l'extérieur}
|
\section{À l'extérieur}
|
||||||
|
|
||||||
|
|
||||||
@ -1370,14 +1369,23 @@ 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.
|
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.
|
||||||
|
|
||||||
\subsection{textsl{moving average}}
|
Par ailleurs, il m'a semblé pertinent d'inclure dans le projet une
|
||||||
|
foultitude d'effets spéciaux.
|
||||||
|
|
||||||
Moyenne mobile.
|
\subsection{\textsl{moving average}}
|
||||||
|
|
||||||
|
\texttt{./fonderie} : Basé sur la moyenne mobile.
|
||||||
|
|
||||||
\subsection{Interpolator}\index{interpolator}
|
\subsection{Interpolator}\index{interpolator}
|
||||||
|
|
||||||
Juste des calculs pas si simple que ça.
|
Juste des calculs pas si simple que ça.
|
||||||
|
|
||||||
|
\subsection{Singlepass}
|
||||||
|
|
||||||
|
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.}
|
||||||
|
|
||||||
\subsection{Déviance}
|
\subsection{Déviance}
|
||||||
|
|
||||||
Là, nous tombons dans la troiD de haut niveau, avec plein de maths
|
Là, nous tombons dans la troiD de haut niveau, avec plein de maths
|
||||||
|
@ -22,7 +22,7 @@ typedef struct {
|
|||||||
|
|
||||||
enum fxid { Fx_cos01=5, Fx_cos010, Fx_pow2, Fx_sqrt, Fx_gray0, Fx_halfsz0,
|
enum fxid { Fx_cos01=5, Fx_cos010, Fx_pow2, Fx_sqrt, Fx_gray0, Fx_halfsz0,
|
||||||
Fx_rot90, Fx_cmixa, Fx_desat, Fx_ctr2x2, Fx_norm,
|
Fx_rot90, Fx_cmixa, Fx_desat, Fx_ctr2x2, Fx_norm,
|
||||||
Fx_xper, Fx_binarize, Fx_hilight_R };
|
Fx_xper, Fx_binarize, Fx_trinarize,Fx_hilight_R };
|
||||||
|
|
||||||
Fx fx_list[] = {
|
Fx fx_list[] = {
|
||||||
{ "cos01", Fx_cos01, 0, 1 },
|
{ "cos01", Fx_cos01, 0, 1 },
|
||||||
@ -37,7 +37,8 @@ Fx fx_list[] = {
|
|||||||
{ "desat", Fx_desat, 0, 1 },
|
{ "desat", Fx_desat, 0, 1 },
|
||||||
{ "ctr2x2", Fx_ctr2x2, 0, 1 },
|
{ "ctr2x2", Fx_ctr2x2, 0, 1 },
|
||||||
{ "norm", Fx_norm, 0, 1 },
|
{ "norm", Fx_norm, 0, 1 },
|
||||||
{ "binarize", Fx_binarize, 0, 0 },
|
{ "binarize", Fx_binarize, 0, 1 },
|
||||||
|
{ "trinarize", Fx_trinarize, 0, 1 },
|
||||||
{ "hilightr", Fx_hilight_R, 0, 1 },
|
{ "hilightr", Fx_hilight_R, 0, 1 },
|
||||||
{ NULL, 0, 0, 0 }
|
{ NULL, 0, 0, 0 }
|
||||||
};
|
};
|
||||||
@ -94,6 +95,7 @@ return 0;
|
|||||||
static void help(int lvl)
|
static void help(int lvl)
|
||||||
{
|
{
|
||||||
Fx *fx;
|
Fx *fx;
|
||||||
|
int foo;
|
||||||
|
|
||||||
printf("-- fimg special effects -- %s %s --\n", __DATE__, __TIME__);
|
printf("-- fimg special effects -- %s %s --\n", __DATE__, __TIME__);
|
||||||
puts("usage:");
|
puts("usage:");
|
||||||
@ -105,8 +107,13 @@ puts("\t-v\tincrease verbosity");
|
|||||||
|
|
||||||
puts("effects:");
|
puts("effects:");
|
||||||
printf("\t");
|
printf("\t");
|
||||||
|
foo = 0;
|
||||||
for (fx=fx_list; fx->name; fx++) {
|
for (fx=fx_list; fx->name; fx++) {
|
||||||
printf("%s ", fx->name);
|
foo += printf("%s ", fx->name);
|
||||||
|
if (foo > 55) {
|
||||||
|
printf("\n\t");
|
||||||
|
foo = 0;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
puts("");
|
puts("");
|
||||||
fimg_print_version(1);
|
fimg_print_version(1);
|
||||||
@ -140,7 +147,7 @@ if (fx_list[fxidx].flags & 1) {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
/* XXX */
|
fprintf(stderr, "%s: ???\n", __func__); /* XXX */
|
||||||
memset(&dest, 0, sizeof(dest));
|
memset(&dest, 0, sizeof(dest));
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -187,6 +194,10 @@ switch (action) {
|
|||||||
fimg_copy_data(&src, &dest);
|
fimg_copy_data(&src, &dest);
|
||||||
foo = fimg_binarize(&dest, 0);
|
foo = fimg_binarize(&dest, 0);
|
||||||
break;
|
break;
|
||||||
|
case Fx_trinarize:
|
||||||
|
fimg_copy_data(&src, &dest);
|
||||||
|
foo = fimg_trinarize(&dest, 0);
|
||||||
|
break;
|
||||||
case Fx_hilight_R:
|
case Fx_hilight_R:
|
||||||
foo = fimg_highlight_color(&src, &dest, 'R', 1.333);
|
foo = fimg_highlight_color(&src, &dest, 'R', 1.333);
|
||||||
break;
|
break;
|
||||||
@ -203,6 +214,11 @@ if (foo) {
|
|||||||
return foo;
|
return foo;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
fimg_destroy(&src);
|
||||||
|
if (dest.type) {
|
||||||
|
fimg_destroy(&dest);
|
||||||
|
}
|
||||||
|
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
/* --------------------------------------------------------------------- */
|
/* --------------------------------------------------------------------- */
|
||||||
|
Loading…
Reference in New Issue
Block a user