+\@writefile{toc}{\contentsline {section}{\numberline {3.1}Pr\IeC {\'e}sentation de l'algorithme}{41}{section.3.1}}
+\@writefile{toc}{\contentsline {subsection}{\numberline {3.1.1}Formulation}{41}{subsection.3.1.1}}
+\newlabel{eq-lhprod1}{{3.2}{42}{Formulation\relax }{equation.3.1.2}{}}
+\newlabel{eq-pdfgauss}{{3.3}{42}{Formulation\relax }{equation.3.1.3}{}}
+\newlabel{eq-gl1}{{3.4}{42}{Formulation\relax }{equation.3.1.4}{}}
+\newlabel{eq-teta}{{3.5}{42}{Formulation\relax }{equation.3.1.5}{}}
+\newlabel{eq-gl}{{3.6}{42}{Formulation\relax }{equation.3.1.6}{}}
+\@writefile{toc}{\contentsline {subsection}{\numberline {3.1.2}Optimisation des calculs}{42}{subsection.3.1.2}}
+\newlabel{snake-formulation}{{3.1.2}{42}{Optimisation des calculs\relax }{subsection.3.1.2}{}}
+\newlabel{eq-sommes1}{{3.7}{42}{Optimisation des calculs\relax }{equation.3.1.7}{}}
+\newlabel{eq-sommes-gene}{{3.8}{43}{Optimisation des calculs\relax }{equation.3.1.8}{}}
+\newlabel{eq-cumuls1}{{3.9}{43}{Optimisation des calculs\relax }{equation.3.1.9}{}}
+\newlabel{eq-somme-cumuls2}{{3.10}{43}{Optimisation des calculs\relax }{equation.3.1.10}{}}
+\newlabel{eq-somme-contour}{{3.11}{43}{Optimisation des calculs\relax }{equation.3.1.11}{}}
+\newlabel{eq-coefC}{{3.12}{43}{Optimisation des calculs\relax }{equation.3.1.12}{}}
+\@writefile{lof}{\contentsline {figure}{\numberline {3.1}{\ignorespaces \IeC {\`A} gauche : d\IeC {\'e}termination des vecteurs $f_{in}$ et $f_{out}$. \IeC {\`A} droite : code de Freeman d'un vecteur en fonction de sa direction, l'origine \IeC {\'e}tant suppos\IeC {\'e}e au pixel central, en noir. }}{43}{figure.3.1}}
+\newlabel{fig-freeman}{{3.1}{43}{À gauche : détermination des vecteurs $f_{in}$ et $f_{out}$. À droite : code de Freeman d'un vecteur en fonction de sa direction, l'origine étant supposée au pixel central, en noir. \relax }{figure.3.1}{}}
+\citation{ChesnaudRB99}
+\newlabel{li-img-cumul}{{2}{44}{}{AlgoLine3.2}{}}
+\newlabel{li-bresen}{{18}{44}{}{AlgoLine3.18}{}}
+\newlabel{li-contrib-seg-deb}{{19}{44}{}{AlgoLine3.19}{}}
+\newlabel{li-contrib-seg-fin}{{21}{44}{}{AlgoLine3.21}{}}
+\@writefile{lot}{\contentsline {table}{\numberline {3.1}{\ignorespaces Valeur du coefficient $C(i,j)$ en fonction des valeurs des codes de Freeman des vecteurs $f_{in}$ et $f_{out}$.}}{44}{table.3.1}}
+\newlabel{tab-freeman}{{3.1}{44}{Valeur du coefficient $C(i,j)$ en fonction des valeurs des codes de Freeman des vecteurs $f_{in}$ et $f_{out}$}{table.3.1}{}}
+\newlabel{eq-img-cumul}{{3.13}{44}{Optimisation des calculs\relax }{equation.3.1.13}{}}
+\@writefile{toc}{\contentsline {subsection}{\numberline {3.1.3}Impl\IeC {\'e}mentation s\IeC {\'e}quentielle}{44}{subsection.3.1.3}}
+\newlabel{snake-cpu-impl}{{3.1.3}{44}{Implémentation séquentielle\relax }{subsection.3.1.3}{}}
+\newlabel{algo-snake-cpu}{{2}{45}{Implémentation séquentielle\relax }{algocfline.2}{}}
+\@writefile{loa}{\contentsline {algocf}{\numberline {2}{\ignorespaces Principe mis en \oe uvre pour la convergence du snake polygonal}}{45}{algocfline.2}}
+\@writefile{toc}{\contentsline {subsection}{\numberline {3.1.4}Performances}{45}{subsection.3.1.4}}
+\@writefile{lof}{\contentsline {figure}{\numberline {3.2}{\ignorespaces \IeC {\'E}volution du contour lors de la segmentation d'une image de 512$^2$ pixels. La convergence est obtenue \IeC {\`a} l'it\IeC {\'e}ration 14 apr\IeC {\`e}s 44~ms pour un total de 256 n\oe uds.}}{46}{figure.3.2}}
+\newlabel{fig-snakecpu-cochon512}{{3.2}{46}{Évolution du contour lors de la segmentation d'une image de 512$^2$ pixels. La convergence est obtenue à l'itération 14 après 44~ms pour un total de 256 n\oe uds}{figure.3.2}{}}
+\@writefile{lof}{\contentsline {subfigure}{\numberline{(a)}{\ignorespaces {Initialisation : 4 n\oe uds}}}{46}{figure.3.2}}
+\@writefile{lof}{\contentsline {subfigure}{\numberline{(b)}{\ignorespaces {It\IeC {\'e}ration 1 : 8 n\oe uds 3~ms}}}{46}{figure.3.2}}
+\@writefile{lof}{\contentsline {subfigure}{\numberline{(c)}{\ignorespaces {It\IeC {\'e}ration 2 : 16 n\oe uds 1~ms}}}{46}{figure.3.2}}
+\@writefile{lof}{\contentsline {subfigure}{\numberline{(d)}{\ignorespaces {It\IeC {\'e}ration 3, 32 n\oe uds 1~ms}}}{46}{figure.3.2}}
+\@writefile{lof}{\contentsline {subfigure}{\numberline{(e)}{\ignorespaces {It\IeC {\'e}ration 7 : 223 n\oe uds 3~ms}}}{46}{figure.3.2}}
+\@writefile{lof}{\contentsline {subfigure}{\numberline{(f)}{\ignorespaces {It\IeC {\'e}ration 10 : 244 n\oe uds 3~ms}}}{46}{figure.3.2}}
+\@writefile{lof}{\contentsline {subfigure}{\numberline{(g)}{\ignorespaces {It\IeC {\'e}ration 13 : 256 n\oe uds 3~ms}}}{46}{figure.3.2}}
+\@writefile{lof}{\contentsline {subfigure}{\numberline{(h)}{\ignorespaces {It\IeC {\'e}ration 14 : 256 n\oe uds 3~ms}}}{46}{figure.3.2}}
+\@writefile{lof}{\contentsline {figure}{\numberline {3.3}{\ignorespaces Influence du contour initial sur la segmentation. Le contour final 1 est celui de la figure \ref {fig-snakecpu-cochon512}.}}{46}{figure.3.3}}
+\newlabel{fig-snakecpu-compinit}{{3.3}{46}{Influence du contour initial sur la segmentation. Le contour final 1 est celui de la figure \ref {fig-snakecpu-cochon512}}{figure.3.3}{}}
+\@writefile{lof}{\contentsline {subfigure}{\numberline{(a)}{\ignorespaces {Initialisation 2 }}}{46}{figure.3.3}}
+\@writefile{lof}{\contentsline {subfigure}{\numberline{(b)}{\ignorespaces {Contour final 2 : 273 n\oe uds 87~ms}}}{46}{figure.3.3}}
+\@writefile{lof}{\contentsline {subfigure}{\numberline{(c)}{\ignorespaces {Contour final 1 : 256 n\oe uds 44~ms}}}{46}{figure.3.3}}
+\newlabel{fig-snakecpu-cochon4ka}{{3.4(a)}{47}{Subfigure 3 3.4(a)\relax }{subfigure.3.4.1}{}}
+\newlabel{sub@fig-snakecpu-cochon4ka}{{(a)}{47}{Subfigure 3 3.4(a)\relax }{subfigure.3.4.1}{}}
+\newlabel{fig-snakecpu-cochon4kb}{{3.4(b)}{47}{Subfigure 3 3.4(b)\relax }{subfigure.3.4.2}{}}
+\newlabel{sub@fig-snakecpu-cochon4kb}{{(b)}{47}{Subfigure 3 3.4(b)\relax }{subfigure.3.4.2}{}}
+\@writefile{lof}{\contentsline {figure}{\numberline {3.4}{\ignorespaces Segmentation de l'image de test en 4000$^2$ pixels.}}{47}{figure.3.4}}
+\newlabel{fig-snakecpu-cochon4k}{{3.4}{47}{Segmentation de l'image de test en 4000$^2$ pixels}{figure.3.4}{}}
+\@writefile{lof}{\contentsline {subfigure}{\numberline{(a)}{\ignorespaces {$d_{max}=16$ et $l_{min}=8$, 1246 n\oe uds en 1.3~s}}}{47}{figure.3.4}}
+\@writefile{lof}{\contentsline {subfigure}{\numberline{(b)}{\ignorespaces {$d_{max}=128$ et $l_{min}=32$, 447 n\oe uds en 0.7~s}}}{47}{figure.3.4}}
+\@writefile{lof}{\contentsline {figure}{\numberline {3.5}{\ignorespaces Segmentation de l'image de test en 4000$^2$ pixels avec une cible de petite taille. Le contour initial est celui utilis\IeC {\'e} \IeC {\`a} la figure \ref {fig-snakecpu-cochon4k}.}}{47}{figure.3.5}}
+\newlabel{fig-snakecpu-cochon4kc3}{{3.5}{47}{Segmentation de l'image de test en 4000$^2$ pixels avec une cible de petite taille. Le contour initial est celui utilisé à la figure \ref {fig-snakecpu-cochon4k}}{figure.3.5}{}}
+\citation{BlellochTR90}
+\newlabel{fig-snakecpu-chronos1}{{3.2}{48}{Implémentation parallèle GPU du snake polygonal\relax }{section.3.2}{}}
+\@writefile{lof}{\contentsline {figure}{\numberline {3.6}{\ignorespaces \IeC {\'E}volution du co\IeC {\^u}t relatif des trois fonctions les plus consommatrices en temps de calcul en fonction de la taille de l'image \IeC {\`a} traiter.}}{48}{figure.3.6}}
+\@writefile{toc}{\contentsline {section}{\numberline {3.2}Impl\IeC {\'e}mentation parall\IeC {\`e}le GPU du snake polygonal}{48}{section.3.2}}
+\@writefile{toc}{\contentsline {subsection}{\numberline {3.2.1}pr\IeC {\'e}-calculs des images cumul\IeC {\'e}es}{48}{subsection.3.2.1}}
+\@writefile{toc}{\contentsline {subsection}{\numberline {3.2.2}Calcul des contribution des segments}{49}{subsection.3.2.2}}
+\newlabel{fig-calcul-cumuls}{{3.2.1}{50}{pré-calculs des images cumulées\relax }{subfigure.3.7.3}{}}
+\@writefile{lof}{\contentsline {figure}{\numberline {3.7}{\ignorespaces Calcul des images cumul\IeC {\'e}es $S_x$ et $S_x^2$ en trois \IeC {\'e}tapes successives. a) cumul partiel bloc par bloc et m\IeC {\'e}morisation de la somme de chaque bloc. b) cumul sur le vecteur des sommes partielles. c) ajout des sommes partielles \IeC {\`a} chaque \IeC {\'e}l\IeC {\'e}ment des blocs cumul\IeC {\'e}s.}}{50}{figure.3.7}}
+\@writefile{lof}{\contentsline {subfigure}{\numberline{(a)}{\ignorespaces {D\IeC {\'e}tail des op\IeC {\'e}rations effectu\IeC {\'e}es par le \textit {kernel} \texttt {compute\_block\_prefixes()}. La valeur $bs$ correspond au nombre de pixels de chaque bloc, qui est aussi le nombre de threads ex\IeC {\'e}cut\IeC {\'e} par chaque bloc de la grille de calcul.}}}{50}{figure.3.7}}
+\@writefile{lof}{\contentsline {subfigure}{\numberline{(b)}{\ignorespaces {D\IeC {\'e}tail des op\IeC {\'e}rations effectu\IeC {\'e}es par le \textit {kernel} \texttt {scan\_blocksums()}.}}}{50}{figure.3.7}}
+\@writefile{lof}{\contentsline {subfigure}{\numberline{(c)}{\ignorespaces {D\IeC {\'e}tail des op\IeC {\'e}rations effectu\IeC {\'e}es par le \textit {kernel} \texttt {add\_sums2prefixes()}.}}}{50}{figure.3.7}}
+\newlabel{fig-structure-segment}{{3.2.2}{51}{Calcul des contribution des segments\relax }{subsection.3.2.2}{}}
+\@writefile{lof}{\contentsline {figure}{\numberline {3.8}{\ignorespaces Structuration des donn\IeC {\'e}es en m\IeC {\'e}moire du GPU pour l'\IeC {\'e}valuation en parall\IeC {\`e}le de l'ensemble des \IeC {\'e}volutions possibles du contour.}}{51}{figure.3.8}}
+\newlabel{fig-cycle-contribs-segments}{{3.2.2}{52}{Calcul des contribution des segments\relax }{subfigure.3.9.6}{}}
+\@writefile{lof}{\contentsline {figure}{\numberline {3.9}{\ignorespaces Comparaison des cycles de d\IeC {\'e}placement des n\oe uds. Ligne du haut : version s\IeC {\'e}quentielle. Ligne du bas : version parall\IeC {\`e}le. Les segments en rouge sont des segments du contour non \IeC {\'e}valu\IeC {\'e}s, alors que ceux en pointill\IeC {\'e}s sont les paires ayant re\IeC {\c c}u les meilleures \IeC {\'e}valuations parmi les 8 d\IeC {\'e}placements possibles des n\oe uds correspondant.}}{52}{figure.3.9}}
+\@writefile{lof}{\contentsline {subfigure}{\numberline{(a)}{\ignorespaces {Contour de r\IeC {\'e}f\IeC {\'e}rence.}}}{52}{figure.3.9}}
+\@writefile{lof}{\contentsline {subfigure}{\numberline{(b)}{\ignorespaces {D\IeC {\'e}placement du n\oe ud $N_1$. Le crit\IeC {\`e}re est am\IeC {\'e}lior\IeC {\'e}.}}}{52}{figure.3.9}}
+\@writefile{lof}{\contentsline {subfigure}{\numberline{(c)}{\ignorespaces {D\IeC {\'e}placement du n\oe ud $N_2$. Le crit\IeC {\`e}re est am\IeC {\'e}lior\IeC {\'e}.}}}{52}{figure.3.9}}
+\@writefile{lof}{\contentsline {subfigure}{\numberline{(d)}{\ignorespaces {D\IeC {\'e}placement en parall\IeC {\`e}le de tous les n\oe uds. Les segments du contour n'ont pas \IeC {\'e}t\IeC {\'e} \IeC {\'e}valu\IeC {\'e}s. On ne peut pas dire, a priori si le crit\IeC {\`e}re est am\IeC {\'e}lior\IeC {\'e}.}}}{52}{figure.3.9}}
+\@writefile{lof}{\contentsline {subfigure}{\numberline{(e)}{\ignorespaces {D\IeC {\'e}placement en parall\IeC {\`e}le des n\oe uds impairs. Le crit\IeC {\`e}re est am\IeC {\'e}lior\IeC {\'e}.}}}{52}{figure.3.9}}
+\@writefile{lof}{\contentsline {subfigure}{\numberline{(f)}{\ignorespaces {D\IeC {\'e}placement en parall\IeC {\`e}le des n\oe uds pairs. Un seul segment n'a pas \IeC {\'e}t\IeC {\'e} \IeC {\'e}valu\IeC {\'e}.}}}{52}{figure.3.9}}
+\@writefile{toc}{\contentsline {subsubsection}{\numberline {3.2.2.1}Cas particulier des segments dont la pente $k$ v\IeC {\'e}rifie $|k|\leq 1$}{53}{subsubsection.3.2.2.1}}
+\@writefile{loa}{\contentsline {algocf}{\numberline {3}{\ignorespaces D\IeC {\'e}tail de l'impl\IeC {\'e}mentation du snake polygonal}}{54}{algocfline.3}}
+\newlabel{cpualgo}{{3}{54}{Implémentation séquentielle\relax }{algocfline.3}{}}
+\@writefile{lot}{\contentsline {table}{\numberline {3.2}{\ignorespaces Performances (en secondes) de la segmentation par snake polygonal sur CPU en fonction de la taille de l'image \IeC {\`a} traiter. Le temps sont obtenus avec la m\IeC {\^e}me image de test dilat\IeC {\'e}e et bruit\IeC {\'e}e et un contour initial carr\IeC {\'e} dont la distance aux bords est proportionnelle \IeC {\`a} la taille de l'image. Seule l'image en 15~MP a pu \IeC {\^e}tre trait\IeC {\'e}e par une impl\IeC {\'e}mentation utilisant SSE2.}}{55}{table.3.2}}
+\newlabel{tab-snakecpu-speed-size}{{3.2}{55}{Performances (en secondes) de la segmentation par snake polygonal sur CPU en fonction de la taille de l'image à traiter. Le temps sont obtenus avec la même image de test dilatée et bruitée et un contour initial carré dont la distance aux bords est proportionnelle à la taille de l'image. Seule l'image en 15~MP a pu être traitée par une implémentation utilisant SSE2}{table.3.2}{}}
+\@writefile{lot}{\contentsline {table}{\numberline {3.3}{\ignorespaces Acc\IeC {\'e}l\IeC {\'e}ration constat\IeC {\'e}e, pour le calcul des images cumul\IeC {\'e}es, de l'impl\IeC {\'e}mentation GPU par rapport \IeC {\`a} l'impl\IeC {\'e}mentation CPU de r\IeC {\'e}f\IeC {\'e}rence.}}{55}{table.3.3}}
+\newlabel{tab-speedup-cumuls}{{3.3}{55}{Accélération constatée, pour le calcul des images cumulées, de l'implémentation GPU par rapport à l'implémentation CPU de référence}{table.3.3}{}}
+\@writefile{toc}{\contentsline {chapter}{\numberline {4}Le filtrage des images sur GPU}{57}{chapter.4}}