From: Greg Burri Date: Fri, 5 Feb 2016 00:41:55 +0000 (+0100) Subject: Update report. X-Git-Tag: 1.0.11~15 X-Git-Url: http://git.euphorik.ch/index.cgi?a=commitdiff_plain;h=d010b053b41b272259a6fa231728bc3413a9c7e0;p=master-thesis.git Update report. --- diff --git a/rapport/figures-sources/ellipses-chevauchement.svg b/rapport/figures-sources/ellipses-chevauchement.svg new file mode 100644 index 0000000..ec775c5 --- /dev/null +++ b/rapport/figures-sources/ellipses-chevauchement.svg @@ -0,0 +1,173 @@ + + + + + + + + + + image/svg+xml + + + + + + + + + + + 0.1 + 0.1 + 0.15 + + e1 + e2 + e3 + Scores + + diff --git a/rapport/figures-sources/morpho/hexagone.svg b/rapport/figures-sources/morpho/hexagone.svg new file mode 100644 index 0000000..7b3e59e --- /dev/null +++ b/rapport/figures-sources/morpho/hexagone.svg @@ -0,0 +1,67 @@ + + + + + + + + + + image/svg+xml + + + + + + + + + diff --git a/rapport/figures-sources/morpho/ligne-diagonal-1.svg b/rapport/figures-sources/morpho/ligne-diagonal-1.svg new file mode 100644 index 0000000..262f350 --- /dev/null +++ b/rapport/figures-sources/morpho/ligne-diagonal-1.svg @@ -0,0 +1,67 @@ + + + + + + + + + + image/svg+xml + + + + + + + + + diff --git a/rapport/figures-sources/morpho/ligne-diagonal-2.svg b/rapport/figures-sources/morpho/ligne-diagonal-2.svg new file mode 100644 index 0000000..869a86b --- /dev/null +++ b/rapport/figures-sources/morpho/ligne-diagonal-2.svg @@ -0,0 +1,67 @@ + + + + + + + + + + image/svg+xml + + + + + + + + + diff --git a/rapport/figures-sources/morpho/ligne-horizontale.svg b/rapport/figures-sources/morpho/ligne-horizontale.svg new file mode 100644 index 0000000..70a7c8c --- /dev/null +++ b/rapport/figures-sources/morpho/ligne-horizontale.svg @@ -0,0 +1,67 @@ + + + + + + + + + + image/svg+xml + + + + + + + + + diff --git a/rapport/figures-sources/morpho/ligne-verticale.svg b/rapport/figures-sources/morpho/ligne-verticale.svg new file mode 100644 index 0000000..4aeefb9 --- /dev/null +++ b/rapport/figures-sources/morpho/ligne-verticale.svg @@ -0,0 +1,67 @@ + + + + + + + + + + image/svg+xml + + + + + + + + + diff --git a/rapport/figures-sources/morpho/losange.svg b/rapport/figures-sources/morpho/losange.svg new file mode 100644 index 0000000..9a45fad --- /dev/null +++ b/rapport/figures-sources/morpho/losange.svg @@ -0,0 +1,67 @@ + + + + + + + + + + image/svg+xml + + + + + + + + + diff --git a/rapport/figures-sources/morpho/octagon.svg b/rapport/figures-sources/morpho/octagon.svg new file mode 100644 index 0000000..d897df1 --- /dev/null +++ b/rapport/figures-sources/morpho/octagon.svg @@ -0,0 +1,77 @@ + + + + + + + + + + image/svg+xml + + + + + + + + + diff --git a/rapport/figures-sources/profile-parasites.svg b/rapport/figures-sources/profile-parasites.svg new file mode 100644 index 0000000..3a61cc7 --- /dev/null +++ b/rapport/figures-sources/profile-parasites.svg @@ -0,0 +1,150 @@ + + + + + + + + + + image/svg+xml + + + + + + + Érythrocyte + + + + + + + + + Cytoplasme + Noyaux + + + + + + + + + diff --git a/rapport/figures-sources/profile-zones-colorees-sombres.svg b/rapport/figures-sources/profile-zones-colorees-sombres.svg new file mode 100644 index 0000000..29cf517 --- /dev/null +++ b/rapport/figures-sources/profile-zones-colorees-sombres.svg @@ -0,0 +1,244 @@ + + + + + + + + + + + + + + + + + + + + + + + image/svg+xml + + + + + + + Érythrocyte + + + + + + + + + Élément sombre + + + + m1 + + Δ + m2 + s + + diff --git a/rapport/figures-sources/schema_processus_2.svg b/rapport/figures-sources/schema_processus_2.svg index 054c3f4..5e3ddd9 100644 --- a/rapport/figures-sources/schema_processus_2.svg +++ b/rapport/figures-sources/schema_processus_2.svg @@ -9,9 +9,9 @@ xmlns="http://www.w3.org/2000/svg" xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd" xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape" - width="144mm" - height="222mm" - viewBox="0 0 510.2362 786.61417" + width="144.03833mm" + height="241.51868mm" + viewBox="0 0 510.37202 855.77484" id="svg5211" version="1.1" inkscape:version="0.91 r13725" @@ -49,68 +49,19 @@ inkscape:connector-curvature="0" /> - - - - - - - - - + orient="auto" + inkscape:stockid="Arrow2Mend"> + d="M 8.7185878,4.0337352 -2.2072895,0.01601326 8.7185884,-4.0017078 c -1.7454984,2.3720609 -1.7354408,5.6174519 -6e-7,8.035443 z" + style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:0.625;stroke-linejoin:round;stroke-opacity:1" + id="path8926-0" /> + inkscape:window-maximized="1" + fit-margin-top="2" + fit-margin-left="2" + fit-margin-right="2" + fit-margin-bottom="2" /> @@ -139,7 +94,7 @@ image/svg+xml - + @@ -147,7 +102,7 @@ inkscape:label="Layer 1" inkscape:groupmode="layer" id="layer1" - transform="translate(0,-265.74803)"> + transform="translate(-0.71797891,-266.0751)"> Image source RGB + sa résolution en DPI + y="290.38229">Image source RGB et sa résolution en PPI + Succession deSuccessionfermetures par aire + sodipodi:role="line">d'ouvertures par aire @@ -409,8 +370,8 @@ x="363.15765" sodipodi:role="line">Filtre passe-bas @@ -469,7 +430,7 @@ id="tspan7186" y="500.08163" x="135.58963" - sodipodi:role="line">des érytrocytes + sodipodi:role="line">des érythrocytes + + - Extraction des zonescolorées sombres Méthode de Otsu @@ -652,77 +610,35 @@ sodipodi:linespacing="125%" id="text7983" y="555.71875" - x="394.37924" + x="385.09341" style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:17.5px;line-height:125%;font-family:Garamond;-inkscape-font-specification:'Garamond, Normal';text-align:center;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1" xml:space="preserve">Segmentationdes cytoplasmes Fermeturemorphologique - - Segmentationdes noyaux - Fermeturepar aire - @@ -730,18 +646,30 @@ sodipodi:nodetypes="ccc" inkscape:connector-curvature="0" id="path8922" - d="m 288.21126,569.54963 0,105.25495 20.71429,0.2564" - style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:1.75;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;marker-end:url(#marker8924)" /> + d="m 283.16046,569.54963 0,105.25495 10.09717,0.2564" + style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:3;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" /> + + + transform="translate(-7.8578642,90.548235)"> + transform="translate(-286.65996,157.21833)"> • Touchant le bord• Ayant un écart type trop important• Touchant les bords• Ayant une aire trop faible + transform="translate(-99.78175,131.19294)"> @@ -856,72 +780,153 @@ • Non-érytrocyte si trop grande surface de partie colorée sombre• Non-érythrocyte si trop grande surface colorée sombre• Érytrocyte infecté si au moins un noyaux et un cytoplasme• Érythrocyte infecté si au moins un noyau et un cytoplasme• Érytrocyte sain sinon + id="tspan9392">• Érythrocyte sain sinon Identification des érytrocytes + style="font-size:22.5px;fill:#616161;fill-opacity:1">Identification des érythrocytes Classification des cellules + + + Segmentationdes noyaux + Fermeturepar aire + + + + + Extraction des zonescolorées sombres diff --git a/rapport/figures/Granulometry-pattern-spectrum-morpho-octagon.pdf b/rapport/figures/Granulometry-pattern-spectrum-morpho-octagon.pdf index a147dc5..b7523db 100644 Binary files a/rapport/figures/Granulometry-pattern-spectrum-morpho-octagon.pdf and b/rapport/figures/Granulometry-pattern-spectrum-morpho-octagon.pdf differ diff --git a/rapport/figures/classification/exemple-1-original.jpg b/rapport/figures/classification/exemple-1-original.jpg new file mode 100644 index 0000000..dc30616 Binary files /dev/null and b/rapport/figures/classification/exemple-1-original.jpg differ diff --git a/rapport/figures/classification/exemple-2-ellipses.jpg b/rapport/figures/classification/exemple-2-ellipses.jpg new file mode 100644 index 0000000..0b6447b Binary files /dev/null and b/rapport/figures/classification/exemple-2-ellipses.jpg differ diff --git a/rapport/figures/classification/exemple-3-dark-stain.png b/rapport/figures/classification/exemple-3-dark-stain.png new file mode 100644 index 0000000..47c1252 Binary files /dev/null and b/rapport/figures/classification/exemple-3-dark-stain.png differ diff --git a/rapport/figures/classification/exemple-4-cytoplasmes.png b/rapport/figures/classification/exemple-4-cytoplasmes.png new file mode 100644 index 0000000..df038fd Binary files /dev/null and b/rapport/figures/classification/exemple-4-cytoplasmes.png differ diff --git a/rapport/figures/classification/exemple-5-noyaux.png b/rapport/figures/classification/exemple-5-noyaux.png new file mode 100644 index 0000000..94b8c63 Binary files /dev/null and b/rapport/figures/classification/exemple-5-noyaux.png differ diff --git a/rapport/figures/classification/exemple-6-classification.jpg b/rapport/figures/classification/exemple-6-classification.jpg new file mode 100644 index 0000000..f7a3aa4 Binary files /dev/null and b/rapport/figures/classification/exemple-6-classification.jpg differ diff --git a/rapport/figures/classification/exemple-attribution-pixel-1.jpg b/rapport/figures/classification/exemple-attribution-pixel-1.jpg new file mode 100644 index 0000000..f0354ff Binary files /dev/null and b/rapport/figures/classification/exemple-attribution-pixel-1.jpg differ diff --git a/rapport/figures/classification/exemple-attribution-pixel-2.jpg b/rapport/figures/classification/exemple-attribution-pixel-2.jpg new file mode 100644 index 0000000..f86c511 Binary files /dev/null and b/rapport/figures/classification/exemple-attribution-pixel-2.jpg differ diff --git a/rapport/figures/classification/exemple-attribution-pixel-3.jpg b/rapport/figures/classification/exemple-attribution-pixel-3.jpg new file mode 100644 index 0000000..57c155d Binary files /dev/null and b/rapport/figures/classification/exemple-attribution-pixel-3.jpg differ diff --git a/rapport/figures/classification/exemple-element-particulier-1.jpg b/rapport/figures/classification/exemple-element-particulier-1.jpg new file mode 100644 index 0000000..e566f23 Binary files /dev/null and b/rapport/figures/classification/exemple-element-particulier-1.jpg differ diff --git a/rapport/figures/classification/exemple-element-particulier-2.jpg b/rapport/figures/classification/exemple-element-particulier-2.jpg new file mode 100644 index 0000000..4947996 Binary files /dev/null and b/rapport/figures/classification/exemple-element-particulier-2.jpg differ diff --git a/rapport/figures/comparaison-1-diruberto.jpg b/rapport/figures/comparaison-1-diruberto.jpg new file mode 100644 index 0000000..06f014c Binary files /dev/null and b/rapport/figures/comparaison-1-diruberto.jpg differ diff --git a/rapport/figures/comparaison-1-ma.jpg b/rapport/figures/comparaison-1-ma.jpg new file mode 100644 index 0000000..5bf15cf Binary files /dev/null and b/rapport/figures/comparaison-1-ma.jpg differ diff --git a/rapport/figures/comparaison-1-master.jpg b/rapport/figures/comparaison-1-master.jpg new file mode 100644 index 0000000..ceb5573 Binary files /dev/null and b/rapport/figures/comparaison-1-master.jpg differ diff --git a/rapport/figures/comparaison-1-original.jpg b/rapport/figures/comparaison-1-original.jpg new file mode 100644 index 0000000..c4ede1c Binary files /dev/null and b/rapport/figures/comparaison-1-original.jpg differ diff --git a/rapport/figures/comparaison-2-diruberto.jpg b/rapport/figures/comparaison-2-diruberto.jpg new file mode 100644 index 0000000..cb8d32a Binary files /dev/null and b/rapport/figures/comparaison-2-diruberto.jpg differ diff --git a/rapport/figures/comparaison-2-ma.jpg b/rapport/figures/comparaison-2-ma.jpg new file mode 100644 index 0000000..53c7abc Binary files /dev/null and b/rapport/figures/comparaison-2-ma.jpg differ diff --git a/rapport/figures/comparaison-2-master.jpg b/rapport/figures/comparaison-2-master.jpg new file mode 100644 index 0000000..beb361a Binary files /dev/null and b/rapport/figures/comparaison-2-master.jpg differ diff --git a/rapport/figures/comparaison-2-original.jpg b/rapport/figures/comparaison-2-original.jpg new file mode 100644 index 0000000..93646a6 Binary files /dev/null and b/rapport/figures/comparaison-2-original.jpg differ diff --git a/rapport/figures/comparaison-3-debris-ma.jpg b/rapport/figures/comparaison-3-debris-ma.jpg new file mode 100644 index 0000000..769d0a4 Binary files /dev/null and b/rapport/figures/comparaison-3-debris-ma.jpg differ diff --git a/rapport/figures/comparaison-3-debris-master.jpg b/rapport/figures/comparaison-3-debris-master.jpg new file mode 100644 index 0000000..d7e64a2 Binary files /dev/null and b/rapport/figures/comparaison-3-debris-master.jpg differ diff --git a/rapport/figures/comparaison-3-debris-original.jpg b/rapport/figures/comparaison-3-debris-original.jpg new file mode 100644 index 0000000..761af42 Binary files /dev/null and b/rapport/figures/comparaison-3-debris-original.jpg differ diff --git a/rapport/figures/comparaison-4-illumination-di-ruberto.png b/rapport/figures/comparaison-4-illumination-di-ruberto.png new file mode 100644 index 0000000..04baca6 Binary files /dev/null and b/rapport/figures/comparaison-4-illumination-di-ruberto.png differ diff --git a/rapport/figures/comparaison-4-illumination-ma.png b/rapport/figures/comparaison-4-illumination-ma.png new file mode 100644 index 0000000..31d7af3 Binary files /dev/null and b/rapport/figures/comparaison-4-illumination-ma.png differ diff --git a/rapport/figures/comparaison-4-illumination-master.png b/rapport/figures/comparaison-4-illumination-master.png new file mode 100644 index 0000000..8715110 Binary files /dev/null and b/rapport/figures/comparaison-4-illumination-master.png differ diff --git a/rapport/figures/comparaison-4-illumination-original.jpg b/rapport/figures/comparaison-4-illumination-original.jpg new file mode 100644 index 0000000..9254fbe Binary files /dev/null and b/rapport/figures/comparaison-4-illumination-original.jpg differ diff --git a/rapport/figures/ellipses/ellipses-chevauchement.pdf b/rapport/figures/ellipses/ellipses-chevauchement.pdf new file mode 100644 index 0000000..3efd5cc Binary files /dev/null and b/rapport/figures/ellipses/ellipses-chevauchement.pdf differ diff --git a/rapport/figures/exemple-granulometrie.jpg b/rapport/figures/exemple-granulometrie.jpg new file mode 100644 index 0000000..999d0ce Binary files /dev/null and b/rapport/figures/exemple-granulometrie.jpg differ diff --git a/rapport/figures/image-source-RGB.jpg b/rapport/figures/image-source-RGB.jpg new file mode 100644 index 0000000..3addab3 Binary files /dev/null and b/rapport/figures/image-source-RGB.jpg differ diff --git a/rapport/figures/image-source-blue.jpg b/rapport/figures/image-source-blue.jpg new file mode 100644 index 0000000..195529e Binary files /dev/null and b/rapport/figures/image-source-blue.jpg differ diff --git a/rapport/figures/image-source-green.jpg b/rapport/figures/image-source-green.jpg new file mode 100644 index 0000000..2aced4b Binary files /dev/null and b/rapport/figures/image-source-green.jpg differ diff --git a/rapport/figures/image-source-red.jpg b/rapport/figures/image-source-red.jpg new file mode 100644 index 0000000..6d22621 Binary files /dev/null and b/rapport/figures/image-source-red.jpg differ diff --git a/rapport/figures/implementation/screenshot-main.jpg b/rapport/figures/implementation/screenshot-main.jpg new file mode 100644 index 0000000..13f0b6d Binary files /dev/null and b/rapport/figures/implementation/screenshot-main.jpg differ diff --git a/rapport/figures/implementation/screenshot-ppi-calculator.jpg b/rapport/figures/implementation/screenshot-ppi-calculator.jpg new file mode 100644 index 0000000..28dea7a Binary files /dev/null and b/rapport/figures/implementation/screenshot-ppi-calculator.jpg differ diff --git a/rapport/figures/implementation/screenshot-start-analysis.jpg b/rapport/figures/implementation/screenshot-start-analysis.jpg new file mode 100644 index 0000000..ac20262 Binary files /dev/null and b/rapport/figures/implementation/screenshot-start-analysis.jpg differ diff --git a/rapport/figures/morpho/hexagone.pdf b/rapport/figures/morpho/hexagone.pdf new file mode 100644 index 0000000..14bef04 --- /dev/null +++ b/rapport/figures/morpho/hexagone.pdf @@ -0,0 +1,69 @@ +%PDF-1.5 +%µí®û +3 0 obj +<< /Length 4 0 R + /Filter /FlateDecode +>> +stream +xœeŒ± +Â@DûýŠ©×ÝÍæîÒÚ‚ElÅB"’‰…¿ï]ˆÊ³3o˜‘„S’9þŸ©Ãæ"èž$(wÜe/Rìsö Ó9'‚9¡sm]D-“„ë@XbÊÕÊ0ÀŒ“#²V=¦7uñ‘Mõk…Ý›¥L:õ¸ÿ oWh©¥7Ý\*X +endstream +endobj +4 0 obj + 139 +endobj +2 0 obj +<< + /ExtGState << + /a0 << /CA 1 /ca 1 >> + >> +>> +endobj +5 0 obj +<< /Type /Page + /Parent 1 0 R + /MediaBox [ 0 0 23.288942 14.276208 ] + /Contents 3 0 R + /Group << + /Type /Group + /S /Transparency + /I true + /CS /DeviceRGB + >> + /Resources 2 0 R +>> +endobj +1 0 obj +<< /Type /Pages + /Kids [ 5 0 R ] + /Count 1 +>> +endobj +6 0 obj +<< /Creator (cairo 1.14.1 (http://cairographics.org)) + /Producer (cairo 1.14.1 (http://cairographics.org)) +>> +endobj +7 0 obj +<< /Type /Catalog + /Pages 1 0 R +>> +endobj +xref +0 8 +0000000000 65535 f +0000000551 00000 n +0000000253 00000 n +0000000015 00000 n +0000000231 00000 n +0000000325 00000 n +0000000616 00000 n +0000000743 00000 n +trailer +<< /Size 8 + /Root 7 0 R + /Info 6 0 R +>> +startxref +795 +%%EOF diff --git a/rapport/figures/morpho/ligne-diagonal-1.pdf b/rapport/figures/morpho/ligne-diagonal-1.pdf new file mode 100644 index 0000000..626c780 Binary files /dev/null and b/rapport/figures/morpho/ligne-diagonal-1.pdf differ diff --git a/rapport/figures/morpho/ligne-diagonal-2.pdf b/rapport/figures/morpho/ligne-diagonal-2.pdf new file mode 100644 index 0000000..6b79b91 --- /dev/null +++ b/rapport/figures/morpho/ligne-diagonal-2.pdf @@ -0,0 +1,70 @@ +%PDF-1.5 +%µí®û +3 0 obj +<< /Length 4 0 R + /Filter /FlateDecode +>> +stream +xœŠ; +€0û=Å»€ëFÖ|N ÑR,DASˆ…×7‘7ś›…±C½ +Ž‡„­â%ƒ>_'Í „;)Ü0]Ö\n‰<«‡ç&8$v>äµÒâ„H‘>3\ +endstream +endobj +4 0 obj + 96 +endobj +2 0 obj +<< + /ExtGState << + /a0 << /CA 1 /ca 1 >> + >> +>> +endobj +5 0 obj +<< /Type /Page + /Parent 1 0 R + /MediaBox [ 0 0 10.264 9.464 ] + /Contents 3 0 R + /Group << + /Type /Group + /S /Transparency + /I true + /CS /DeviceRGB + >> + /Resources 2 0 R +>> +endobj +1 0 obj +<< /Type /Pages + /Kids [ 5 0 R ] + /Count 1 +>> +endobj +6 0 obj +<< /Creator (cairo 1.14.1 (http://cairographics.org)) + /Producer (cairo 1.14.1 (http://cairographics.org)) +>> +endobj +7 0 obj +<< /Type /Catalog + /Pages 1 0 R +>> +endobj +xref +0 8 +0000000000 65535 f +0000000500 00000 n +0000000209 00000 n +0000000015 00000 n +0000000188 00000 n +0000000281 00000 n +0000000565 00000 n +0000000692 00000 n +trailer +<< /Size 8 + /Root 7 0 R + /Info 6 0 R +>> +startxref +744 +%%EOF diff --git a/rapport/figures/morpho/ligne-horizontale.pdf b/rapport/figures/morpho/ligne-horizontale.pdf new file mode 100644 index 0000000..d5c993f Binary files /dev/null and b/rapport/figures/morpho/ligne-horizontale.pdf differ diff --git a/rapport/figures/morpho/ligne-verticale.pdf b/rapport/figures/morpho/ligne-verticale.pdf new file mode 100644 index 0000000..77f87a7 Binary files /dev/null and b/rapport/figures/morpho/ligne-verticale.pdf differ diff --git a/rapport/figures/morpho/losange.pdf b/rapport/figures/morpho/losange.pdf new file mode 100644 index 0000000..1882dd4 --- /dev/null +++ b/rapport/figures/morpho/losange.pdf @@ -0,0 +1,69 @@ +%PDF-1.5 +%µí®û +3 0 obj +<< /Length 4 0 R + /Filter /FlateDecode +>> +stream +xœe‹½ +Â` E÷<ŝc¾Ÿ4_W—BÁ¡®¥ƒ(TÄ­ƒ¯oª ˆdHÎ͹3 -%füˈÝI0>H°Î±ñ_•ñ¤€Ö³õƒ'‚ e0#¼µíºŒ5iN牌M’‹NBÅíCwÔ¬uq9u6K_ºþ÷tÔÑ «O#à +endstream +endobj +4 0 obj + 127 +endobj +2 0 obj +<< + /ExtGState << + /a0 << /CA 1 /ca 1 >> + >> +>> +endobj +5 0 obj +<< /Type /Page + /Parent 1 0 R + /MediaBox [ 0 0 17.300573 7.535432 ] + /Contents 3 0 R + /Group << + /Type /Group + /S /Transparency + /I true + /CS /DeviceRGB + >> + /Resources 2 0 R +>> +endobj +1 0 obj +<< /Type /Pages + /Kids [ 5 0 R ] + /Count 1 +>> +endobj +6 0 obj +<< /Creator (cairo 1.14.1 (http://cairographics.org)) + /Producer (cairo 1.14.1 (http://cairographics.org)) +>> +endobj +7 0 obj +<< /Type /Catalog + /Pages 1 0 R +>> +endobj +xref +0 8 +0000000000 65535 f +0000000538 00000 n +0000000241 00000 n +0000000015 00000 n +0000000219 00000 n +0000000313 00000 n +0000000603 00000 n +0000000730 00000 n +trailer +<< /Size 8 + /Root 7 0 R + /Info 6 0 R +>> +startxref +782 +%%EOF diff --git a/rapport/figures/morpho/octagon.pdf b/rapport/figures/morpho/octagon.pdf new file mode 100644 index 0000000..e161abc Binary files /dev/null and b/rapport/figures/morpho/octagon.pdf differ diff --git a/rapport/figures/morpho/square.pdf b/rapport/figures/morpho/square.pdf new file mode 100644 index 0000000..8dbd077 Binary files /dev/null and b/rapport/figures/morpho/square.pdf differ diff --git a/rapport/figures/parasite/exemple-cytoplasme.png b/rapport/figures/parasite/exemple-cytoplasme.png new file mode 100644 index 0000000..fd6f585 Binary files /dev/null and b/rapport/figures/parasite/exemple-cytoplasme.png differ diff --git a/rapport/figures/parasite/exemple-dark-stain-0.jpg b/rapport/figures/parasite/exemple-dark-stain-0.jpg new file mode 100644 index 0000000..1794f4f Binary files /dev/null and b/rapport/figures/parasite/exemple-dark-stain-0.jpg differ diff --git a/rapport/figures/parasite/exemple-dark-stain-1.jpg b/rapport/figures/parasite/exemple-dark-stain-1.jpg new file mode 100644 index 0000000..0ded3f1 Binary files /dev/null and b/rapport/figures/parasite/exemple-dark-stain-1.jpg differ diff --git a/rapport/figures/parasite/exemple-dark-stain-2.png b/rapport/figures/parasite/exemple-dark-stain-2.png new file mode 100644 index 0000000..2787518 Binary files /dev/null and b/rapport/figures/parasite/exemple-dark-stain-2.png differ diff --git a/rapport/figures/parasite/exemple-noyaux.png b/rapport/figures/parasite/exemple-noyaux.png new file mode 100644 index 0000000..f95aff7 Binary files /dev/null and b/rapport/figures/parasite/exemple-noyaux.png differ diff --git a/rapport/figures/parasite/exemple-original.jpg b/rapport/figures/parasite/exemple-original.jpg new file mode 100644 index 0000000..5c97f35 Binary files /dev/null and b/rapport/figures/parasite/exemple-original.jpg differ diff --git a/rapport/figures/parasite/exemple-red-filtered.jpg b/rapport/figures/parasite/exemple-red-filtered.jpg new file mode 100644 index 0000000..d954f86 Binary files /dev/null and b/rapport/figures/parasite/exemple-red-filtered.jpg differ diff --git a/rapport/figures/parasite/exemple-red.jpg b/rapport/figures/parasite/exemple-red.jpg new file mode 100644 index 0000000..e750934 Binary files /dev/null and b/rapport/figures/parasite/exemple-red.jpg differ diff --git a/rapport/figures/parasite/profile-zones-colorees-sombres.pdf b/rapport/figures/parasite/profile-zones-colorees-sombres.pdf new file mode 100644 index 0000000..b5352b9 Binary files /dev/null and b/rapport/figures/parasite/profile-zones-colorees-sombres.pdf differ diff --git a/rapport/figures/schema_processus_2.pdf b/rapport/figures/schema_processus_2.pdf index 6671a14..efdd65f 100644 Binary files a/rapport/figures/schema_processus_2.pdf and b/rapport/figures/schema_processus_2.pdf differ diff --git a/rapport/main.bib b/rapport/main.bib new file mode 100644 index 0000000..c727792 --- /dev/null +++ b/rapport/main.bib @@ -0,0 +1,77 @@ +@misc {di-ruberto2001, + author = "Di Ruberto, Cecilia and Dempster, Andrew and Khan, Shahid and Jarra, Bill", + title = "Analysis of infected blood cell images using morphological operators", + year = "2001" +} + +@misc {ma2010, + author = "Ma, Charles and Harrison, Paul and Wang, Lina and Coppel, Ross L.", + title = "Automated estimation of parasitaemia of Plasmodium yoelii-infected mice by digital image analysis of Giemsa-stained thin blood smears", + year = "2010" +} + +@misc {purwar2011, + author = "Purwar, Yashasvi and Shah, Sirish L. and Clarke, Gwen and Almugairi, Areej and Muehlenbachs, Atis", + title = "Automated estimation of parasitaemia of Plasmodium yoelii-infected mice by digital image analysis of Giemsa-stained thin blood smears", + year = "2011" +} + +@misc {shoelson2015, + author = "Shoelson, Brett" + title = "Finding Parasitic Infections with MATLAB" + year = "2015" +} + +@misc {gonzalez-woods2008, + author = "Gonzalez, Rafael C. and Woods, Richard E.", + title = "Digital Image Processing, Third Edition", + year = "2008" +} + +@misc {vincent1992, + author = "Vincent, Luc", + title = "Morphological Area Openings and Closings for Greyscale Images", + year = "1992" +} + +@misc {hughes2011, + author = "Hughes, Gary B. and Chraibi, Mohcine", + title = "Calculating ellipse overlap areas", + year = "2011" +} + +@misc {Chan-vese2001, + author = "Chan, Tony and Vese, Luminita", + title = "An Active Contour Model without Edges", + year = "2001" +} + +@misc {burri2015, + author = "Burri, Grégory", + title = "Détection de cellules sanguines infectées par la malaria, projet d'approfondissement du deuxième semestre de master HES-SO", + year = "2015" +} + +@mise {algo2010, + author = "Cormen, Thomas C. and Leiserson, Charles E. and Rivest, Ronald L. and Stain, Clifford", + title = "Algorithmique", + year = "2010" +} + +@mise {computational-geometry2008, + author = "de Berg, Marc and Cheong, Otfried and van Kreveld, Marc and Overmars, Mark", + title = "Computational Geometry, Algorithme and Applications, Third Edition", + year = "2008" +} + +@misc {talbot2010, + author = "Talbot, Hugues", + title = "Introduction à la Morphologie Mathématique, Théorie et applications", + year = "2010" +} + +@misc {Manzanera2005, + author = "Manzanera, Antoine", + title = "Cours de morphologie mathématique", + year = "2005" +} \ No newline at end of file diff --git a/rapport/main.tex b/rapport/main.tex index 7e9ae97..2275a70 100644 --- a/rapport/main.tex +++ b/rapport/main.tex @@ -10,6 +10,8 @@ \usepackage{amssymb, amsmath, amsthm} \usepackage[title,titletoc,toc]{appendix} +\usepackage[french,onelanguage,vlined,linesnumbered]{algorithm2e} + \usepackage{framed} \usepackage{graphicx} \usepackage{caption} @@ -31,26 +33,60 @@ \lstset{framextopmargin=50pt,frame=bottomline} \definecolor{matlabCommentColor}{RGB}{0, 100, 0} % Green \definecolor{matlabStringColor}{RGB}{204, 34, 34} % Red -\lstset{language=Matlab,% - breaklines=true,% - morekeywords={matlab2tikz}, - keywordstyle=\color{blue},% - morekeywords=[2]{1}, keywordstyle=[2]{\color{black}}, - identifierstyle=\color{black},% - stringstyle=\color{matlabStringColor}, - commentstyle=\color{matlabCommentColor}, - showstringspaces=false,%without this there will be a symbol in the places where there is a space - numbers=left,% - numberstyle={\tiny \color{black}},% size of the numbers - numbersep=9pt, % this defines how far the numbers are from the text - emph=[1]{for,end,break},emphstyle=[1]\color{red}, %some words to emphasis - %emph=[2]{word1,word2}, emphstyle=[2]{style}, + + +\lstdefinelanguage{FSharp}% +{morekeywords={let, new, match, with, rec, open, module, namespace, type, of, member, % +and, for, while, true, false, in, do, begin, end, fun, function, return, yield, try, % +mutable, if, then, else, cloud, async, static, use, abstract, interface, inherit, finally }, + otherkeywords={ let!, return!, do!, yield!, use!, var, from, select, where, order, byte, bool, int, string }, + keywordstyle=\color{blue}\bfseries, + sensitive=true, + basicstyle=\ttfamily, + breaklines=true, + xleftmargin=\parindent, + aboveskip=\bigskipamount, + tabsize=4, + morecomment=[l][\color{OliveGreen}]{///}, + morecomment=[l][\color{OliveGreen}]{//}, + morecomment=[s][\color{OliveGreen}]{{(*}{*)}}, + morestring=[b]", + showstringspaces=false, + literate={`}{\`}1, + stringstyle=\color{red}, } +\definecolor{light-gray}{gray}{0.7} + +\lstdefinestyle{fsharp}{ + rulecolor = \color{light-gray}, + frameround = tttt, + numbers = left, + numbersep = 8pt, + frame = single, + language = FSharp, + basicstyle = \ttfamily\footnotesize, + framexleftmargin = 15pt, + framextopmargin = 3pt} + +\lstdefinestyle{tt}{ + rulecolor = \color{light-gray}, + frameround = tttt, + numbersep = 8pt, + frame = single, + basicstyle = \ttfamily\footnotesize, + framexleftmargin = 5pt, + framextopmargin = 3pt} + \newcommand{\mli}[1]{\mathit{#1}} % Multi-letter identifier. \renewcommand{\appendixtocname}{Annexes} +\urldef{\parasitemiasource}\url{http://private.gburri.org/CHUV/Parasitemia-1.0.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{\imagesmesures}\url{http://private.gburri.org/CHUV/Images-mesures.zip} + \pagestyle{fancy} \fancyfoot[CE,CO]{} \fancyfoot[LE,RO]{\thepage} @@ -69,7 +105,7 @@ \Large Master of Science HES-SO in Engineering \\ \large -Technologie de l'information et de la communication +Technologies industrielles (TIN) % Technologie de l'information et de la communication (TIC) \vspace{1cm} @@ -81,7 +117,7 @@ Technologie de l'information et de la communication \includegraphics[width=4cm]{logos/mse_logo.jpg} -\vspace{8cm} +\vspace{7cm} \large Février 2016 - Révision n°1 @@ -89,7 +125,7 @@ Février 2016 - Révision n°1 \vspace{2cm} \normalsize Auteur : Grégory \textsc{Burri}\\ -Prof. responsables : Michel \textsc{Kocher}, \textsc{Olivier Hüsser} +Sous la direction de Prof. Michel \textsc{Kocher} de l'\emph{HEIG-VD} et Prof. \textsc{Olivier Hüsser} de l'\emph{HE-Arc} \vspace{2cm} Master of Science HES-SO in Engineering\\ @@ -114,7 +150,7 @@ Accepté par la HES-SO//Master (Suisse, Lausanne) sur proposition de M. Kocher. \vspace{0.5cm} \noindent -Prof. Michel Kocher, conseiller du projet d'approfondissement\\ +Prof. Michel Kocher et Prof. Olivier Hüsser, conseillers de travail de master\\ Dr. Philippe Thévenaz, expert principal \vspace{1cm} @@ -125,10 +161,10 @@ Lausanne, le \vspace{1cm} \noindent -\setlength{\tabcolsep}{30pt} -\begin{tabular}{ l l } - Prof. Michel Kocher. & Prof.\\ - Conseiller & Responsable de la filière +\setlength{\tabcolsep}{20pt} +\begin{tabular}{ l l l } + Prof. Michel Kocher. & Prof Olivier Hüsser & Prof.\\ + Conseiller & Conseiller & Responsable de la filière \end{tabular} \newpage @@ -140,7 +176,7 @@ Lausanne, le \begin{center} \textbf{Résumé} \end{center} -Cet article a pour but la description et la mise en oeuvre d'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 microscopiques d'un frottis sanguin. +Ce papier présente une méthode automatique permettant l'établissement de la parasitémie d'un patient infecté par la malaria. Cette méthode se base sur une ou plusieurs images numériques microscopiques d'un frottis sanguin dont une coloration \emph{Giemsa} a été appliquée. Une implémentation est proposée sous la forme d'un logiciel graphique pouvant être facilement déployé sur n'importe quel ordinateur tournant sous Windows~7 ou une version supérieure. \vspace{5cm} @@ -148,7 +184,7 @@ Cet article a pour but la description et la mise en oeuvre d'une méthode automa \begin{center} \textbf{Mots-clefs} \end{center} -\og{}malaria\fg{}, \og{}paludisme\fg{}, \og{}parasitémie\fg{}, \og{}taux d'infection\fg{}, \og{}logiciel\fg{} +\og{}malaria\fg{}, \og{}paludisme\fg{}, \og{}parasitémie\fg{}, \og{}taux d'infection\fg{}, \og{}traitement d'images\fg{}, \og{}logiciel\fg{} \newpage @@ -168,113 +204,107 @@ Cet article a pour but la description et la mise en oeuvre d'une méthode automa % TODO: Future dans l'intro? -Le but 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. Cette méthode sera ensuite implémentée sous la forme d'un logiciel qui puisse être facilement utilisé par une personne avec un minimum de connaissance en informatique. +L'objectif de ce projet est d'établir une méthode complète et non-supervisée afin de dénombrer les érythrocytes et de les classer en deux catégories de cellules, à savoir les saines et les infectées. Celle-ci est ensuite implémentée sous la forme d'un logiciel qui puisse être facilement utilisé par une personne ayant peu de connaissances en informatique. La méthode développée est finalement comparée à deux autres : \emph{Ma et al.}\cite{ma2010} et \emph{C. Di Ruberto et al.}\cite{di-ruberto2001}. D'autres approches telles que \emph{Purwar et al.}\cite{purwar2011} et \emph{Shoelson}\cite{shoelson2015} sont également discutées à la section~\ref{discussions}. -Cette réalisation est faite en partenariat avec le Dr. Guy Prod'hom de l'institut de microbiologie du \emph{CHUV} à Lausanne. % Ajouter du blabla +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é. -% Problème du comptage manuel - -% \subsection{Images sources} - -% Mentionner certains problèmes comme les débris ou les plaquettes - -Les images à disposition correspondent à des photographies de sang infecté agrandies 50 fois. 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 globules rouges (figure~\ref{fig:medical-globules-rouges}), les globules blancs (figure~\ref{fig:medical-globules-blancs}), les plaquettes (figure~\ref{fig:medical-plaquettes}) et les différentes formes du parasite (figure~\ref{fig:medical-plasmodium}). +Les images à disposition correspondent à des photographies de sang infecté agrandies 50 fois. Chaque image comprend entre 500 et 700 érythrocytes. Une \emph{coloration de May-Grünwald Giemsa} est utilisée afin de faire ressortir les parasites avec une teinte particulière. Les éléments principaux composant les images sont : les érythrocytes (figure~\ref{fig:medical-globules-rouges}), les leucocytes (figure~\ref{fig:medical-globules-blancs}), les thrombocytes (figure~\ref{fig:medical-plaquettes}) et les différents stades de \emph{Plasmodium} (figure~\ref{fig:medical-plasmodium}). \begin{figure}[htbp] \centering \begin{subfigure}[t]{0.3\textwidth} \includegraphics[width=\linewidth]{figures/medical_globules_rouges.jpg} - \caption{Globules rouges (\emph{érythrocyte})} + \caption{Érythrocyte (globule rouge).} \label{fig:medical-globules-rouges} \end{subfigure} ~ \begin{subfigure}[t]{0.3\textwidth} \includegraphics[width=\linewidth]{figures/medical_globules_blancs.jpg} - \caption{Globules blancs (\emph{leucocyte})} + \caption{Leucocyte (globule blanc).} \label{fig:medical-globules-blancs} \end{subfigure} ~ \begin{subfigure}[t]{0.3\textwidth} \includegraphics[width=\linewidth]{figures/medical_plaquettes.jpg} - \caption{Plaquette (\emph{thrombocyte})} + \caption{Thrombocyte (plaquette).} \label{fig:medical-plaquettes} \end{subfigure} - \caption{Les éléments principaux composant le sang} + \caption{Les éléments principaux composant le sang.} \label{fig:medical-elements-sang} \end{figure} -Dans le cycle de vie du parasite \emph{Plasmodium}, responsable de la malaria, celui-ci passe par une étape d'alimentation active (trophozoïte) où il va se loger à l'intérieur des globules rouges. Puis il va subir la schizogonie (reproduction asexuée) et va se développer en schizonte. Ces étapes sont montrées par la figure~\ref{fig:medical-plasmodium}. +Dans le cycle de vie du parasite \emph{Plasmodium}, responsable de la malaria, celui-ci passe par une étape d'alimentation active (trophozoïte) où il va se loger à l'intérieur des érythrocytes. Puis il va subir la schizogonie (reproduction asexuée) et va se développer en schizonte. Ces étapes sont montrées par la figure~\ref{fig:medical-plasmodium}. \begin{figure}[htbp] \centering \begin{subfigure}[t]{0.2\textwidth} \includegraphics[width=\linewidth]{figures/medical_plasmodium_1.jpg} - \caption{Trophozoïte immature (anneau)} + \caption{Trophozoïte immature (anneau).} \label{fig:medical-plasmodium_1} \end{subfigure} ~ \begin{subfigure}[t]{0.2\textwidth} \includegraphics[width=\linewidth]{figures/medical_plasmodium_2.jpg} - \caption{Maturation du trophozoïte} + \caption{Maturation du trophozoïte.} \label{fig:medical-plasmodium_2} \end{subfigure} ~ \begin{subfigure}[t]{0.2\textwidth} \includegraphics[width=\linewidth]{figures/medical_plasmodium_3.jpg} - \caption{Trophozoïte mature} + \caption{Trophozoïte mature.} \label{fig:medical-plasmodium_3} \end{subfigure} ~ \begin{subfigure}[t]{0.2\textwidth} \includegraphics[width=\linewidth]{figures/medical_plasmodium_4.jpg} - \caption{Schizonte} + \caption{Schizonte.} \label{fig:medical-plasmodium_4} \end{subfigure} - \caption{Les différents stades de l'infection d'un globule rouge} + \caption{Les différents stades de l'infection d'un érythrocyte.} \label{fig:medical-plasmodium} \end{figure} %\subsection{Parasitémie de la malaria} -L'objectif est de dénombrer les globules rouges 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. +L'objectif est de dénombrer les érythrocytes sains ainsi que ceux infectés par des trophozoïtes immatures en début de croissance, comme montré par la figure~\ref{fig:medical-plasmodium_1}. Ce stade est appelé \emph{ring stage} car les parasites ont une forme d'anneau. Cet anneau, montré en détail par la figure~\ref{fig:noyau-cytoplasme}, comprend un noyau ainsi qu'un cytoplasme l'entourant. -La parasitémie est établit en pourcentage comme étant le rapport entre nombre d'érythrocytes infecté et le nombre total d'érythrocyte. Le group d'experts \emph{UK NEQAS} (\emph{United Kingdom National External Quality Assessment Service}) recommande de considéré un minimum de 1000 erythrocytes. 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~\%. +La parasitémie est établie en pourcentage comme étant le rapport entre nombre d'érythrocytes infectés et le nombre total d'érythrocytes. Le groupe d'experts \emph{UK NEQAS} (\emph{United Kingdom National External Quality Assessment Service}) recommande de considérer un minimum de 1000 érythrocytes. Le \emph{CDC} (\emph{Centers for Disease Control and Prevention}) recommande quant à lui au moins 500 érythrocytes si la parasitémie est supérieure à 10~\% et au moins 2000 érythrocytes si la parasitémie est inférieure à 0.1~\%. \begin{figure}[htbp] \centering \includegraphics[width=0.5\linewidth]{figures/RBC_noyau_cytoplasme.pdf} - \caption{Détail des deux parties constituantes d'un trophozoïte immature} + \caption{Détail des deux parties constituantes d'un trophozoïte immature.} \label{fig:noyau-cytoplasme} \end{figure} -Certains artefacts comme des débris ou des plaquettes peuvent venir se superposer aux érythrocyte et être confondus avec des parasites. Ces cas peuvent être relativement fréquents et altérer significativement la parasitémie si comptés comme étant des cas positifs d'infection. La figure~\ref{fig:RBC-artefact} montre quelques exemple de faux positifs potentiels. +Certains artefacts comme des débris ou des plaquettes peuvent venir se superposer aux érythrocytes et être confondus avec des parasites. Ces cas peuvent être relativement fréquents et altérer significativement la parasitémie s'ils sont comptés comme étant des cas positifs d'infection. La figure~\ref{fig:RBC-artefact} montre quelques exemples de faux positifs potentiels. \begin{figure}[htbp] \centering \begin{subfigure}[t]{0.2\textwidth} \includegraphics[width=\linewidth]{figures/RBC-plaquette.jpg} - \caption{Thrombocyte} +% \caption{Thrombocyte.} \label{fig:RBC-artefact-plaquette} \end{subfigure} ~ \begin{subfigure}[t]{0.2\textwidth} \includegraphics[width=\linewidth]{figures/RBC-debris-1.jpg} - \caption{Débris} +% \caption{Débris.} \label{fig:RBC-artefact-debris-1} \end{subfigure} ~ \begin{subfigure}[t]{0.2\textwidth} \includegraphics[width=\linewidth]{figures/RBC-debris-2.jpg} - \caption{Débris} +% \caption{Débris.} \label{fig:RBC-artefact-debris-2} \end{subfigure} ~ \begin{subfigure}[t]{0.2\textwidth} \includegraphics[width=\linewidth]{figures/RBC-debris-3.jpg} - \caption{Débris} +% \caption{Débris.} \label{fig:RBC-artefact-debris-3} \end{subfigure} - \caption{Artefacts se supperposant à des érytrocytes} + \caption{Exemple d'artefacts se superposant à des érythrocytes.} \label{fig:RBC-artefact} \end{figure} @@ -282,7 +312,7 @@ Certains artefacts comme des débris ou des plaquettes peuvent venir se superpos \section{Aperçu du processus} -La figure~\ref{fig:processusComplet} montre le processus complet du traitement d'une image de frottis sanguin. Celui ci peut-être divisé en trois groupe de traitement à savoir la ségmentation des érytrocytes, la ségmentation des parasites et finalement la classification des cellules. +La figure~\ref{fig:processusComplet} montre le processus complet du traitement d'une image de frottis sanguin. Celui-ci peut-être divisé en trois groupes de traitement : la segmentation des érythrocytes, la segmentation des parasites et finalement la classification des cellules. \begin{figure}[htbp] \centering @@ -291,34 +321,65 @@ 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. Pour ce faire une estimation du rayon moyen est réalisée par granulométrie à l'aide d'une succession de fermeture 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 auquel un score est attribué. Finalement les ellipses sont élaguée en supprimant celles chevauchées par d'autres ellipses sont 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 sombre 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é 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. +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}). -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 établit en calculant le rapport entre la population d'érythrocytes infecté et celle saine. +Le troisième groupe correspond à la mise en commun des informations du premier et du deuxième groupe afin de définir les érythrocytes et de les classer. La parasitémie est alors établie en calculant le rapport entre la population d'érythrocytes infectés et la population saine. + +\begin{figure}[htbp] + \centering + \begin{subfigure}[t]{0.4\textwidth} + \includegraphics[width=\linewidth]{figures/image-source-RGB.jpg} + \caption{Image originale.} + \label{fig:image-source-RGB} + \end{subfigure} + ~ + \begin{subfigure}[t]{0.4\textwidth} + \includegraphics[width=\linewidth]{figures/image-source-red.jpg} + \caption{Composante rouge, les parasites sont bien contrastés.} + \label{fig:image-source-red} + \end{subfigure} + ~ + \begin{subfigure}[t]{0.4\textwidth} + \includegraphics[width=\linewidth]{figures/image-source-green.jpg} + \caption{Composante verte, les érythrocytes sont bien contrastés.} + \label{fig:image-source-green} + \end{subfigure} + ~ + \begin{subfigure}[t]{0.4\textwidth} + \includegraphics[width=\linewidth]{figures/image-source-blue.jpg} + \caption{Composante bleue.} + \label{fig:image-source-blue} + \end{subfigure} + ~ + \caption{Les différentes composantes de l'image.} + \label{fig:image-source} +\end{figure} \section{Détail de la méthode} -% filtrage préliminaire (taille d'un érythrocyte: 7.5 \micro~m) +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. + +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. -Les filtres gaussiens appliquées 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 pour la segmentation des érythrocytes respectivement la segmentation des parasites. +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. -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 fermetures (par aire ou morphologiques) faites pendant la granulométrie s'appliqueraient qu'à une partie de la cellule. De plus, cette particularité gêne également lors de la recherche des bords. +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. -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. \subsection{Identification des érythrocytes} \label{identification-erythrocytes} -Le but de cette étape est d'identifier les érythrocytes. Le profil de ceux-ci est un disque biconcave et apparait de manière plus ou moins déformée sur les photographies. Ces déformations les font prendre une forme plus ou moins elliptique dont le rapport entre le grand axe et le petit axe n'excède pas 1.6 ($\pm 23~\%$ d'un rayon moyen). +Le but de cette étape est d'identifier les érythrocytes. Le profil de ceux-ci est un disque biconcave et apparait de manière plus ou moins déformée sur les photographies, comme on peut le voir à la figure~\ref{fig:image-source-RGB}. Ces déformations leur font prendre une forme plus ou moins elliptique dont le rapport entre le grand axe et le petit axe n'excède pas 1.6 ($\pm 23~\%$ d'un rayon moyen). Le résultat de cette recherche sera une liste d'ellipses pouvant se recouvrir partiellement. Les ellipses sont décrites par les paramètres montrés par la figure~\ref{fig:ellipse-parametres}. \begin{figure}[htbp] \centering \includegraphics[width=0.5\linewidth]{figures/ellipse-parametres.pdf} - \caption{Paramètre d'une ellipse, $\alpha \in [0, \pi[$ est l'angle d'inclinaison du grand axe $a$, $a \geqslant b$ > 0} + \caption{Paramètre d'une ellipse, $\alpha \in [0, \pi[$ est l'angle d'inclinaison du grand axe $a$, $a \geqslant b$ > 0.} \label{fig:ellipse-parametres} \end{figure} @@ -326,41 +387,48 @@ Le résultat de cette recherche sera une liste d'ellipses pouvant se recouvrir p \subsubsection{Granulométrie} \label{granulometrie} -L'objectif est de déterminer le rayon moyen des érythrocytes. Pour ce faire nous allons appliquer une série de fermetures par aire et calculer les différences des sommes des intensités de chaque pixel. Chaque aire est calculée comme étant celui 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érieure et supérieure correspondent au rayon estimé minoré de 50~\% respectivement au rayon estimé majoré de 50~\%. +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~\%. -La fermeture suppose ici que les érythrocytes on un niveau d'intensité plus bas que le fond, ce qui est le cas pour la composante verte dans toutes les images étudiées. +L'ouverture nécessite ici que les érythrocytes aient un niveau d'intensité plus élevé que le fond. Pour que cela soit le cas, nous travaillons sur le négatif de la composante verte. L'intensité des érythrocytes est toujours plus faible que celle du fond, et cela pour toutes les images qui ont été étudiées. -Deux autres approches on également été essayées, à savoir la fermeture 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 granulometrie par aire (le cercle et l'ellipse ont la même aire) et à droite le résultat d'une granulometrie 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$. +Deux autres approches ont également été essayées : l'ouverture morphologique par un élément structurant en forme de disque et par un élément structurant de forme octogonale. Un des problèmes de ces deux approches est qu'elles ont tendance à sous-estimer légèrement le rayon moyen dans le cas d'éléments elliptiques. La figure~\ref{fig:granulometrie-ellipse-cercle-closing-comparaison} montre à gauche le résultat d'une granulométrie par aire (le cercle et l'ellipse ont la même aire) et à droite le résultat d'une granulométrie morphologique. Le rayon $r$ est plus proche de la moyenne entre les deux rayons de l'ellipse $a$ et $b$ que le rayon $r'$. Il est à noter que dans cet exemple $a = 2b$ et que donc $r = \sqrt{2}b = 1.41b$ ce qui n'est pas très éloigné de la moyenne $(a+b)/2 = (2+1)/2 = 1.5$. \begin{figure}[htbp] \centering \begin{subfigure}[t]{0.4\textwidth} \includegraphics[width=\linewidth]{figures/granulometrie-ellipse-cercle-closing-area.pdf} - \caption{Cercle dont la surface est égale à celle de l'ellipse} + \caption{Cercle dont la surface est égale à celle de l'ellipse.} \label{fig:granulometrie-ellipse-cercle-closing-area} \end{subfigure} ~ \begin{subfigure}[t]{0.4\textwidth} \includegraphics[width=\linewidth]{figures/granulometrie-ellipse-cercle-closing-morpho.pdf} - \caption{Cercle dont \emph{r} est égale au petit rayon \emph{a} de l'ellipse} + \caption{Cercle dont \emph{r} est égal au petit rayon \emph{a} de l'ellipse.} \label{fig:granulometrie-ellipse-cercle-closing-morpho} \end{subfigure} - \caption{Comparaison du rayon d'un cercle trouvé par fermeture par aire d'une ellipse (à gauche) et celui trouvé par une fermeture morphologique (à droite)} + \caption{Comparaison du rayon d'un cercle trouvé par une ouverture par aire d'une ellipse (à gauche) avec celui trouvé par une ouverture morphologique (à droite).} \label{fig:granulometrie-ellipse-cercle-closing-comparaison} \end{figure} -Un autre problème de la granulométrie à l'aide de fermetures morphologique utilisant un disque comme élément structurant est sa complexité algorithmique quadratique en fonction du rayon du disque comme le montre la figure~\ref{fig:spectre-granulométrique-morpho-cercle}. La figure~\ref{fig:spectre-granulométrique-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, dont la dilaté ou l'érodé par un autre octogone crée un nouvel octogone. L'associativité de l'erosion ou de la dilatation, montré par l'équation~\ref{eq:dilatation-associatif}, permet la décomposition d'une dilatation ($e_{1} \oplus e_{2}$) 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. - -% TODO: Définition de la somme de Minkowski? +Un autre problème de la granulométrie à l'aide d'ouvertures morphologiques utilisant un disque comme élément structurant est sa complexité algorithmique quadratique en fonction du rayon du disque. La figure~\ref{fig:temps-morpho-cercle} montre un exemple de progression du temps de calcul en fonction du rayon. Une solution à ce problème est l'utilisation d'une approximation du cercle, l'octogone, qui peut être décomposé en quatre sous-éléments. L'associativité de l'érosion ou de la dilatation, montrée par l'équation~\ref{eq:dilatation-associatif}, permet la décomposition d'une dilatation ($e_{1} \oplus e_{2}$ où l'opérateur $\oplus$ est l'addition de Minkowski) en plusieurs dilatations successives ($\oplus~e_{1}$ puis $\oplus~e_{2}$). Cela permet de réduire la complexité algorithmique et ainsi de gagner du temps. {\setlength{\abovedisplayskip}{0pt} \begin{flalign} \label{eq:dilatation-associatif} f' = f \oplus (e_{1} \oplus e_{2}) = (f \oplus e_{1}) \oplus e_{2} & \end{flalign} -L'implémentation 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. +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°. -Concernant les mesures du temps de calcul avec des images réelles, l'on constate que la fermeture par aire est beaucoup plus rapide : 8.4~s (figure~\ref{fig:temps-aire}) que la fermeture morphologique : 54~s (figures~\ref{fig:spectre-granulométrique-morpho-cercle} et~\ref{fig:spectre-granulométrique-morpho-octogone}). La première fermeture par aire, pour le premier rayon, prend un peu moins de 5~s puis les suivantes environ 100~ms. Cela s'explique par la recherche initiale des minima puis par l'agrandissement ceux-ci jusqu'à l'aire correspondant au premier rayon. Le détail de cet algorithme se trouve à la section~\ref{} % TODO: référence. +{\setlength{\abovedisplayskip}{0pt} +\begin{flalign*} + \includegraphics{figures/morpho/ligne-horizontale.pdf} \oplus \includegraphics{figures/morpho/ligne-diagonal-1.pdf} &= \includegraphics{figures/morpho/losange.pdf} \\ + \includegraphics{figures/morpho/losange.pdf} \oplus \includegraphics{figures/morpho/ligne-diagonal-2.pdf} &= \includegraphics{figures/morpho/hexagone.pdf} \\ + \includegraphics{figures/morpho/hexagone.pdf} \oplus \includegraphics{figures/morpho/ligne-verticale.pdf} &= \includegraphics{figures/morpho/octagon.pdf} +\end{flalign*} + +La bibliothèque de traitement d'images utilisée ici, \emph{OpenCV}, ne réalise pas, à priori, cette optimisation lorsque l'élément structurant peut être décomposé. De ce fait, le temps de calcul, montré par la figure~\ref{fig:spectre-granulométrique-morpho-octogone}, ne se différencie pas de l'utilisation d'un disque. De plus, l'octogone produit un spectre granulométrique (figure~\ref{fig:spectre-granulométrique-morpho-octogone}) moins harmonieux que pour les deux autres granulométries. + +Concernant les mesures du temps de calcul avec des images réelles, l'on constate que l'ouverture par aire est beaucoup plus rapide (8.4~s, figure~\ref{fig:temps-aire}) que l'ouverture morphologique (54~s, figures~\ref{fig:spectre-granulométrique-morpho-cercle} et~\ref{fig:spectre-granulométrique-morpho-octogone}). La première ouverture par aire, pour le premier rayon, prend un peu moins de 5~s, puis environ 100~ms pour les suivantes. Cela s'explique par la recherche initiale des minima puis par l'agrandissement de ceux-ci jusqu'à l'aire correspondant au premier rayon. Le détail de cet algorithme se trouve à la section~\ref{algo-ouverture-aire}. Il faut remarquer que le spectre granulométrique par aire comporte un deuxième sommet au rayon 44 qui correspond à certains amas de cellules. Il est nécessaire d'éviter de traiter des images comprenant trop de cellules se touchant. En pratique, ce cas ne survient pas car l'image est alors trop peu lisible pour être exploitée. @@ -368,16 +436,16 @@ Il faut remarquer que le spectre granulométrique par aire comporte un deuxième \centering \begin{subfigure}[t]{0.48\textwidth} \includegraphics[width=1\linewidth]{figures/Granulometry-pattern-spectrum-area.pdf} - \caption{Spectre granulométrique d'une succession de fermetures par aire} + \caption{Spectre granulométrique d'une succession d'ouvertures par aire.} \label{fig:spectre-granulométrique-aire} \end{subfigure} ~ \begin{subfigure}[t]{0.48\textwidth} \includegraphics[width=1\linewidth]{figures/Granulometry-time-area.pdf} - \caption{Temps en milliseconde pour chaque fermeture. Temps total : 8.4~s} + \caption{Temps en milliseconde pour chaque ouverture. Temps total : 8.4~s.} \label{fig:temps-aire} \end{subfigure} - \caption{Spectre granulométrique et temps en milliseconde pour chacune des fermetures par aire. Réalisé sur une image 2592 \texttimes 1944 contenant environ 700 érythrocytes} + \caption{Spectre granulométrique et temps en milliseconde pour chacune des ouvertures par aire. L'image utilisée est montrée à la figure~\ref{fig:exemple-granulometrie}.} \label{fig:Granulometry-area} \end{figure} @@ -385,16 +453,16 @@ Il faut remarquer que le spectre granulométrique par aire comporte un deuxième \centering \begin{subfigure}[t]{0.48\textwidth} \includegraphics[width=1\linewidth]{figures/Granulometry-pattern-spectrum-morpho-circle.pdf} - \caption{Spectre granulométrique d'une succession de fermetures morphologiques avec un disque} + \caption{Spectre granulométrique d'une succession d'ouvertures morphologiques avec un disque.} \label{fig:spectre-granulométrique-morpho-cercle} \end{subfigure} ~ \begin{subfigure}[t]{0.48\textwidth} \includegraphics[width=1\linewidth]{figures/Granulometry-time-morpho-circle.pdf} - \caption{Temps en milliseconde pour chaque fermeture. Temps total : 54~s} + \caption{Temps en milliseconde pour chaque ouverture. Temps total : 54~s.} \label{fig:temps-morpho-cercle} \end{subfigure} - \caption{Spectre granulométrique et temps en milliseconde pour chacune des fermetures morphologique avec un disque comme élément structurant. Réalisé sur une image 2592 \texttimes 1944 contenant environ 700 érythrocytes} + \caption{Spectre granulométrique et temps en milliseconde pour chacune des ouvertures morphologiques avec un disque comme élément structurant. L'image utilisée est montrée à la figure~\ref{fig:exemple-granulometrie}.} \label{fig:Granulometry-morpho-circle} \end{figure} @@ -402,19 +470,26 @@ Il faut remarquer que le spectre granulométrique par aire comporte un deuxième \centering \begin{subfigure}[t]{0.48\textwidth} \includegraphics[width=1\linewidth]{figures/Granulometry-pattern-spectrum-morpho-octagon.pdf} - \caption{Spectre granulométrique d'une succession de fermetures morphologiques avec un octogone} + \caption{Spectre granulométrique d'une succession d'ouvertures morphologiques avec un octogone.} \label{fig:spectre-granulométrique-morpho-octogone} \end{subfigure} ~ \begin{subfigure}[t]{0.48\textwidth} \includegraphics[width=1\linewidth]{figures/Granulometry-time-morpho-octagon.pdf} - \caption{Temps en milliseconde pour chaque fermeture. Temps total : 54~s} + \caption{Temps en milliseconde pour chaque ouverture. Temps total : 54~s.} \label{fig:temps-morpho-octogone} \end{subfigure} - \caption{Spectre granulométrique et temps en milliseconde pour chacune des fermetures morphologique avec un octogone comme élément structurant. Réalisé sur une image 2592 \texttimes 1944 contenant environ 700 érythrocytes} + \caption{Spectre granulométrique et temps en milliseconde pour chacune des ouvertures morphologiques avec un octogone comme élément structurant. L'image utilisée est montrée à la figure~\ref{fig:exemple-granulometrie}.} \label{fig:Granulometry-morpho-octagon} \end{figure} +\begin{figure}[htbp] + \centering + \includegraphics[width=0.8\linewidth]{figures/exemple-granulometrie.jpg} + \caption{Image de résolution 2592~\texttimes~1944 contenant environ 700 érythrocytes, qui a été utilisée pour le calcul de la granulométrie montré aux figures \ref{fig:Granulometry-area}, \ref{fig:Granulometry-morpho-circle} et \ref{fig:Granulometry-morpho-octagon}.} + \label{fig:exemple-granulometrie} +\end{figure} + À partir du rayon moyen trouvé par granulométrie et des caracté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)$. @@ -422,21 +497,21 @@ Il faut remarquer que le spectre granulométrique par aire comporte un deuxième 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éfinit comme étant deux composantes $g_x$ et $g_y$ en chaque point correspondant aux dérivés partielles en $x$ et en $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és partielles par rapport à $x$ et par rapport à $y$ d'une image $f$ comme montré par l'équation~\ref{eq:composantes-gradient}. {\setlength{\abovedisplayskip}{0pt} \begin{flalign} \label{eq:composantes-gradient} \nabla f = \begin{pmatrix}g_x \\ g_y \end{pmatrix} = \begin{pmatrix}\partial f / \partial x \\ \partial f / \partial y \end{pmatrix} \end{flalign} -Le filtre de Sobel permet d'obtenir une bonne approximation de ces deux composantes en appliquant deux convolutions avec les deux noyaux montrés à l'équation~\ref{eq:sobel-noyaux}. Une application sur une image réelle est montrée par la figure~\ref{fig:gradient}. +Le filtre de Sobel permet d'obtenir une bonne approximation de ces deux composantes en appliquant deux convolutions avec les deux noyaux montrés à l'équation~\ref{eq:sobel-noyaux}. Une application sur une image réelle est montrée à la figure~\ref{fig:gradient}. {\setlength{\abovedisplayskip}{0pt} \begin{flalign} \label{eq:sobel-noyaux} K_x = \begin{pmatrix}-1 & 0 & 1 \\ -2 & 0 & 2 \\ -1 & 0 & 1 \end{pmatrix}, \quad K_y = K_x^\top = \begin{pmatrix}-1 & -2 & -1 \\ 0 & 0 & 0 \\ 1 & 2 & 1 \end{pmatrix} \end{flalign} -La norme euclidienne en chaque point est obtenu par l'équation~\ref{eq:gradient-norme}. La méthode de Otsu est ensuite appliquée afin de calculer un seuil qui sera utilisé pour la définition des bords par hystérèse. +La norme euclidienne en chaque point est obtenue par l'équation~\ref{eq:gradient-norme}. La méthode de Otsu est ensuite appliquée afin de calculer un seuil qui sera utilisé pour la définition des bords par hystérèse. {\setlength{\abovedisplayskip}{0pt} \begin{flalign} \label{eq:gradient-norme} @@ -452,42 +527,42 @@ La norme euclidienne en chaque point est obtenu par l'équation~\ref{eq:gradient \begin{subfigure}[t]{0.4\textwidth} \includegraphics[width=1\linewidth,interpolate=false]{figures/gradient-exemple.pdf} \end{subfigure} - \caption{Une cellule dont le gradient de la partie jaune est montré à droite sous la forme d'un champ de vecteurs. Les bords sont également représentés} + \caption{Une cellule dont le gradient de la partie jaune est montré à droite sous la forme d'un champ de vecteurs. Les bords sont également représentés.} \label{fig:gradient} \end{figure} -Afin de ne garder que les crêtes, un algorithme de suppression des non-maxima est appliqué. Celui ci est illustré par le 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 coté de l'arête, une interpolation est calculée entre les deux éléments les plus proche 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 $\tau = n_1 \cdot (1 - v_x/v_y) + n_2 \cdot v_x/v_y$ et celle des voisins du bas comme étant $\upsilon = 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 $\tau$ et $\upsilon$ alors celui-ci sera définit comme étant un maxima. La figure~\ref{fig:nms} montre la valeur de la norme ainsi que les maximas mis en évidence. +Afin de ne garder que les crêtes, un algorithme de suppression des non-maxima est appliqué. Celui-ci est illustré par la figure~\ref{fig:non-maximum-suppression-schema} et va, pour chaque élément de la norme, le comparer à ses voisins en définissant l'orientation de l'arête du bord comme étant la droite perpendiculaire au gradient. Pour chaque côté de l'arête, une interpolation est calculée entre les deux éléments les plus proches de la droite ayant la même direction que la valeur du gradient de l'élément traité et passant par celui-ci. Par exemple, par rapport à la figure~\ref{fig:non-maximum-suppression-schema}, la valeur des voisins du haut est calculée comme étant $\psi = n_1 \cdot (1 - v_x/v_y) + n_2 \cdot v_x/v_y$ et celle des voisins du bas comme étant $\omega = n_4 \cdot (1 - v_x/v_y) + n_3 \cdot v_x/v_y$ où $v_x$ et $v_y$ sont les composantes du gradient au point traité $e$. Si la norme de $e$ est strictement plus grande que les valeurs $\psi$ et $\omega$, alors celui-ci sera défini comme étant un maximum. La figure~\ref{fig:nms} montre la valeur de la norme ainsi que les maxima mis en évidence. \begin{figure}[htbp] \centering \begin{subfigure}[t]{0.35\textwidth} \includegraphics[width=1\linewidth,interpolate=false]{figures/non-maximum-suppression-schema.pdf} - \caption{Les voisins ($n_1$, $n_2$, $n_3$, $n_4$) de $e$ qui vont être utilisés pour déterminer si $e$ est un maxima} + \caption{Les voisins ($n_1$, $n_2$, $n_3$, $n_4$) de $e$ qui vont être utilisés pour déterminer si $e$ est un maximum.} \label{fig:non-maximum-suppression-schema} \end{subfigure} ~ \begin{subfigure}[t]{0.35\textwidth} \includegraphics[width=1\linewidth,interpolate=false]{figures/nms.png} - \caption{Le résultat de l'application de la suppression des non-maxima. Les maximas sont mis en évidence en blanc et la norme du gradient est montrée avec des niveaux d'intensité de gris} + \caption{Le résultat de l'application de la suppression des non-maxima. Les maxima sont mis en évidence en blanc et la norme du gradient est montrée avec des niveaux d'intensité de gris.} \label{fig:nms} \end{subfigure} - \caption{Suppression des non-maxima} + \caption{Suppression des non-maxima.} \label{fig:non-maximum-suppression} \end{figure} -Le résultat obtenu par l'étape précédente, la suppression des non-maxima, va prendre en compte tous les bords et ceci indépendamment de la norme du gradient (inclinaison de la pente). Il est nécessaire maintenant de ne retenir que les bords les plus pertinents, pour ce faire une recherche par hystérèse est appliquée en ne gardant, dans un premier temps, que les éléments dont la norme est supérieure au seuil obtenu précédemment par la méthode de Otsu majoré d'un pourcentage (par exemple 10~\%). Puis, dans un second temps, nous y ajoutons récursivement tous les éléments 8-connexes dont la norme est supérieure au seuil. +Le résultat obtenu par l'étape précédente, la suppression des non-maxima, va prendre en compte tous les bords et ceci indépendamment de la norme du gradient (inclinaison de la pente). Il est nécessaire maintenant de ne retenir que les bords les plus pertinents. Pour ce faire une recherche par hystérèse est appliquée en ne gardant, dans un premier temps, que les éléments dont la norme est supérieure au seuil obtenu précédemment par la méthode de Otsu majoré d'un pourcentage (par exemple 10~\%). Puis, dans un second temps, nous y ajoutons récursivement tous les éléments 8-connexes dont la norme est supérieure au seuil. Finalement, les zones 8-connexes dont la surface est supérieure à un facteur du rayon moyen sont supprimées afin d'éliminer les bords de faible longueur qui ne correspondent, en général, pas aux bords des érythrocytes. +Le résultat de cette étape est la matrice de vecteurs définissant le gradient dont les éléments ne faisant pas partie du bord sont mis à zéro (vecteur nul). + %\subsubsection{Recherche des bords des érythrocytes} \subsubsection{Construction d'ellipses} -L'étape précédente nous fournit une matrice de vecteurs définissant le gradient. Les éléments dont le vecteur est non-nul constituent les bords des érythrocytes. - -Une méthode proche de la méthode RANSAC~\ref{} (\emph{RANdom SAmple Consensus}) est appliquée qui 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 trouve 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 proche 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 coté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 tirage de triplet de points valides parmi les vecteurs non-nuls est effectué, ce nombre est égal à un coefficient multipliant le nombre courant d'élément 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 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. \begin{figure}[htbp] \centering @@ -498,45 +573,45 @@ La taille de la fenêtre glissante est un carré dont la longueur des cotés cor \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 triplet avec lesquels il est possible de construire une ellipse. La résultat de la recherche d'ellipse 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ée 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 tirage dans le cas ou les 6~\% de triplets valides sont difficiles voir impossibles à atteindre. Cette limite est fixé à 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 ou 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 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. $m_1$ et $m_2$ sont les droites, tangentes à l'ellipse, perpendiculaires à $v_1$ respectivement $v_2$ et passant par les points associés.} \label{fig:construction-ellipse} \end{figure} -À partir de chaque triplet de point 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é 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. +À partir de chaque triplet de points et des deux vecteurs du gradient des deux premiers points, une ellipse va tenter d'être construite (comme montrer par la figure~\ref{fig:construction-ellipse}). Tout d'abord il faut s'assurer que les deux vecteurs $v_1$ et $v_2$ pointent bien dans le bon sens, c'est-à-dire vers le centre de l'ellipse. Pour cela il faut vérifier que les sens de rotation de $p_1$ et $p_2$ donnés par $v_1$ et $v_2$ par rapport au pivot $p_0$ soient différents et que l'angle formé entre les deux droites $d_1$ et $d_2$ soit strictement inférieur à $\pi$. La figure~\ref{fig:construction-ellipse-vecteurs-valides} illustre ces différents cas. \begin{figure}[htbp] \centering \begin{subfigure}[t]{0.3\textwidth} \includegraphics[width=1\linewidth]{figures/ellipses/construction-ellipse-vecteurs-valides-3.pdf} - \caption{Triplet invalide : sens contraire des vecteurs par rapport à $p_0$} + \caption{Triplet invalide : sens contraire des vecteurs par rapport à $p_0$.} \label{fig:construction-ellipse-vecteurs-valides-3} \end{subfigure} ~ \begin{subfigure}[t]{0.3\textwidth} \includegraphics[width=1\linewidth]{figures/ellipses/construction-ellipse-vecteurs-valides-2.pdf} - \caption{Triplet invalide : $\alpha \geqslant \pi$} + \caption{Triplet invalide : $\alpha \geqslant \pi$.} \label{fig:construction-ellipse-vecteurs-valides-2} \end{subfigure} ~ \begin{subfigure}[t]{0.3\textwidth} \includegraphics[width=1\linewidth]{figures/ellipses/construction-ellipse-vecteurs-valides-1.pdf} - \caption{Triplet valide : $\alpha < \pi$} + \caption{Triplet valide : $\alpha < \pi$.} \label{fig:construction-ellipse-vecteurs-valides-1} \end{subfigure} - \caption{Cas des triplet} + \caption{Cas de triplets valides et invalides.} \label{fig:construction-ellipse-vecteurs-valides} \end{figure} -Tout d'abord le point $p_0$ est calculé comme montré par les équations~\ref{eq:p0-debut} à~\ref{eq:p0-fin}. Si $m_1 = m_2$, alors $p_0$ est définit 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é à 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$, 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} @@ -551,7 +626,7 @@ Tout d'abord le point $p_0$ est calculé comme montré par les équations~\ref{e 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 si après. Dans le repère projectif $\{\upsilon_0, \upsilon_1, \upsilon_2, \upsilon_3\}$ lié à la conique où $\upsilon_0 = \begin{pmatrix}1 & p_{0_x} & p_{0_y}\end{pmatrix}, \; \upsilon_1 = \begin{pmatrix}1 & p_{1_x} & p_{1_y}\end{pmatrix}, \; \upsilon_2 = \begin{pmatrix}1 & p_{2_x} & p_{2_y}\end{pmatrix}, \; \upsilon_3 = \begin{pmatrix}1 & p_{3_x} & p_{3_y}\end{pmatrix}$. Si $p_0$ est à l'infini alors $\upsilon_0 = \begin{pmatrix}0 & * & *\end{pmatrix}$. L'équation de la conique est la suivante : +La construction d'une ellipse est décrite ci-après. Dans le repère projectif $\{\upsilon_0, \upsilon_1, \upsilon_2, \upsilon_3\}$ lié à la conique, $\upsilon_0 = \begin{pmatrix}1 & p_{0_x} & p_{0_y}\end{pmatrix}, \; \upsilon_1 = \begin{pmatrix}1 & p_{1_x} & p_{1_y}\end{pmatrix}, \; \upsilon_2 = \begin{pmatrix}1 & p_{2_x} & p_{2_y}\end{pmatrix}, \; \upsilon_3 = \begin{pmatrix}1 & p_{3_x} & p_{3_y}\end{pmatrix}$. Si $p_0$ est à l'infini alors $\upsilon_0 = \begin{pmatrix}0 & * & *\end{pmatrix}$. L'équation de la conique est la suivante : {\setlength{\abovedisplayskip}{0pt} \begin{flalign} @@ -577,14 +652,14 @@ Matrice de la conique dans le repère projectif de référence : \begin{pmatrix} A & B & D \\ B & C & E \\ D & E & F\end{pmatrix} &= P \cdot S^{-1} \cdot P^\top \end{flalign} -Le centre est définit comme suit : +Le centre est défini comme suit : {\setlength{\abovedisplayskip}{0pt} \begin{flalign} (\alpha, \; \beta) = (B/A, \; D/A) \end{flalign} -Les tailles des deux rayons son 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é comme suit : +Les tailles des deux rayons sont données par $1/\sqrt{\lambda}$ et $1/\sqrt{\mu}$ où $\lambda$ et $\mu$ sont les valeurs propres de la matrice $Q$. Les vecteurs propres de $Q$ donnent les directions des deux axes de l'ellipse. La matrice $Q$ est calculée comme suit : {\setlength{\abovedisplayskip}{0pt} \begin{flalign} @@ -596,74 +671,678 @@ Les tailles des deux rayons son données par $1/\sqrt{\lambda}$ et $1/\sqrt{\mu} \subsubsection{Calcul du score des ellipses} -% Détailler le calcul du nombre de pick (valid + max) +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)$. -\subsubsection{Élagage des ellipses} +{\setlength{\abovedisplayskip}{0pt} +\begin{flalign} + \label{eq:ellipse-score} + s(e) &= \sum_{\substack{e' \in E \\ e' \neq e }} \left( \frac{2 \; aire_{intersection}(e, e')}{aire(e) + aire(e')} \right)^n +\end{flalign} + +Où $E$ est l'ensemble des ellipses, $aire(e) = a \, b \, \pi$. La fonction $aire_{intersection}(e, e')$ donne la surface de l'intersection entre deux ellipses $e$ et $e'$. Ce calcul n'est pas trivial, une approximation numérique est donnée par \emph{Hughes et Mohcine}~\cite{hughes2011}. Chaque terme de l'addition est un nombre compris entre 0 et 1. L'exposant $n$ est un nombre plus grand ou égal à 1, plus celui ci est grand, moins les voisins é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}. + +\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é.} + \label{fig:ellipses-chevauchement} +\end{figure} -% suppression uniquement +\subsubsection{Élagage des ellipses} \begin{figure}[htbp] \centering - \begin{subfigure}[t]{0.4\textwidth} + \begin{subfigure}[t]{0.45\textwidth} \includegraphics[width=1\linewidth]{figures/ellipses/exemple-1-green-filtered.jpg} - \caption{Image initiale pour la recherche d'ellipses. Composante verte flouté dont le centre clair des érythrocytes a été ouvert} + \caption{Image initiale pour la recherche d'ellipses. Composante verte floutée dont le centre clair des érythrocytes a été ouvert.} \label{fig:exemple-ellipses-1} \end{subfigure} ~ - \begin{subfigure}[t]{0.4\textwidth} + \begin{subfigure}[t]{0.45\textwidth} \includegraphics[width=1\linewidth]{figures/ellipses/exemple-2-edges.png} - \caption{Bords des cellules : éléments pour lesquels le gradient est non-null} + \caption{Bords des cellules : éléments pour lesquels le gradient est non-nul.} \label{fig:exemple-ellipses-2} \end{subfigure} ~ - \begin{subfigure}[t]{0.4\textwidth} + \begin{subfigure}[t]{0.45\textwidth} \includegraphics[width=1\linewidth]{figures/ellipses/exemple-3-all-ellipses.jpg} - \caption{L'ensemble des ellipses accumulées dessiné sur l'image initiale} + \caption{L'ensemble des ellipses accumulées dessinées sur l'image initiale.} \label{fig:exemple-ellipses-3} \end{subfigure} ~ - \begin{subfigure}[t]{0.4\textwidth} + \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 certaines ellipses } + \caption{Le résultat final après élagage. Il est a 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é} + \caption{Aperçu du processus de recherche d'érythrocytes par ajustement d'ellipses. Le gradient n'est pas représenté.} \label{fig:exemple-ellipses} \end{figure} +L'ensemble des ellipses peut ressembler à ce qui est montré à la figure~\ref{fig:exemple-ellipses-3}. La dernière étape dans l'identification des érythrocytes consiste à ne garder que les ellipses qui ont un score pertinent. Un seuil est fixé en fonction du rayon moyen : $0.07 \; rayon_{moyen}$, toutes les ellipses ayant un score plus bas que ce nombre sont éliminées. Ce seuil dépend du rayon car le nombre d'ellipses construites pour une cellule donnée dépend de son périmètre qui, lui-même, dépend linéairement du rayon moyen. + +Les ellipses dont le centre est trop proche d'ellipses ayant un score plus élevé sont supprimées. Cette distance minimum est choisie comme étant un tiers du petit rayon de l'ellipse ayant le score le plus élevé. + +Les étapes de la recherche d'ellipses sont illustrées par la figure~\ref{fig:exemple-ellipses}. + + \subsection{Segmentation des parasites} +Cette étape va permettre d'identifier trois types d'éléments : les zones colorées sombres (figure~\ref{fig:exemple-dark-stain}), les noyaux des parasites et leur cytoplasme (incluant le noyau) comme montré à la figure~\ref{fig:noyau-cytoplasme}. Les zones colorées sombres correspondent aux leucocytes, thrombocytes, throphozoïtes, gametocytes, schizontes, etc. + + \subsubsection{Extraction des zones colorées sombres} +L'histogramme de l'image filtrée est calculé puis séparé en deux classes à l'aide de la méthode de Otsu. Les deux moyennes, $m_1$ et $m_2$, de ces deux classes correspondent au fond respectivement aux érythrocytes, pour autant que les éléments sombres ne soient pas sur-représentés. Sont considérés comme zones colorées sombres les éléments qui ont un niveau d'intensité plus faible que $s$, où $s = m_2 - \Delta$ et $\Delta = f \; (m_1 - m_2)$. Ceci est montré à la figure~\ref{fig:profile-zones-colorees-sombres}. $f$ est un facteur permettant de régler la sensibilité de détection des zones sombres et a été choisi comme valant 1. La figure~\ref{fig:exemple-dark-stain} montre un exemple de segmentation d'un leucocyte. + +Il est important, pour que les deux classes résultant de la méthode de Otsu correspondent bien aux érythrocytes et au fond, que les éléments sombres ne soient pas sur-représentés. Il a été observé que cela n'est jamais le cas dans les images $50\times$ ou $100\times$ étudiées. Par contre, si cette méthode est appliquée à une petite portion d'une image contenant beaucoup d'éléments sombres, par exemple des leucocytes, alors les zones sombres ne pourront pas être segmentées correctement. + + +\begin{figure}[htbp] + \centering + \includegraphics[width=0.45\linewidth]{figures/parasite/profile-zones-colorees-sombres.pdf} + \caption{Profil d'intensité du fond ($m_1$) et de l'avant-plan : érythrocytes ($m_2$) et éléments sombres ($m_2 - \Delta$).} + \label{fig:profile-zones-colorees-sombres} +\end{figure} + +\begin{figure}[htbp] + \centering + \begin{subfigure}[t]{0.3\textwidth} + \includegraphics[width=1\linewidth]{figures/parasite/exemple-dark-stain-0.jpg} + \caption{Image originale.} +% \label{} + \end{subfigure} + ~ + \begin{subfigure}[t]{0.3\textwidth} + \includegraphics[width=1\linewidth]{figures/parasite/exemple-dark-stain-1.jpg} + \caption{Composante rouge filtrée : filtre gaussien + ouverture par aire.} +% \label{} + \end{subfigure} + ~ + \begin{subfigure}[t]{0.3\textwidth} + \includegraphics[width=1\linewidth]{figures/parasite/exemple-dark-stain-2.png} + \caption{Segmentation des zones colorées sombres.} +% \label{} + \end{subfigure} + \caption{Exemple de la segmentation d'une zone colorée sombre, ici un leucocyte.} + \label{fig:exemple-dark-stain} +\end{figure} + + \subsubsection{Segmentation des cytoplasmes} +Le cytoplasme est le contenu du parasite entourant le noyau, qui se trouve à l'intérieur de sa membrane. La figure~\ref{fig:noyau-cytoplasme} montre ces éléments. La segmentation du cytoplasme va 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. + +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 +\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. + + +\begin{figure}[htbp] + \centering + \begin{subfigure}[t]{0.25\textwidth} + \includegraphics[width=1\linewidth]{figures/parasite/exemple-original.jpg} + \caption{Image originale.} +% \label{} + \end{subfigure} + ~ + \begin{subfigure}[t]{0.25\textwidth} + \includegraphics[width=1\linewidth]{figures/parasite/exemple-red.jpg} + \caption{Composante rouge.} +% \label{} + \end{subfigure} + ~ + \begin{subfigure}[t]{0.25\textwidth} + \includegraphics[width=1\linewidth]{figures/parasite/exemple-red-filtered.jpg} + \caption{Composante rouge filtrée : filtre gaussien puis ouverture par aire.} +% \label{} + \end{subfigure} + ~ + \begin{subfigure}[t]{0.25\textwidth} + \includegraphics[width=1\linewidth]{figures/parasite/exemple-noyaux.png} + \caption{Noyaux du parasite.} + \label{fig:exemple-segmentation-noyau} + \end{subfigure} + ~ + \begin{subfigure}[t]{0.25\textwidth} + \includegraphics[width=1\linewidth]{figures/parasite/exemple-cytoplasme.png} + \caption{Cytoplasme du parasite.} + \label{fig:exemple-segmentation-cytoplasme} + \end{subfigure} + \caption{Exemple de segmentation d'un parasite.} + \label{fig:exemple-segmentation-parasite} +\end{figure} + \subsubsection{Segmentation des noyaux} +La segmentation des noyaux est réalisée grâce à une fermeture par aire. La surface d'un parasite correspond à environ 1~\% de la surface d'un érythrocyte, celle-ci étant calculée à partir du rayon moyen : $noyau_{surface} = 0.01 * \pi * rayon_{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 +\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. + + \subsection{Classification des cellules} -\subsubsection{Suppression des cellules non-conformes} +À partir des résultats des deux précédentes étapes, c'est-à-dire les ellipses représentant les érythrocytes ainsi que les marqueurs des parasites et des éléments colorés sombres, cette dernière étape va classifier chaque ellipse en trois classes : \emph{érythrocyte sain}, \emph{érythrocyte infecté} et \emph{objet particulier}. Certaines ellipses peuvent être amenées à être supprimées si elle ne correspondent pas à certains critères. + +\subsubsection{Attribution des pixels aux ellipses} + +Dans un premier temps, les ellipses qui touchent les bords sont supprimées. Les pixels au sein des ellipses sont attribués à une seule cellule. Si plusieurs cellules se chevauchent, alors une ligne de partage est tracée entre les deux points d'intersection, (comme montré par la figure~\ref{fig:exemple-attribution-pixel}). + +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{figure}[htbp] + \centering + \begin{subfigure}[t]{0.3\textwidth} + \includegraphics[width=1\linewidth]{figures/classification/exemple-attribution-pixel-1.jpg} + \caption{Image originale.} +% \label{} + \end{subfigure} + ~ + \begin{subfigure}[t]{0.3\textwidth} + \includegraphics[width=1\linewidth]{figures/classification/exemple-attribution-pixel-2.jpg} + \caption{Ellipses se chevauchant.} +% \label{} + \end{subfigure} + ~ + \begin{subfigure}[t]{0.3\textwidth} + \includegraphics[width=1\linewidth]{figures/classification/exemple-attribution-pixel-3.jpg} + \caption{Attribution des pixels à chacune des cellules.} +% \label{} + \end{subfigure} + \caption{Attribution des pixels aux cellules.} + \label{fig:exemple-attribution-pixel} +\end{figure} + + \subsubsection{Attribution d'une classe} +Une cellules dépassant un certain pourcentage d'éléments appartenant aux éléments colorés sombres ne peut pas être un érythrocyte et est donc classé comme \emph{objet particulier}. Cette classe n'entra pas en compte dans l'établissement du taux d'infection. Le taux maximum d'éléments colorés sombres a été fixé à 10~\%. + +Comme le montre la figure~\ref{fig:exemple-element-particulier}, les objets particuliers sont traités spécialement en ce qui concerne les chevauchements avec les érythrocytes : ceux-ci les recouvrent complètement. L'objectif de cette particularité est d'éviter qu'une partie d'un leucocyte, d'un schizonte ou d'un autre type d'objet particulier ne soit pris pour un parasite par un érythrocyte adjacent. + +\begin{figure}[htbp] + \centering + \begin{subfigure}[t]{0.3\textwidth} + \includegraphics[width=1\linewidth]{figures/classification/exemple-element-particulier-1.jpg} + \caption{Image originale.} +% \label{} + \end{subfigure} + ~ + \begin{subfigure}[t]{0.3\textwidth} + \includegraphics[width=1\linewidth]{figures/classification/exemple-element-particulier-2.jpg} + \caption{Objet particulier (marqué d'une croix noire) recouvrant un érythrocyte.} +% \label{} + \end{subfigure} + \caption{Spécificité des éléments particuliers vis-à-vis des érythrocytes.} + \label{fig:exemple-element-particulier} +\end{figure} + +Si le taux maximum d'éléments colorés sombres n'est pas atteint, alors la cellule est un érythrocyte et l'on va tester la condition suivante : l'érythrocyte possède au moins un élément appartenant aux noyaux et un certain nombre d'éléments appartenant aux cytoplasmes et se trouvant à une distance maximum donnée d'un élément noyau. Si cette condition est remplie alors la classe \emph{érythrocyte infecté} lui est attribuée. Dans le cas contraire la classe \emph{érythrocyte sain} est attribuée. + +La distance maximum à laquelle doit se trouver un élément appartenant aux cytoplasmes d'un élément appartenant aux noyaux correspond au diamètre d'un parasite. On choisit ici le diamètre et non le rayon car le noyau ne se trouve pas au centre du parasite mais dans sa périphérie. Le diamètre d'une parasite a été mesuré comme environ le rayon d'un érythrocyte. La surface minimum des éléments du cytoplasme est fixée à 2~\% de l'aire moyen des érythrocytes. Pour établir ces deux limites, nous utilisons le rayon moyen obtenu lors de la granulométrie. + +La parasitémie est finalement calculée en pourcentage comme étant le nombre d'érythrocytes infectés divisé par le nombre d'érythrocytes sains, le tout multiplié par 100 : + +{\setlength{\abovedisplayskip}{0pt} +\begin{flalign} + Parasitémie_{\%} = 100 \; \frac{\#\{érythrocytes_{sains}\}}{\#\{érythrocytes_{infectés}\}} +\end{flalign} + +La figure~\ref{fig:exemple-classification} montre les différentes données utilisées lors de la classification. + +\begin{figure}[htbp] + \centering + \begin{subfigure}[t]{0.48\textwidth} + \includegraphics[width=1\linewidth]{figures/classification/exemple-1-original.jpg} + \caption{Image originale.} +% \label{} + \end{subfigure} + ~ + \begin{subfigure}[t]{0.48\textwidth} + \includegraphics[width=1\linewidth]{figures/classification/exemple-2-ellipses.jpg} + \caption{Ellipses.} +% \label{} + \end{subfigure} + ~ + \begin{subfigure}[t]{0.48\textwidth} + \includegraphics[width=1\linewidth]{figures/classification/exemple-3-dark-stain.png} + \caption{Zones colorées sombres.} +% \label{} + \end{subfigure} + ~ + \begin{subfigure}[t]{0.48\textwidth} + \includegraphics[width=1\linewidth]{figures/classification/exemple-4-cytoplasmes.png} + \caption{Cytoplasmes.} +% \label{} + \end{subfigure} + ~ + \begin{subfigure}[t]{0.48\textwidth} + \includegraphics[width=1\linewidth]{figures/classification/exemple-5-noyaux.png} + \caption{Noyaux.} +% \label{} + \end{subfigure} + ~ + \begin{subfigure}[t]{0.48\textwidth} + \includegraphics[width=1\linewidth]{figures/classification/exemple-6-classification.jpg} + \caption{Résultat final.} +% \label{} + \end{subfigure} + \caption{Exemple de classification. Le résultat final montre les érythrocytes sains marqués d'une croix bleue, les érythrocytes infectés marqués d'une croix rouge et les objets particuliers marqués d'une croix noire. On peut voir, en bas à droite, un leucocyte marqué comme objet particulier.} + \label{fig:exemple-classification} +\end{figure} + + \section{Implémentation} -% Float32 +La mise en œuvre de la méthode décrite dans les sections précédentes se fait via la réalisation d'un logiciel doté d'une interface graphique, adaptée aux besoins des utilisateurs et définie conjointement avec Dr. Guy Prod'hom du \emph{CHUV} de Lausanne. L'application doit pouvoir être installée sur des ordinateurs dotés de Windows~7 et de 4~Go de \emph{RAM}. + +Pour ce faire la plate-forme \emph{.NET} a été choisie pour ses bonnes performances et sa disponibilité sur les machines cibles. De plus, \emph{Emgu CV} est un \emph{wrapper} \emph{.NET} pour la bibliothèque \emph{Open CV} qui est utilisée pour la manipulation des images. + +Le langage de programmation est \emph{F\#}, un langage fonctionnel et orienté objet dérivé d'\emph{Objective Caml} et dérivant lui-même du langage \emph{ML} . Il a été choisi pour sa facilité d'écriture et son haut niveau d'expressivité. + +Le code est séparé en deux \emph{assemblies} : + +\begin{itemize} + \item \emph{ParasitemiaCore} : Bibliothèque contenant la partie calcul. + \item \emph{ParasitemiaUI} : Exécutable proposant une utilisation via une interface graphique ou via la ligne de commande. +\end{itemize} + +Pour des raisons de précision numérique, le type \emph{Single} (réel sur 32 bits tel que défini par l'\emph{IEEE 754}) est utilisé pour la représentation de toutes les images intermédiaires à la place d'entier sur 8 ou sur 16 bits. Le processus pouvant prendre une quantité non-négligable de mémoire, le type \emph{Double} (réel sur 64 bits) a été écarté car doublant pratiquement la quantité de mémoire requise. + +Le code source ainsi que l'exécutable et un installeur sont disponibles aux adresses suivantes : + +\begin{itemize} + \item {\parasitemiasource} + \item {\parasitemiaexe} + \item {\parasitemiasetup} +\end{itemize} + +\subsection{Détails de codage} + +\subsubsection{Calculs en parallèle} + +Au sein du module \texttt{ParasitemiaCore.Analysis} se trouve la fonction pour lancer l'analyse d'une image : + +\begin{lstlisting}[style=fsharp, numbers = none] +let doAnalysis (img: Image) (name: string) (config: Config) (reportProgress: (int -> bool) option) : Cell list option = [..] +\end{lstlisting} + +Où \texttt{img} est l'image à analyser, \texttt{name} est un nom donné à l'analyse et utilisé dans le \emph{log}, \texttt{config} la configuration et \texttt{reportProgress} une fonction optionnelle qui permettra d'être renseigné de l'avancement de l'analyse à chaque appel en donnant le pourcentage (entre 0 et 100) et qui renverra \texttt{false} pour interrompre l'analyse. La fonction \texttt{doAnalysis} renvoie \texttt{None} si elle a été interrompue, ou une liste de cellules dans le cas contraire. + +Une autre version de cette fonction existe dans le même module et permet de traiter en parallèle plusieurs images. Cette fonction est bloquante tant que le traitement de toutes les images n'est pas terminé ou que celle-ci n'a pas été interrompue via le même mécanisme décrit pour \texttt{doAnalysis} ci-dessus. + +\begin{lstlisting}[style=fsharp, numbers = none] +let doMultipleAnalysis (imgs: (string * Config * Image) list) (reportProgress: (int -> bool) option) : (string * Cell list) list option = [..] +\end{lstlisting} + +Une liste d'images est fournie avec un nom associé à chacune d'entre elle ainsi qu'une configuration. L'ordre des résultats retournés n'étant pas forcément le même que celui de la liste d'images, il est nécessaire d'utiliser le nom donné pour associer les résultats aux images données. Comme pour \texttt{doAnalyse}, la fonction renvoie \texttt{None} si elle a été interrompue. + +Le nombre de \emph{threads} exécutés en parallèle dépend du nombre de cœurs de la machine. + + +\subsubsection{Ouvertures et fermetures par aire sur des réels} +\label{algo-ouverture-aire} + +\emph{Open CV} ne fournissant pas cette opération, que ce soit sur des entiers ou sur des réels, elle a été implémentée en \emph{F\#}. L'ouverture est détaillée par l'algorithme~\ref{alg:ouverture-par-aire}. Celui-ci est inspiré de l'article~\cite{vincent1992}. La fermeture est similaire mais en inversant l'opérateur d'ordre et en partant des minima à la place des maxima. Nous parlons ici de hauteur et de niveau : un élément plus haut qu'un autre ou de niveau supérieur est dit comme ayant une intensité plus grande. + +Les iles sont des ensembles d'éléments 4-connexes. Une ile possède un niveau, et son nombre d'éléments est appelé sa surface. À chaque ile est associé un rivage qui est l'ensemble des éléments 4-connexes à l'ile qui ne font pas 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)$. + +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. + +\begin{algorithm} + \DontPrintSemicolon + \caption{Ouverture par aire sur une image contenant des réels.} + \label{alg:ouverture-par-aire} + + \SetKwInOut{Input}{Entrée} + \SetKwInOut{Output}{Sortie} + + \Input{une image $img$ et une aire $A$} + \Output{l'ouvert de $img$} + $\mli{iles} \leftarrow $ maxima($img$) \; + Initialisation du rivage de chaque ile \; + \For{$i \in iles$}{ + $r \leftarrow i$.rivage.pop\_max \; + \uIf{$r$ appartient à une ile $i'$}{ + \uIf{$i$.surface + $i'$.surface $\geqslant$ $A$ ou $i$.niveau $<$ $i'$.niveau}{ + Passe à l'ile suivante \; + } + \Else{ + $i$.surface $\leftarrow$ $i$.surface $+$ $i'$.surface \; + $i$.niveau $\leftarrow$ $i'$.niveau \; + Le rivage de $i'$ est ajouté à celui de $i$ et $i'$ est supprimé \; + } + } + \uElseIf{$r$.niveau $>$ $i$.niveau}{ + Passe à l'ile suivante \; + } + \Else{ + $r$ est intégré à $i$ et ses voisins 4-connexe qui ne font ni partie de $i$ ni partie de $i$.rivage sont intégrés à $i$.rivage + } + } + \Return{une copie de $img$ dont les éléments appartenant aux iles sont mis à leur niveau respectif} + \BlankLine +\end{algorithm} + + + +\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 : + +\begin{lstlisting}[style=tt] +ParasitemiaUI.exe (--folder |--file ) --output [--debug] +\end{lstlisting} + +Où \texttt{---folder } est un dossier contenant les images à analyser, \texttt{---file } est une image unique à analyser, \texttt{---output } est un dossier dans lequel seront écrits les résultats et le \emph{log} et \texttt{---debug} un flag permettant d'activer le mode debug dans lequel les images intermédiaires sont écrites dans le dossier de sortie. + + +\subsection{Interface graphique} + +Les différents éléments de l'interface graphique, contrôles et fenêtres, sont dé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. + +La figure~\ref{fig:screenshot-GUI} montre la fenêtre principale à partir de laquelle les principales opérations peuvent être réalisées, comme par exemple charger ou sauvegarder un document, lancer une analyse d'une ou plusieurs images, naviguer au sein de l'image et changer l'état (sain/infecté) des érythrocytes. La parasitémie est affichée dans la partie supérieure, et un message d'avertissement s'affiche si le nombre de cellules analysées est trop faible. + +\begin{figure}[htbp] + \centering + \begin{subfigure}[t]{0.9\textwidth} + \includegraphics[width=1\linewidth]{figures/implementation/screenshot-main.jpg} + \caption{La fenêtre principale. La parasitémie globale est affichée tout en haut. Les images sources sont affichées à gauche. L'image courante est montrée au centre ainsi que ses informations associées en dessous.} +% \label{} + \end{subfigure} + ~ + \begin{subfigure}[t]{0.55\textwidth} + \includegraphics[width=1\linewidth]{figures/implementation/screenshot-start-analysis.jpg} + \caption{La fenêtre permettant de lancer une analyse. La résolution (en pixel par pouce) de chaque image doit être entrée préalablement. Des valeurs prédéfinies ainsi qu'un calculateur aident l'utilisateur à trouver la bonne valeur. Ces valeurs sont stockées dans un fichier \emph{JSON} permettant à l'utilisateur de les modifier.} +% \label{} + \end{subfigure} + ~ + \begin{subfigure}[t]{0.35\textwidth} + \includegraphics[width=1\linewidth]{figures/implementation/screenshot-ppi-calculator.jpg} + \caption{Calcul la résolution de l'image en fonction de la taille du capteur, de sa résolution et du niveau de zoom. De la même manière que les valeurs de résolutions prédéfinies, la liste des différentes tailles de capteurs est stockée dans un fichier \emph{JSON}.} +% \label{} + \end{subfigure} + \caption{L'interface graphique de l'application \emph{Parasitemia}.} + \label{fig:screenshot-GUI} +\end{figure} + +\subsubsection{Persistance des documents} + +Le mode interactif avec interface graphique permet de gérer des documents sous la forme de fichier contenant les images sources ainsi que les résultats de leur analyse. L'extension utilisée est \texttt{PIAZ} pour \emph{ParasitemIA Zipped file}. + +Chaque image source est enregistrée au format sans perte \emph{TIFF} en utilisant le modèle de couleur \emph{RGB} et 8 bits par canal. Les noms des images correspondent à leur numéro affiché dans la fenêtre principale, par exemple \texttt{1.tiff}. À chaque image est associé un fichier texte au format \emph{JSON} reprenant le nom du fichier de l'image avec le suffixe \texttt{.json} ajouté, par exemple \texttt{1.tiff.json}. Ce fichier \emph{JSON} contient le nom de l'image, les paramètres et le liste des érythrocytes détectés issue 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 +\end{itemize} + +\subsection{Dépendances} + +Hormis \emph{Emgu CV}, toutes les dépendances sont fournies par le système de gestion de \emph{package} \emph{NuGet} intégré à l'environnement de développement \emph{Visual Studio}. Les dépendances sont listées ci-dessous : + +\begin{itemize} + \item \emph{FSharp.Collections.ParallelSeq} : Permet d'appliquer en parallèle des fonctions sur des séquences. + \item \emph{MathNet.Numerics} : Différentes fonctions mathématiques, notamment concernant l'algèbre linéaire. + \item \emph{FsXaml.Wpf} : Quelques outils facilitant l'utilisation de \emph{WPF} et \emph{XAML} avec \emph{F\#}. + \item \emph{Netwonsoft.Json} : Permet la sérialisation et la désérialisation de données au format \emph{JSON}. +\end{itemize} \section{Résultats} -% Comparaison avec MA et le PA. +Treize images~\footnote{{\imagesmesures}} on été sélectionnées, six d'entre elles ayant été prises avec un zoom 50 fois et sept avec un zoom 100. Un panel représentatif des différentes particularités a été choisi, notamment avec une illumination et une teinte pouvant varier entre les images, des débris se superposant aux cellules, des amas d'érythrocytes, des leucocytes, des trophozoïtes, des schizontes et des gamètes. + +Trois méthodes sont appliquées sur ces images, à savoir \emph{Ma et al.}\cite{ma2010} dont l'implémentation est fournie sous la forme d'une script \emph{Python}, \emph{C. Di Ruberto et al.}\cite{di-ruberto2001} qui a été implémentée sous \emph{MATLAB} par\cite{burri2015} et la méthode décrite ici. + +Concernant Ma, les paramètres suivants ont été modifiés afin d'adapter la méthode à la résolution de nos images : + +\begin{itemize} + \item \texttt{Hough\_min\_radius} et \texttt{Hough\_max\_radius} sont définis à 20/45 pour les images 50 fois et à 40/90 pour les images 100 fois. + \item \texttt{Min\_cell\_radius} et \texttt{Max\_cell\_radius} sont définis à 25/40 pour les images 50 fois et à 50/80 pour les images 100 fois. Ces valeurs correspondent aux valeurs limites citées à la section~\ref{identification-erythrocytes}. + \item Les écarts types des gaussiennes, \texttt{Enhance\_a} et \texttt{Enhance\_c}, sont ajustés proportionnellement à la résolution des images. Les valeurs 2/40 sont utilisées pour les images 50 fois et 4/80 pour les images 100 fois. + \item \texttt{Cell\_suppression\_radius} est diminué de 1.25 à 0.8 afin d'éviter que trop de cellules proches s'excluent mutuellement. +\end{itemize} + +Les résultats sont montrés par les trois tableaux (\ref{tab:resultats-erythrocytes}, \ref{tab:resultats-parasites} et \ref{tab:resultats-parasitemie}) ci-après. Le premier concerne la segmentation des érythrocytes, le deuxième la recherche des parasites et le troisième la parasitémie. Les résultats de ce dernier sont à considérer avec précaution car 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. + +\begin{table}[htbp] +\setlength{\tabcolsep}{3pt} +\centering +\begin{tabular}{ r || r || r | r || r | r || r | r | } + & & \multicolumn{2}{ c|| }{Ce papier} & \multicolumn{2}{ c|| }{\emph{Ma}} & \multicolumn{2}{ c| }{\emph{Di Ruberto}} \\ \cline{2-8} + N° & Total réf. & \# manqué & \# en trop & \# manqué & \# en trop & \# manqué & \# en trop \\ \cline{1-8} + 1 & 184 & 1 & 0 & 30 & 1 & 3 & 7 \\ + 2 & 186 & 3 & 0 & 18 & 1 & 15 & 5 \\ + 3 & 188 & 6 & 0 & 17 & 2 & 5 & 19 \\ + 4 & 154 & 0 & 0 & 3 & 0 & 12 & 1 \\ + 5 & 150 & 2 & 0 & 7 & 3 & - & - \\ + 6 & 139 & 0 & 0 & 5 & 0 & 3 & 1 \\ + 7 & 135 & 1 & 0 & 3 & 4 & 1 & 7 \\ + 8 & 612 & 1 & 0 & 11 & 1 & 33 & 49 \\ + 9 & 741 & 1 & 0 & 43 & 2 & 128 & 79 \\ + 10 & 557 & 0 & 4 & 18 & 0 & - & - \\ + 11 & 686 & 0 & 1 & 45 & 1 & - & - \\ + 12 & 510 & 0 & 0 & 15 & 0 & - & - \\ + 13 & 424 & 0 & 0 & 9 & 1 & - & - +\end{tabular} +\caption{Résultats des mesures concernant la segmentation des érythrocytes.} +\label{tab:resultats-erythrocytes} +\end{table} + + +\begin{table}[htbp] +\setlength{\tabcolsep}{3pt} +\centering +\begin{tabular}{ r || r || r | r || r | r || r | r | } + & & \multicolumn{2}{ c|| }{Ce papier} & \multicolumn{2}{ c|| }{\emph{Ma}} & \multicolumn{2}{ c| }{\emph{Di Ruberto}} \\ \cline{2-8} + N° & Total réf. & \# manqué & \# en trop & \# manqué & \# en trop & \# manqué & \# en trop \\ \cline{1-8} + 1 & 0 & 0 & 0 & 0 & 1 & 0 & 1 \\ + 2 & 0 & 0 & 0 & 0 & 0 & 0 & 1 \\ + 3 & 0 & 0 & 0 & 0 & 3 & 0 & 5 \\ + 4 & 0 & 0 & 0 & 0 & 0 & 0 & 30 \\ + 5 & 28 & 1 & 2 & 9 & 3 & - & - \\ + 6 & 28 & 6 & 0 & 9 & 0 & 4 & 2 \\ + 7 & 20 & 0 & 1 & 6 & 4 & 0 & 10 \\ + 8 & 100 & 2 & 0 & 2 & 3 & 86 & 9 \\ + 9 & 11 & 4 & 0 & 4 & 1 & 9 & 5 \\ + 10 & 14 & 4 & 0 & 4 & 1 & - & - \\ + 11 & 1 & 0 & 0 & 1 & 2 & - & - \\ + 12 & 2 & 0 & 1 & 0 & 11 & - & - \\ + 13 & 1 & 1 & 0 & 0 & 3 & - & - +\end{tabular} +\caption{Résultats des mesures concernant la détection des parasites.} +\label{tab:resultats-parasites} +\end{table} + + +\begin{table}[htbp] +\setlength{\tabcolsep}{3pt} +\centering +\begin{tabular}{ r || r | r | r | r | } + N° & Référence & Ce papier & \emph{Ma} & \emph{Di Ruberto} \\ \cline{1-5} + 1 & 0.0~\% & 0.0~\% & 0.6~\% & 0.5~\% \\ + 2 & 0.0~\% & 0.0~\% & 0.0~\% & 0.6~\% \\ + 3 & 0.0~\% & 0.0~\% & 1.7~\% & 2.5~\% \\ + 4 & 0.0~\% & 0.0~\% & 0.0~\% & 21.0~\% \\ + 5 & 18.7~\% & 19.6~\% & 15.1~\% & - \\ + 6 & 20.1~\% & 15.8~\% & 14.2~\% & 19.0~\% \\ + 7 & 14.8~\% & 15.7~\% & 13.2~\% & 21.3~\% \\ + 8 & 16.3~\% & 16.0~\% & 16.8~\% & 3.7~\% \\ + 9 & 1.5~\% & 0.9~\% & 1.1~\% & 1.0~\% \\ + 10 & 2.5~\% & 1.8~\% & 2.0~\% & - \\ + 11 & 0.1~\% & 0.1~\% & 0.3~\% & - \\ + 12 & 0.4~\% & 0.6~\% & 2.6~\% & - \\ + 13 & 0.2~\% & 0.0~\% & 1.0~\% & - +\end{tabular} +\caption{Résultats des mesures concernant la détection des parasites.} +\label{tab:resultats-parasitemie} +\end{table} + +\begin{sloppypar} +Dans le cas de \emph{Ma}, les amas de cellules ainsi que les cellules allongées posent problème, comme montré par les figures~\ref{fig:comparaison-1} et~\ref{fig:comparaison-2}. Les amas de deux cellules sont souvent considérés comme une seule cellule malgré le fait que le paramètre \texttt{Cell\_suppression\_radius} ait été réduit afin d'éviter ce problème. De plus, cela fait qu'une partie des cellules de l'amas n'est pas pris en compte lors de la détection des parasites. À contrario, les cellules allongées peuvent provoquer une sur-segmentation : cela crée souvent deux petits érythrocytes qui seront écartés par la suite car ils sont trop petits. Ils sont montrés avec une croix noire à la figure~\ref{fig:comparaison-2-ma}. +\end{sloppypar} +\begin{figure}[htbp] + \centering + \begin{subfigure}[t]{0.23\textwidth} + \includegraphics[width=1\linewidth]{figures/comparaison-1-original.jpg} + \caption{Extrait de l'image n°2.} + \label{fig:comparaison-1-original} + \end{subfigure} + ~ + \begin{subfigure}[t]{0.23\textwidth} + \includegraphics[width=1\linewidth]{figures/comparaison-1-master.jpg} + \caption{Méthode présentée dans ce papier, résultat attendu.} + \label{fig:comparaison-1-master} + \end{subfigure} + ~ + \begin{subfigure}[t]{0.23\textwidth} + \includegraphics[width=1\linewidth]{figures/comparaison-1-ma.jpg} + \caption{\emph{Ma}, un seul érythrocyte est trouvé.} + \label{fig:comparaison-1-ma} + \end{subfigure} + ~ + \begin{subfigure}[t]{0.23\textwidth} + \includegraphics[width=1\linewidth]{figures/comparaison-1-diruberto.jpg} + \caption{\emph{Di Ruberto}, sur-segmentation.} + \label{fig:comparaison-1-diruberto} + \end{subfigure} + \caption{Segmentation d'un amas de deux cellules.} + \label{fig:comparaison-1} +\end{figure} + +\begin{figure}[htbp] + \centering + \begin{subfigure}[t]{0.18\textwidth} + \includegraphics[width=1\linewidth]{figures/comparaison-2-original.jpg} + \caption{Extrait de l'image n°2.} + \label{fig:comparaison-2-original} + \end{subfigure} + ~ + \begin{subfigure}[t]{0.18\textwidth} + \includegraphics[width=1\linewidth]{figures/comparaison-2-master.jpg} + \caption{Méthode présentée dans ce papier, résultat attendu.} + \label{fig:comparaison-2-master} + \end{subfigure} + ~ + \begin{subfigure}[t]{0.18\textwidth} + \includegraphics[width=1\linewidth]{figures/comparaison-2-ma.jpg} + \caption{\emph{Ma}, la transformée de Hough dans le domaine des cercles crée deux foyers pour les ellipses.} + \label{fig:comparaison-2-ma} + \end{subfigure} + ~ + \begin{subfigure}[t]{0.18\textwidth} + \includegraphics[width=1\linewidth]{figures/comparaison-2-diruberto.jpg} + \caption{\emph{Di Ruberto}.} + \label{fig:comparaison-2-diruberto} + \end{subfigure} + \caption{Segmentation d'une cellule ellipsoïde.} + \label{fig:comparaison-2} +\end{figure} + +La méthode de \emph{Ma} a également tendance à compter certains débris comme étant des parasites. Cela se voit sur le tableau~\ref{tab:resultats-parasites} pour l'image n°12 et est illustré par la figure~\ref{fig:comparaison-3}. + +\begin{figure}[htbp] + \centering + \begin{subfigure}[t]{0.2\textwidth} + \includegraphics[width=1\linewidth]{figures/comparaison-3-debris-original.jpg} + \caption{Extrait de l'image n°12, un débris qui ne doit pas être confondu avec un parasite.} + \label{fig:comparaison-1-original} + \end{subfigure} + ~ + \begin{subfigure}[t]{0.2\textwidth} + \includegraphics[width=1\linewidth]{figures/comparaison-3-debris-master.jpg} + \caption{Méthode présentée dans ce papier, résultat attendu.} + \label{fig:comparaison-1-master} + \end{subfigure} + ~ + \begin{subfigure}[t]{0.2\textwidth} + \includegraphics[width=1\linewidth]{figures/comparaison-3-debris-ma.jpg} + \caption{\emph{Ma} (faux-positif).} + \label{fig:comparaison-1-ma} + \end{subfigure} + \caption{Faux-positif lors de la détection des parasites avec la méthode de \emph{Ma}.} + \label{fig:comparaison-3} +\end{figure} + +La méthode de \emph{Di Ruberto} est, quant à elle, très sensible aux variations de la composante teinte de l'image de base. Par exemple, le traitement de l'image n°4 donne un très grand nombre de faux parasites détectés. L'image n°5 n'a pas 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. + +Ces deux méthodes, et dans une moindre mesure la méthode présentée ici, sont sensibles à l'illumination de l'image. Les images n° 8, 9 et 10 sont particulièrement touchées par ce phénomène. Cela se voit sur le tableau~\ref{tab:resultats-parasites} où le nombre d'érythrocytes manqués est élevé à la fois pour \emph{Ma} et \emph{Di Ruberto}. Ce problème est illustré par la figure~\ref{fig:comparaison-4}. + +\begin{figure}[htbp] + \centering + \begin{subfigure}[t]{0.4\textwidth} + \includegraphics[width=1\linewidth]{figures/comparaison-4-illumination-original.jpg} + \caption{Image originale, coin supérieur droit de l'image n°8.} + \label{fig:comparaison-4-original} + \end{subfigure} + ~ + \begin{subfigure}[t]{0.4\textwidth} + \includegraphics[width=1\linewidth]{figures/comparaison-4-illumination-master.png} + \caption{Méthode présentée dans ce papier, l'illumination affecte la détection des objets colorés sombres.} + \label{fig:comparaison-4-master} + \end{subfigure} + ~ + \begin{subfigure}[t]{0.4\textwidth} + \includegraphics[width=1\linewidth]{figures/comparaison-4-illumination-ma.png} + \caption{\emph{Ma}, l'avant-plan et le fond sont séparés à l'aide de la méthode k-médianes où chaque élément de l'image est un vecteur (rouge, vert, bleu) et la distance entre deux éléments est calculée de manière euclidienne.} + \label{fig:comparaison-4-ma} + \end{subfigure} + ~ + \begin{subfigure}[t]{0.4\textwidth} + \includegraphics[width=1\linewidth]{figures/comparaison-4-illumination-di-ruberto.png} + \caption{\emph{Di Ruberto}, application de la méthode de Otsu à la composante verte au début de la segmentation des érythrocytes.} + \label{fig:comparaison-4-di-ruberto} + \end{subfigure} + \caption{Problème de l'illumination.} + \label{fig:comparaison-4} +\end{figure} + + +\subsection{Discussion} +\label{discussions} + +L'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. + +blabla.... webinar + + +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. + \section{Conclusion} + + + \bibliographystyle{plain} \bibliography{main} - \end{document}