307 views
--- title: INFO911 (5c) Segmentation - approches contours type: slide slideOptions: transition: slide progress: true slideNumber: true --- # Segmentation d'image - approches contours ## (Traitement et Analyse d'Image 5c) > [name=Jacques-Olivier Lachaud][time=Decembre 2020][color=#907bf7] > (Les images peuvent être soumises à des droits d'auteur. Elles sont utilisées ici exclusivement dans un but pédagogique) ###### tags: `info911` Retour à [INFO911 (Main) Traitement et analyse d'image](https://codimd.math.cnrs.fr/s/UE_B59gMy) --- # Approches contours | échographie | contours perceptuels | | -------- | -------- | | ![](https://codimd.math.cnrs.fr/uploads/upload_c55933f92d78fa90cf57cf4e6c8c7db5.jpg =x140) | ![](https://codimd.math.cnrs.fr/uploads/upload_7ceba99fdbd4e097d53f43c1365668fd.png =x180)| :::warning Parfois, régions peu homogènes, limites entre régions plus visibles ou information de contour plus pertinente ::: --- ## Approche de [Marr, Hildreth, 1980] :::info ==Détecteur de Marr \& Hildreth sur image $I$== : localise les contours en recherchant les forts gradients de $I * G_\sigma$, tels que le Laplacien de $I$ change de signe autour. ::: | $\sigma$ | $I':=I * G_{\sigma}$ | $\|\nabla I'\|\ge 15$ | Marr-Hildreth 4 | Marr-Hildreth 8 | | --- | -------------------- | -------- | --- | -------- | | 0.5 | ![](https://codimd.math.cnrs.fr/uploads/upload_e48b62ace1ef71e42946d5c3f204d895.png) | ![](https://codimd.math.cnrs.fr/uploads/upload_c19460b13e4ae28e3e89e60e851ced98.png) | ![](https://codimd.math.cnrs.fr/uploads/upload_730708f81d9a590f33ef08c4a33738ed.png) | ![](https://codimd.math.cnrs.fr/uploads/upload_ff41d70309c8a73c7237b3bdfc70fde7.png) | --- | $\sigma$ | $I':=I * G_{\sigma}$ | $\|\nabla I'\|\ge 15$ | Marr-Hildreth 4 | Marr-Hildreth 8 | | -------- | -------------------- | --------------------- | --------------- | --------------- | | 1.5 | ![](https://codimd.math.cnrs.fr/uploads/upload_f51bbfd39e736a1c1e88ab8895f82e9b.png) | ![](https://codimd.math.cnrs.fr/uploads/upload_4950cbeb289c15ae8a1837eefba429e2.png) | ![](https://codimd.math.cnrs.fr/uploads/upload_3d6a8a5e95f17a2af16677eb8d2fe22b.png) | ![](https://codimd.math.cnrs.fr/uploads/upload_1f105ad01126d787cc3964c2cc9dd389.png) | | 3.0 | ![](https://codimd.math.cnrs.fr/uploads/upload_145db0124b4560527dbbbfe619b82ec1.png) | ![](https://codimd.math.cnrs.fr/uploads/upload_21d2025f91005c4cd4adeca079bd61f8.png) | ![](https://codimd.math.cnrs.fr/uploads/upload_41420a8f22cfbf49084b936efcc246ad.png) | ![](https://codimd.math.cnrs.fr/uploads/upload_efcd8becabe8467f698d00d88e7ab51f.png) | --- ## Détecteur de contours de [Canny, 1980] :::info ==Détecteur de Canny sur image $I$== : localise les contours en recherchant les **crêtes** des forts gradients de $I * G_\sigma$, puis filtre selon des paramètres $s_1, s_2$. ::: 1. Flou pour éliminer le bruits des capteurs => $I' := I \ast M_\sigma$ 2. Filtres dérivatifs pour direction $\mathbf{v}^\perp$ des contours => $(I_x,I_y) := (I' \ast S_x, I' \ast S_y)$ 3. Calcul de la force des contours => $G=\sqrt{I_x^2+I_y^2}$ 4. $E$ = pixels $p$ tels que $G[p]$ est un maximum local dans la direction $\mathbf{v}^\perp$ 5. $E'$ = pixels de $E$ tels que $G[p] \ge s_1$ 6. On rassemble les pixels de $E'$ voisins dans des contours $C_1, C_2, \ldots$ 7. On ne garde que les contours qui ont au moins un pixel $q$, tel que $G[q] \ge s_2$. --- ## Etapes de calcul de Canny | ![jol](https://codimd.math.cnrs.fr/uploads/upload_bae176538c5489eddcb51bf3cbab2879.png =x120)| ![jol-gx](https://codimd.math.cnrs.fr/uploads/upload_d3b6cf6280e71af8fc76b9e46737729d.png =x120)| ![jol-gy](https://codimd.math.cnrs.fr/uploads/upload_0ea0b778f88c680042626c16c9f54e17.png =x120)| | -------- | -------- | -------- | | ![jol-g](https://codimd.math.cnrs.fr/uploads/upload_c02aa4df2c1152e3338c8b04657b98b8.png =x120)| ![jol-e-15-15](https://codimd.math.cnrs.fr/uploads/upload_3d7fc75862823e5689d9c72485676883.png =x120)| ![jol-e-15-30-s](https://codimd.math.cnrs.fr/uploads/upload_f9e71106087cabfb8d0ab522589f80e8.png =x120)| --- ## Etape 4 : identification des maximas locaux du gradient ![jol-zoom-g](https://codimd.math.cnrs.fr/uploads/upload_d358f2d73d110c40c87c01a52d806732.png) --- ## Détecteur de contours de Canny | input | $\sigma=1.4, s_1=24, s_2=96$ | $\sigma=1.9, s_1=12, s_2=25$ | |:----------------------------------------------------------------------------------------------:| ------------------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------------------ | | ![lena](https://codimd.math.cnrs.fr/uploads/upload_d2c0313c655a51f9d4ba0cd164b652fe.png =x200) | ![lena-canny-1](https://codimd.math.cnrs.fr/uploads/upload_6a60f6c815f18d24a46f635266cd493c.png =x200) | ![lena-canny-2](https://codimd.math.cnrs.fr/uploads/upload_ba9a861610cc0c068c00e425319838e0.png =x200) | :::danger En général, les contours ne ferment pas les régions `video-sketch` `video-contours` ::: --- ## Algorithme de ligne de partage des eaux (Watershed) ==Principe== Voir l'image gradient comme une carte topographique, et trouver les bassins où l'eau s'écoule. | Image norme gradient | Vue topographique | Remplissage des bassins | | -------- | -------- | -------- | | ![watershed-input](https://codimd.math.cnrs.fr/uploads/upload_a2e68b480b2eb2e8466391f9e74b7ed4.png =x200) | ![watershed-topo](https://codimd.math.cnrs.fr/uploads/upload_64b741b9ebc3b3b82070dca593216174.png =x200) | ![](https://codimd.math.cnrs.fr/uploads/upload_9aeba6af6f40d50dd27cc6726f742def.gif =x200) | --- ## Watershed: exemple de résultats | Image | Résultat| | -------- | -------- | | ![watershed-tools-input](https://codimd.math.cnrs.fr/uploads/upload_47478a99062f54cce15d1276fbf1aaf7.png =x200)| ![watershed-tools-result](https://codimd.math.cnrs.fr/uploads/upload_a643853070dcab8d435e0b1a415eac15.png =x200) | --- ## Watershed: sursegmentation, sensibilité au bruit | Image | Résultat| | -------- | -------- | | ![watershed-texte-input](https://codimd.math.cnrs.fr/uploads/upload_ae6fd4759d92a5dd7dfb3e9a498fe6aa.png =x180)|![watershed-text-result](https://codimd.math.cnrs.fr/uploads/upload_a5000bc75df0466f85a63c21c32f91b1.png =x200) | --- ## Watershed: marqueurs donnant les bassins à garder | Marqueurs | watershed | | --------- | --------- | | ![lena-markers-watershed](https://codimd.math.cnrs.fr/uploads/upload_909d2226d38bc00cb3215366fc3beefd.png =x200) | ![lena-markers-watershed-result](https://codimd.math.cnrs.fr/uploads/upload_e54cfd5797076ea1aba3bcfccc9bb571.png =x200) | `video-watershed` --- ## Watershed : algorithme [Vincent, Soille 1991] ![](https://codimd.math.cnrs.fr/uploads/upload_b2d0af1322254b36993b6a1db52b0005.png =x80) 1. Norme du gradient de l'image $G=\sqrt{I_x^2+I_y^2}$, avec $I_x = I \ast S_x$ et $I_y = I \ast S_y$ 2. Tri des pixels dans l'ordre croissant de $G$ 3. Par groupe de pixels de même altitude a. Tri des pixels par distance à bassin existant b. Assignation des labels suivant configuration locale ![watershed-vs-config](https://codimd.math.cnrs.fr/uploads/upload_408bca4002cecc921d8cd642fea6e4af.png =x70) c. Si pixels non étiquetés, nouvelle étiquette --- ## Stochastic watershed [Angulo, Jeulin 2007] ==Idée== Faire tourner plusieurs le watershed avec des marqueurs tirés aléatoirement puis **sommer** les contours obtenus ![stoch-watershed](https://codimd.math.cnrs.fr/uploads/upload_f824f0b3bdc76d51fac7d25670e5ab0c.png =x200) `video-stochastic-watershed` --- ## Conclusion * algorithmes efficaces, plus simples à mettre en oeuvre que les algos région * problèmes de fermeture des contours pour l'approche filtre (Canny) * joliment résolu par watershed * mais problèmes de sursegmentation * utilisation de marqueurs en général * manque de géométrie dans les contours