Save imported image in the same format (WIP)
[master-thesis.git] / rapport / main.tex
1 \documentclass[a4paper,10pt,twoside,titlepage]{article}
2
3 \usepackage[top=2.5cm, bottom=3cm, inner=5cm, outer=3cm]{geometry}
4
5 \usepackage[francais]{babel}
6 \usepackage[utf8]{inputenc}
7 \usepackage[T1]{fontenc}
8 \usepackage{lmodern}
9
10 \usepackage{amssymb, amsmath, amsthm}
11 \usepackage[title,titletoc,toc]{appendix}
12
13 \usepackage[french,onelanguage,vlined,linesnumbered]{algorithm2e}
14
15 \usepackage{framed}
16 \usepackage{graphicx}
17 \usepackage{caption}
18 \usepackage{subcaption}
19 \usepackage{listings}
20 \usepackage{url}
21 \usepackage{upquote}
22 \usepackage{color}
23 \usepackage[usenames,dvipsnames]{xcolor}
24 \usepackage{fancyhdr}
25 \usepackage{courier}
26 \usepackage{pifont}
27 \usepackage{csquotes}
28 \usepackage{changepage}
29
30 \strictpagecheck
31
32 \lstset{basicstyle=\footnotesize\ttfamily,breaklines=true}
33 \lstset{framextopmargin=50pt,frame=bottomline}
34 \definecolor{matlabCommentColor}{RGB}{0, 100, 0} % Green
35 \definecolor{matlabStringColor}{RGB}{204, 34, 34} % Red
36
37
38 \lstdefinelanguage{FSharp}%
39 {morekeywords={let, new, match, with, rec, open, module, namespace, type, of, member, %
40 and, for, while, true, false, in, do, begin, end, fun, function, return, yield, try, %
41 mutable, if, then, else, cloud, async, static, use, abstract, interface, inherit, finally },
42 otherkeywords={ let!, return!, do!, yield!, use!, var, from, select, where, order, byte, bool, int, string },
43 keywordstyle=\color{blue}\bfseries,
44 sensitive=true,
45 basicstyle=\ttfamily,
46 breaklines=true,
47 xleftmargin=\parindent,
48 aboveskip=\bigskipamount,
49 tabsize=4,
50 morecomment=[l][\color{OliveGreen}]{///},
51 morecomment=[l][\color{OliveGreen}]{//},
52 morecomment=[s][\color{OliveGreen}]{{(*}{*)}},
53 morestring=[b]",
54 showstringspaces=false,
55 literate={`}{\`}1,
56 stringstyle=\color{red},
57 }
58
59 \definecolor{light-gray}{gray}{0.7}
60
61 \lstdefinestyle{fsharp}{
62 rulecolor = \color{light-gray},
63 frameround = tttt,
64 numbers = left,
65 numbersep = 8pt,
66 frame = single,
67 language = FSharp,
68 basicstyle = \ttfamily\footnotesize,
69 framexleftmargin = 15pt,
70 framextopmargin = 3pt}
71
72 \lstdefinestyle{tt}{
73 rulecolor = \color{light-gray},
74 frameround = tttt,
75 numbersep = 8pt,
76 frame = single,
77 basicstyle = \ttfamily\footnotesize,
78 framexleftmargin = 5pt,
79 framextopmargin = 3pt}
80
81 \newcommand{\mli}[1]{\mathit{#1}} % Multi-letter identifier.
82
83 \renewcommand{\appendixtocname}{Annexes}
84
85 \urldef{\parasitemiasource}\url{http://private.gburri.org/CHUV/Parasitemia-1.0.7-source.zip}
86 \urldef{\parasitemiaexe}\url{http://private.gburri.org/CHUV/Parasitemia-1.0.7.zip}
87 \urldef{\parasitemiasetup}\url{http://private.gburri.org/CHUV/Parasitemia-1.0.0.7-Setup.exe}
88 \urldef{\imagesmesures}\url{http://private.gburri.org/CHUV/Images-mesures.zip}
89
90 \pagestyle{fancy}
91 \fancyfoot[CE,CO]{}
92 \fancyfoot[LE,RO]{\thepage}
93
94 \begin{document}
95
96 \nocite{*} % Pour inclure toute la bibliographie (et pas seulement celle citée).
97
98 \begin{titlepage}
99 \begin{center}
100 \huge
101 \vspace*{1cm}
102 \textbf{Parasitémie automatisée de la malaria à partir d'images microscopiques}
103 \vspace{1cm}
104
105 \Large
106 Master of Science HES-SO in Engineering \\
107 \large
108 Technologies industrielles (TIN) % Technologie de l'information et de la communication (TIC)
109
110
111 \vspace{1cm}
112
113 \includegraphics[width=3cm]{logos/hes-so_logo.jpg}
114
115 \vspace{0.5cm}
116
117 \includegraphics[width=4cm]{logos/mse_logo.jpg}
118
119
120 \vspace{7cm}
121
122 \large
123 Février 2016 - Révision n°1
124
125 \vspace{2cm}
126 \normalsize
127 Auteur : Grégory \textsc{Burri}\\
128 Sous la direction de Prof. Michel \textsc{Kocher} de la \emph{HEIG-VD} et Prof. \textsc{Olivier Hüsser} de la \emph{HE-Arc}
129
130 \vspace{2cm}
131 Master of Science HES-SO in Engineering\\
132 Av. de Provence 6\\
133 CH-1007 Lausanne\\
134
135 \end{center}
136 \end{titlepage}
137
138 %%%%%%%%%%%%%%%%%%
139 % Page vide (derrière le titre).
140 \newpage
141 \thispagestyle{empty}
142 \null
143
144 %%%%%%%%%%%%%%%%%%
145 % Page contenant les signatures.
146 \newpage
147 \thispagestyle{empty}
148 \noindent
149 Accepté par la HES-SO//Master (Suisse, Lausanne) sur proposition de M. Kocher.
150
151 \vspace{0.5cm}
152 \noindent
153 Prof. Michel Kocher et Prof. Olivier Hüsser, conseillers de travail de master\\
154 Dr. Philippe Thévenaz, expert principal
155
156 \vspace{1cm}
157
158 \noindent
159 Lausanne, le
160
161 \vspace{1cm}
162
163 \noindent
164 \setlength{\tabcolsep}{20pt}
165 \begin{tabular}{ l l l }
166 Prof. Michel Kocher. & Prof Olivier Hüsser & Prof.\\
167 Conseiller & Conseiller & Responsable de la filière
168 \end{tabular}
169
170 \newpage
171
172 %%%%%%%%%%%%%%%%%%
173 % Page contenant le résumé et les mots-clefs.
174
175 \thispagestyle{empty}
176 \begin{center}
177 \textbf{Résumé}
178 \end{center}
179 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.
180
181 \vspace{5cm}
182
183
184 \begin{center}
185 \textbf{Mots-clefs}
186 \end{center}
187 \og{}malaria\fg{}, \og{}paludisme\fg{}, \og{}parasitémie\fg{}, \og{}taux d'infection\fg{}, \og{}traitement d'images\fg{}, \og{}logiciel\fg{}
188 \newpage
189
190
191 \thispagestyle{empty}
192 \tableofcontents
193 \newpage
194
195 %%%%%%%%%%%%%%%%%%
196 \checkoddpage
197 \ifoddpage
198 \else
199 \thispagestyle{empty}
200 \cleardoublepage % Devrait être \newpage, mais ça ne marche pas...
201 \fi
202
203 \section{Introduction}
204
205 % TODO: Future dans l'intro?
206
207 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}.
208
209 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é.
210
211 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}).
212
213 \begin{figure}[htbp]
214 \centering
215 \begin{subfigure}[t]{0.3\textwidth}
216 \includegraphics[width=\linewidth]{figures/medical_globules_rouges.jpg}
217 \caption{Érythrocyte (globule rouge).}
218 \label{fig:medical-globules-rouges}
219 \end{subfigure}
220 ~
221 \begin{subfigure}[t]{0.3\textwidth}
222 \includegraphics[width=\linewidth]{figures/medical_globules_blancs.jpg}
223 \caption{Leucocyte (globule blanc).}
224 \label{fig:medical-globules-blancs}
225 \end{subfigure}
226 ~
227 \begin{subfigure}[t]{0.3\textwidth}
228 \includegraphics[width=\linewidth]{figures/medical_plaquettes.jpg}
229 \caption{Thrombocyte (plaquette).}
230 \label{fig:medical-plaquettes}
231 \end{subfigure}
232 \caption{Les éléments principaux composant le sang.}
233 \label{fig:medical-elements-sang}
234 \end{figure}
235
236 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}.
237
238 \begin{figure}[htbp]
239 \centering
240 \begin{subfigure}[t]{0.2\textwidth}
241 \includegraphics[width=\linewidth]{figures/medical_plasmodium_1.jpg}
242 \caption{Trophozoïte immature (anneau).}
243 \label{fig:medical-plasmodium_1}
244 \end{subfigure}
245 ~
246 \begin{subfigure}[t]{0.2\textwidth}
247 \includegraphics[width=\linewidth]{figures/medical_plasmodium_2.jpg}
248 \caption{Maturation du trophozoïte.}
249 \label{fig:medical-plasmodium_2}
250 \end{subfigure}
251 ~
252 \begin{subfigure}[t]{0.2\textwidth}
253 \includegraphics[width=\linewidth]{figures/medical_plasmodium_3.jpg}
254 \caption{Trophozoïte mature.}
255 \label{fig:medical-plasmodium_3}
256 \end{subfigure}
257 ~
258 \begin{subfigure}[t]{0.2\textwidth}
259 \includegraphics[width=\linewidth]{figures/medical_plasmodium_4.jpg}
260 \caption{Schizonte.}
261 \label{fig:medical-plasmodium_4}
262 \end{subfigure}
263 \caption{Les différents stades de l'infection d'un érythrocyte.}
264 \label{fig:medical-plasmodium}
265 \end{figure}
266
267 %\subsection{Parasitémie de la malaria}
268
269 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.
270
271 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~\%.
272
273 \begin{figure}[htbp]
274 \centering
275 \includegraphics[width=0.5\linewidth]{figures/RBC_noyau_cytoplasme.pdf}
276 \caption{Détail des deux parties constituantes d'un trophozoïte immature.}
277 \label{fig:noyau-cytoplasme}
278 \end{figure}
279
280 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.
281
282 \begin{figure}[htbp]
283 \centering
284 \begin{subfigure}[t]{0.2\textwidth}
285 \includegraphics[width=\linewidth]{figures/RBC-plaquette.jpg}
286 % \caption{Thrombocyte.}
287 \label{fig:RBC-artefact-plaquette}
288 \end{subfigure}
289 ~
290 \begin{subfigure}[t]{0.2\textwidth}
291 \includegraphics[width=\linewidth]{figures/RBC-debris-1.jpg}
292 % \caption{Débris.}
293 \label{fig:RBC-artefact-debris-1}
294 \end{subfigure}
295 ~
296 \begin{subfigure}[t]{0.2\textwidth}
297 \includegraphics[width=\linewidth]{figures/RBC-debris-2.jpg}
298 % \caption{Débris.}
299 \label{fig:RBC-artefact-debris-2}
300 \end{subfigure}
301 ~
302 \begin{subfigure}[t]{0.2\textwidth}
303 \includegraphics[width=\linewidth]{figures/RBC-debris-3.jpg}
304 % \caption{Débris.}
305 \label{fig:RBC-artefact-debris-3}
306 \end{subfigure}
307 \caption{Exemple d'artefacts se superposant à des érythrocytes.}
308 \label{fig:RBC-artefact}
309 \end{figure}
310
311
312
313 \section{Aperçu du processus}
314
315 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.
316
317 \begin{figure}[htbp]
318 \centering
319 \includegraphics[width=0.9\linewidth]{figures/schema_processus_2.pdf}
320 \caption{Le processus complet.}
321 \label{fig:processusComplet}
322 \end{figure}
323
324 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.
325
326 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}).
327
328 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.
329
330 \begin{figure}[htbp]
331 \centering
332 \begin{subfigure}[t]{0.4\textwidth}
333 \includegraphics[width=\linewidth]{figures/image-source-RGB.jpg}
334 \caption{Image originale.}
335 \label{fig:image-source-RGB}
336 \end{subfigure}
337 ~
338 \begin{subfigure}[t]{0.4\textwidth}
339 \includegraphics[width=\linewidth]{figures/image-source-red.jpg}
340 \caption{Composante rouge, les parasites sont bien contrastés.}
341 \label{fig:image-source-red}
342 \end{subfigure}
343 ~
344 \begin{subfigure}[t]{0.4\textwidth}
345 \includegraphics[width=\linewidth]{figures/image-source-green.jpg}
346 \caption{Composante verte, les érythrocytes sont bien contrastés.}
347 \label{fig:image-source-green}
348 \end{subfigure}
349 ~
350 \begin{subfigure}[t]{0.4\textwidth}
351 \includegraphics[width=\linewidth]{figures/image-source-blue.jpg}
352 \caption{Composante bleue, non-utilisée.}
353 \label{fig:image-source-blue}
354 \end{subfigure}
355 ~
356 \caption{Les différentes composantes de l'image.}
357 \label{fig:image-source}
358 \end{figure}
359
360
361 \section{Détail de la méthode}
362
363 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.
364
365 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.
366
367 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.
368
369 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.
370
371
372 \subsection{Identification des érythrocytes}
373 \label{identification-erythrocytes}
374
375 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).
376
377 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}.
378
379 \begin{figure}[htbp]
380 \centering
381 \includegraphics[width=0.5\linewidth]{figures/ellipse-parametres.pdf}
382 \caption{Paramètre d'une ellipse, $\alpha \in [0, \pi[$ est l'angle d'inclinaison du grand axe $a$, $a \geqslant b$ > 0.}
383 \label{fig:ellipse-parametres}
384 \end{figure}
385
386
387 \subsubsection{Granulométrie}
388 \label{granulometrie}
389
390 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~\%.
391
392 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.
393
394 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$.
395
396 \begin{figure}[htbp]
397 \centering
398 \begin{subfigure}[t]{0.4\textwidth}
399 \includegraphics[width=\linewidth]{figures/granulometrie-ellipse-cercle-closing-area.pdf}
400 \caption{Cercle dont la surface est égale à celle de l'ellipse.}
401 \label{fig:granulometrie-ellipse-cercle-closing-area}
402 \end{subfigure}
403 ~
404 \begin{subfigure}[t]{0.4\textwidth}
405 \includegraphics[width=\linewidth]{figures/granulometrie-ellipse-cercle-closing-morpho.pdf}
406 \caption{Cercle dont \emph{r} est égal au petit rayon \emph{a} de l'ellipse.}
407 \label{fig:granulometrie-ellipse-cercle-closing-morpho}
408 \end{subfigure}
409 \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).}
410 \label{fig:granulometrie-ellipse-cercle-closing-comparaison}
411 \end{figure}
412
413 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.
414
415 {\setlength{\abovedisplayskip}{0pt}
416 \begin{flalign} \label{eq:dilatation-associatif}
417 f' = f \oplus (e_{1} \oplus e_{2}) = (f \oplus e_{1}) \oplus e_{2} &
418 \end{flalign}
419
420 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°.
421
422 {\setlength{\abovedisplayskip}{0pt}
423 \begin{flalign*}
424 \includegraphics{figures/morpho/ligne-horizontale.pdf} \oplus \includegraphics{figures/morpho/ligne-diagonal-1.pdf} &= \includegraphics{figures/morpho/losange.pdf} \\
425 \includegraphics{figures/morpho/losange.pdf} \oplus \includegraphics{figures/morpho/ligne-diagonal-2.pdf} &= \includegraphics{figures/morpho/hexagone.pdf} \\
426 \includegraphics{figures/morpho/hexagone.pdf} \oplus \includegraphics{figures/morpho/ligne-verticale.pdf} &= \includegraphics{figures/morpho/octagon.pdf}
427 \end{flalign*}
428
429 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.
430
431 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}.
432
433 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.
434
435 \begin{figure}[htbp]
436 \centering
437 \begin{subfigure}[t]{0.48\textwidth}
438 \includegraphics[width=1\linewidth]{figures/Granulometry-pattern-spectrum-area.pdf}
439 \caption{Spectre granulométrique d'une succession d'ouvertures par aire.}
440 \label{fig:spectre-granulométrique-aire}
441 \end{subfigure}
442 ~
443 \begin{subfigure}[t]{0.48\textwidth}
444 \includegraphics[width=1\linewidth]{figures/Granulometry-time-area.pdf}
445 \caption{Temps en milliseconde pour chaque ouverture. Temps total : 8.4~s.}
446 \label{fig:temps-aire}
447 \end{subfigure}
448 \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}.}
449 \label{fig:Granulometry-area}
450 \end{figure}
451
452 \begin{figure}[htbp]
453 \centering
454 \begin{subfigure}[t]{0.48\textwidth}
455 \includegraphics[width=1\linewidth]{figures/Granulometry-pattern-spectrum-morpho-circle.pdf}
456 \caption{Spectre granulométrique d'une succession d'ouvertures morphologiques avec un disque.}
457 \label{fig:spectre-granulométrique-morpho-cercle}
458 \end{subfigure}
459 ~
460 \begin{subfigure}[t]{0.48\textwidth}
461 \includegraphics[width=1\linewidth]{figures/Granulometry-time-morpho-circle.pdf}
462 \caption{Temps en milliseconde pour chaque ouverture. Temps total : 54~s.}
463 \label{fig:temps-morpho-cercle}
464 \end{subfigure}
465 \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}.}
466 \label{fig:Granulometry-morpho-circle}
467 \end{figure}
468
469 \begin{figure}[htbp]
470 \centering
471 \begin{subfigure}[t]{0.48\textwidth}
472 \includegraphics[width=1\linewidth]{figures/Granulometry-pattern-spectrum-morpho-octagon.pdf}
473 \caption{Spectre granulométrique d'une succession d'ouvertures morphologiques avec un octogone.}
474 \label{fig:spectre-granulométrique-morpho-octogone}
475 \end{subfigure}
476 ~
477 \begin{subfigure}[t]{0.48\textwidth}
478 \includegraphics[width=1\linewidth]{figures/Granulometry-time-morpho-octagon.pdf}
479 \caption{Temps en milliseconde pour chaque ouverture. Temps total : 54~s.}
480 \label{fig:temps-morpho-octogone}
481 \end{subfigure}
482 \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}.}
483 \label{fig:Granulometry-morpho-octagon}
484 \end{figure}
485
486 \begin{figure}[htbp]
487 \centering
488 \includegraphics[width=0.8\linewidth]{figures/exemple-granulometrie.jpg}
489 \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}.}
490 \label{fig:exemple-granulometrie}
491 \end{figure}
492
493 À 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)$.
494
495
496 \subsubsection{Recherche des bords des érythrocytes et calcul du gradient associé}
497
498 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.
499
500 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}.
501
502 {\setlength{\abovedisplayskip}{0pt}
503 \begin{flalign} \label{eq:composantes-gradient}
504 \nabla f = \begin{pmatrix}g_x \\ g_y \end{pmatrix} = \begin{pmatrix}\partial f / \partial x \\ \partial f / \partial y \end{pmatrix}
505 \end{flalign}
506
507 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}.
508
509 {\setlength{\abovedisplayskip}{0pt}
510 \begin{flalign} \label{eq:sobel-noyaux}
511 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}
512 \end{flalign}
513
514 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.
515
516 {\setlength{\abovedisplayskip}{0pt}
517 \begin{flalign} \label{eq:gradient-norme}
518 M(x, y) = \| \nabla f \| = \sqrt{g_x^2 + g_y^2}
519 \end{flalign}
520
521 \begin{figure}[htbp]
522 \centering
523 \begin{subfigure}[t]{0.4\textwidth}
524 \includegraphics[width=1\linewidth]{figures/gradient-exemple.jpg}
525 \end{subfigure}
526 ~
527 \begin{subfigure}[t]{0.4\textwidth}
528 \includegraphics[width=1\linewidth,interpolate=false]{figures/gradient-exemple.pdf}
529 \end{subfigure}
530 \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.}
531 \label{fig:gradient}
532 \end{figure}
533
534 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.
535
536 \begin{figure}[htbp]
537 \centering
538 \begin{subfigure}[t]{0.35\textwidth}
539 \includegraphics[width=1\linewidth,interpolate=false]{figures/non-maximum-suppression-schema.pdf}
540 \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.}
541 \label{fig:non-maximum-suppression-schema}
542 \end{subfigure}
543 ~
544 \begin{subfigure}[t]{0.35\textwidth}
545 \includegraphics[width=1\linewidth,interpolate=false]{figures/nms.png}
546 \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.}
547 \label{fig:nms}
548 \end{subfigure}
549 \caption{Suppression des non-maxima.}
550 \label{fig:non-maximum-suppression}
551 \end{figure}
552
553 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.
554
555 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.
556
557 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).
558
559 %\subsubsection{Recherche des bords des érythrocytes}
560
561 \subsubsection{Construction d'ellipses}
562
563 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.
564
565 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.
566
567 \begin{figure}[htbp]
568 \centering
569 \begin{subfigure}[t]{0.3\textwidth}
570 \includegraphics[width=1\linewidth]{figures/ellipses/cellule-bords-deformes.jpg}
571 \end{subfigure}
572 ~
573 \begin{subfigure}[t]{0.3\textwidth}
574 \includegraphics[width=1\linewidth]{figures/ellipses/cellule-bords-deformes-bords.png}
575 \end{subfigure}
576 \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}.}
577 \label{fig:cellule-bords-deformes}
578 \end{figure}
579
580 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.
581
582 \begin{figure}[htbp]
583 \centering
584 \includegraphics[width=0.5\linewidth]{figures/construction-ellipse.pdf}
585 \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.}
586 \label{fig:construction-ellipse}
587 \end{figure}
588
589 À 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.
590
591 \begin{figure}[htbp]
592 \centering
593 \begin{subfigure}[t]{0.3\textwidth}
594 \includegraphics[width=1\linewidth]{figures/ellipses/construction-ellipse-vecteurs-valides-3.pdf}
595 \caption{Triplet invalide : sens contraire des vecteurs par rapport à $p_0$.}
596 \label{fig:construction-ellipse-vecteurs-valides-3}
597 \end{subfigure}
598 ~
599 \begin{subfigure}[t]{0.3\textwidth}
600 \includegraphics[width=1\linewidth]{figures/ellipses/construction-ellipse-vecteurs-valides-2.pdf}
601 \caption{Triplet invalide : $\alpha \geqslant \pi$.}
602 \label{fig:construction-ellipse-vecteurs-valides-2}
603 \end{subfigure}
604 ~
605 \begin{subfigure}[t]{0.3\textwidth}
606 \includegraphics[width=1\linewidth]{figures/ellipses/construction-ellipse-vecteurs-valides-1.pdf}
607 \caption{Triplet valide : $\alpha < \pi$.}
608 \label{fig:construction-ellipse-vecteurs-valides-1}
609 \end{subfigure}
610 \caption{Cas de triplets valides et invalides.}
611 \label{fig:construction-ellipse-vecteurs-valides}
612 \end{figure}
613
614 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.
615
616 {\setlength{\abovedisplayskip}{0pt}
617 \begin{flalign}
618 \label{eq:p0-debut}
619 m_1 &= -v_{1_x} / v_{1_y} \\
620 m_2 &= -v_{2_x} / v_{2_y} \\
621 b_1 &= -m_1 p_{1_x} + p_{1_y} \\
622 b_2 &= -m_2 p_{2_x} + p_{2_y} \\
623 d_1(x) &= y = m_1 x + b_1 \\
624 d_2(x) &= y = m_2 x + b_2 \\
625 p_{0_x} &= -(b_1 - b_2) / (m_1 - m_2) \\
626 p_{0_y} &= -(m_2 b_1 - m_1 b_2) / (m_1 - m_2) \label{eq:p0-fin}
627 \end{flalign}
628
629 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 :
630
631 {\setlength{\abovedisplayskip}{0pt}
632 \begin{flalign}
633 T^2 &= X Y \\
634 S &= \begin{pmatrix}1 & 0 & 0 \\ 0 & 0 & -1/2 \\ 0 & -1/2 & 0\end{pmatrix}
635 \end{flalign}
636
637 Changement de repère projectif par la matrice de passage $P$ ($3 \times 3$) :
638
639 {\setlength{\abovedisplayskip}{0pt}
640 \begin{flalign}
641 P &= \begin{pmatrix}
642 det(\upsilon_3, \upsilon_1, \upsilon_2) \, \upsilon_0 \\
643 det(\upsilon_0, \upsilon_3, \upsilon_2) \, \upsilon_1 \\
644 det(\upsilon_0, \upsilon_1, \upsilon_3) \, \upsilon_2
645 \end{pmatrix}
646 \end{flalign}
647
648 Matrice de la conique dans le repère projectif de référence :
649
650 {\setlength{\abovedisplayskip}{0pt}
651 \begin{flalign}
652 \begin{pmatrix} A & B & D \\ B & C & E \\ D & E & F\end{pmatrix} &= P \cdot S^{-1} \cdot P^\top
653 \end{flalign}
654
655 Le centre est défini comme suit :
656
657 {\setlength{\abovedisplayskip}{0pt}
658 \begin{flalign}
659 (\alpha, \; \beta) = (B/A, \; D/A)
660 \end{flalign}
661
662 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 :
663
664 {\setlength{\abovedisplayskip}{0pt}
665 \begin{flalign}
666 Ã &= E^2 - C F + (B F - E D) \alpha + (C D - B E) \beta \\
667 Q &= Ã^{-1} \begin{pmatrix}A F - D^2 & B D - A E \\
668 B D - A E & A C - B^2\end{pmatrix}
669 \end{flalign}
670
671
672 \subsubsection{Calcul du score des ellipses}
673
674 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)$.
675
676 {\setlength{\abovedisplayskip}{0pt}
677 \begin{flalign}
678 \label{eq:ellipse-score}
679 s(e) &= \sum_{\substack{e' \in E \\ e' \neq e }} \left( \frac{2 \; aire_{intersection}(e, e')}{aire(e) + aire(e')} \right)^n
680 \end{flalign}
681
682 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}.
683
684 \begin{figure}[htbp]
685 \centering
686 \includegraphics[width=0.35\linewidth]{figures/ellipses/ellipses-chevauchement.pdf}
687 \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é.}
688 \label{fig:ellipses-chevauchement}
689 \end{figure}
690
691 \subsubsection{Élagage des ellipses}
692
693
694 \begin{figure}[htbp]
695 \centering
696 \begin{subfigure}[t]{0.45\textwidth}
697 \includegraphics[width=1\linewidth]{figures/ellipses/exemple-1-green-filtered.jpg}
698 \caption{Image initiale pour la recherche d'ellipses. Composante verte floutée dont le centre clair des érythrocytes a été ouvert.}
699 \label{fig:exemple-ellipses-1}
700 \end{subfigure}
701 ~
702 \begin{subfigure}[t]{0.45\textwidth}
703 \includegraphics[width=1\linewidth]{figures/ellipses/exemple-2-edges.png}
704 \caption{Bords des cellules : éléments pour lesquels le gradient est non-nul.}
705 \label{fig:exemple-ellipses-2}
706 \end{subfigure}
707 ~
708 \begin{subfigure}[t]{0.45\textwidth}
709 \includegraphics[width=1\linewidth]{figures/ellipses/exemple-3-all-ellipses.jpg}
710 \caption{L'ensemble des ellipses accumulées dessinées sur l'image initiale.}
711 \label{fig:exemple-ellipses-3}
712 \end{subfigure}
713 ~
714 \begin{subfigure}[t]{0.45\textwidth}
715 \includegraphics[width=1\linewidth]{figures/ellipses/exemple-4-ellipses.jpg}
716 \caption{Le résultat final après élagage. Il est à noter que toutes les ellipses ne correspondent pas forcément à des érythrocytes.}
717 \label{fig:exemple-ellipses-4}
718 \end{subfigure}
719 \caption{Aperçu du processus de recherche d'érythrocytes par ajustement d'ellipses. Le gradient n'est pas représenté.}
720 \label{fig:exemple-ellipses}
721 \end{figure}
722
723
724 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.
725
726 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é.
727
728 Les étapes de la recherche d'ellipses sont illustrées par la figure~\ref{fig:exemple-ellipses}.
729
730
731 \subsection{Segmentation des parasites}
732
733 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.
734
735
736 \subsubsection{Extraction des zones colorées sombres}
737
738 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.
739
740 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.
741
742
743 \begin{figure}[htbp]
744 \centering
745 \includegraphics[width=0.45\linewidth]{figures/parasite/profile-zones-colorees-sombres.pdf}
746 \caption{Profil d'intensité du fond ($m_1$) et de l'avant-plan : érythrocytes ($m_2$) et éléments sombres ($m_2 - \Delta$).}
747 \label{fig:profile-zones-colorees-sombres}
748 \end{figure}
749
750 \begin{figure}[htbp]
751 \centering
752 \begin{subfigure}[t]{0.3\textwidth}
753 \includegraphics[width=1\linewidth]{figures/parasite/exemple-dark-stain-0.jpg}
754 \caption{Image originale.}
755 % \label{}
756 \end{subfigure}
757 ~
758 \begin{subfigure}[t]{0.3\textwidth}
759 \includegraphics[width=1\linewidth]{figures/parasite/exemple-dark-stain-1.jpg}
760 \caption{Composante rouge filtrée : filtre gaussien + ouverture par aire.}
761 % \label{}
762 \end{subfigure}
763 ~
764 \begin{subfigure}[t]{0.3\textwidth}
765 \includegraphics[width=1\linewidth]{figures/parasite/exemple-dark-stain-2.png}
766 \caption{Segmentation des zones colorées sombres.}
767 % \label{}
768 \end{subfigure}
769 \caption{Exemple de la segmentation d'une zone colorée sombre, ici un leucocyte.}
770 \label{fig:exemple-dark-stain}
771 \end{figure}
772
773
774 \subsubsection{Segmentation des cytoplasmes}
775
776 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.
777
778 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 :
779
780 {\setlength{\abovedisplayskip}{0pt}
781 \begin{flalign}
782 \label{eq:segmentation-cytoplasmes}
783 \mli{Cytoplasmes} = \phi_{SE}(f) - (1 / \mli{sensibilité_{cytoplasme}}) \; f \geqslant 0
784 \end{flalign}
785
786 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.
787
788
789 \begin{figure}[htbp]
790 \centering
791 \begin{subfigure}[t]{0.25\textwidth}
792 \includegraphics[width=1\linewidth]{figures/parasite/exemple-original.jpg}
793 \caption{Image originale.}
794 % \label{}
795 \end{subfigure}
796 ~
797 \begin{subfigure}[t]{0.25\textwidth}
798 \includegraphics[width=1\linewidth]{figures/parasite/exemple-red.jpg}
799 \caption{Composante rouge.}
800 % \label{}
801 \end{subfigure}
802 ~
803 \begin{subfigure}[t]{0.25\textwidth}
804 \includegraphics[width=1\linewidth]{figures/parasite/exemple-red-filtered.jpg}
805 \caption{Composante rouge filtrée : filtre gaussien puis ouverture par aire.}
806 % \label{}
807 \end{subfigure}
808 ~
809 \begin{subfigure}[t]{0.25\textwidth}
810 \includegraphics[width=1\linewidth]{figures/parasite/exemple-noyaux.png}
811 \caption{Noyaux du parasite.}
812 \label{fig:exemple-segmentation-noyau}
813 \end{subfigure}
814 ~
815 \begin{subfigure}[t]{0.25\textwidth}
816 \includegraphics[width=1\linewidth]{figures/parasite/exemple-cytoplasme.png}
817 \caption{Cytoplasme du parasite.}
818 \label{fig:exemple-segmentation-cytoplasme}
819 \end{subfigure}
820 \caption{Exemple de segmentation d'un parasite.}
821 \label{fig:exemple-segmentation-parasite}
822 \end{figure}
823
824 \subsubsection{Segmentation des noyaux}
825
826 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$.
827
828 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 :
829
830 {\setlength{\abovedisplayskip}{0pt}
831 \begin{flalign}
832 \label{eq:segmentation-cytoplasmes}
833 \mli{Noyaux} = \phi_{\lambda}(f) - (1 / \mli{sensibilité_{noyau}}) \; f \geqslant 0
834 \end{flalign}
835
836 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.
837
838
839 \subsection{Classification des cellules}
840
841 À 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.
842
843 \subsubsection{Attribution des pixels aux ellipses}
844
845 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}).
846
847 \begin{sloppypar}
848 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.
849 \end{sloppypar}
850
851 \begin{figure}[htbp]
852 \centering
853 \begin{subfigure}[t]{0.3\textwidth}
854 \includegraphics[width=1\linewidth]{figures/classification/exemple-attribution-pixel-1.jpg}
855 \caption{Image originale.}
856 % \label{}
857 \end{subfigure}
858 ~
859 \begin{subfigure}[t]{0.3\textwidth}
860 \includegraphics[width=1\linewidth]{figures/classification/exemple-attribution-pixel-2.jpg}
861 \caption{Ellipses se chevauchant.}
862 % \label{}
863 \end{subfigure}
864 ~
865 \begin{subfigure}[t]{0.3\textwidth}
866 \includegraphics[width=1\linewidth]{figures/classification/exemple-attribution-pixel-3.jpg}
867 \caption{Attribution des pixels à chacune des cellules.}
868 % \label{}
869 \end{subfigure}
870 \caption{Attribution des pixels aux cellules.}
871 \label{fig:exemple-attribution-pixel}
872 \end{figure}
873
874
875
876 \subsubsection{Attribution d'une classe}
877
878 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~\%.
879
880 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.
881
882 \begin{figure}[htbp]
883 \centering
884 \begin{subfigure}[t]{0.3\textwidth}
885 \includegraphics[width=1\linewidth]{figures/classification/exemple-element-particulier-1.jpg}
886 \caption{Image originale.}
887 % \label{}
888 \end{subfigure}
889 ~
890 \begin{subfigure}[t]{0.3\textwidth}
891 \includegraphics[width=1\linewidth]{figures/classification/exemple-element-particulier-2.jpg}
892 \caption{Objet particulier (marqué d'une croix noire) recouvrant un érythrocyte.}
893 % \label{}
894 \end{subfigure}
895 \caption{Spécificité des éléments particuliers vis-à-vis des érythrocytes.}
896 \label{fig:exemple-element-particulier}
897 \end{figure}
898
899 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.
900
901 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.
902
903 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 :
904
905 {\setlength{\abovedisplayskip}{0pt}
906 \begin{flalign}
907 \mli{Parasitémie}_{\%} = 100 \; \frac{\#\{\mli{érythrocytes_{infecté}}\}}{\#\{\mli{érythrocytes_{sains} + érythrocytes_{infecté}}\}}
908 \end{flalign}
909
910 La figure~\ref{fig:exemple-classification} montre les différentes données utilisées lors de la classification.
911
912 \begin{figure}[htbp]
913 \centering
914 \begin{subfigure}[t]{0.48\textwidth}
915 \includegraphics[width=1\linewidth]{figures/classification/exemple-1-original.jpg}
916 \caption{Image originale.}
917 % \label{}
918 \end{subfigure}
919 ~
920 \begin{subfigure}[t]{0.48\textwidth}
921 \includegraphics[width=1\linewidth]{figures/classification/exemple-2-ellipses.jpg}
922 \caption{Ellipses.}
923 % \label{}
924 \end{subfigure}
925 ~
926 \begin{subfigure}[t]{0.48\textwidth}
927 \includegraphics[width=1\linewidth]{figures/classification/exemple-3-dark-stain.png}
928 \caption{Zones colorées sombres.}
929 % \label{}
930 \end{subfigure}
931 ~
932 \begin{subfigure}[t]{0.48\textwidth}
933 \includegraphics[width=1\linewidth]{figures/classification/exemple-4-cytoplasmes.png}
934 \caption{Cytoplasmes.}
935 % \label{}
936 \end{subfigure}
937 ~
938 \begin{subfigure}[t]{0.48\textwidth}
939 \includegraphics[width=1\linewidth]{figures/classification/exemple-5-noyaux.png}
940 \caption{Noyaux.}
941 % \label{}
942 \end{subfigure}
943 ~
944 \begin{subfigure}[t]{0.48\textwidth}
945 \includegraphics[width=1\linewidth]{figures/classification/exemple-6-classification.jpg}
946 \caption{Résultat final.}
947 % \label{}
948 \end{subfigure}
949 \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.}
950 \label{fig:exemple-classification}
951 \end{figure}
952
953
954
955 \section{Implémentation}
956
957 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}.
958
959 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.
960
961 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é.
962
963 Le code est séparé en deux \emph{assemblies} :
964
965 \begin{itemize}
966 \item \emph{ParasitemiaCore} : Bibliothèque contenant la partie calcul.
967 \item \emph{ParasitemiaUI} : Exécutable proposant une utilisation via une interface graphique ou via la ligne de commande.
968 \end{itemize}
969
970 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.
971
972 Le code source ainsi que l'exécutable et un installeur sont disponibles aux adresses suivantes :
973
974 \begin{small}
975 \begin{itemize}
976 \item {\parasitemiasource}
977 \item {\parasitemiaexe}
978 \item {\parasitemiasetup}
979 \end{itemize}
980 \end{small}
981
982 \subsection{Détails de codage}
983
984 \subsubsection{Calculs en parallèle}
985
986 Au sein du module \texttt{ParasitemiaCore.Analysis} se trouve la fonction pour lancer l'analyse d'une image :
987
988 \begin{lstlisting}[style=fsharp, numbers = none]
989 let doAnalysis (img: Image<Bgr, byte>) (name: string) (config: Config) (reportProgress: (int -> bool) option) : Cell list option = [..]
990 \end{lstlisting}
991
992\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.
993
994 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.
995
996 \begin{lstlisting}[style=fsharp, numbers = none]
997 let doMultipleAnalysis (imgs: (string * Config * Image<Bgr, byte>) list) (reportProgress: (int -> bool) option) : (string * Cell list) list option = [..]
998 \end{lstlisting}
999
1000 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.
1001
1002 Le nombre de \emph{threads} exécutés en parallèle dépend du nombre de cœurs de la machine.
1003
1004
1005 \subsubsection{Ouvertures et fermetures par aire sur des réels}
1006 \label{algo-ouverture-aire}
1007
1008 \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.
1009
1010 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)$.
1011
1012 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.
1013
1014 \begin{algorithm}
1015 \DontPrintSemicolon
1016 \caption{Ouverture par aire sur une image contenant des réels.}
1017 \label{alg:ouverture-par-aire}
1018
1019 \SetKwInOut{Input}{Entrée}
1020 \SetKwInOut{Output}{Sortie}
1021
1022 \Input{une image $img$ et une aire $A$}
1023 \Output{l'ouvert de $img$}
1024 $\mli{iles} \leftarrow $ maxima($img$) \;
1025 Initialisation du rivage de chaque ile \;
1026 \For{$i \in iles$}{
1027 $r \leftarrow i$.rivage.pop\_max \;
1028 \uIf{$r$ appartient à une ile $i'$}{
1029 \uIf{$i$.surface + $i'$.surface $\geqslant$ $A$ ou $i$.niveau $<$ $i'$.niveau}{
1030 Passe à l'ile suivante \;
1031 }
1032 \Else{
1033 $i$.surface $\leftarrow$ $i$.surface $+$ $i'$.surface \;
1034 $i$.niveau $\leftarrow$ $i'$.niveau \;
1035 Le rivage de $i'$ est ajouté à celui de $i$ et $i'$ est supprimé \;
1036 }
1037 }
1038 \uElseIf{$r$.niveau $>$ $i$.niveau}{
1039 Passe à l'ile suivante \;
1040 }
1041 \Else{
1042 $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
1043 }
1044 }
1045 \Return{une copie de $img$ dont les éléments appartenant aux iles sont mis à leur niveau respectif}
1046 \BlankLine
1047 \end{algorithm}
1048
1049
1050 \subsection{Interface en ligne de commande}
1051
1052 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 :
1053
1054 \begin{lstlisting}[style=tt]
1055 ParasitemiaUI.exe (--folder <folder>|--file <file>) --output <folder> [--debug]
1056 \end{lstlisting}
1057
1058\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.
1059
1060
1061 \subsection{Interface graphique}
1062
1063 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.
1064
1065 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.
1066
1067 \begin{figure}[htbp]
1068 \centering
1069 \begin{subfigure}[t]{0.9\textwidth}
1070 \includegraphics[width=1\linewidth]{figures/implementation/screenshot-main.jpg}
1071 \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.}
1072 % \label{}
1073 \end{subfigure}
1074 ~
1075 \begin{subfigure}[t]{0.55\textwidth}
1076 \includegraphics[width=1\linewidth]{figures/implementation/screenshot-start-analysis.jpg}
1077 \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.}
1078 % \label{}
1079 \end{subfigure}
1080 ~
1081 \begin{subfigure}[t]{0.35\textwidth}
1082 \includegraphics[width=1\linewidth]{figures/implementation/screenshot-ppi-calculator.jpg}
1083 \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}.}
1084 % \label{}
1085 \end{subfigure}
1086 \caption{L'interface graphique de l'application \emph{Parasitemia}.}
1087 \label{fig:screenshot-GUI}
1088 \end{figure}
1089
1090 \subsubsection{Persistance des documents}
1091
1092 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}.
1093
1094 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 :
1095
1096 \begin{itemize}
1097 \item Un flag pour savoir si la cellule est infectée ;
1098 \item Un flag informant si le flag précédent a été défini par l'utilisateur ;
1099 \item Un numéro unique ;
1100 \item Le centre de la cellule et ses dimensions (largeur, hauteur) ;
1101 \item La surface du ou des noyaux.
1102 \end{itemize}
1103
1104 \subsection{Dépendances}
1105
1106 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 :
1107
1108 \begin{itemize}
1109 \item \emph{FSharp.Collections.ParallelSeq} : Permet d'appliquer en parallèle des fonctions sur des séquences.
1110 \item \emph{MathNet.Numerics} : Différentes fonctions mathématiques, notamment concernant l'algèbre linéaire.
1111 \item \emph{FsXaml.Wpf} : Quelques outils facilitant l'utilisation de \emph{WPF} et \emph{XAML} avec \emph{F\#}.
1112 \item \emph{Netwonsoft.Json} : Permet la sérialisation et la désérialisation de données au format \emph{JSON}.
1113 \end{itemize}
1114
1115
1116 \section{Résultats}
1117
1118 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.
1119
1120 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.
1121
1122 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) :
1123
1124 \begin{itemize}
1125 \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.
1126 \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}.
1127 \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.
1128 \item \texttt{Cell\_suppression\_radius} est diminué de 1.25 à 0.8 afin d'éviter que trop de cellules proches s'excluent mutuellement.
1129 \end{itemize}
1130
1131 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.
1132
1133 \begin{table}[htbp]
1134 \setlength{\tabcolsep}{3pt}
1135 \centering
1136 \begin{tabular}{ r || r || r | r || r | r || r | r | }
1137 & & \multicolumn{2}{ c|| }{Ce papier} & \multicolumn{2}{ c|| }{\emph{Ma}} & \multicolumn{2}{ c| }{\emph{Di Ruberto}} \\ \cline{2-8}
1138 N° & Total réf. & \# manqué & \# en trop & \# manqué & \# en trop & \# manqué & \# en trop \\ \cline{1-8}
1139 1 & 184 & 1 & 0 & 30 & 1 & 3 & 7 \\
1140 2 & 186 & 3 & 0 & 18 & 1 & 15 & 5 \\
1141 3 & 188 & 6 & 0 & 17 & 2 & 5 & 19 \\
1142 4 & 154 & 0 & 0 & 3 & 0 & 12 & 1 \\
1143 5 & 150 & 2 & 0 & 7 & 3 & - & - \\
1144 6 & 139 & 0 & 0 & 5 & 0 & 3 & 1 \\
1145 7 & 135 & 1 & 0 & 3 & 4 & 1 & 7 \\
1146 8 & 612 & 1 & 0 & 11 & 1 & 33 & 49 \\
1147 9 & 741 & 1 & 0 & 43 & 2 & 128 & 79 \\
1148 10 & 557 & 0 & 4 & 18 & 0 & - & - \\
1149 11 & 686 & 0 & 1 & 45 & 1 & - & - \\
1150 12 & 510 & 0 & 0 & 15 & 0 & - & - \\
1151 13 & 424 & 0 & 0 & 9 & 1 & - & -
1152 \end{tabular}
1153 \caption{Résultats des mesures concernant la segmentation des érythrocytes.}
1154 \label{tab:resultats-erythrocytes}
1155 \end{table}
1156
1157
1158 \begin{table}[htbp]
1159 \setlength{\tabcolsep}{3pt}
1160 \centering
1161 \begin{tabular}{ r || r || r | r || r | r || r | r | }
1162 & & \multicolumn{2}{ c|| }{Ce papier} & \multicolumn{2}{ c|| }{\emph{Ma}} & \multicolumn{2}{ c| }{\emph{Di Ruberto}} \\ \cline{2-8}
1163 N° & Total réf. & \# manqué & \# en trop & \# manqué & \# en trop & \# manqué & \# en trop \\ \cline{1-8}
1164 1 & 0 & 0 & 0 & 0 & 1 & 0 & 1 \\
1165 2 & 0 & 0 & 0 & 0 & 0 & 0 & 1 \\
1166 3 & 0 & 0 & 0 & 0 & 3 & 0 & 5 \\
1167 4 & 0 & 0 & 0 & 0 & 0 & 0 & 30 \\
1168 5 & 28 & 1 & 2 & 9 & 3 & - & - \\
1169 6 & 28 & 6 & 0 & 9 & 0 & 4 & 2 \\
1170 7 & 20 & 0 & 1 & 6 & 4 & 0 & 10 \\
1171 8 & 100 & 2 & 0 & 2 & 3 & 86 & 9 \\
1172 9 & 11 & 4 & 0 & 4 & 1 & 9 & 5 \\
1173 10 & 14 & 4 & 0 & 4 & 1 & - & - \\
1174 11 & 1 & 0 & 0 & 1 & 2 & - & - \\
1175 12 & 2 & 0 & 1 & 0 & 11 & - & - \\
1176 13 & 1 & 1 & 0 & 0 & 3 & - & -
1177 \end{tabular}
1178 \caption{Résultats des mesures concernant la détection des parasites.}
1179 \label{tab:resultats-parasites}
1180 \end{table}
1181
1182
1183 \begin{table}[htbp]
1184 \setlength{\tabcolsep}{3pt}
1185 \centering
1186 \begin{tabular}{ r || r | r | r | r | }
1187 N° & Référence & Ce papier & \emph{Ma} & \emph{Di Ruberto} \\ \cline{1-5}
1188 1 & 0.0~\% & 0.0~\% & 0.6~\% & 0.5~\% \\
1189 2 & 0.0~\% & 0.0~\% & 0.0~\% & 0.6~\% \\
1190 3 & 0.0~\% & 0.0~\% & 1.7~\% & 2.5~\% \\
1191 4 & 0.0~\% & 0.0~\% & 0.0~\% & 21.0~\% \\
1192 5 & 18.7~\% & 19.6~\% & 15.1~\% & - \\
1193 6 & 20.1~\% & 15.8~\% & 14.2~\% & 19.0~\% \\
1194 7 & 14.8~\% & 15.7~\% & 13.2~\% & 21.3~\% \\
1195 8 & 16.3~\% & 16.0~\% & 16.8~\% & 3.7~\% \\
1196 9 & 1.5~\% & 0.9~\% & 1.1~\% & 1.0~\% \\
1197 10 & 2.5~\% & 1.8~\% & 2.0~\% & - \\
1198 11 & 0.1~\% & 0.1~\% & 0.3~\% & - \\
1199 12 & 0.4~\% & 0.6~\% & 2.6~\% & - \\
1200 13 & 0.2~\% & 0.0~\% & 1.0~\% & -
1201 \end{tabular}
1202 \caption{Résultats des mesures concernant la détection des parasites.}
1203 \label{tab:resultats-parasitemie}
1204 \end{table}
1205
1206 \begin{sloppypar}
1207 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}.
1208 \end{sloppypar}
1209
1210
1211 \begin{figure}[htbp]
1212 \centering
1213 \begin{subfigure}[t]{0.23\textwidth}
1214 \includegraphics[width=1\linewidth]{figures/comparaison-1-original.jpg}
1215 \caption{Extrait de l'image n°2.}
1216 \label{fig:comparaison-1-original}
1217 \end{subfigure}
1218 ~
1219 \begin{subfigure}[t]{0.23\textwidth}
1220 \includegraphics[width=1\linewidth]{figures/comparaison-1-master.jpg}
1221 \caption{Méthode présentée dans ce papier, résultat attendu.}
1222 \label{fig:comparaison-1-master}
1223 \end{subfigure}
1224 ~
1225 \begin{subfigure}[t]{0.23\textwidth}
1226 \includegraphics[width=1\linewidth]{figures/comparaison-1-ma.jpg}
1227 \caption{\emph{Ma}, un seul érythrocyte est trouvé.}
1228 \label{fig:comparaison-1-ma}
1229 \end{subfigure}
1230 ~
1231 \begin{subfigure}[t]{0.23\textwidth}
1232 \includegraphics[width=1\linewidth]{figures/comparaison-1-diruberto.jpg}
1233 \caption{\emph{Di Ruberto}, sur-segmentation.}
1234 \label{fig:comparaison-1-diruberto}
1235 \end{subfigure}
1236 \caption{Segmentation d'un amas de deux cellules.}
1237 \label{fig:comparaison-1}
1238 \end{figure}
1239
1240 \begin{figure}[htbp]
1241 \centering
1242 \begin{subfigure}[t]{0.18\textwidth}
1243 \includegraphics[width=1\linewidth]{figures/comparaison-2-original.jpg}
1244 \caption{Extrait de l'image n°2.}
1245 \label{fig:comparaison-2-original}
1246 \end{subfigure}
1247 ~
1248 \begin{subfigure}[t]{0.18\textwidth}
1249 \includegraphics[width=1\linewidth]{figures/comparaison-2-master.jpg}
1250 \caption{Méthode présentée dans ce papier, résultat attendu.}
1251 \label{fig:comparaison-2-master}
1252 \end{subfigure}
1253 ~
1254 \begin{subfigure}[t]{0.18\textwidth}
1255 \includegraphics[width=1\linewidth]{figures/comparaison-2-ma.jpg}
1256 \caption{\emph{Ma}, la transformée de Hough dans le domaine des cercles crée deux foyers pour les ellipses.}
1257 \label{fig:comparaison-2-ma}
1258 \end{subfigure}
1259 ~
1260 \begin{subfigure}[t]{0.18\textwidth}
1261 \includegraphics[width=1\linewidth]{figures/comparaison-2-diruberto.jpg}
1262 \caption{\emph{Di Ruberto}.}
1263 \label{fig:comparaison-2-diruberto}
1264 \end{subfigure}
1265 \caption{Segmentation d'une cellule de forme elliptique.}
1266 \label{fig:comparaison-2}
1267 \end{figure}
1268
1269 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}.
1270
1271 \begin{figure}[htbp]
1272 \centering
1273 \begin{subfigure}[t]{0.2\textwidth}
1274 \includegraphics[width=1\linewidth]{figures/comparaison-3-debris-original.jpg}
1275 \caption{Extrait de l'image n°12, un débris qui ne doit pas être confondu avec un parasite.}
1276 \label{fig:comparaison-1-original}
1277 \end{subfigure}
1278 ~
1279 \begin{subfigure}[t]{0.2\textwidth}
1280 \includegraphics[width=1\linewidth]{figures/comparaison-3-debris-master.jpg}
1281 \caption{Méthode présentée dans ce papier, résultat attendu.}
1282 \label{fig:comparaison-1-master}
1283 \end{subfigure}
1284 ~
1285 \begin{subfigure}[t]{0.2\textwidth}
1286 \includegraphics[width=1\linewidth]{figures/comparaison-3-debris-ma.jpg}
1287 \caption{\emph{Ma} (faux-positif).}
1288 \label{fig:comparaison-1-ma}
1289 \end{subfigure}
1290 \caption{Faux-positif lors de la détection des parasites avec la méthode de \emph{Ma}.}
1291 \label{fig:comparaison-3}
1292 \end{figure}
1293
1294 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.
1295
1296 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}.
1297
1298 \begin{figure}[htbp]
1299 \centering
1300 \begin{subfigure}[t]{0.4\textwidth}
1301 \includegraphics[width=1\linewidth]{figures/comparaison-4-illumination-original.jpg}
1302 \caption{Image originale, coin supérieur droit de l'image n°8.}
1303 \label{fig:comparaison-4-original}
1304 \end{subfigure}
1305 ~
1306 \begin{subfigure}[t]{0.4\textwidth}
1307 \includegraphics[width=1\linewidth]{figures/comparaison-4-illumination-master.png}
1308 \caption{Méthode présentée dans ce papier, l'illumination affecte la détection des objets colorés sombres.}
1309 \label{fig:comparaison-4-master}
1310 \end{subfigure}
1311 ~
1312 \begin{subfigure}[t]{0.4\textwidth}
1313 \includegraphics[width=1\linewidth]{figures/comparaison-4-illumination-ma.png}
1314 \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.}
1315 \label{fig:comparaison-4-ma}
1316 \end{subfigure}
1317 ~
1318 \begin{subfigure}[t]{0.4\textwidth}
1319 \includegraphics[width=1\linewidth]{figures/comparaison-4-illumination-di-ruberto.png}
1320 \caption{\emph{Di Ruberto}, application de la méthode de Otsu à la composante verte au début de la segmentation des érythrocytes.}
1321 \label{fig:comparaison-4-di-ruberto}
1322 \end{subfigure}
1323 \caption{Problème de l'illumination.}
1324 \label{fig:comparaison-4}
1325 \end{figure}
1326
1327
1328 \subsection{Discussion}
1329 \label{discussions}
1330
1331 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.
1332
1333 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.
1334
1335 \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.
1336
1337 \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.
1338
1339 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.
1340
1341
1342 \section{Conclusion}
1343
1344 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.
1345
1346
1347 \bibliographystyle{plain}
1348 \bibliography{main}
1349
1350 \end{document}