From 1149393ad8501b083667f870da6a5e626da3db70 Mon Sep 17 00:00:00 2001 From: Greg Burri Date: Tue, 28 Mar 2017 22:54:26 +0200 Subject: [PATCH] Report cleaning. --- rapport/main.bib | 13 +++- rapport/main.tex | 116 ++++++++++++++-------------- src/Tests_hough/test_hough_simple.m | 2 +- 3 files changed, 70 insertions(+), 61 deletions(-) diff --git a/rapport/main.bib b/rapport/main.bib index c727792..ad3c94e 100644 --- a/rapport/main.bib +++ b/rapport/main.bib @@ -17,8 +17,8 @@ } @misc {shoelson2015, - author = "Shoelson, Brett" - title = "Finding Parasitic Infections with MATLAB" + author = "Shoelson, Brett", + title = "Finding Parasitic Infections with MATLAB", year = "2015" } @@ -74,4 +74,11 @@ author = "Manzanera, Antoine", title = "Cours de morphologie mathématique", year = "2005" -} \ No newline at end of file +} + +@misc {Nixon2012, + author = "Mark Nixon", + title = "Feature Extraction and Image Processing for Computer Vision, Third Edition", + year = "2012" +} + diff --git a/rapport/main.tex b/rapport/main.tex index 2275a70..e4f83b2 100644 --- a/rapport/main.tex +++ b/rapport/main.tex @@ -82,9 +82,9 @@ mutable, if, then, else, cloud, async, static, use, abstract, interface, inherit \renewcommand{\appendixtocname}{Annexes} -\urldef{\parasitemiasource}\url{http://private.gburri.org/CHUV/Parasitemia-1.0.6-source.zip} -\urldef{\parasitemiaexe}\url{http://private.gburri.org/CHUV/Parasitemia-1.0.6.zip} -\urldef{\parasitemiasetup}\url{http://private.gburri.org/CHUV/Parasitemia-1.0.0.6-Setup.exe} +\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} @@ -125,7 +125,7 @@ Février 2016 - Révision n°1 \vspace{2cm} \normalsize Auteur : Grégory \textsc{Burri}\\ -Sous la direction de Prof. Michel \textsc{Kocher} de l'\emph{HEIG-VD} et Prof. \textsc{Olivier Hüsser} de l'\emph{HE-Arc} +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\\ @@ -321,9 +321,9 @@ La figure~\ref{fig:processusComplet} montre le processus complet du traitement d \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 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 contrast que les autres composantes (voir figure~\ref{fig:image-source-red}). +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. @@ -349,7 +349,7 @@ Le troisième groupe correspond à la mise en commun des informations du premier ~ \begin{subfigure}[t]{0.4\textwidth} \includegraphics[width=\linewidth]{figures/image-source-blue.jpg} - \caption{Composante bleue.} + \caption{Composante bleue, non-utilisée.} \label{fig:image-source-blue} \end{subfigure} ~ @@ -360,11 +360,11 @@ Le troisième groupe correspond à la mise en commun des informations du premier \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 7.5~\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. +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 ouverture (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. +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 en estimant sa surface à partir du rayon calculé à partir 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. +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. @@ -490,14 +490,14 @@ Il faut remarquer que le spectre granulométrique par aire comporte un deuxième \label{fig:exemple-granulometrie} \end{figure} -À partir du rayon moyen trouvé par granulométrie et des caractéristique 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)$. +À 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és partielles par rapport à $x$ et par rapport à $y$ d'une image $f$ comme montré par l'équation~\ref{eq:composantes-gradient}. +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} @@ -554,15 +554,15 @@ Le résultat obtenu par l'étape précédente, la suppression des non-maxima, va 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). +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 proche d'une ellipse ayant un score plus élevé, sont supprimées. +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 triplet 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. +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 @@ -573,16 +573,16 @@ La taille de la fenêtre glissante est un carré dont la longueur des côtés co \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ée au centre de la figure~\ref{fig:exemple-ellipses-4}.} + \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 ou les 6~\% de triplets valides sont difficiles voire impossibles à atteindre. Cette limite est fixée à 400~\% du nombre de vecteurs non-nuls. +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. $m_1$ et $m_2$ sont les droites, tangentes à l'ellipse, perpendiculaires à $v_1$ respectivement $v_2$ et passant par les points associés.} + \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} @@ -611,7 +611,7 @@ La densité de points valides dans la fenêtre à un endroit donné dépend de l \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$, 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. +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} @@ -623,7 +623,7 @@ Tout d'abord le point $p_0$ est calculé comme montré par les équations~\ref{e 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} + 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 : @@ -671,7 +671,7 @@ Les tailles des deux rayons sont données par $1/\sqrt{\lambda}$ et $1/\sqrt{\mu \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 calcul 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)$. +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} @@ -679,12 +679,12 @@ Un score va être attribué à chaque ellipse en fonction de sa proximité aux a 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 éloignes 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}. +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 donc le score le plus élevé.} + \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} @@ -713,7 +713,7 @@ Où $E$ est l'ensemble des ellipses, $aire(e) = a \, b \, \pi$. La fonction $air ~ \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 a noter que toutes les ellipses ne correspondent pas forcément à des érythrocytes.} + \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é.} @@ -773,17 +773,17 @@ Il est important, pour que les deux classes résultant de la méthode de Otsu co \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 constituer à 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. +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} - Cytoplasmes = \phi_{SE}(f) - (1 / sensibilité_{cytoplasme}) \; f \geqslant 0 + \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 $sensibilité_{cytoplasme}$ une valeur comprise entre 0 et 1. Cette valeur a été ajustée à 0.96. +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] @@ -823,17 +823,17 @@ Où $f$ est l'image, $\phi_{SE}$ la fermeture morphologique par un élément str \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 : $noyau_{surface} = 0.01 * \pi * rayon_{moyen}^2$. +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} - Noyaux = \phi_{\lambda}(f) - (1 / sensibilité_{noyau}) \; f \geqslant 0 + \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 $sensibilité_{noyau}$ une valeur comprise entre 0 et 1. Cette valeur a été ajustée à 0.92. +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} @@ -844,7 +844,9 @@ Où $f$ est l'image, $\phi_{\lambda}$ la fermeture par aire de surface $\lambda$ 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}). -Les ellipses ayant une aire en dessous d'un seuil calculé comme étant $0.4 \; \pi \; rayon_{moyen}^2$ sont supprimées. Les pixels appartenant aux ellipses supprimées sont attribués aux ellipses existantes dans le cas de chevauchements. +\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 @@ -873,7 +875,7 @@ Les ellipses ayant une aire en dessous d'un seuil calculé comme étant $0.4 \; \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'entra pas en compte dans l'établissement du taux d'infection. Le taux maximum d'éléments colorés sombres a été fixé à 10~\%. +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. @@ -894,7 +896,7 @@ Comme le montre la figure~\ref{fig:exemple-element-particulier}, les objets part \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. +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. @@ -902,7 +904,7 @@ La parasitémie est finalement calculée en pourcentage comme étant le nombre d {\setlength{\abovedisplayskip}{0pt} \begin{flalign} - Parasitémie_{\%} = 100 \; \frac{\#\{érythrocytes_{sains}\}}{\#\{érythrocytes_{infectés}\}} + \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. @@ -969,11 +971,13 @@ Pour des raisons de précision numérique, le type \emph{Single} (réel sur 32 b 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} @@ -1003,9 +1007,9 @@ Le nombre de \emph{threads} exécutés en parallèle dépend du nombre de cœurs \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 parti 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)$. +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 maxima correspond à un ensemble d'éléments de valeur égale dont les voisins 4-connexes qui ne font pas partis du maxima en question ont une valeur strictement plus grande à celui-ci. +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 @@ -1043,12 +1047,9 @@ Un maxima correspond à un ensemble d'éléments de valeur égale dont les voisi \end{algorithm} - -\subsubsection{Arbre k-d} - \subsection{Interface en ligne de commande} -L'application peut être lancé 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 : +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 |--file ) --output [--debug] @@ -1059,7 +1060,7 @@ Où \texttt{---folder } est un dossier contenant les images à analyser, \subsection{Interface graphique} -Les différents éléments de l'interface graphique, contrôles et fenêtres, sont décrit 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. +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. @@ -1090,14 +1091,14 @@ La figure~\ref{fig:screenshot-GUI} montre la fenêtre principale à partir de la 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 le liste des érythrocytes détectés issue de la dernière analyse. Pour chaque érythrocyte les informations suivantes sont mémorisées : +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 à é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 + \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} @@ -1118,7 +1119,7 @@ Treize images~\footnote{{\imagesmesures}} on été sélectionnées, six d'entre 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 : +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. @@ -1127,7 +1128,7 @@ Concernant Ma, les paramètres suivants ont été modifiés afin d'adapter la m \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 elles 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é avec un tiret. +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} @@ -1261,7 +1262,7 @@ Dans le cas de \emph{Ma}, les amas de cellules ainsi que les cellules allongées \caption{\emph{Di Ruberto}.} \label{fig:comparaison-2-diruberto} \end{subfigure} - \caption{Segmentation d'une cellule ellipsoïde.} + \caption{Segmentation d'une cellule de forme elliptique.} \label{fig:comparaison-2} \end{figure} @@ -1290,7 +1291,7 @@ La méthode de \emph{Ma} a également tendance à compter certains débris comme \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 aboutit car la teinte des parasites est très proche de celle des érythrocytes. Dans certain cas il est également nécessaire d'inverser la composante saturation car la méthode nécessite que les parasites soient plus saturées que les cellules et que ces dernières soient plus saturée que le fond. +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}. @@ -1327,19 +1328,20 @@ Ces deux méthodes, et dans une moindre mesure la méthode présentée ici, sont \subsection{Discussion} \label{discussions} -L'a priori de forme, comme la transformée de Hough dans le domaine des cercles utilisée par \emph{Ma}\cite{ma2010}, donne de meilleures résultats qu'une approche purement morphologique telle que celle décrite par \emph{Di Ruberto}\cite{di-ruberto2001}. Les érythrocytes ayant tendance à s'aplatir ou à se tourner, les résultats sont encore meilleures avec un a priori de forme elliptique tel que montré ici. +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. -blabla.... webinar +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. -Ma: -* pas de granulometry -* beaucoup de paramètres interdépendants et hard-codé, le fait de changer la résolution oblige à changer au moins quatre paramètres. Cela est très sommairement résolu en appliquant un filtre décimateur pour contraindre l'image en entrée à une résolution prédéfinie. +\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} +\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} diff --git a/src/Tests_hough/test_hough_simple.m b/src/Tests_hough/test_hough_simple.m index 2725fc9..268aae2 100644 --- a/src/Tests_hough/test_hough_simple.m +++ b/src/Tests_hough/test_hough_simple.m @@ -11,7 +11,7 @@ function test_hough_simple(images_path, image_name) disp('Finding ellipses...'); tic - ellipses = find_ellipses(acc_votes, acc_radius); + ellipses = find_ellipses(0.4, acc_votes, acc_radius); toc show_figures(['Hough simple - ' image_name], {... -- 2.45.2