\documentclass[a4paper,10pt,twoside,titlepage]{article}

\usepackage[top=2.5cm, bottom=3cm, inner=5cm, outer=3cm]{geometry}

\usepackage[francais]{babel}
\usepackage[utf8]{inputenc}
\usepackage[T1]{fontenc}
\usepackage{lmodern}

\usepackage{amssymb, amsmath, amsthm}
\usepackage[title,titletoc,toc]{appendix}

\usepackage[french,onelanguage,vlined,linesnumbered]{algorithm2e}

\usepackage{framed}
\usepackage{graphicx}
\usepackage{caption}
\usepackage{subcaption}
\usepackage{listings}
\usepackage{url}
\usepackage{upquote} 
\usepackage{color}
\usepackage[usenames,dvipsnames]{xcolor}
\usepackage{fancyhdr}
\usepackage{courier}
\usepackage{pifont}
\usepackage{csquotes}
\usepackage{changepage}

\strictpagecheck

\lstset{basicstyle=\footnotesize\ttfamily,breaklines=true}
\lstset{framextopmargin=50pt,frame=bottomline}
\definecolor{matlabCommentColor}{RGB}{0, 100, 0} % Green
\definecolor{matlabStringColor}{RGB}{204, 34, 34} % Red


\lstdefinelanguage{FSharp}%
{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 },
  keywordstyle=\color{blue}\bfseries,
  sensitive=true,
  basicstyle=\ttfamily,
        breaklines=true,
  xleftmargin=\parindent,
  aboveskip=\bigskipamount,
        tabsize=4,
  morecomment=[l][\color{OliveGreen}]{///},
  morecomment=[l][\color{OliveGreen}]{//},
  morecomment=[s][\color{OliveGreen}]{{(*}{*)}},
  morestring=[b]",
  showstringspaces=false,
  literate={`}{\`}1,
  stringstyle=\color{red},
}

\definecolor{light-gray}{gray}{0.7}

\lstdefinestyle{fsharp}{
  rulecolor = \color{light-gray},
  frameround = tttt,
  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, 
  basicstyle = \ttfamily\footnotesize,
  framexleftmargin = 5pt,
  framextopmargin = 3pt}

\newcommand{\mli}[1]{\mathit{#1}} % Multi-letter identifier.

\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}
\urldef{\parasitemiasetup}\url{http://private.gburri.org/CHUV/Parasitemia-1.0.0.7-Setup.exe}
\urldef{\imagesmesures}\url{http://private.gburri.org/CHUV/Images-mesures.zip}

\pagestyle{fancy}
\fancyfoot[CE,CO]{}
\fancyfoot[LE,RO]{\thepage}

\begin{document}

\nocite{*} % Pour inclure toute la bibliographie (et pas seulement celle citée).

\begin{titlepage}
\begin{center}
\huge
\vspace*{1cm}
\textbf{Parasitémie automatisée de la malaria à partir d'images microscopiques}
\vspace{1cm}

\Large
Master of Science HES-SO in Engineering \\
\large
Technologies industrielles (TIN) % Technologie de l'information et de la communication (TIC)


\vspace{1cm}

\includegraphics[width=3cm]{logos/hes-so_logo.jpg}

\vspace{0.5cm}

\includegraphics[width=4cm]{logos/mse_logo.jpg}


\vspace{7cm}

\large
Février 2016 - Révision n°1

\vspace{2cm}
\normalsize
Auteur : Grégory \textsc{Burri}\\
Sous la direction de Prof. Michel \textsc{Kocher} de la \emph{HEIG-VD} et Prof. \textsc{Olivier Hüsser} de la \emph{HE-Arc}

\vspace{2cm}
Master of Science HES-SO in  Engineering\\
Av. de Provence 6\\
CH-1007 Lausanne\\

\end{center}
\end{titlepage}

%%%%%%%%%%%%%%%%%%
% Page vide (derrière le titre).
\newpage
\thispagestyle{empty}
\null

%%%%%%%%%%%%%%%%%%
% Page contenant les signatures.
\newpage
\thispagestyle{empty}
\noindent
Accepté par la HES-SO//Master (Suisse, Lausanne) sur proposition de M. Kocher.

\vspace{0.5cm}
\noindent
Prof. Michel Kocher et Prof. Olivier Hüsser, conseillers de travail de master\\
Dr. Philippe Thévenaz, expert principal

\vspace{1cm}

\noindent
Lausanne, le 

\vspace{1cm}

\noindent
\setlength{\tabcolsep}{20pt}
\begin{tabular}{ l l l }
  Prof. Michel Kocher. & Prof Olivier Hüsser & Prof.\\
  Conseiller & Conseiller & Responsable de la filière
\end{tabular}

\newpage

%%%%%%%%%%%%%%%%%%
% Page contenant le résumé et les mots-clefs.

\thispagestyle{empty}
\begin{center}
\textbf{Résumé}
\end{center}
Ce papier présente une méthode automatique permettant l'établissement de la parasitémie d'un patient infecté par la malaria. Cette méthode se base sur une ou plusieurs images numériques microscopiques d'un frottis sanguin dont une coloration \emph{Giemsa} a été appliquée. Une implémentation est proposée sous la forme d'un logiciel graphique pouvant être facilement déployé sur n'importe quel ordinateur tournant sous Windows~7 ou une version supérieure.

\vspace{5cm}


\begin{center}
\textbf{Mots-clefs}
\end{center}
\og{}malaria\fg{}, \og{}paludisme\fg{}, \og{}parasitémie\fg{}, \og{}taux d'infection\fg{}, \og{}traitement d'images\fg{}, \og{}logiciel\fg{}
\newpage


\thispagestyle{empty}
\tableofcontents
\newpage

%%%%%%%%%%%%%%%%%%
\checkoddpage
\ifoddpage
\else
	\thispagestyle{empty}
	\cleardoublepage % Devrait être \newpage, mais ça ne marche pas...
\fi

\section{Introduction}

% TODO: Future dans l'intro?

L'objectif de ce projet est d'établir une méthode complète et non-supervisée afin de dénombrer les érythrocytes et de les classer en deux catégories de cellules, à savoir les saines et les infectées. Celle-ci est ensuite implémentée sous la forme d'un logiciel qui puisse être facilement utilisé par une personne ayant peu de connaissances en informatique. La méthode développée est finalement comparée à deux autres : \emph{Ma et al.}\cite{ma2010} et \emph{C. Di Ruberto et al.}\cite{di-ruberto2001}. D'autres approches telles que \emph{Purwar et al.}\cite{purwar2011} et \emph{Shoelson}\cite{shoelson2015} sont également discutées à la section~\ref{discussions}.

Cette réalisation est faite en partenariat avec le Dr. Guy Prod'hom de l'institut de microbiologie du \emph{CHUV} à Lausanne. La méthode actuellement utilisée au \emph{CHUV} pour ce type d'infection est le comptage manuel à partir de l'analyse au microscope d'un frottis sanguin. Cette méthode est longue dans le cas d'un dénombrement exhaustif des cellules ou, si une approximation de la densité des érythrocytes est faite, donne des résultats inexacts. De plus, elle nécessite un personnel hautement qualifié.

Les images à disposition correspondent à des photographies de sang infecté agrandies 50 fois. Chaque image comprend entre 500 et 700 érythrocytes. Une \emph{coloration de May-Grünwald Giemsa} est utilisée afin de faire ressortir les parasites avec une teinte particulière. Les éléments principaux composant les images sont : les érythrocytes (figure~\ref{fig:medical-globules-rouges}), les leucocytes (figure~\ref{fig:medical-globules-blancs}), les thrombocytes (figure~\ref{fig:medical-plaquettes}) et les différents stades de \emph{Plasmodium} (figure~\ref{fig:medical-plasmodium}).

\begin{figure}[htbp]
	\centering
	\begin{subfigure}[t]{0.3\textwidth}
		\includegraphics[width=\linewidth]{figures/medical_globules_rouges.jpg}
		\caption{Érythrocyte (globule rouge).}
		\label{fig:medical-globules-rouges}
	\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).}
		\label{fig:medical-plaquettes}
	\end{subfigure}
	\caption{Les éléments principaux composant le sang.}
	\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}. 

\begin{figure}[htbp]
	\centering
	\begin{subfigure}[t]{0.2\textwidth}
		\includegraphics[width=\linewidth]{figures/medical_plasmodium_1.jpg}
		\caption{Trophozoïte immature (anneau).}
		\label{fig:medical-plasmodium_1}
	\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.}
		\label{fig:medical-plasmodium_4}
	\end{subfigure}
	\caption{Les différents stades de l'infection d'un érythrocyte.}
	\label{fig:medical-plasmodium}
\end{figure}

%\subsection{Parasitémie de la malaria}

L'objectif est de dénombrer les érythrocytes sains ainsi que ceux infectés par des trophozoïtes immatures en début de croissance, comme montré par la figure~\ref{fig:medical-plasmodium_1}. Ce stade est appelé \emph{ring stage} car les parasites ont une forme d'anneau. Cet anneau, montré en détail par la figure~\ref{fig:noyau-cytoplasme}, comprend un noyau ainsi qu'un cytoplasme l'entourant.

La parasitémie est établie en pourcentage comme étant le rapport entre nombre d'érythrocytes infectés et le nombre total d'érythrocytes. Le groupe d'experts \emph{UK NEQAS} (\emph{United Kingdom National External Quality Assessment Service}) recommande de considérer un minimum de 1000 érythrocytes. Le \emph{CDC} (\emph{Centers for Disease Control and Prevention}) recommande quant à lui au moins 500 érythrocytes si la parasitémie est supérieure à 10~\% et au moins 2000 érythrocytes si la parasitémie est inférieure à 0.1~\%.

\begin{figure}[htbp]
	\centering
	\includegraphics[width=0.5\linewidth]{figures/RBC_noyau_cytoplasme.pdf}
	\caption{Détail des deux parties constituantes d'un trophozoïte immature.}
	\label{fig:noyau-cytoplasme}
\end{figure}

Certains artefacts comme des débris ou des plaquettes peuvent venir se superposer aux érythrocytes et être confondus avec des parasites. Ces cas peuvent être relativement fréquents et altérer significativement la parasitémie s'ils sont comptés comme étant des cas positifs d'infection. La figure~\ref{fig:RBC-artefact} montre quelques exemples de faux positifs potentiels.

\begin{figure}[htbp]
	\centering
	\begin{subfigure}[t]{0.2\textwidth}
		\includegraphics[width=\linewidth]{figures/RBC-plaquette.jpg}
%		\caption{Thrombocyte.}
		\label{fig:RBC-artefact-plaquette}
	\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.}
		\label{fig:RBC-artefact-debris-3}
	\end{subfigure}
	\caption{Exemple d'artefacts se superposant à des érythrocytes.}
	\label{fig:RBC-artefact}
\end{figure}



\section{Aperçu du processus}

La figure~\ref{fig:processusComplet} montre le processus complet du traitement d'une image de frottis sanguin. Celui-ci peut-être divisé en trois groupes de traitement : la segmentation des érythrocytes, la segmentation des parasites et finalement la classification des cellules.

\begin{figure}[htbp]
	\centering
	\includegraphics[width=0.9\linewidth]{figures/schema_processus_2.pdf}
	\caption{Le processus complet.}
	\label{fig:processusComplet}
\end{figure}

Dans le premier groupe, l'on va chercher à construire des ellipses qui correspondent le mieux aux bords des érythrocytes. Cela est réalisé à partir de la composante verte (voir figure~\ref{fig:image-source-green}) pour laquelle les érythrocytes ont un meilleur contraste avec le fond que les autres composantes. Pour ce faire, une estimation du rayon moyen est réalisée par granulométrie à l'aide d'une succession d'ouvertures par aire. La construction des ellipses utilise les pixels des bords des érythrocytes ainsi que son gradient. La méthode \emph{RANSAC} permet de créer un grand nombre d'ellipses candidates auxquelles un score est attribué. Finalement les ellipses sont élaguées en supprimant celles chevauchées par d'autres ellipses dont le score est supérieur.

Dans le deuxième groupe, les zones colorées et sombres vont être extraites en comparant les valeurs d'intensité de l'image avec la moyenne d'intensité des éléments de l'avant-plan. Ces zones sombres correspondent aux leucocytes, aux plaquettes et à certains débris. Une fermeture morphologique, dont la taille de l'élément structurant est calculée en fonction du rayon moyen, va permettre de mettre en évidence le cytoplasme des parasites. Les noyaux sont, quant à eux, mis en évidence à l'aide d'une fermeture par aire. La composante rouge de l'image est ici utilisée car présentant les parasites avec un meilleur contraste que les autres composantes (voir figure~\ref{fig:image-source-red}).

Le troisième groupe correspond à la mise en commun des informations du premier et du deuxième groupe afin de définir les érythrocytes et de les classer. La parasitémie est alors établie en calculant le rapport entre la population d'érythrocytes infectés et la population saine.

\begin{figure}[htbp]
	\centering
	\begin{subfigure}[t]{0.4\textwidth}
		\includegraphics[width=\linewidth]{figures/image-source-RGB.jpg}
		\caption{Image originale.}
		\label{fig:image-source-RGB}
	\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} 
	~
	\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} 
	~
	\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} 
	~
	\caption{Les différentes composantes de l'image.}
	\label{fig:image-source}
\end{figure}


\section{Détail de la méthode}

Les filtres gaussiens appliqués initialement vont permettre de supprimer une partie du bruit haute-fréquence. L'écart type de chaque filtre est choisi en fonction de la taille des objets. La taille d'un érythrocyte est d'environ 8~\textmu{m} et la taille d'un parasite d'environ 2.5~\textmu{m}. Des écarts types de 0.22~\textmu{m} et 0.15~\textmu{m} sont choisis pour la segmentation des érythrocytes respectivement la segmentation des parasites.

Il est également important de supprimer, avant le traitement, la partie d'intensité plus élevée se trouvant au centre des érythrocytes (visible sur la figure~\ref{fig:medical-globules-rouges}), sans quoi les ouvertures (par aire ou morphologiques) faites pendant la granulométrie ne s'appliqueraient qu'à une partie de la cellule. De plus, cette particularité gêne également lors de la recherche des bords.

Cela est fait en réalisant une ouverture par aire dont la surface est calculée à partir d'un rayon estimé sur la base de la résolution de l'image. Si, après la granulométrie, cette ouverture n'est pas suffisante (le rayon trouvé est supérieur à celui estimé via la résolution), alors une deuxième ouverture par aire est réalisée.

Une fois que le rayon a été estimé par granulométrie sur la composante verte, une ouverture par aire est également appliquée à l'image qui sera utilisée pour la détection des parasites et qui est issue de la composante rouge.


\subsection{Identification des érythrocytes}
\label{identification-erythrocytes}

Le but de cette étape est d'identifier les érythrocytes. Le profil de ceux-ci est un disque biconcave et apparait de manière plus ou moins déformée sur les photographies, comme on peut le voir à la figure~\ref{fig:image-source-RGB}. Ces déformations leur font prendre une forme plus ou moins elliptique dont le rapport entre le grand axe et le petit axe n'excède pas 1.6 ($\pm 23~\%$ d'un rayon moyen).

Le résultat de cette recherche sera une liste d'ellipses pouvant se recouvrir partiellement. Les ellipses sont décrites par les paramètres montrés par la figure~\ref{fig:ellipse-parametres}.

\begin{figure}[htbp]
	\centering
	\includegraphics[width=0.5\linewidth]{figures/ellipse-parametres.pdf}
	\caption{Paramètre d'une ellipse, $\alpha \in [0, \pi[$ est l'angle d'inclinaison du grand axe $a$, $a \geqslant b$ > 0.}
	\label{fig:ellipse-parametres}
\end{figure}


\subsubsection{Granulométrie}
\label{granulometrie}

L'objectif est de déterminer le rayon moyen des érythrocytes. Pour ce faire nous allons appliquer une série d'ouvertures par aire et calculer les différences des sommes des intensités de chaque pixel entre chaque ouverture. Chaque aire est calculée comme étant celle d'un cercle de rayon donné. Les rayons des aires vont être compris autour d'un rayon estimé à partir de la résolution donnée initialement. Les bornes inférieures et supérieures correspondent au rayon estimé minoré de 50~\% respectivement au rayon estimé majoré de 50~\%.

L'ouverture nécessite ici que les érythrocytes aient un niveau d'intensité plus élevé que le fond. Pour que cela soit le cas, nous travaillons sur le négatif de la composante verte. L'intensité des érythrocytes est toujours plus faible que celle du fond, et cela pour toutes les images qui ont été étudiées.

Deux autres approches ont également été essayées : l'ouverture morphologique par un élément structurant en forme de disque et par un élément structurant de forme octogonale. Un des problèmes de ces deux approches est qu'elles ont tendance à sous-estimer légèrement le rayon moyen dans le cas d'éléments elliptiques. La figure~\ref{fig:granulometrie-ellipse-cercle-closing-comparaison} montre à gauche le résultat d'une granulométrie par aire (le cercle et l'ellipse ont la même aire) et à droite le résultat d'une granulométrie morphologique. Le rayon $r$ est plus proche de la moyenne entre les deux rayons de l'ellipse $a$ et $b$ que le rayon $r'$. Il est à noter que dans cet exemple $a = 2b$ et que donc $r = \sqrt{2}b = 1.41b$ ce qui n'est pas très éloigné de la moyenne $(a+b)/2 = (2+1)/2 = 1.5$.

\begin{figure}[htbp]
	\centering
	\begin{subfigure}[t]{0.4\textwidth}
		\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} 
	~
	\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}	
	\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}

Un autre problème de la granulométrie à l'aide d'ouvertures morphologiques utilisant un disque comme élément structurant est sa complexité algorithmique quadratique en fonction du rayon du disque. La figure~\ref{fig:temps-morpho-cercle} montre un exemple de progression du temps de calcul en fonction du rayon. Une solution à ce problème est l'utilisation d'une approximation du cercle, l'octogone, qui peut être décomposé en quatre sous-éléments. L'associativité de l'érosion ou de la dilatation, montrée par l'équation~\ref{eq:dilatation-associatif}, permet la décomposition d'une dilatation ($e_{1} \oplus e_{2}$ où l'opérateur $\oplus$ est l'addition de Minkowski) en plusieurs dilatations successives ($\oplus~e_{1}$ puis $\oplus~e_{2}$). Cela permet de réduire la complexité algorithmique et ainsi de gagner du temps.

{\setlength{\abovedisplayskip}{0pt}
\begin{flalign} \label{eq:dilatation-associatif}
	f' = f \oplus (e_{1} \oplus e_{2}) = (f \oplus e_{1}) \oplus e_{2} &
\end{flalign}

Le détail de la décomposition d'un élément structurant de forme octogonale en quatre segments est montré ci-après. L'angle des segments en diagonal est de 45°.

{\setlength{\abovedisplayskip}{0pt}
\begin{flalign*}
	\includegraphics{figures/morpho/ligne-horizontale.pdf} \oplus \includegraphics{figures/morpho/ligne-diagonal-1.pdf} &= \includegraphics{figures/morpho/losange.pdf} \\
	\includegraphics{figures/morpho/losange.pdf} \oplus \includegraphics{figures/morpho/ligne-diagonal-2.pdf} &= \includegraphics{figures/morpho/hexagone.pdf} \\
	\includegraphics{figures/morpho/hexagone.pdf} \oplus \includegraphics{figures/morpho/ligne-verticale.pdf} &= \includegraphics{figures/morpho/octagon.pdf}
\end{flalign*}

La bibliothèque de traitement d'images utilisée ici, \emph{OpenCV}, ne réalise pas, à priori, cette optimisation lorsque l'élément structurant peut être décomposé. De ce fait, le temps de calcul, montré par la figure~\ref{fig:spectre-granulométrique-morpho-octogone}, ne se différencie pas de l'utilisation d'un disque. De plus, l'octogone produit un spectre granulométrique (figure~\ref{fig:spectre-granulométrique-morpho-octogone}) moins harmonieux que pour les deux autres granulométries.

Concernant les mesures du temps de calcul avec des images réelles, l'on constate que l'ouverture par aire est beaucoup plus rapide (8.4~s, figure~\ref{fig:temps-aire}) que l'ouverture morphologique (54~s, figures~\ref{fig:spectre-granulométrique-morpho-cercle} et~\ref{fig:spectre-granulométrique-morpho-octogone}). La première ouverture par aire, pour le premier rayon, prend un peu moins de 5~s, puis environ 100~ms pour les suivantes. Cela s'explique par la recherche initiale des minima puis par l'agrandissement de ceux-ci jusqu'à l'aire correspondant au premier rayon. Le détail de cet algorithme se trouve à la section~\ref{algo-ouverture-aire}.

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	
	\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.}
		\label{fig:spectre-granulométrique-aire}
	\end{subfigure}
	~
	\begin{subfigure}[t]{0.48\textwidth}
		\includegraphics[width=1\linewidth]{figures/Granulometry-time-area.pdf}
		\caption{Temps en milliseconde pour chaque ouverture. Temps total : 8.4~s.}
		\label{fig:temps-aire}
	\end{subfigure}
	\caption{Spectre granulométrique et temps en milliseconde pour chacune des ouvertures par aire. L'image utilisée est montrée à la figure~\ref{fig:exemple-granulometrie}.}
	\label{fig:Granulometry-area}
\end{figure}

\begin{figure}[htbp]
	\centering
	\begin{subfigure}[t]{0.48\textwidth}
		\includegraphics[width=1\linewidth]{figures/Granulometry-pattern-spectrum-morpho-circle.pdf}
		\caption{Spectre granulométrique d'une succession d'ouvertures morphologiques avec un disque.}
		\label{fig:spectre-granulométrique-morpho-cercle}
	\end{subfigure}
	~
	\begin{subfigure}[t]{0.48\textwidth}
		\includegraphics[width=1\linewidth]{figures/Granulometry-time-morpho-circle.pdf}
		\caption{Temps en milliseconde pour chaque ouverture. Temps total : 54~s.}
		\label{fig:temps-morpho-cercle}
	\end{subfigure}
	\caption{Spectre granulométrique et temps en milliseconde pour chacune des ouvertures morphologiques avec un disque comme élément structurant. L'image utilisée est montrée à la figure~\ref{fig:exemple-granulometrie}.}
	\label{fig:Granulometry-morpho-circle}
\end{figure}

\begin{figure}[htbp]
	\centering
	\begin{subfigure}[t]{0.48\textwidth}
		\includegraphics[width=1\linewidth]{figures/Granulometry-pattern-spectrum-morpho-octagon.pdf}
		\caption{Spectre granulométrique d'une succession d'ouvertures morphologiques avec un octogone.}
		\label{fig:spectre-granulométrique-morpho-octogone}
	\end{subfigure}
	~
	\begin{subfigure}[t]{0.48\textwidth}
		\includegraphics[width=1\linewidth]{figures/Granulometry-time-morpho-octagon.pdf}
		\caption{Temps en milliseconde pour chaque ouverture. Temps total : 54~s.}
		\label{fig:temps-morpho-octogone}
	\end{subfigure}
	\caption{Spectre granulométrique et temps en milliseconde pour chacune des ouvertures morphologiques avec un octogone comme élément structurant. L'image utilisée est montrée à la figure~\ref{fig:exemple-granulometrie}.}
	\label{fig:Granulometry-morpho-octagon}
\end{figure}

\begin{figure}[htbp]
	\centering
	\includegraphics[width=0.8\linewidth]{figures/exemple-granulometrie.jpg}
	\caption{Image de résolution 2592~\texttimes~1944 contenant environ 700 érythrocytes, qui a été utilisée pour le calcul de la granulométrie montré aux figures \ref{fig:Granulometry-area}, \ref{fig:Granulometry-morpho-circle} et \ref{fig:Granulometry-morpho-octagon}.}
	\label{fig:exemple-granulometrie}
\end{figure}

À partir du rayon moyen trouvé par granulométrie et des caractéristiques des érythrocytes énoncées à la section~\ref{identification-erythrocytes}, les rayons minimum et maximum sont définis comme étant $rayon_{moyen} (1 + 0.23)$ et $rayon_{moyen} (1 - 0.23)$.


\subsubsection{Recherche des bords des érythrocytes et calcul du gradient associé}

La construction d'ellipses nécessite la connaissance au préalable des bords des érythrocytes ainsi que du gradient associé. Cela est réalisé à l'aide d'une procédure s'apparentant au filtre de Canny.

Le gradient est défini comme étant deux composantes $g_x$ et $g_y$ en chaque point correspondant aux dérivées partielles par rapport à $x$ et par rapport à $y$ d'une image $f$, comme montré par l'équation~\ref{eq:composantes-gradient}.

{\setlength{\abovedisplayskip}{0pt}
\begin{flalign} \label{eq:composantes-gradient}
	\nabla f = \begin{pmatrix}g_x \\ g_y \end{pmatrix} = \begin{pmatrix}\partial f / \partial x \\ \partial f / \partial y \end{pmatrix}
\end{flalign}

Le filtre de Sobel permet d'obtenir une bonne approximation de ces deux composantes en appliquant deux convolutions avec les deux noyaux montrés à l'équation~\ref{eq:sobel-noyaux}. Une application sur une image réelle est montrée à la figure~\ref{fig:gradient}.

{\setlength{\abovedisplayskip}{0pt}
\begin{flalign} \label{eq:sobel-noyaux}
	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. 

{\setlength{\abovedisplayskip}{0pt}
\begin{flalign} \label{eq:gradient-norme}
	M(x, y) = \| \nabla f \| = \sqrt{g_x^2 + g_y^2}
\end{flalign}

\begin{figure}[htbp]
	\centering
	\begin{subfigure}[t]{0.4\textwidth}
		\includegraphics[width=1\linewidth]{figures/gradient-exemple.jpg}
	\end{subfigure}
	~
	\begin{subfigure}[t]{0.4\textwidth}
		\includegraphics[width=1\linewidth,interpolate=false]{figures/gradient-exemple.pdf}
	\end{subfigure}
	\caption{Une cellule dont le gradient de la partie jaune est montré à droite sous la forme d'un champ de vecteurs. Les bords sont également représentés.}
	\label{fig:gradient}
\end{figure}

Afin de ne garder que les crêtes, un algorithme de suppression des non-maxima est appliqué. Celui-ci est illustré par la figure~\ref{fig:non-maximum-suppression-schema} et va, pour chaque élément de la norme, le comparer à ses voisins en définissant l'orientation de l'arête du bord comme étant la droite perpendiculaire au gradient. Pour chaque côté de l'arête, une interpolation est calculée entre les deux éléments les plus proches de la droite ayant la même direction que la valeur du gradient de l'élément traité et passant par celui-ci. Par exemple, par rapport à la figure~\ref{fig:non-maximum-suppression-schema}, la valeur des voisins du haut est calculée comme étant $\psi = n_1 \cdot (1 - v_x/v_y) + n_2 \cdot v_x/v_y$ et celle des voisins du bas comme étant $\omega = n_4 \cdot (1 - v_x/v_y) + n_3 \cdot v_x/v_y$ où $v_x$ et $v_y$ sont les composantes du gradient au point traité $e$. Si la norme de $e$ est strictement plus grande que les valeurs $\psi$ et $\omega$, alors celui-ci sera défini comme étant un maximum. La figure~\ref{fig:nms} montre la valeur de la norme ainsi que les maxima mis en évidence.

\begin{figure}[htbp]
	\centering
	\begin{subfigure}[t]{0.35\textwidth}
		\includegraphics[width=1\linewidth,interpolate=false]{figures/non-maximum-suppression-schema.pdf}
		\caption{Les voisins ($n_1$, $n_2$, $n_3$, $n_4$) de $e$ qui vont être utilisés pour déterminer si $e$ est un maximum.}
		\label{fig:non-maximum-suppression-schema}
	\end{subfigure}
	~
	\begin{subfigure}[t]{0.35\textwidth}
		\includegraphics[width=1\linewidth,interpolate=false]{figures/nms.png}
		\caption{Le résultat de l'application de la suppression des non-maxima. Les maxima sont mis en évidence en blanc et la norme du gradient est montrée avec des niveaux d'intensité de gris.}
		\label{fig:nms}
	\end{subfigure}
	\caption{Suppression des non-maxima.}
	\label{fig:non-maximum-suppression}
\end{figure}

Le résultat obtenu par l'étape précédente, la suppression des non-maxima, va prendre en compte tous les bords et ceci indépendamment de la norme du gradient (inclinaison de la pente). Il est nécessaire maintenant de ne retenir que les bords les plus pertinents. Pour ce faire une recherche par hystérèse est appliquée en ne gardant, dans un premier temps, que les éléments dont la norme est supérieure au seuil obtenu précédemment par la méthode de Otsu majoré d'un pourcentage (par exemple 10~\%). Puis, dans un second temps, nous y ajoutons récursivement tous les éléments 8-connexes dont la norme est supérieure au seuil.

Finalement, les zones 8-connexes dont la surface est supérieure à un facteur du rayon moyen sont supprimées afin d'éliminer les bords de faible longueur qui ne correspondent, en général, pas aux bords des érythrocytes.

Le résultat de cette étape est la matrice de vecteurs définissant le gradient, dont les éléments ne faisant pas partie du bord sont mis à zéro (vecteur nul).

%\subsubsection{Recherche des bords des érythrocytes}

\subsubsection{Construction d'ellipses}

Une méthode proche de la méthode RANSAC (\emph{RANdom SAmple Consensus}) est appliquée à la matrice résultant de l'étape précédente. Cela consiste à faire glisser une fenêtre à travers la matrice et à tirer aléatoirement, un certain nombre de fois, trois points éloignés les uns des autres. À l'aide du gradient de deux des trois points, il est éventuellement possible de construire une ellipse unique. Les ellipses ainsi construites sont alors ajoutées à l'ensemble des ellipses. Une fois la matrice entièrement traversée par la fenêtre, un score est attribué à chacune des ellipses en fonction de sa proximité aux autres ellipses. Finalement, les ellipses dont le score est trop faible, ou qui se trouvent trop proches d'une ellipse ayant un score plus élevé, sont supprimées.

La taille de la fenêtre glissante est un carré dont la longueur des côtés correspond à deux fois le rayon maximum (voir section~\ref{granulometrie}). La fenêtre va balayer toute la matrice de gauche à droite et de haut en bas. Un incrément d'un quart sa dimension a été choisi. Pour chaque position un certain nombre de tirages de triplets de points valides parmi les vecteurs non-nuls est effectué. Ce nombre est égal à un coefficient multipliant le nombre courant d'éléments du bord. Celui-ci à été ajusté comme valant 6~\%. Un triplet valide correspond à trois points éloignés les uns des autres d'au moins une fraction du rayon moyen (par exemple la moitié) et avec lesquels il est possible de construire une ellipse dont les deux rayons se trouvent entre le rayon minimum et le rayon maximum.

\begin{figure}[htbp]
	\centering
	\begin{subfigure}[t]{0.3\textwidth}
		\includegraphics[width=1\linewidth]{figures/ellipses/cellule-bords-deformes.jpg}
	\end{subfigure}
	~
	\begin{subfigure}[t]{0.3\textwidth}
		\includegraphics[width=1\linewidth]{figures/ellipses/cellule-bords-deformes-bords.png}
	\end{subfigure}
	\caption{Une cellule présentant un contour déformé fournit moins de triplets avec lesquels il est possible de construire une ellipse. La résultat de la recherche d'ellipses pour cette cellule est montré au centre de la figure~\ref{fig:exemple-ellipses-4}.}
	\label{fig:cellule-bords-deformes}
\end{figure}

La densité de points valides dans la fenêtre à un endroit donné dépend de la qualité des bords. Ainsi, une cellule dont l'aspect s'éloigne d'une ellipse (comme montré à la figure~\ref{fig:cellule-bords-deformes}) produira moins de triplets valides. De ce fait il est nécessaire de fixer une limite du nombre de tirages dans le cas où les 6~\% de triplets valides sont difficiles voire impossibles à atteindre. Cette limite est fixée à 400~\% du nombre de vecteurs non-nuls.

\begin{figure}[htbp]
	\centering
	\includegraphics[width=0.5\linewidth]{figures/construction-ellipse.pdf}
	\caption{Le triplet de point $p_1$, $p_2$ et $p_3$ ainsi que les deux vecteurs du gradient $v_1$ et $v_2$ permettent possiblement la construction d'une ellipse. $d_1$ et $d_2$ sont les droites, tangentes à l'ellipse, perpendiculaires à $v_1$ respectivement $v_2$ et passant par les points associés.}
	\label{fig:construction-ellipse}
\end{figure}

À partir de chaque triplet de points et des deux vecteurs du gradient des deux premiers points, une ellipse va tenter d'être construite (comme montrer par la figure~\ref{fig:construction-ellipse}). Tout d'abord il faut s'assurer que les deux vecteurs $v_1$ et $v_2$ pointent bien dans le bon sens, c'est-à-dire vers le centre de l'ellipse. Pour cela il faut vérifier que les sens de rotation de $p_1$ et $p_2$ donnés par $v_1$ et $v_2$ par rapport au pivot $p_0$ soient différents et que l'angle formé entre les deux droites $d_1$ et $d_2$ soit strictement inférieur à $\pi$. La figure~\ref{fig:construction-ellipse-vecteurs-valides} illustre ces différents cas.

\begin{figure}[htbp]
	\centering
	\begin{subfigure}[t]{0.3\textwidth}
		\includegraphics[width=1\linewidth]{figures/ellipses/construction-ellipse-vecteurs-valides-3.pdf}
		\caption{Triplet invalide : sens contraire des vecteurs par rapport à $p_0$.}
		\label{fig:construction-ellipse-vecteurs-valides-3}
	\end{subfigure}
	~
	\begin{subfigure}[t]{0.3\textwidth}
		\includegraphics[width=1\linewidth]{figures/ellipses/construction-ellipse-vecteurs-valides-2.pdf}
		\caption{Triplet invalide : $\alpha \geqslant \pi$.}
		\label{fig:construction-ellipse-vecteurs-valides-2}
	\end{subfigure}
	~
	\begin{subfigure}[t]{0.3\textwidth}
		\includegraphics[width=1\linewidth]{figures/ellipses/construction-ellipse-vecteurs-valides-1.pdf}
		\caption{Triplet valide : $\alpha < \pi$.}
		\label{fig:construction-ellipse-vecteurs-valides-1}
	\end{subfigure}
	\caption{Cas de triplets valides et invalides.}
	\label{fig:construction-ellipse-vecteurs-valides}
\end{figure}

Tout d'abord le point $p_0$ est calculé comme montré par les équations~\ref{eq:p0-debut} à~\ref{eq:p0-fin}. Si $m_1 = m_2$ (les droite $d_1$ et $d_2$ sont parallèles), alors $p_0$ est défini comme étant le point à l'infini. Si les conditions de la figure~\ref{fig:construction-ellipse-vecteurs-valides-1} sont respectées, alors une conique est construite à partir des quatre points $p_0$, $p_1$, $p_2$ et $p_3$. Si cette conique est une ellipse valide, alors elle est ajoutée à l'ensemble des ellipses.

{\setlength{\abovedisplayskip}{0pt}
\begin{flalign}
	\label{eq:p0-debut}
	m_1 &= -v_{1_x} / v_{1_y} \\
	m_2 &= -v_{2_x} / v_{2_y} \\
	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) \\	 
	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 : 

{\setlength{\abovedisplayskip}{0pt}
\begin{flalign}
	T^2 &= X Y \\
	S &= \begin{pmatrix}1 & 0 & 0 \\ 0 & 0 & -1/2	\\ 0 & -1/2 & 0\end{pmatrix}
\end{flalign}

Changement de repère projectif par la matrice de passage $P$ ($3 \times 3$) :

{\setlength{\abovedisplayskip}{0pt}
\begin{flalign}
	P &= \begin{pmatrix}
		det(\upsilon_3, \upsilon_1, \upsilon_2) \, \upsilon_0 \\
		det(\upsilon_0, \upsilon_3, \upsilon_2) \, \upsilon_1 \\
		det(\upsilon_0, \upsilon_1, \upsilon_3) \, \upsilon_2
		\end{pmatrix}
\end{flalign}

Matrice de la conique dans le repère projectif de référence :

{\setlength{\abovedisplayskip}{0pt}
\begin{flalign}
	\begin{pmatrix} A & B & D \\ B & C & E \\ D & E & F\end{pmatrix} &= P \cdot S^{-1} \cdot P^\top
\end{flalign}

Le centre est défini comme suit :

{\setlength{\abovedisplayskip}{0pt}
\begin{flalign}
	(\alpha, \; \beta) = (B/A, \; D/A)
\end{flalign}

Les tailles des deux rayons sont données par $1/\sqrt{\lambda}$ et $1/\sqrt{\mu}$ où $\lambda$ et $\mu$ sont les valeurs propres de la matrice $Q$. Les vecteurs propres de $Q$ donnent les directions des deux axes de l'ellipse. La matrice $Q$ est calculée comme suit :

{\setlength{\abovedisplayskip}{0pt}
\begin{flalign}
	Ã &= E^2 - C F + (B F - E D) \alpha + (C D - B E) \beta \\
	Q &= Ã^{-1} \begin{pmatrix}A F - D^2 & B D - A E \\
						  B D - A E & A C - B^2\end{pmatrix}
\end{flalign}


\subsubsection{Calcul du score des ellipses}

Un score va être attribué à chaque ellipse en fonction de sa proximité aux autres ellipses. Pour chaque ellipse on calcule un score montré par l'équation~\ref{eq:ellipse-score}. En pratique, un arbre k-d~\cite[p.~99-105]{computational-geometry2008} est utilisé pour localiser les voisins proches afin d'éviter une complexité algorithmique en $O(n^2)$.

{\setlength{\abovedisplayskip}{0pt}
\begin{flalign}
	\label{eq:ellipse-score}
	s(e) &= \sum_{\substack{e' \in E \\ e' \neq e }} \left( \frac{2 \; aire_{intersection}(e, e')}{aire(e) + aire(e')} \right)^n
\end{flalign}

Où $E$ est l'ensemble des ellipses, $aire(e) = a \, b \, \pi$. La fonction $aire_{intersection}(e, e')$ donne la surface de l'intersection entre deux ellipses $e$ et $e'$. Ce calcul n'est pas trivial, une approximation numérique est donnée par \emph{Hughes et Mohcine}~\cite{hughes2011}. Chaque terme de l'addition est un nombre compris entre 0 et 1. L'exposant $n$ est un nombre plus grand ou égal à 1. Plus celui-ci est grand, moins les voisins éloignés vont avoir de l'influence. En pratique, une bonne convergence a été observée avec $n$ valant 20. Un exemple pratique est montré à la figure~\ref{fig:ellipses-chevauchement}.

\begin{figure}[htbp]
	\centering
	\includegraphics[width=0.35\linewidth]{figures/ellipses/ellipses-chevauchement.pdf}
	\caption{Exemple de calcul de score pour trois ellipses. Les scores indiqués ne sont pas des calculs exacts mais permettent de se faire une idée du fonctionnement de l'algorithme. On peut voir que toutes les ellipses se touchent et donc contribuent aux scores des autres. $e_2$ possède le plus de surface en commun avec les autres ellipses : elle a, dans ce cas, le score le plus élevé.}
	\label{fig:ellipses-chevauchement}
\end{figure}

\subsubsection{Élagage des ellipses}


\begin{figure}[htbp]
	\centering
	\begin{subfigure}[t]{0.45\textwidth}
		\includegraphics[width=1\linewidth]{figures/ellipses/exemple-1-green-filtered.jpg}
		\caption{Image initiale pour la recherche d'ellipses. Composante verte floutée dont le centre clair des érythrocytes a été ouvert.}
		\label{fig:exemple-ellipses-1}
	\end{subfigure}
	~
	\begin{subfigure}[t]{0.45\textwidth}
		\includegraphics[width=1\linewidth]{figures/ellipses/exemple-2-edges.png}
		\caption{Bords des cellules : éléments pour lesquels le gradient est non-nul.}
		\label{fig:exemple-ellipses-2}
	\end{subfigure}
	~
	\begin{subfigure}[t]{0.45\textwidth}
		\includegraphics[width=1\linewidth]{figures/ellipses/exemple-3-all-ellipses.jpg}
		\caption{L'ensemble des ellipses accumulées dessinées sur l'image initiale.}
		\label{fig:exemple-ellipses-3}
	\end{subfigure}
	~
	\begin{subfigure}[t]{0.45\textwidth}
		\includegraphics[width=1\linewidth]{figures/ellipses/exemple-4-ellipses.jpg}
		\caption{Le résultat final après élagage. Il est à noter que toutes les ellipses ne correspondent pas forcément à des érythrocytes.}
		\label{fig:exemple-ellipses-4}
	\end{subfigure}
	\caption{Aperçu du processus de recherche d'érythrocytes par ajustement d'ellipses. Le gradient n'est pas représenté.}
	\label{fig:exemple-ellipses}
\end{figure}


L'ensemble des ellipses peut ressembler à ce qui est montré à la figure~\ref{fig:exemple-ellipses-3}. La dernière étape dans l'identification des érythrocytes consiste à ne garder que les ellipses qui ont un score pertinent. Un seuil est fixé en fonction du rayon moyen : $0.07 \; rayon_{moyen}$, toutes les ellipses ayant un score plus bas que ce nombre sont éliminées. Ce seuil dépend du rayon car le nombre d'ellipses construites pour une cellule donnée dépend de son périmètre qui, lui-même, dépend linéairement du rayon moyen.

Les ellipses dont le centre est trop proche d'ellipses ayant un score plus élevé sont supprimées. Cette distance minimum est choisie comme étant un tiers du petit rayon de l'ellipse ayant le score le plus élevé.

Les étapes de la recherche d'ellipses sont illustrées par la figure~\ref{fig:exemple-ellipses}.


\subsection{Segmentation des parasites}

Cette étape va permettre d'identifier trois types d'éléments : les zones colorées sombres (figure~\ref{fig:exemple-dark-stain}), les noyaux des parasites et leur cytoplasme (incluant le noyau) comme montré à la figure~\ref{fig:noyau-cytoplasme}. Les zones colorées sombres correspondent aux leucocytes, thrombocytes, throphozoïtes, gametocytes, schizontes, etc.


\subsubsection{Extraction des zones colorées sombres}

L'histogramme de l'image filtrée est calculé puis séparé en deux classes à l'aide de la méthode de Otsu. Les deux moyennes, $m_1$ et $m_2$, de ces deux classes correspondent au fond respectivement aux érythrocytes, pour autant que les éléments sombres ne soient pas sur-représentés. Sont considérés comme zones colorées sombres les éléments qui ont un niveau d'intensité plus faible que $s$, où $s = m_2 - \Delta$ et $\Delta = f \; (m_1 - m_2)$. Ceci est montré à la figure~\ref{fig:profile-zones-colorees-sombres}. $f$ est un facteur permettant de régler la sensibilité de détection des zones sombres et a été choisi comme valant 1. La figure~\ref{fig:exemple-dark-stain} montre un exemple de segmentation d'un leucocyte.

Il est important, pour que les deux classes résultant de la méthode de Otsu correspondent bien aux érythrocytes et au fond, que les éléments sombres ne soient pas sur-représentés. Il a été observé que cela n'est jamais le cas dans les images $50\times$ ou $100\times$ étudiées. Par contre, si cette méthode est appliquée à une petite portion d'une image contenant beaucoup d'éléments sombres, par exemple des leucocytes, alors les zones sombres ne pourront pas être segmentées correctement.


\begin{figure}[htbp]
	\centering
	\includegraphics[width=0.45\linewidth]{figures/parasite/profile-zones-colorees-sombres.pdf}
	\caption{Profil d'intensité du fond ($m_1$) et de l'avant-plan : érythrocytes ($m_2$) et éléments sombres ($m_2 - \Delta$).}
	\label{fig:profile-zones-colorees-sombres}
\end{figure}

\begin{figure}[htbp]
	\centering
	\begin{subfigure}[t]{0.3\textwidth}
		\includegraphics[width=1\linewidth]{figures/parasite/exemple-dark-stain-0.jpg}
		\caption{Image originale.}
%		\label{}
	\end{subfigure}
	~
	\begin{subfigure}[t]{0.3\textwidth}
		\includegraphics[width=1\linewidth]{figures/parasite/exemple-dark-stain-1.jpg}
		\caption{Composante rouge filtrée : filtre gaussien + ouverture par aire.}
%		\label{}
	\end{subfigure}
	~
	\begin{subfigure}[t]{0.3\textwidth}
		\includegraphics[width=1\linewidth]{figures/parasite/exemple-dark-stain-2.png}
		\caption{Segmentation des zones colorées sombres.}
%		\label{}
	\end{subfigure}
	\caption{Exemple de la segmentation d'une zone colorée sombre, ici un leucocyte.}
	\label{fig:exemple-dark-stain}
\end{figure}


\subsubsection{Segmentation des cytoplasmes}

Le cytoplasme est le contenu du parasite entourant le noyau, qui se trouve à l'intérieur de sa membrane. La figure~\ref{fig:noyau-cytoplasme} montre ces éléments. La segmentation du cytoplasme va consister à appliquer une fermeture morphologique avec un disque comme élément structurant. Ce dernier aura un diamètre correspondant à l'épaisseur du cytoplasme. Cette épaisseur a été mesurée comme valant un cinquième du rayon moyen des érythrocytes.

L'image est ensuite multipliée par l'inverse d'un facteur de sensibilité et soustraite au résultat de la fermeture. L'image ainsi obtenue est seuillée à zéro. Un exemple est montré à la figure~\ref{fig:exemple-segmentation-cytoplasme}. L'équation correspondante est la suivante :

{\setlength{\abovedisplayskip}{0pt}
\begin{flalign}
	\label{eq:segmentation-cytoplasmes}
	\mli{Cytoplasmes} = \phi_{SE}(f) - (1 / \mli{sensibilité_{cytoplasme}}) \; f \geqslant 0
\end{flalign}

Où $f$ est l'image, $\phi_{SE}$ la fermeture morphologique par un élément structurant $SE$ et $\mli{sensibilité_{cytoplasme}}$ une valeur comprise entre 0 et 1. Cette valeur a été ajustée à 0.96.


\begin{figure}[htbp]
	\centering
	\begin{subfigure}[t]{0.25\textwidth}
		\includegraphics[width=1\linewidth]{figures/parasite/exemple-original.jpg}
		\caption{Image originale.}
%		\label{}
	\end{subfigure}
	~
	\begin{subfigure}[t]{0.25\textwidth}
		\includegraphics[width=1\linewidth]{figures/parasite/exemple-red.jpg}
		\caption{Composante rouge.}
%		\label{}
	\end{subfigure}
	~
	\begin{subfigure}[t]{0.25\textwidth}
		\includegraphics[width=1\linewidth]{figures/parasite/exemple-red-filtered.jpg}
		\caption{Composante rouge filtrée : filtre gaussien puis ouverture par aire.}
%		\label{}
	\end{subfigure}
	~
	\begin{subfigure}[t]{0.25\textwidth}
		\includegraphics[width=1\linewidth]{figures/parasite/exemple-noyaux.png}
		\caption{Noyaux du parasite.}
		\label{fig:exemple-segmentation-noyau}
	\end{subfigure}
	~
	\begin{subfigure}[t]{0.25\textwidth}
		\includegraphics[width=1\linewidth]{figures/parasite/exemple-cytoplasme.png}
		\caption{Cytoplasme du parasite.}
		\label{fig:exemple-segmentation-cytoplasme}
	\end{subfigure}
	\caption{Exemple de segmentation d'un parasite.}
	\label{fig:exemple-segmentation-parasite}
\end{figure}

\subsubsection{Segmentation des noyaux}

La segmentation des noyaux est réalisée grâce à une fermeture par aire. La surface d'un parasite correspond à environ 1~\% de la surface d'un érythrocyte, celle-ci étant calculée à partir du rayon moyen : $\mli{noyau_{surface}} = 0.01 * \pi * \mli{rayon}_{\mli{moyen}}^2$.

De la même manière que pour la segmentation des cytoplasmes, l'image est multipliée par l'inverse d'un facteur de sensibilité et soustraite au résultat de la fermeture par aire. L'image est ensuite seuillée à zéro. Un exemple est montré à la figure~\ref{fig:exemple-segmentation-noyau}. L'équation correspondante est la suivante :

{\setlength{\abovedisplayskip}{0pt}
\begin{flalign}
	\label{eq:segmentation-cytoplasmes}
	\mli{Noyaux} = \phi_{\lambda}(f) - (1 / \mli{sensibilité_{noyau}}) \; f \geqslant 0
\end{flalign}

Où $f$ est l'image, $\phi_{\lambda}$ la fermeture par aire de surface $\lambda$ et $\mli{sensibilité_{noyau}}$ une valeur comprise entre 0 et 1. Cette valeur a été ajustée à 0.92.


\subsection{Classification des cellules}

À partir des résultats des deux précédentes étapes, c'est-à-dire les ellipses représentant les érythrocytes ainsi que les marqueurs des parasites et des éléments colorés sombres, cette dernière étape va classifier chaque ellipse en trois classes : \emph{érythrocyte sain}, \emph{érythrocyte infecté} et \emph{objet particulier}. Certaines ellipses peuvent être amenées à être supprimées si elle ne correspondent pas à certains critères.

\subsubsection{Attribution des pixels aux ellipses}

Dans un premier temps, les ellipses qui touchent les bords sont supprimées. Les pixels au sein des ellipses sont attribués à une seule cellule. Si plusieurs cellules se chevauchent, alors une ligne de partage est tracée entre les deux points d'intersection, (comme montré par la figure~\ref{fig:exemple-attribution-pixel}).

\begin{sloppypar}
Les ellipses ayant une aire en dessous d'un seuil calculé comme étant $0.4 \; \pi \; \mli{rayon}_{\mli{moyen}}^2$ sont supprimées. Les pixels appartenant aux ellipses supprimées sont attribués aux ellipses existantes dans le cas de chevauchements.
\end{sloppypar}

\begin{figure}[htbp]
	\centering
	\begin{subfigure}[t]{0.3\textwidth}
		\includegraphics[width=1\linewidth]{figures/classification/exemple-attribution-pixel-1.jpg}
		\caption{Image originale.}
%		\label{}
	\end{subfigure}
	~
	\begin{subfigure}[t]{0.3\textwidth}
		\includegraphics[width=1\linewidth]{figures/classification/exemple-attribution-pixel-2.jpg}
		\caption{Ellipses se chevauchant.}
%		\label{}
	\end{subfigure}
	~
	\begin{subfigure}[t]{0.3\textwidth}
		\includegraphics[width=1\linewidth]{figures/classification/exemple-attribution-pixel-3.jpg}
		\caption{Attribution des pixels à chacune des cellules.}
%		\label{}
	\end{subfigure}
	\caption{Attribution des pixels aux cellules.}
	\label{fig:exemple-attribution-pixel}
\end{figure}



\subsubsection{Attribution d'une classe}

Une cellules dépassant un certain pourcentage d'éléments appartenant aux éléments colorés sombres ne peut pas être un érythrocyte et est donc classé comme \emph{objet particulier}. Cette classe n'entrera pas en compte dans l'établissement du taux d'infection. Le taux maximum d'éléments colorés sombres a été fixé à 10~\%.

Comme le montre la figure~\ref{fig:exemple-element-particulier}, les objets particuliers sont traités spécialement en ce qui concerne les chevauchements avec les érythrocytes : ceux-ci les recouvrent complètement. L'objectif de cette particularité est d'éviter qu'une partie d'un leucocyte, d'un schizonte ou d'un autre type d'objet particulier ne soit pris pour un parasite par un érythrocyte adjacent.

\begin{figure}[htbp]
	\centering
	\begin{subfigure}[t]{0.3\textwidth}
		\includegraphics[width=1\linewidth]{figures/classification/exemple-element-particulier-1.jpg}
		\caption{Image originale.}
%		\label{}
	\end{subfigure}
	~
	\begin{subfigure}[t]{0.3\textwidth}
		\includegraphics[width=1\linewidth]{figures/classification/exemple-element-particulier-2.jpg}
		\caption{Objet particulier (marqué d'une croix noire) recouvrant un érythrocyte.}
%		\label{}
	\end{subfigure}
	\caption{Spécificité des éléments particuliers vis-à-vis des érythrocytes.}
	\label{fig:exemple-element-particulier}
\end{figure}

Si le taux maximum d'éléments colorés sombres n'est pas atteint, alors la cellule est un érythrocyte et l'on va tester la condition suivante : l'érythrocyte possède au moins un élément appartenant aux noyaux et un certain nombre d'éléments appartenant aux cytoplasmes et se trouvant à une distance maximum donnée d'un élément noyau. Si cette condition est remplie, alors la classe \emph{érythrocyte infecté} lui est attribuée. Dans le cas contraire la classe \emph{érythrocyte sain} est attribuée.

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 :

{\setlength{\abovedisplayskip}{0pt}
\begin{flalign}
	\mli{Parasitémie}_{\%} = 100 \; \frac{\#\{\mli{érythrocytes_{sains}}\}}{\#\{\mli{érythrocytes_{infectés}}\}}
\end{flalign}

La figure~\ref{fig:exemple-classification} montre les différentes données utilisées lors de la classification.

\begin{figure}[htbp]
	\centering
	\begin{subfigure}[t]{0.48\textwidth}
		\includegraphics[width=1\linewidth]{figures/classification/exemple-1-original.jpg}
		\caption{Image originale.}
%		\label{}
	\end{subfigure}
	~
	\begin{subfigure}[t]{0.48\textwidth}
		\includegraphics[width=1\linewidth]{figures/classification/exemple-2-ellipses.jpg}
		\caption{Ellipses.}
%		\label{}
	\end{subfigure}
	~
	\begin{subfigure}[t]{0.48\textwidth}
		\includegraphics[width=1\linewidth]{figures/classification/exemple-3-dark-stain.png}
		\caption{Zones colorées sombres.}
%		\label{}
	\end{subfigure}
	~
	\begin{subfigure}[t]{0.48\textwidth}
		\includegraphics[width=1\linewidth]{figures/classification/exemple-4-cytoplasmes.png}
		\caption{Cytoplasmes.}
%		\label{}
	\end{subfigure}
	~
	\begin{subfigure}[t]{0.48\textwidth}
		\includegraphics[width=1\linewidth]{figures/classification/exemple-5-noyaux.png}
		\caption{Noyaux.}
%		\label{}
	\end{subfigure}
	~
	\begin{subfigure}[t]{0.48\textwidth}
		\includegraphics[width=1\linewidth]{figures/classification/exemple-6-classification.jpg}
		\caption{Résultat final.}
%		\label{}
	\end{subfigure}
	\caption{Exemple de classification. Le résultat final montre les érythrocytes sains marqués d'une croix bleue, les érythrocytes infectés marqués d'une croix rouge et les objets particuliers marqués d'une croix noire. On peut voir, en bas à droite, un leucocyte marqué comme objet particulier.}
	\label{fig:exemple-classification}
\end{figure}



\section{Implémentation}

La mise en œuvre de la méthode décrite dans les sections précédentes se fait via la réalisation d'un logiciel doté d'une interface graphique, adaptée aux besoins des utilisateurs et définie conjointement avec Dr. Guy Prod'hom du \emph{CHUV} de Lausanne. L'application doit pouvoir être installée sur des ordinateurs dotés de Windows~7 et de 4~Go de \emph{RAM}.

Pour ce faire la plate-forme \emph{.NET} a été choisie pour ses bonnes performances et sa disponibilité sur les machines cibles. De plus, \emph{Emgu CV} est un \emph{wrapper} \emph{.NET} pour la bibliothèque \emph{Open CV} qui est utilisée pour la manipulation des images.

Le langage de programmation est \emph{F\#}, un langage fonctionnel et orienté objet dérivé d'\emph{Objective Caml} et dérivant lui-même du langage \emph{ML} . Il a été choisi pour sa facilité d'écriture et son haut niveau d'expressivité.

Le code est séparé en deux \emph{assemblies} :

\begin{itemize}
   \item \emph{ParasitemiaCore} : Bibliothèque contenant la partie calcul.
   \item \emph{ParasitemiaUI} : Exécutable proposant une utilisation via une interface graphique ou via la ligne de commande.
\end{itemize}

Pour des raisons de précision numérique, le type \emph{Single} (réel sur 32 bits tel que défini par l'\emph{IEEE 754}) est utilisé pour la représentation de toutes les images intermédiaires à la place d'entier sur 8 ou sur 16 bits. Le processus pouvant prendre une quantité non-négligable de mémoire, le type \emph{Double} (réel sur 64 bits) a été écarté car doublant pratiquement la quantité de mémoire requise.

Le code source ainsi que l'exécutable et un installeur sont disponibles aux adresses suivantes :

\begin{small}
\begin{itemize}
	\item {\parasitemiasource}
	\item {\parasitemiaexe}
	\item {\parasitemiasetup}
\end{itemize}
\end{small}

\subsection{Détails de codage}

\subsubsection{Calculs en parallèle}

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<Bgr, byte>) (name: string) (config: Config) (reportProgress: (int -> bool) option) : Cell list option = [..]
\end{lstlisting}

Où \texttt{img} est l'image à analyser, \texttt{name} est un nom donné à l'analyse et utilisé dans le \emph{log}, \texttt{config} la configuration et \texttt{reportProgress} une fonction optionnelle qui permettra d'être renseigné de l'avancement de l'analyse à chaque appel en donnant le pourcentage (entre 0 et 100) et qui renverra \texttt{false} pour interrompre l'analyse. La fonction \texttt{doAnalysis} renvoie \texttt{None} si elle a été interrompue, ou une liste de cellules dans le cas contraire.

Une autre version de cette fonction existe dans le même module et permet de traiter en parallèle plusieurs images. Cette fonction est bloquante tant que le traitement de toutes les images n'est pas terminé ou que celle-ci n'a pas été interrompue via le même mécanisme décrit pour \texttt{doAnalysis} ci-dessus.

\begin{lstlisting}[style=fsharp, numbers = none]
let doMultipleAnalysis (imgs: (string * Config * Image<Bgr, byte>) list) (reportProgress: (int -> bool) option) : (string * Cell list) list option = [..]
\end{lstlisting}

Une liste d'images est fournie avec un nom associé à chacune d'entre elle ainsi qu'une configuration. L'ordre des résultats retournés n'étant pas forcément le même que celui de la liste d'images, il est nécessaire d'utiliser le nom donné pour associer les résultats aux images données. Comme pour \texttt{doAnalyse}, la fonction renvoie \texttt{None} si elle a été interrompue.

Le nombre de \emph{threads} exécutés en parallèle dépend du nombre de cœurs de la machine.


\subsubsection{Ouvertures et fermetures par aire sur des réels}
\label{algo-ouverture-aire}

\emph{Open CV} ne fournissant pas cette opération, que ce soit sur des entiers ou sur des réels, elle a été implémentée en \emph{F\#}. L'ouverture est détaillée par l'algorithme~\ref{alg:ouverture-par-aire}. Celui-ci est inspiré de l'article~\cite{vincent1992}. La fermeture est similaire mais en inversant l'opérateur d'ordre et en partant des minima à la place des maxima. Nous parlons ici de hauteur et de niveau : un élément plus haut qu'un autre ou de niveau supérieur est dit comme ayant une intensité plus grande.

Les iles sont des ensembles d'éléments 4-connexes. Une ile possède un niveau, et son nombre d'éléments est appelé sa surface. À chaque ile est associé un rivage qui est l'ensemble des éléments 4-connexes à l'ile qui ne font pas partie des éléments de celle-ci. Il doit être possible d'obtenir l'élément le plus élevé appartenant au rivage. Pour ce faire un tas max est utilisé~\cite[p.~140-155]{algo2010}. Ce dernier permet l'ajout et la suppression de l'élément maximum avec temps d'exécution d'ordre $O(log \; n)$.

Un maximum correspond à un ensemble d'éléments de valeur égale dont les voisins 4-connexes qui ne font pas partie du maximum en question ont une valeur strictement plus petite à celui-ci.

\begin{algorithm}
	\DontPrintSemicolon
	\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$) \;
	Initialisation du rivage de chaque ile \;
	\For{$i \in iles$}{
    		$r \leftarrow i$.rivage.pop\_max \;
    		\uIf{$r$ appartient à une ile $i'$}{
			\uIf{$i$.surface + $i'$.surface $\geqslant$ $A$ ou $i$.niveau $<$ $i'$.niveau}{
				Passe à l'ile suivante \;
			}
			\Else{
				$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é \;
			}
    		}
    		\uElseIf{$r$.niveau $>$ $i$.niveau}{
			Passe à l'ile suivante \;
    		}
    		\Else{
	    		$r$ est intégré à $i$ et ses voisins 4-connexe qui ne font ni partie de $i$ ni partie de $i$.rivage sont intégrés à $i$.rivage
    		}
	}
	\Return{une copie de $img$ dont les éléments appartenant aux iles sont mis à leur niveau respectif}
	\BlankLine
\end{algorithm}


\subsection{Interface en ligne de commande}

L'application peut être lancée via la ligne de commande et permet de traiter soit une seule image soit plusieurs simultanément si un dossier est donné. Les paramètres sont les suivants :

\begin{lstlisting}[style=tt]
ParasitemiaUI.exe (--folder <folder>|--file <file>) --output <folder> [--debug]
\end{lstlisting}

Où \texttt{---folder <folder>} est un dossier contenant les images à analyser, \texttt{---file <file>} est une image unique à analyser, \texttt{---output <folder>} est un dossier dans lequel seront écrits les résultats et le \emph{log} et \texttt{---debug} un flag permettant d'activer le mode debug dans lequel les images intermédiaires sont écrites dans le dossier de sortie.


\subsection{Interface graphique}

Les différents éléments de l'interface graphique, contrôles et fenêtres, sont décrits dans le langage \emph{XAML} et utilisés au sein de \emph{WPF} (\emph{Windows Presentation Foundation}). Au démarrage de l'application, ces fichiers sont chargés via le \emph{type provider} fourni par la bibliothèque \emph{FsXaml.Wpf}, puis les événements sont attachés aux contrôles. Il n'a pas été jugé utile d'utiliser un motif de conception spécifique tel que \emph{MVVM} (\emph{Model-view-viewmodel}) pour ce type d'interface.

La figure~\ref{fig:screenshot-GUI} montre la fenêtre principale à partir de laquelle les principales opérations peuvent être réalisées, comme par exemple charger ou sauvegarder un document, lancer une analyse d'une ou plusieurs images, naviguer au sein de l'image et changer l'état (sain/infecté) des érythrocytes. La parasitémie est affichée dans la partie supérieure, et un message d'avertissement s'affiche si le nombre de cellules analysées est trop faible.

\begin{figure}[htbp]
	\centering
	\begin{subfigure}[t]{0.9\textwidth}
		\includegraphics[width=1\linewidth]{figures/implementation/screenshot-main.jpg}
		\caption{La fenêtre principale. La parasitémie globale est affichée tout en haut. Les images sources sont affichées à gauche. L'image courante est montrée au centre ainsi que ses informations associées en dessous.}
%		\label{}
	\end{subfigure}
	~
	\begin{subfigure}[t]{0.55\textwidth}
		\includegraphics[width=1\linewidth]{figures/implementation/screenshot-start-analysis.jpg}
		\caption{La fenêtre permettant de lancer une analyse. La résolution (en pixel par pouce) de chaque image doit être entrée préalablement. Des valeurs prédéfinies ainsi qu'un calculateur aident l'utilisateur à trouver la bonne valeur. Ces valeurs sont stockées dans un fichier \emph{JSON} permettant à l'utilisateur de les modifier.}
%		\label{}
	\end{subfigure}
	~
	\begin{subfigure}[t]{0.35\textwidth}
		\includegraphics[width=1\linewidth]{figures/implementation/screenshot-ppi-calculator.jpg}
		\caption{Calcul la résolution de l'image en fonction de la taille du capteur, de sa résolution et du niveau de zoom. De la même manière que les valeurs de résolutions prédéfinies, la liste des différentes tailles de capteurs est stockée dans un fichier \emph{JSON}.}
%		\label{}
	\end{subfigure}
	\caption{L'interface graphique de l'application \emph{Parasitemia}.}
	\label{fig:screenshot-GUI}
\end{figure}

\subsubsection{Persistance des documents}

Le mode interactif avec interface graphique permet de gérer des documents sous la forme de fichier contenant les images sources ainsi que les résultats de leur analyse. L'extension utilisée est \texttt{PIAZ} pour \emph{ParasitemIA Zipped file}.

Chaque image source est enregistrée au format sans perte \emph{TIFF} en utilisant le modèle de couleur \emph{RGB} et 8 bits par canal. Les noms des images correspondent à leur numéro affiché dans la fenêtre principale, par exemple \texttt{1.tiff}. À chaque image est associé un fichier texte au format \emph{JSON} reprenant le nom du fichier de l'image avec le suffixe \texttt{.json} ajouté, par exemple \texttt{1.tiff.json}. Ce fichier \emph{JSON} contient le nom de l'image, les paramètres et la liste des érythrocytes détectés issus de la dernière analyse. Pour chaque érythrocyte les informations suivantes sont mémorisées :

\begin{itemize}
	\item Un flag pour savoir si la cellule est infectée ;
	\item Un flag informant si le flag précédent a été défini par l'utilisateur  ;
	\item Un numéro unique  ;
	\item Le centre de la cellule et ses dimensions (largeur, hauteur)  ;
	\item La surface du ou des noyaux.
\end{itemize}

\subsection{Dépendances}

Hormis \emph{Emgu CV}, toutes les dépendances sont fournies par le système de gestion de \emph{package} \emph{NuGet} intégré à l'environnement de développement \emph{Visual Studio}. Les dépendances sont listées ci-dessous :

\begin{itemize}
   \item \emph{FSharp.Collections.ParallelSeq} : Permet d'appliquer en parallèle des fonctions sur des séquences.
   \item \emph{MathNet.Numerics} : Différentes fonctions mathématiques, notamment concernant l'algèbre linéaire.
   \item \emph{FsXaml.Wpf} : Quelques outils facilitant l'utilisation de \emph{WPF} et \emph{XAML} avec \emph{F\#}.
   \item \emph{Netwonsoft.Json} : Permet la sérialisation et la désérialisation de données au format \emph{JSON}.
\end{itemize}


\section{Résultats}

Treize images~\footnote{{\imagesmesures}} on été sélectionnées, six d'entre elles ayant été prises avec un zoom 50 fois et sept avec un zoom 100. Un panel représentatif des différentes particularités a été choisi, notamment avec une illumination et une teinte pouvant varier entre les images, des débris se superposant aux cellules, des amas d'érythrocytes, des leucocytes, des trophozoïtes, des schizontes et des gamètes.

Trois méthodes sont appliquées sur ces images, à savoir \emph{Ma et al.}\cite{ma2010} dont l'implémentation est fournie sous la forme d'une script \emph{Python}, \emph{C. Di Ruberto et al.}\cite{di-ruberto2001} qui a été implémentée sous \emph{MATLAB} par\cite{burri2015} et la méthode décrite ici.

Concernant Ma, les paramètres suivants ont été modifiés afin d'adapter la méthode à la résolution de nos images (la décimation réalisée au début du processus a été désactivée) :

\begin{itemize}
	\item \texttt{Hough\_min\_radius} et \texttt{Hough\_max\_radius} sont définis à 20/45 pour les images 50 fois et à 40/90 pour les images 100 fois.
	\item \texttt{Min\_cell\_radius} et \texttt{Max\_cell\_radius} sont définis à 25/40 pour les images 50 fois et à 50/80 pour les images 100 fois. Ces valeurs correspondent aux valeurs limites citées à la section~\ref{identification-erythrocytes}.
	\item Les écarts types des gaussiennes, \texttt{Enhance\_a} et \texttt{Enhance\_c}, sont ajustés proportionnellement à la résolution des images. Les valeurs 2/40 sont utilisées pour les images 50 fois et 4/80 pour les images 100 fois.
	\item \texttt{Cell\_suppression\_radius} est diminué de 1.25 à 0.8 afin d'éviter que trop de cellules proches s'excluent mutuellement.
\end{itemize}

Les résultats sont montrés par les trois tableaux (\ref{tab:resultats-erythrocytes}, \ref{tab:resultats-parasites} et \ref{tab:resultats-parasitemie}) ci-après. Le premier concerne la segmentation des érythrocytes, le deuxième la recherche des parasites et le troisième la parasitémie. Les résultats de ce dernier sont à considérer avec précaution car ils ne reflètent pas forcément l'exactitude de la méthode dans la mesure où des faux positifs peuvent contrebalancer des faux négatifs. La colonne \emph{Total réf.} correspond à un nombre de référence établi par un comptage manuel. Les traitements n'ayant pas abouti sont marqués avec un tiret.

\begin{table}[htbp]
\setlength{\tabcolsep}{3pt}
\centering
\begin{tabular}{ r || r || r | r || r | r || r | r | }
 	 & & \multicolumn{2}{ c|| }{Ce papier} & \multicolumn{2}{ c|| }{\emph{Ma}} & \multicolumn{2}{ c| }{\emph{Di Ruberto}} \\ \cline{2-8}
	N° & Total réf. & \# manqué & \# en trop & \# manqué & \# en trop & \# manqué & \# en trop \\ \cline{1-8}
	1 & 184 & 	1 & 0 & 		30 & 1 & 		3 & 7 \\
	2 & 186 & 	3 & 0 & 		18 & 1 & 		15 & 5 \\
	3 & 188 & 	6 & 0 & 		17 & 2 & 		5 & 19 \\
	4 & 154 & 	0 & 0 & 		3 & 0 & 		12 & 1 \\
	5 & 150 & 	2 & 0 & 		7 & 3 & 		- & - \\
	6 & 139 & 	0 & 0 & 		5 & 0 & 		3 & 1 \\
	7 & 135 & 	1 & 0 & 		3 & 4 & 		1 & 7 \\
	8 & 612 & 	1 & 0 & 		11 & 1 & 		33 & 49 \\
	9 & 741 & 	1 & 0 & 		43 & 2 & 		128 & 79 \\
	10 & 557 & 	0 & 4 & 		18 & 0 & 		- & - \\
	11 & 686 & 	0 & 1 & 		45 & 1 & 		- & - \\
	12 & 510 & 	0 & 0 & 		15 & 0 & 		- & - \\
	13 & 424 & 	0 & 0 & 		9 & 1 & 		- & -
\end{tabular}
\caption{Résultats des mesures concernant la segmentation des érythrocytes.}
\label{tab:resultats-erythrocytes}
\end{table}


\begin{table}[htbp]
\setlength{\tabcolsep}{3pt}
\centering
\begin{tabular}{ r || r || r | r || r | r || r | r | }
 	 & & \multicolumn{2}{ c|| }{Ce papier} & \multicolumn{2}{ c|| }{\emph{Ma}} & \multicolumn{2}{ c| }{\emph{Di Ruberto}} \\ \cline{2-8}
	N° & Total réf. & \# manqué & \# en trop & \# manqué & \# en trop & \# manqué & \# en trop \\ \cline{1-8}
	1 & 0 & 		0 & 0 & 		0 & 1 & 		0 & 1 \\
	2 & 0 & 		0 & 0 & 		0 & 0 & 		0 & 1 \\
	3 & 0 & 		0 & 0 & 		0 & 3 & 		0 & 5 \\
	4 & 0 & 		0 & 0 & 		0 & 0 & 		0 & 30 \\
	5 & 28 & 		1 & 2 & 		9 & 3 & 		- & - \\
	6 & 28 & 		6 & 0 & 		9 & 0 & 		4 & 2 \\
	7 & 20 & 		0 & 1 & 		6 & 4 & 		0 & 10 \\
	8 & 100 & 	2 & 0 & 		2 & 3 & 		86 & 9 \\
	9 & 11 & 		4 & 0 & 		4 & 1 & 		9 & 5 \\
	10 & 14 & 	4 & 0 & 		4 & 1 & 		- & - \\
	11 & 1 & 		0 & 0 & 		1 & 2 & 		- & - \\
	12 & 2 & 		0 & 1 & 		0 & 11 & 		- & - \\
	13 & 1 & 		1 & 0 & 		0 & 3 & 		- & -
\end{tabular}
\caption{Résultats des mesures concernant la détection des parasites.}
\label{tab:resultats-parasites}
\end{table}


\begin{table}[htbp]
\setlength{\tabcolsep}{3pt}
\centering
\begin{tabular}{ r || r | r | r | r | }
	N° & Référence & Ce papier & \emph{Ma} & \emph{Di Ruberto} \\ \cline{1-5}
	1 & 0.0~\% & 		0.0~\% & 		0.6~\% & 		0.5~\% \\
	2 & 0.0~\% & 		0.0~\% & 		0.0~\% & 		0.6~\% \\
	3 & 0.0~\% & 		0.0~\% & 		1.7~\% & 		2.5~\% \\
	4 & 0.0~\% & 		0.0~\% & 		0.0~\% & 		21.0~\% \\
	5 & 18.7~\% & 	19.6~\% &		15.1~\% & 	- \\
	6 & 20.1~\% & 	15.8~\% &		14.2~\% & 	19.0~\% \\
	7 & 14.8~\% & 	15.7~\% &		13.2~\% & 	21.3~\% \\
	8 & 16.3~\% & 	16.0~\% &		16.8~\% & 	3.7~\% \\
	9 & 1.5~\% & 		0.9~\% & 		1.1~\% & 		1.0~\% \\
	10 & 2.5~\% & 	1.8~\% & 		2.0~\% & 		- \\
	11 & 0.1~\% & 	0.1~\% & 		0.3~\% & 		- \\
	12 & 0.4~\% & 	0.6~\% & 		2.6~\% & 		- \\
	13 & 0.2~\% & 	0.0~\% & 		1.0~\% & 		-
\end{tabular}
\caption{Résultats des mesures concernant la détection des parasites.}
\label{tab:resultats-parasitemie}
\end{table}

\begin{sloppypar}
Dans le cas de \emph{Ma}, les amas de cellules ainsi que les cellules allongées posent problème, comme montré par les figures~\ref{fig:comparaison-1} et~\ref{fig:comparaison-2}. Les amas de deux cellules sont souvent considérés comme une seule cellule malgré le fait que le paramètre \texttt{Cell\_suppression\_radius} ait été réduit afin d'éviter ce problème. De plus, cela fait qu'une partie des cellules de l'amas n'est pas pris en compte lors de la détection des parasites. À contrario, les cellules allongées peuvent provoquer une sur-segmentation : cela crée souvent deux petits érythrocytes qui seront écartés par la suite car ils sont trop petits. Ils sont montrés avec une croix noire à la figure~\ref{fig:comparaison-2-ma}.
\end{sloppypar}


\begin{figure}[htbp]
	\centering
	\begin{subfigure}[t]{0.23\textwidth}
		\includegraphics[width=1\linewidth]{figures/comparaison-1-original.jpg}
		\caption{Extrait de l'image n°2.}
		\label{fig:comparaison-1-original}
	\end{subfigure}
	~
	\begin{subfigure}[t]{0.23\textwidth}
		\includegraphics[width=1\linewidth]{figures/comparaison-1-master.jpg}
		\caption{Méthode présentée dans ce papier, résultat attendu.}
		\label{fig:comparaison-1-master}
	\end{subfigure}
	~
	\begin{subfigure}[t]{0.23\textwidth}
		\includegraphics[width=1\linewidth]{figures/comparaison-1-ma.jpg}
		\caption{\emph{Ma}, un seul érythrocyte est trouvé.}
		\label{fig:comparaison-1-ma}
	\end{subfigure}
	~
	\begin{subfigure}[t]{0.23\textwidth}
		\includegraphics[width=1\linewidth]{figures/comparaison-1-diruberto.jpg}
		\caption{\emph{Di Ruberto}, sur-segmentation.}
		\label{fig:comparaison-1-diruberto}
	\end{subfigure}
	\caption{Segmentation d'un amas de deux cellules.}
	\label{fig:comparaison-1}
\end{figure}

\begin{figure}[htbp]
	\centering
	\begin{subfigure}[t]{0.18\textwidth}
		\includegraphics[width=1\linewidth]{figures/comparaison-2-original.jpg}
		\caption{Extrait de l'image n°2.}
		\label{fig:comparaison-2-original}
	\end{subfigure}
	~
	\begin{subfigure}[t]{0.18\textwidth}
		\includegraphics[width=1\linewidth]{figures/comparaison-2-master.jpg}
		\caption{Méthode présentée dans ce papier, résultat attendu.}
		\label{fig:comparaison-2-master}
	\end{subfigure}
	~
	\begin{subfigure}[t]{0.18\textwidth}
		\includegraphics[width=1\linewidth]{figures/comparaison-2-ma.jpg}
		\caption{\emph{Ma}, la transformée de Hough dans le domaine des cercles crée deux foyers pour les ellipses.}
		\label{fig:comparaison-2-ma}
	\end{subfigure}
	~
	\begin{subfigure}[t]{0.18\textwidth}
		\includegraphics[width=1\linewidth]{figures/comparaison-2-diruberto.jpg}
		\caption{\emph{Di Ruberto}.}
		\label{fig:comparaison-2-diruberto}
	\end{subfigure}
	\caption{Segmentation d'une cellule de forme elliptique.}
	\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}. 

\begin{figure}[htbp]
	\centering
	\begin{subfigure}[t]{0.2\textwidth}
		\includegraphics[width=1\linewidth]{figures/comparaison-3-debris-original.jpg}
		\caption{Extrait de l'image n°12, un débris qui ne doit pas être confondu avec un parasite.}
		\label{fig:comparaison-1-original}
	\end{subfigure}
	~
	\begin{subfigure}[t]{0.2\textwidth}
		\includegraphics[width=1\linewidth]{figures/comparaison-3-debris-master.jpg}
		\caption{Méthode présentée dans ce papier, résultat attendu.}
		\label{fig:comparaison-1-master}
	\end{subfigure}
	~
	\begin{subfigure}[t]{0.2\textwidth}
		\includegraphics[width=1\linewidth]{figures/comparaison-3-debris-ma.jpg}
		\caption{\emph{Ma} (faux-positif).}
		\label{fig:comparaison-1-ma}
	\end{subfigure}
	\caption{Faux-positif lors de la détection des parasites avec la méthode de \emph{Ma}.}
	\label{fig:comparaison-3}
\end{figure}

La méthode de \emph{Di Ruberto} est, quant à elle, très sensible aux variations de la composante teinte de l'image de base. Par exemple, le traitement de l'image n°4 donne un très grand nombre de faux parasites détectés. L'image n°5 n'a pas abouti car la teinte des parasites est très proche de celle des érythrocytes. Dans certains cas il est également nécessaire d'inverser la composante saturation car la méthode nécessite que les parasites soient plus saturés que les cellules  et que ces dernières soient plus saturée que le fond.

Ces deux méthodes, et dans une moindre mesure la méthode présentée ici, sont sensibles à l'illumination de l'image. Les images n° 8, 9 et 10 sont particulièrement touchées par ce phénomène. Cela se voit sur le tableau~\ref{tab:resultats-parasites} où le nombre d'érythrocytes manqués est élevé à la fois pour \emph{Ma} et \emph{Di Ruberto}. Ce problème est illustré par la figure~\ref{fig:comparaison-4}.

\begin{figure}[htbp]
	\centering
	\begin{subfigure}[t]{0.4\textwidth}
		\includegraphics[width=1\linewidth]{figures/comparaison-4-illumination-original.jpg}
		\caption{Image originale, coin supérieur droit de l'image n°8.}
		\label{fig:comparaison-4-original}
	\end{subfigure}
	~
	\begin{subfigure}[t]{0.4\textwidth}
		\includegraphics[width=1\linewidth]{figures/comparaison-4-illumination-master.png}
		\caption{Méthode présentée dans ce papier, l'illumination affecte la détection des objets colorés sombres.}
		\label{fig:comparaison-4-master}
	\end{subfigure}
	~
	\begin{subfigure}[t]{0.4\textwidth}
		\includegraphics[width=1\linewidth]{figures/comparaison-4-illumination-ma.png}
		\caption{\emph{Ma}, l'avant-plan et le fond sont séparés à l'aide de la méthode k-médianes où chaque élément de l'image est un vecteur (rouge, vert, bleu) et la distance entre deux éléments est calculée de manière euclidienne.}
		\label{fig:comparaison-4-ma}
	\end{subfigure}
	~
	\begin{subfigure}[t]{0.4\textwidth}
		\includegraphics[width=1\linewidth]{figures/comparaison-4-illumination-di-ruberto.png}
		\caption{\emph{Di Ruberto}, application de la méthode de Otsu à la composante verte au début de la segmentation des érythrocytes.}
		\label{fig:comparaison-4-di-ruberto}
	\end{subfigure}
	\caption{Problème de l'illumination.}
	\label{fig:comparaison-4}
\end{figure}


\subsection{Discussion}
\label{discussions}

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. 

\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.

\emph{Di Ruberto}, pour l'identification des parasites, travaille sur les canaux \emph{teinte} et \emph{saturation} obtenus après une transformation non-linéaire de l'espace \emph{rouge-vert-bleu}. Cela rend la détection des parasites très sensible à la qualité de l'image en entrée. Une correspondance d'histogramme (\emph{histogram matching}), comme présentée par \emph{Brett Shoelson}\cite{shoelson2015}, a été testée afin de palier à ce problème. Cela n'a pas donné de résultats probants.

La méthode présentée ici utilise l'information de la résolution spatiale de l'image ainsi que la granulométrie pour accepter des images de dimensions variées. L'unique seuillage global réalisé concerne la détection des éléments sombres. Ceci pourrait être amélioré afin de s'affranchir des problèmes d'illumination. Une autre approche consisterait à utiliser un filtre homomorphique\cite[p.~289-293]{gonzalez-woods2008} en début de processus.


\section{Conclusion}

La méthode développée ici a montré de bonnes aptitudes quant à l'établissement de parasitémies de cas de malaria. L'utilisation d'un modèle de recherche de cellules de forme elliptique a permis d'obtenir de meilleurs résultats qu'une approche classique, comme la transformée de Hough. En décomposant le parasite en deux éléments, le noyau et le cytoplasme, le taux de faux-positifs a pu être considérablement réduit pour certaines images. Le logiciel appliquant cette méthode est actuellement en test dans le laboratoire de parasitologie du \emph{CHUV} à Lausanne.


\bibliographystyle{plain}
\bibliography{main}

\end{document}
