From: Greg Burri Date: Wed, 1 Jul 2020 16:04:54 +0000 (+0200) Subject: Remove useless whitespaces X-Git-Tag: 1.0.13~11 X-Git-Url: http://git.euphorik.ch/index.cgi?a=commitdiff_plain;h=670d89db05dbbe990035f3a531352af9f05a0241;p=master-thesis.git Remove useless whitespaces --- diff --git a/rapport/main.tex b/rapport/main.tex index e4f83b2..c9aef0c 100644 --- a/rapport/main.tex +++ b/rapport/main.tex @@ -18,7 +18,7 @@ \usepackage{subcaption} \usepackage{listings} \usepackage{url} -\usepackage{upquote} +\usepackage{upquote} \usepackage{color} \usepackage[usenames,dvipsnames]{xcolor} \usepackage{fancyhdr} @@ -36,7 +36,7 @@ \lstdefinelanguage{FSharp}% -{morekeywords={let, new, match, with, rec, open, module, namespace, type, of, member, % +{morekeywords={let, new, match, with, rec, open, module, namespace, type, of, member, % and, for, while, true, false, in, do, begin, end, fun, function, return, yield, try, % mutable, if, then, else, cloud, async, static, use, abstract, interface, inherit, finally }, otherkeywords={ let!, return!, do!, yield!, use!, var, from, select, where, order, byte, bool, int, string }, @@ -61,26 +61,26 @@ mutable, if, then, else, cloud, async, static, use, abstract, interface, inherit \lstdefinestyle{fsharp}{ rulecolor = \color{light-gray}, frameround = tttt, - numbers = left, - numbersep = 8pt, - frame = single, - language = FSharp, + numbers = left, + numbersep = 8pt, + frame = single, + language = FSharp, basicstyle = \ttfamily\footnotesize, framexleftmargin = 15pt, framextopmargin = 3pt} - + \lstdefinestyle{tt}{ rulecolor = \color{light-gray}, frameround = tttt, - numbersep = 8pt, - frame = single, + numbersep = 8pt, + frame = single, basicstyle = \ttfamily\footnotesize, framexleftmargin = 5pt, framextopmargin = 3pt} \newcommand{\mli}[1]{\mathit{#1}} % Multi-letter identifier. -\renewcommand{\appendixtocname}{Annexes} +\renewcommand{\appendixtocname}{Annexes} \urldef{\parasitemiasource}\url{http://private.gburri.org/CHUV/Parasitemia-1.0.7-source.zip} \urldef{\parasitemiaexe}\url{http://private.gburri.org/CHUV/Parasitemia-1.0.7.zip} @@ -156,7 +156,7 @@ Dr. Philippe Thévenaz, expert principal \vspace{1cm} \noindent -Lausanne, le +Lausanne, le \vspace{1cm} @@ -216,14 +216,14 @@ Les images à disposition correspondent à des photographies de sang infecté ag \includegraphics[width=\linewidth]{figures/medical_globules_rouges.jpg} \caption{Érythrocyte (globule rouge).} \label{fig:medical-globules-rouges} - \end{subfigure} + \end{subfigure} ~ \begin{subfigure}[t]{0.3\textwidth} \includegraphics[width=\linewidth]{figures/medical_globules_blancs.jpg} \caption{Leucocyte (globule blanc).} \label{fig:medical-globules-blancs} \end{subfigure} - ~ + ~ \begin{subfigure}[t]{0.3\textwidth} \includegraphics[width=\linewidth]{figures/medical_plaquettes.jpg} \caption{Thrombocyte (plaquette).} @@ -233,7 +233,7 @@ Les images à disposition correspondent à des photographies de sang infecté ag \label{fig:medical-elements-sang} \end{figure} -Dans le cycle de vie du parasite \emph{Plasmodium}, responsable de la malaria, celui-ci passe par une étape d'alimentation active (trophozoïte) où il va se loger à l'intérieur des érythrocytes. Puis il va subir la schizogonie (reproduction asexuée) et va se développer en schizonte. Ces étapes sont montrées par la figure~\ref{fig:medical-plasmodium}. +Dans le cycle de vie du parasite \emph{Plasmodium}, responsable de la malaria, celui-ci passe par une étape d'alimentation active (trophozoïte) où il va se loger à l'intérieur des érythrocytes. Puis il va subir la schizogonie (reproduction asexuée) et va se développer en schizonte. Ces étapes sont montrées par la figure~\ref{fig:medical-plasmodium}. \begin{figure}[htbp] \centering @@ -241,20 +241,20 @@ Dans le cycle de vie du parasite \emph{Plasmodium}, responsable de la malaria, c \includegraphics[width=\linewidth]{figures/medical_plasmodium_1.jpg} \caption{Trophozoïte immature (anneau).} \label{fig:medical-plasmodium_1} - \end{subfigure} + \end{subfigure} ~ \begin{subfigure}[t]{0.2\textwidth} \includegraphics[width=\linewidth]{figures/medical_plasmodium_2.jpg} \caption{Maturation du trophozoïte.} \label{fig:medical-plasmodium_2} \end{subfigure} - ~ + ~ \begin{subfigure}[t]{0.2\textwidth} \includegraphics[width=\linewidth]{figures/medical_plasmodium_3.jpg} \caption{Trophozoïte mature.} \label{fig:medical-plasmodium_3} \end{subfigure} - ~ + ~ \begin{subfigure}[t]{0.2\textwidth} \includegraphics[width=\linewidth]{figures/medical_plasmodium_4.jpg} \caption{Schizonte.} @@ -285,20 +285,20 @@ Certains artefacts comme des débris ou des plaquettes peuvent venir se superpos \includegraphics[width=\linewidth]{figures/RBC-plaquette.jpg} % \caption{Thrombocyte.} \label{fig:RBC-artefact-plaquette} - \end{subfigure} + \end{subfigure} ~ \begin{subfigure}[t]{0.2\textwidth} \includegraphics[width=\linewidth]{figures/RBC-debris-1.jpg} % \caption{Débris.} \label{fig:RBC-artefact-debris-1} \end{subfigure} - ~ + ~ \begin{subfigure}[t]{0.2\textwidth} \includegraphics[width=\linewidth]{figures/RBC-debris-2.jpg} % \caption{Débris.} \label{fig:RBC-artefact-debris-2} \end{subfigure} - ~ + ~ \begin{subfigure}[t]{0.2\textwidth} \includegraphics[width=\linewidth]{figures/RBC-debris-3.jpg} % \caption{Débris.} @@ -333,25 +333,25 @@ Le troisième groupe correspond à la mise en commun des informations du premier \includegraphics[width=\linewidth]{figures/image-source-RGB.jpg} \caption{Image originale.} \label{fig:image-source-RGB} - \end{subfigure} + \end{subfigure} ~ \begin{subfigure}[t]{0.4\textwidth} \includegraphics[width=\linewidth]{figures/image-source-red.jpg} \caption{Composante rouge, les parasites sont bien contrastés.} \label{fig:image-source-red} - \end{subfigure} + \end{subfigure} ~ \begin{subfigure}[t]{0.4\textwidth} \includegraphics[width=\linewidth]{figures/image-source-green.jpg} \caption{Composante verte, les érythrocytes sont bien contrastés.} \label{fig:image-source-green} - \end{subfigure} + \end{subfigure} ~ \begin{subfigure}[t]{0.4\textwidth} \includegraphics[width=\linewidth]{figures/image-source-blue.jpg} \caption{Composante bleue, non-utilisée.} \label{fig:image-source-blue} - \end{subfigure} + \end{subfigure} ~ \caption{Les différentes composantes de l'image.} \label{fig:image-source} @@ -399,13 +399,13 @@ Deux autres approches ont également été essayées : l'ouverture morphologique \includegraphics[width=\linewidth]{figures/granulometrie-ellipse-cercle-closing-area.pdf} \caption{Cercle dont la surface est égale à celle de l'ellipse.} \label{fig:granulometrie-ellipse-cercle-closing-area} - \end{subfigure} + \end{subfigure} ~ \begin{subfigure}[t]{0.4\textwidth} \includegraphics[width=\linewidth]{figures/granulometrie-ellipse-cercle-closing-morpho.pdf} \caption{Cercle dont \emph{r} est égal au petit rayon \emph{a} de l'ellipse.} \label{fig:granulometrie-ellipse-cercle-closing-morpho} - \end{subfigure} + \end{subfigure} \caption{Comparaison du rayon d'un cercle trouvé par une ouverture par aire d'une ellipse (à gauche) avec celui trouvé par une ouverture morphologique (à droite).} \label{fig:granulometrie-ellipse-cercle-closing-comparaison} \end{figure} @@ -433,7 +433,7 @@ Concernant les mesures du temps de calcul avec des images réelles, l'on constat Il faut remarquer que le spectre granulométrique par aire comporte un deuxième sommet au rayon 44 qui correspond à certains amas de cellules. Il est nécessaire d'éviter de traiter des images comprenant trop de cellules se touchant. En pratique, ce cas ne survient pas car l'image est alors trop peu lisible pour être exploitée. \begin{figure}[htbp] - \centering + \centering \begin{subfigure}[t]{0.48\textwidth} \includegraphics[width=1\linewidth]{figures/Granulometry-pattern-spectrum-area.pdf} \caption{Spectre granulométrique d'une succession d'ouvertures par aire.} @@ -511,7 +511,7 @@ Le filtre de Sobel permet d'obtenir une bonne approximation de ces deux composan K_x = \begin{pmatrix}-1 & 0 & 1 \\ -2 & 0 & 2 \\ -1 & 0 & 1 \end{pmatrix}, \quad K_y = K_x^\top = \begin{pmatrix}-1 & -2 & -1 \\ 0 & 0 & 0 \\ 1 & 2 & 1 \end{pmatrix} \end{flalign} -La norme euclidienne en chaque point est obtenue par l'équation~\ref{eq:gradient-norme}. La méthode de Otsu est ensuite appliquée afin de calculer un seuil qui sera utilisé pour la définition des bords par hystérèse. +La norme euclidienne en chaque point est obtenue par l'équation~\ref{eq:gradient-norme}. La méthode de Otsu est ensuite appliquée afin de calculer un seuil qui sera utilisé pour la définition des bords par hystérèse. {\setlength{\abovedisplayskip}{0pt} \begin{flalign} \label{eq:gradient-norme} @@ -621,12 +621,12 @@ Tout d'abord le point $p_0$ est calculé comme montré par les équations~\ref{e b_1 &= -m_1 p_{1_x} + p_{1_y} \\ b_2 &= -m_2 p_{2_x} + p_{2_y} \\ d_1(x) &= y = m_1 x + b_1 \\ - d_2(x) &= y = m_2 x + b_2 \\ - p_{0_x} &= -(b_1 - b_2) / (m_1 - m_2) \\ + d_2(x) &= y = m_2 x + b_2 \\ + p_{0_x} &= -(b_1 - b_2) / (m_1 - m_2) \\ p_{0_y} &= -(m_2 b_1 - m_1 b_2) / (m_1 - m_2) \label{eq:p0-fin} \end{flalign} -La construction d'une ellipse est décrite ci-après. Dans le repère projectif $\{\upsilon_0, \upsilon_1, \upsilon_2, \upsilon_3\}$ lié à la conique, $\upsilon_0 = \begin{pmatrix}1 & p_{0_x} & p_{0_y}\end{pmatrix}, \; \upsilon_1 = \begin{pmatrix}1 & p_{1_x} & p_{1_y}\end{pmatrix}, \; \upsilon_2 = \begin{pmatrix}1 & p_{2_x} & p_{2_y}\end{pmatrix}, \; \upsilon_3 = \begin{pmatrix}1 & p_{3_x} & p_{3_y}\end{pmatrix}$. Si $p_0$ est à l'infini alors $\upsilon_0 = \begin{pmatrix}0 & * & *\end{pmatrix}$. L'équation de la conique est la suivante : +La construction d'une ellipse est décrite ci-après. Dans le repère projectif $\{\upsilon_0, \upsilon_1, \upsilon_2, \upsilon_3\}$ lié à la conique, $\upsilon_0 = \begin{pmatrix}1 & p_{0_x} & p_{0_y}\end{pmatrix}, \; \upsilon_1 = \begin{pmatrix}1 & p_{1_x} & p_{1_y}\end{pmatrix}, \; \upsilon_2 = \begin{pmatrix}1 & p_{2_x} & p_{2_y}\end{pmatrix}, \; \upsilon_3 = \begin{pmatrix}1 & p_{3_x} & p_{3_y}\end{pmatrix}$. Si $p_0$ est à l'infini alors $\upsilon_0 = \begin{pmatrix}0 & * & *\end{pmatrix}$. L'équation de la conique est la suivante : {\setlength{\abovedisplayskip}{0pt} \begin{flalign} @@ -900,11 +900,11 @@ Si le taux maximum d'éléments colorés sombres n'est pas atteint, alors la cel La distance maximum à laquelle doit se trouver un élément appartenant aux cytoplasmes d'un élément appartenant aux noyaux correspond au diamètre d'un parasite. On choisit ici le diamètre et non le rayon car le noyau ne se trouve pas au centre du parasite mais dans sa périphérie. Le diamètre d'une parasite a été mesuré comme environ le rayon d'un érythrocyte. La surface minimum des éléments du cytoplasme est fixée à 2~\% de l'aire moyen des érythrocytes. Pour établir ces deux limites, nous utilisons le rayon moyen obtenu lors de la granulométrie. -La parasitémie est finalement calculée en pourcentage comme étant le nombre d'érythrocytes infectés divisé par le nombre d'érythrocytes sains, le tout multiplié par 100 : +La parasitémie est finalement calculée en pourcentage comme étant le nombre d'érythrocytes infectés divisé par le nombre d'érythrocytes total (sains + infectés), le tout multiplié par 100 : {\setlength{\abovedisplayskip}{0pt} \begin{flalign} - \mli{Parasitémie}_{\%} = 100 \; \frac{\#\{\mli{érythrocytes_{sains}}\}}{\#\{\mli{érythrocytes_{infectés}}\}} + \mli{Parasitémie}_{\%} = 100 \; \frac{\#\{\mli{érythrocytes_{infecté}}\}}{\#\{\mli{érythrocytes_{sains} + érythrocytes_{infecté}}\}} \end{flalign} La figure~\ref{fig:exemple-classification} montre les différentes données utilisées lors de la classification. @@ -983,7 +983,7 @@ Le code source ainsi que l'exécutable et un installeur sont disponibles aux adr \subsubsection{Calculs en parallèle} -Au sein du module \texttt{ParasitemiaCore.Analysis} se trouve la fonction pour lancer l'analyse d'une image : +Au sein du module \texttt{ParasitemiaCore.Analysis} se trouve la fonction pour lancer l'analyse d'une image : \begin{lstlisting}[style=fsharp, numbers = none] let doAnalysis (img: Image) (name: string) (config: Config) (reportProgress: (int -> bool) option) : Cell list option = [..] @@ -1013,12 +1013,12 @@ Un maximum correspond à un ensemble d'éléments de valeur égale dont les vois \begin{algorithm} \DontPrintSemicolon - \caption{Ouverture par aire sur une image contenant des réels.} + \caption{Ouverture par aire sur une image contenant des réels.} \label{alg:ouverture-par-aire} - + \SetKwInOut{Input}{Entrée} \SetKwInOut{Output}{Sortie} - + \Input{une image $img$ et une aire $A$} \Output{l'ouvert de $img$} $\mli{iles} \leftarrow $ maxima($img$) \; @@ -1030,7 +1030,7 @@ Un maximum correspond à un ensemble d'éléments de valeur égale dont les vois Passe à l'ile suivante \; } \Else{ - $i$.surface $\leftarrow$ $i$.surface $+$ $i'$.surface \; + $i$.surface $\leftarrow$ $i$.surface $+$ $i'$.surface \; $i$.niveau $\leftarrow$ $i'$.niveau \; Le rivage de $i'$ est ajouté à celui de $i$ et $i'$ est supprimé \; } @@ -1266,7 +1266,7 @@ Dans le cas de \emph{Ma}, les amas de cellules ainsi que les cellules allongées \label{fig:comparaison-2} \end{figure} -La méthode de \emph{Ma} a également tendance à compter certains débris comme étant des parasites. Cela se voit sur le tableau~\ref{tab:resultats-parasites} pour l'image n°12 et est illustré par la figure~\ref{fig:comparaison-3}. +La méthode de \emph{Ma} a également tendance à compter certains débris comme étant des parasites. Cela se voit sur le tableau~\ref{tab:resultats-parasites} pour l'image n°12 et est illustré par la figure~\ref{fig:comparaison-3}. \begin{figure}[htbp] \centering @@ -1330,7 +1330,7 @@ Ces deux méthodes, et dans une moindre mesure la méthode présentée ici, sont L'apriori de forme, comme la transformée de Hough dans le domaine des cercles utilisé par \emph{Ma et al.}\cite{ma2010}, donne de meilleurs résultats qu'une approche purement morphologique telle que celle décrite par \emph{C. Di Ruberto et al.}\cite{di-ruberto2001}. Les érythrocytes ayant tendance à s'aplatir ou à se tourner, les résultats sont encore meilleurs avec un apriori de forme elliptique tel que montré dans ce papier. -La méthode de \emph{Ma} utilise beaucoup de paramètres interdépendants liés à la résolution spatiale et à la taille de l'image. Celle-ci est ajustée automatiquement par décimation afin d'avoir une taille connue à l'avance. Cela rend la méthode difficile à utiliser avec des images ayant des résolutions spatiales différentes de celle prévue. +La méthode de \emph{Ma} utilise beaucoup de paramètres interdépendants liés à la résolution spatiale et à la taille de l'image. Celle-ci est ajustée automatiquement par décimation afin d'avoir une taille connue à l'avance. Cela rend la méthode difficile à utiliser avec des images ayant des résolutions spatiales différentes de celle prévue. \emph{Ma} et \emph{Di Ruberto} utilisent un seuillage global qui fonctionne, par exemple avec la méthode de Otsu, et qui pose problème lorsqu'une illumination est présente. Ce problème est contourné par \emph{Purwar et al.}\cite{purwar2011} qui applique la méthode décrite par \emph{Tony Chan et Luminita Vese}\cite{Chan-vese2001} pour la segmentation des érythrocytes.