]> AND Private Git Repository - these_gilles.git/blob - PRESENTATION/diapos.rst
Logo AND Algorithmique Numérique Distribuée

Private GIT Repository
8a0274d9f42c8805790ec20474b31422b22ebfe1
[these_gilles.git] / PRESENTATION / diapos.rst
1 :title: Algorithmes rapides sur GPU
2 :author: Gilles Perrot
3
4
5 # boite arrondie fond gris
6
7 .. class:: example
8
9  lkj lkj lkj lj
10  olkj lkj
11  lkjdlkdj
12  ml kdmlk 
13
14 # 2 colonnes
15
16 .. class:: columns
17
18  .. list-table:: 
19     :widths: 50 80 
20     :header-rows: 0 
21
22     * - * kjh kj hkjh kqj hdkq jdhq lkj lj lkj lkj lj lqks,jxdxqdiqoioqiij
23         *  jkkjskdjf lskfj lskfjlksdjfls
24       - .. image:: css/logo-femto.png 
25                 :width: 300px 
26
27
28 ----
29
30 :id: titre
31
32 TRAITEMENT D'IMAGES SUR GPU 
33 ===========================
34
35 Algorithmes rapides pour le filtrage et la segmentation des images bruitées sur GPU.
36 ------------------------------------------------------------------------------------------------
37
38 Gilles Perrot
39 +++++++++++++
40 17 avril 2014
41 +++++++++++++
42 Université de Franche-Comté, Institut FEMTO-ST 
43 +++++++++++++++++++++++++++++++++++++++++++++++
44 Département DISC - équipe AND
45 +++++++++++++++++++++++++++++
46 Direction  : R. Couturier & S. Domas
47 ++++++++++++++++++++++++++++++++++++
48
49 ----
50
51 FILTRAGE
52 ========
53
54 Réduire le bruit.
55
56 .. image:: img/ex-filtrage.png
57    :width: 800px
58
59 .. note::
60  
61  * les bruits dégradent l'image de la scène idéale et peuvent en fausser ou compliquer l'interprétation.
62  *  Les capteurs numériques et les conditions d'acquisition sont à l'origine de perturbations (bruits).
63  * Les hautes résolutions sont souvent obtenues à faible flux de photons, dont les variations engendrent du bruit. 
64
65 ----
66
67 SEGMENTATION
68 ============
69
70 Distinguer les zones homogènes d'une image.
71
72 .. image:: img/seg1.png
73    :width: 700px
74
75 .. note::
76
77  * on recense plus de 4000 algorithmes de segmentation
78  * La segmentation intervient dans beaucoup d'applications : du tracking à la détection ou à l'extraction de caractéristiques diverses.
79  * Mais aujourd'hui encore, une bonne segmentation est celle qui permet d'extraire ce que l'on attend => l'algorithme dépend du problème. 
80
81
82 ----
83
84 SEGMENTATION
85 ============
86 Deux approches
87
88 .. image:: img/approches.png
89    :width: 800px
90
91 .. note::
92
93  *  **Pré-traiter** et effectuer les traitements de haut niveau sur des images *améliorées*. 
94
95    * réduction, *a priori*, du coût des traitements de haut niveau.
96    * les prétraitements ont eux aussi un coût, en temps de calcul et potentiellement en information.
97  
98  * **Ne pas pré-traiter** et effectuer les traitements de haut niveau sur les images bruitées.
99
100    * pas de perte d'information due au pré-traitement. 
101
102 ----
103
104 PLAN DE LA PRÉSENTATION
105 =======================
106
107 #. Introduction 
108
109    - Les GPUs ou *Graphical Processing Units*.
110    - Le filtrage et la segmentation d'images.
111
112 #. La segmentation des images
113
114    - Travaux de référence.
115    - Parallélisation GPU d'un algorithme de segmentation de type *snake*.
116
117 #. Le filtrage des images
118
119    - Travaux de référence. 
120    - Optimisation GPU des filtres médian et de convolution.
121    - Conception d'un algorithme GPU de débruitage par recherche des lignes de niveaux.
122
123 #. Conclusion et perspectives 
124
125 ----
126
127 INTRODUCTION
128 ============
129 Les GPUs ou *Processeurs graphiques*.
130 -------------------------------------
131
132 .. image:: img/gpucpu1.png
133    :width: 800px
134
135
136 * Processeurs *classiques* **CPU** : exécution **séquentielle** 
137
138   - Quelques unités de calcul ( les c |oe| urs).
139
140 * Processeurs *graphiques* **GPU** : exécution **massivement parallèle**
141
142   - Des centaines, voire milliers, d'unités de calcul, regroupées en SMs (*Streaming Multiprocessors*).
143
144 .. note::
145
146  * La multiplication des c |oe| urs dans les GPUs se fait au détriment des fonctions de contrôle et de cache.
147  * Seule la mémoire *globale* est accessible par l'ensemble des fils d'exécution (les *threads*) et ses performances sont faibles.
148  * AU sein de la RAM il y a différents canaux vers différents types de mémoires.
149  * L'accès efficace aux mémoires  est contraignant.
150  * Les échanges de données entre le GPU et son hôte CPU sont pénalisants.
151  * Il est important de concevoir un partage équilibré des ressources au sein de chaque SM, pour permettre un niveau de parallélisme  élevé, et donc d'envisager de bonnes performances.
152  * La mise au point n'est pas aisée lorsque des centaines de milliers de threads concourent à l'exécution d'une tâche.
153
154  * L'accroissement des capacités de calcul a suivi l'augmentation des résolutions d'images.
155  * Les traitements envisagés sur les images sont de plus en plus évolués ( traitements de haut niveau ) et requièrent souvent un temps de calcul accru.
156  * L'architecture parallèle particulière des GPUs a permis d'améliorer considérablement les performances de certaines classes d'algorithme et fait espérer par ailleurs des accélérations importantes.
157
158
159
160 ----   
161
162 INTRODUCTION
163 ============
164 Le traitement des images
165 ------------------------
166
167 **Le filtrage (du bruit)**
168
169  * Les capteurs et les conditions d'acquisition induisent du bruit.
170  * *Résolution élevée* n'implique pas *bruit réduit*. 
171
172 **La segmentation**
173
174  * Enjeu important.
175  * Aucun algorithme universel.
176
177 .. note:: 
178
179  * les bruits dégradent l'image de la scène idéale et peuvent en fausser ou compliquer l'interprétation.
180  * on recense plus de 4000 algorithmes de segmentation
181  * La segmentation intervient dans beaucoup d'applications : du tracking à la détection ou à l'extraction de caractéristiques diverses.
182  * Mais aujourd'hui encore, une bonne segmentation est celle qui permet d'extraire ce que l'on attend => l'algorithme dépend du problème. 
183
184 ----
185
186 INTRODUCTION
187 ============
188
189 Ojectif : accélérer
190 -------------------
191
192
193 **Segmentation**
194  
195  * Algorithme par contours actifs, classe des  *snakes*.
196  * Implémentation CPU optimisée existante. 
197  * Conception de l'implémentation GPU.
198  * Adaptations mineures de l'algorithme. 
199
200 **Filtrage**
201
202      * Filtre par lignes de niveaux 
203         
204          - Algorithme original,
205          - Conceptions conjointes algorithme et implémentation.
206
207      * Filtres médians, filtres de convolution
208
209           - Opérateurs mathématiques,
210           - Conception d'une implémentation optimisée.
211   
212
213 ----
214
215 SEGMENTATION PAR CONTOUR ACTIF 
216 ==============================
217 Travaux de référence
218 --------------------
219
220 **Level-set** ( Roberts *et al.*, 2010) 
221
222  * Images d'IRM de 256x256x256 pixels (16 millions),
223  * Temps sur GTX280 : **11 s**.
224    
225 **Snake GVF** (Smistad *et al.*, 2012)
226
227  * Images d'IRM de 256x256x256 pixels (16 millions),
228  * Temps sur C2070 : **7 s**.
229
230 .. figure:: img/brain3D-gvf.png
231    :width: 600px
232
233
234
235 .. note::
236
237  * Le domaine médical recèle la quasi totalité des implémentations GPU d'algorithmes de segmentation.
238  * Nombre d'entre elles concernent des traitements effectués en 3D par nécessité, où l'emploi du GPU s'impose assez naturellement.
239  * Les algorithmes **level-set** sont les plus implémentés sur GPU :
240  * Les algorithmes **snakes** sont très peu implémentée sur GPU :
241
242 ----
243
244 SEGMENTATION PAR CONTOUR ACTIF 
245 ===============================
246 *Snake* polygonal orienté région (principe)
247 -------------------------------------------
248
249 .. class:: columns
250
251   .. list-table:: 
252     :widths: 50 80 
253     :header-rows: 0 
254
255     * - .. image:: img/snake-modele.png 
256                 :width: 350px 
257       - * Objectif : déterminer le contour le plus *vraisemblable*.
258         *  Le critère de vraisemblance généralisée est, dans le cas gaussien :
259            
260            .. math::
261             
262               $$GL = \frac{1}{2}\left[ n_B.log\left(\sigma_B^2\right) + n_T.log\left(\sigma_T^2\right)\right]$$         
263        
264 * Calcul des variances :math:`\(\sigma^2\)` pour chaque contour :
265
266  * Méthode de Chesnaud *et el.* (1999) en :math:`\(\mathcal{O}(n^2)\)`. 
267  * Implique le **pré-calcul** de 3 images cumulées.
268
269 .. note::
270
271  * Cela permet d'extraire des formes aux contours mal définis, en raison d'un fort niveau de bruit par exemple. 
272
273 ----
274
275 SEGMENTATION PAR CONTOUR ACTIF 
276 ===============================
277 *Snake* polygonal orienté région (algo CPU)
278 --------------------------------------------
279
280 .. image:: img/cochons-it0-it1.png
281    :height: 300px
282
283 **Itération 1**
284
285  #. Le contour initial est rectangulaire ( 4 n |oe| uds )
286  #. On déplace successivement les 4 n |oe| uds jusqu'à ce que plus aucun nouveau déplacement ne provoque l'amélioration du critère.
287
288
289 ----
290
291 SEGMENTATION PAR CONTOUR ACTIF 
292 ===============================
293 *Snake* polygonal orienté région (algo CPU)
294 --------------------------------------------
295
296 .. image:: img/cochons-it21-it22.png
297    :height: 300px
298
299 .. image:: img/cochons-it4-it5.png
300    :height: 300px
301
302 .. note:: 
303
304  * CONVERGENCE RAPIDE
305
306 ----
307
308 SEGMENTATION PAR CONTOUR ACTIF 
309 ===============================
310 *Snake* polygonal orienté région (algo CPU)
311 --------------------------------------------
312
313 Exemples de résultats 
314
315 .. figure:: img/snake-exs.png
316    :width: 700px
317
318 .. note ::
319
320  * Les résultats de segmentation dépendent des paramètres de la séquence d'optimisation (pas des déplacements, contour initial, seuil d'ajout des n |oe| uds)
321
322 ----
323
324 SEGMENTATION PAR CONTOUR ACTIF 
325 ===============================
326 Parallélisation du *Snake* polygonal sur GPU
327 --------------------------------------------
328 Identification des fonctions coûteuses
329
330 .. image:: img/algosnake1.png
331    :height: 500px
332
333 ----
334
335 SEGMENTATION PAR CONTOUR ACTIF 
336 ===============================
337 Parallélisation du *Snake* polygonal sur GPU
338 --------------------------------------------
339 Calcul du critère GL
340
341 .. image:: img/algosnake-3etages.png
342    :width: 800px
343
344
345 ----
346
347 SEGMENTATION PAR CONTOUR ACTIF 
348 ===============================
349 Parallélisation du *Snake* polygonal sur GPU
350 --------------------------------------------
351
352 .. image:: img/snake-pairimpair.png
353    :width: 800px
354
355 .. note::
356
357  * Pour un n |oe| ud et un pas de déplacement donnés, on évalue **en parallèle** 8 positions voisines, soit 16 segments distincts.
358  * Pour éviter les oscillations et *coller* à l'algorithme séquentiel, on distingue les n |oe| uds d'indices pairs et impairs.
359  * On évalue **en parallèle** l'ensemble des déplacements éventuels de tous les n |oe| uds de même parité. 
360
361
362
363 ----
364
365 SEGMENTATION PAR CONTOUR ACTIF 
366 ===============================
367 Parallélisation du *Snake* polygonal sur GPU
368 --------------------------------------------
369
370 * 1 thread par pixel.
371 * Concaténation de tous les pixels composant l'ensemble des contours évalués. 
372 * Réductions en mémoire partagée. 
373 * Une seule taille de segment : la taille du plus long. 
374
375 .. note::
376
377  * les réduction consistent à sommer, pour chaque segment les contributions partielles par bloc calculées au 1
378
379 ----
380
381 SEGMENTATION PAR CONTOUR ACTIF 
382 ===============================
383 Parallélisation du *Snake* polygonal sur GPU
384 --------------------------------------------
385
386 Points positifs :
387
388  * Conservation des données en mémoire GPU. 
389  * Images cumulées calculées en parallèle. 
390  * Discretisation des segments en parallèle (1 thread/pixel). 
391  * Respect de l'algorithme original.
392
393 Points négatifs :
394
395  * Trop peu de calculs à effectuer.
396  * Motifs d'accès à la mémoire globale trop irréguliers.
397  * Emploi de la mémoire partagée.    
398  
399 .. note::
400
401  * Un seul entier est échangé entre le CPU et le GPU à chaque itération.
402  * image cumulées par une adaptation de la méthode des sommes de préfixes.
403  * Abandon  Bresenham Possible car parcours unidirectionnel du contour. 
404  * Trop peu de calculs ne permet pas de masquer les latences.
405  * Pas de coalescence possible dans les accès à la mémoire globale car la géométrie des segments varie.
406  * mémoire partagée à cause des réductions.
407
408 ----
409
410 SEGMENTATION PAR CONTOUR ACTIF 
411 ===============================
412 Parallélisation du *Snake* polygonal sur GPU
413 --------------------------------------------
414
415 **Performances de l'implémentation**
416
417 .. image:: img/perfs-snake.png
418    :width: 600px
419  
420 ..
421  
422 .. image:: img/perfs-snake-img.png
423    :width: 400px
424
425 ----
426
427 SEGMENTATION PAR CONTOUR ACTIF 
428 ===============================
429 Parallélisation du *Snake* polygonal sur GPU
430 --------------------------------------------
431
432 **Conclusion**
433
434 * Première et seule implémentation à ce jour.
435 * Performances intéressantes pour les grandes images.
436 * Image 10000x10000 en moins de 0,6 seconde.  
437 * Emploi non optimal du GPU : réductions, irrégularités.
438 * Premières itérations GPU rapides : grands segments.
439 * Temps de calcul très dépendant du contenu de l'image :
440
441   - Proposition d'une méthode d'initialisation alternative.
442   - Recherche du contour rectangle le plus vraisemblable.  
443   - Accélération jusqu'à x15 avec de petites cibles.
444   
445 ----
446
447 LE FILTRAGE DES IMAGES
448 ======================
449
450   * Filtre médian, 
451   * Filtres de convolution, 
452   * Filtre par recherche des lignes de niveaux (PIPD).
453
454 ----
455
456 LE FILTRAGE DES IMAGES
457 ======================
458 Filtre médian : principe
459 ------------------------
460
461 .. image:: img/median-principe.png
462    :width: 600px 
463
464 La valeur de sortie d'un pixel est la **médiane** des valeurs de son voisinage. 
465
466 * Bonne réduction de bruits gaussien et *poivre & sel*
467 * Valeurs de sortie appartenant au voisinage.
468 * Opération de sélection coûteuse (tri).
469 * Usages fréquents avec des petites fenêtres (de 3x3 à 7x7).
470 * Quelques applications avec de grandes fenêtres.
471
472 ----
473
474 LE FILTRAGE DES IMAGES
475 ======================
476 Filtre médian : usage
477 ---------------------
478
479 .. table:: 
480
481    =================================== ======================================== ============================================  
482    .. image:: img/airplane_sap25.png    .. image:: img/airplane_sap25_med5.png   .. image:: img/airplane_sap25_med3_it2.png
483    =================================== ======================================== ============================================   
484    Bruit *poivre & sel* 25%            Médian 5x5                               Médian 3x3 - 2 passes
485    =================================== ======================================== ============================================
486
487 ----
488
489 LE FILTRAGE DES IMAGES
490 ======================
491 Filtre médian GPU : Travaux de référence
492 ----------------------------------------
493
494 Comparaison des implémentations GPU de référence :
495
496  - **PCMF**, Sanchez *et al.* (2013), débit max. **80 MP/s**,
497  - **ArrayFire**, bibliothèque commerciale, débit max. **185 MP/s**,
498  - **BVM** parallélisé par Chen *et al.* (2009), débit max. **110 MP/s**. 
499
500 .. image:: img/compar-median2.png
501    :width: 500px 
502
503 .. note:: 
504
505  * PCMF : Parallel (Complementary Cumulative Derivative Function) Median Filter (histogrammes cumulatifs)
506  * CTMF : CPU à temps constant
507
508 ----
509
510 LE FILTRAGE DES IMAGES
511 ======================
512 Filtre médian GPU : Travaux de référence  
513 ----------------------------------------
514
515 Emploi de la **mémoire partagée** (exemple médian 5x5)
516
517 .. image:: img/shmemhalo.png   
518    :width: 800px
519  
520 .. note:: 
521
522  - recouvrement pose problème à cause accès concurrents à la mémoire partagée.
523
524 ----
525
526 LE FILTRAGE DES IMAGES
527 ======================
528 Optimisation du filtre médian GPU  
529 ---------------------------------
530
531 .. image:: img/CPU-GPU-memcpy.png
532    :width: 650px
533
534 .. image:: img/transferts-mem.png
535    :height: 300px 
536
537 .. note::
538
539  On gagne de 13 à 43 % sur les temps de transfert.
540
541 ----
542
543 LE FILTRAGE DES IMAGES
544 ======================
545 Optimisation du filtre médian GPU  
546 ---------------------------------
547
548
549 .. image:: img/CPU-GPU-memcpy-dummykernel.png
550    :width: 750px
551
552
553 Débits maximums effectifs, en MP/s, sur C2070.
554
555  .. image:: img/debit-max-2070.png
556    :width: 300px
557
558 **Rappel :** PCMF : 80 MP/s - BVM : 110 MP/s - ArrayFire : 185 MP/s
559
560 .. note::
561
562  ça laisse environ 80ms pour faire un tri de 9 valeurs sur une image de 4096x4096 
563
564 ----
565
566 LE FILTRAGE DES IMAGES
567 ======================
568 Optimisation du filtre médian GPU  
569 ---------------------------------
570
571 **Sélection de la médiane**
572
573  * Emploi exclusif des **registres** pour charger les valeurs utiles
574
575      - mémoires individuelles au c |oe| ur du GPU,
576      - non indexables dans un tableau.
577      - maximum de 63 registres par thread et 32 K par bloc de threads.
578
579  * Pour les petites tailles : max. 7x7 avec 1 pixel/thread.
580  * Exploitation des recouvrements entre fenêtres voisines.
581    
582   
583 ----
584
585 LE FILTRAGE DES IMAGES
586 ======================
587 Optimisation du filtre médian GPU  
588 ---------------------------------
589
590 **Sélection de la médiane** (par oubli)
591
592 .. class:: columns
593
594  .. list-table:: 
595     :widths: 50 80 
596     :header-rows: 0 
597
598     * - Avantages :
599  
600         * Évite le tri complet : performances en hausse,
601         * Économie de registres : :math:`\(\lceil \frac{n}{2}\rceil +1\)` au lieu de :math:`\(n\)`,
602         * Permet de plus grandes tailles : max 11x11.
603           
604       - .. image:: img/forgetful_selection.png
605            :height: 500px
606
607 ----
608
609 LE FILTRAGE DES IMAGES
610 ======================
611 Optimisation du filtre médian GPU  
612 ---------------------------------
613
614 **Exploitation des recouvrements** : 2 pixels par thread (médian 5x5).
615
616 .. image:: img/recouvrement5.png
617      :width: 800px
618
619 À 4 pixels/thread, zone commune = 10 pixels < 14 : **pas performant**.
620
621 .. note:: 
622
623   * chaque thread utilise plus de registres
624   * mais sur un bloc, en adaptant la taille du bloc, on économise k+1 registres par paire de pixels.
625
626 ----
627
628 LE FILTRAGE DES IMAGES
629 ======================
630 Performances du médian GPU proposé (PRMF)  
631 ------------------------------------------------
632
633 .. image:: img/perf-median.png
634    :width: 650px
635
636 ----
637
638 LE FILTRAGE DES IMAGES
639 ======================
640 Performances du filtre médian GPU proposé (PRMF)  
641 ------------------------------------------------
642
643 Image 512x512
644
645  .. image:: img/comp512.png           
646     :height: 200px
647
648 Image 4096x4096
649
650  .. image:: img/comp4k.png  
651     :height: 200px
652
653 .. note::
654
655  * débit décroit linéairement en fonction de **n**
656
657 ----
658
659 LE FILTRAGE DES IMAGES
660 ======================
661 Le filtre médian GPU   
662 --------------------
663
664 **Conclusion**
665
666  * Pas d'utilisation de la mémoire partagée.
667  * Accès optimaux : 1 lecture par pixel.
668  * Débit global amélioré de **x7** à **x10**, proche du maximum.
669  * Débit de calcul max. **5,3 GP/s**. 
670  * Médian jusqu'au 11x11 sur C2070, 21x21 sur K40. 
671  * Création d'une application web générant les codes sources.
672  * Utilisé sur images de cristallographie au synchrotron **SPring-8**.
673  
674 .. image:: img/spring82.png
675     :height: 200px 
676
677 ----
678
679 LE FILTRAGE DES IMAGES
680 ======================
681 Les filtres de convolution : généralités  
682 -----------------------------------------
683
684 **Principe**
685
686  .. math::
687  
688   $$I_{out}(x, y) = \left(I_{in} * h\right) = \sum_{(i < H)} \sum_{(j < L)}I_{in}(x-j, y-i)h(j,i)$$
689
690 **Selon les valeurs du masque h**
691
692  * Réduction de bruit, détection de bords,...
693  * Opération **séparable** en deux convolutions 1D.
694  
695
696 ----
697
698
699 LE FILTRAGE DES IMAGES
700 ======================
701 Les filtres de convolution GPU
702 ------------------------------
703
704 Exploitation des recouvrements :
705
706  * un seul accès mémoire par pixel, mémorisation en registre.
707  * Optimum à 8 pixels/thread :
708  * Exemple médian 5x5, pour un thread :
709
710     - 60 pixels dans le halo : 60 lectures.
711     - 200 lectures + préchargement si utilisation mémoire partagée.
712
713 Nvidia propose les implémentations les plus rapides (séparable ou non) :
714
715      * Traitement de référence : 2048x2048 pixels, 5x5, 8bits.
716
717 .. image:: img/debit-calcul-convoNS.png
718    :width: 600px
719
720 ----
721
722 LE FILTRAGE DES IMAGES
723 ======================
724 Les filtres de convolution GPU 
725 ------------------------------
726
727 **Résultats (suite)**
728
729 .. image:: img/debit-calcul-convoS.png
730    :width: 600px
731
732 Convolution séparable :
733
734 * Une convolution verticale en mémoire partagée, suivie d'une convolution horizontale en registres.
735 * Copie intermédiaire en mémoire globale (cache 1D rapide).
736 * L'accélération est due à la seule convolution en registres (54%).
737
738 ----
739
740 LE FILTRAGE DES IMAGES
741 ======================
742 Les filtres de convolution GPU 
743 ------------------------------
744
745 **Conclusion**
746
747  * Amélioration sensible sur les débits de calcul (de 17 à 33 %).
748  * Le traitement 1D est jusqu'à 54% plus rapide. 
749  * Application à d'autres familles de signaux 1D (audio,...).
750
751 ----
752
753 LE FILTRAGE DES IMAGES
754 ======================
755 Filtre par recherche des lignes de niveaux 
756 ------------------------------------------
757
758 **Motivations :**
759
760  * Les algorithmes qui débruitent le mieux sont lents (BM3D).
761  * Les images naturelles sont décomposables en un ensemble de lignes de niveaux ( iso-niveau de gris ). 
762  * Concevoir un algorithme GPU original et son implémentation.
763
764 ----
765
766 LE FILTRAGE DES IMAGES
767 ======================
768 Filtre par recherche des lignes de niveaux 
769 ------------------------------------------
770
771 **Principe - modèle**
772
773  * Estimation locale, par maximum de vraisemblance, des lignes de niveaux.
774  * Réduction de bruit par moyennage le long de la ligne estimée.
775  * Les lignes de niveaux estimées sont modélisées par des lignes brisées nommées **isolines**.  
776  * Les segments des lignes brisées sont choisis parmi des motifs pré-établis (32 motifs).
777  
778
779    .. image:: img/P5Q1.png
780       :width: 500px 
781
782
783 ----
784
785 LE FILTRAGE DES IMAGES
786 ======================
787 Filtre par recherche des lignes de niveaux 
788 ------------------------------------------
789
790 **Principe (étape 1)**
791
792  * En chaque pixel, recherche du motif maximisant la log-vraisemblance ( :math:`\(n=6, \sigma^2 =\)` variance )
793
794  .. math:: 
795
796    $$-\frac{n}{2}log\left(2\pi\right) - \frac{n}{2}log\left(\sigma^2\right) - \frac{n}{2}$$
797
798  * Mémorisation des paramètres des motifs sélectionnés dans deux matrices :math:`\(I_{\Theta}\)` et :math:`\(I_{\Sigma}\)`. 
799
800  .. image:: img/lniv-mv.png
801     :width: 500px
802
803 ----
804
805 LE FILTRAGE DES IMAGES
806 ======================
807 Filtre par recherche des lignes de niveaux 
808 ------------------------------------------
809
810 **Principe (étape 2)**
811
812  * Allongement itératif des segments sous condition GLRT.
813
814  .. math::
815     
816     $$(n_{s_1s_2}+n_{s_3})\left[log\left(\widehat{\sigma_{s_1s_2}}^2\right) - log\left(\widehat{\sigma_{s_3}}^2\right) \right]$$
817  
818  .. image:: img/pipd-detail.png
819     :width: 900px   
820
821 ----
822
823 LE FILTRAGE DES IMAGES
824 ======================
825 Filtre par recherche des lignes de niveaux 
826 ------------------------------------------
827
828 **Principe (étape 3)**
829
830  Compensation de la non robustesse de sélection des motifs dans les zones homogènes.
831  
832   * identification des zones homogènes avec un détecteur de bords.
833   * Application d'un filtre moyenneur dans ces zones.  
834  
835  .. image:: img/detecteur.png
836     :width: 400px   
837
838 .. note::
839
840  * Sous-ensembles de pixels n'ayant pas d'intersection --> MV
841  * Utilisation des motifs des segments pour gain de temps.
842  
843 ----
844
845 LE FILTRAGE DES IMAGES
846 ======================
847 Filtre par recherche des lignes de niveaux 
848 ------------------------------------------
849
850 **Résultats**
851
852  Sur l'ensemble d'images de S. Lansel (DenoiseLab, Université Stanford), filtre proposé (PI-PD)
853
854  * Amélioration moyenne du rapport Signal sur bruit: **+7,1 dB**
855  * Indice de similarité structurelle : **+30%**
856  * Temps de calcul : **7 ms**
857  
858  Comparaison avec BM3D
859  
860  * Amélioration moyenne du rapport Signal sur bruit: **+9,5 dB**
861  * Indice de similarité structurelle : **+36%**
862  * Temps de calcul : **4300 ms**
863  
864 --------
865
866 LE FILTRAGE DES IMAGES
867 ======================
868 Filtre par recherche des lignes de niveaux 
869 ------------------------------------------
870  
871 .. table:: 
872
873    ============================================ === ======================================== 
874    .. image:: img/zoom_noisy.png                    .. image:: img/zoom_mean5.png        
875     
876     Bruit gaussien :math:`\(\sigma=25\)`             Moyennage 5x5                                                           
877    
878    .. image:: img/zoom_pipdh.png                    .. image:: img/zoom_bm3d.png
879    
880     PI-PD                                            BM3D
881    ============================================ === ======================================== 
882
883 --------
884
885 LE FILTRAGE DES IMAGES
886 ======================
887 Filtre par recherche des lignes de niveaux 
888 ------------------------------------------
889
890 **Synthèse - conclusion**
891
892  * Rapport qualité/temps élevé.
893  * Traitement d'images HD à 20 fps.
894  * Artefacts en marche d'escalier. Réduits par la méthode de Buades *et al.* (+1 dB, +0,2 ms pour 512x512).
895  * Extension aux images couleurs et autres types de bruits (multiplicatif). 
896  * Algorithme original sans implémentation séquentielle de référence. 
897
898 ----
899
900 CONCLUSION GÉNÉRALE - PERSPECTIVES
901 ==================================
902
903 * Trois types de conception mis en |~oe| uvre.  
904 * Le portage efficace d'algorithme peut s'avérer très complexe, voire sans intérêt.
905 * L'emploi de la mémoire partagée n'apporte pas les meilleures performances en cas de recouvrements.
906 * Filtres utilisables par tout programmeur grâce à un générateur de code.
907 * Beaucoup de traitements et domaines peuvent bénéficier des techniques proposées.
908 * Les évolutions de l'architecture laissent entrevoir de nouvelles possibilités.
909
910
911 .. note::
912
913  * certaines ardeurs ont été refroidies 
914
915 ----
916
917 ANNEXE 
918 ======
919 Parallélisation du *Snake* polygonal sur GPU
920 --------------------------------------------
921
922 **Structure des données** (n |oe| uds pairs)
923
924 .. image:: img/16segments.png
925    :width: 800px
926
927 .. note:: 
928
929   * règle 1 thread par pixel
930
931
932 .. |oe| unicode:: U+0153
933    :trim:
934
935 .. |~oe| unicode:: U+0153
936    :rtrim:
937
938
939 .. |B| unicode:: U+00DF
940    :trim: