Image Entrée de l’algorithme
laBaule_spot gradient 5
laBaule_spot gradient 25
tools gradient 5
tools gradient 20
tools gradient 40
Refaites les mêmes tests sur les images préalablement traitées par un filtre moyenne puis par
un filtre médian.
Que constatez-vous ? A quoi sert en pratique le paramètre epsilon, qui permet de considérer
des pixels d’altitude proche comme ayant la même altitude ? Est-ce que l’algorithme est sensible
au bruit de l’image ?
Calcul de la ligne de partage des eaux
Les entrées de l’algorithme sont :
– une image de nombre flottants (les altitudes des pixels)
–un nombre flottant (incertitude sur l’altitude)
En sortie, l’algorithme fournit une image d’entiers : chaque pixel contient soit une étiquette
correspondant à un bassin, soit WATERSHED s’il sépare deux bassins.
Editez la classe Watershed et sa méthode calculeWatershed. Observez bien ce qui est déjà
écrit (voir aussi la Figure 2). Les étapes de l’algorithme, déjà écrites ou à compléter, sont les
suivantes :
1. Les pixels sont d’abord triés par ordre croissant d’altitude.
2. Ils sont ensuite traités par série : tous ceux entre het h+sont considérés d’altitude identique.
3. Ces pixels sont alors MASKés et il faut déterminer à quel bassin ils appartiennent.
4. On commence par traiter les nouveaux pixels MASKés qui touchent déjà un bassin (pixel
étiqueté) ou une frontière (pixel WATERSHED). Ils sont à distance 1. Les autres MASKés
seront à distance 2, 3, voire plus. Voir (II) dans le code Watershed.java.
5. Ces pixels sont placés dans une file d’attente. Un élément fictif indique la fin de file et donc
le passage à des pixels à des distances supérieures. Voir (III) dans le code.
6. Etant donné un pixel dans la file, on peut maintenant le traiter en fonction de son voisinage.
Implémentez l’étiquetage du pixel courant. Voir (IV.TODO). Pour ce faire, reprenez les cas
possibles (cf. Figure 3). Les points suivants sont importants :
– On ne teste que les voisins de distance inférieure à la distance courante (les autres, de
même distance que le pixel courant, sont traités en parallèle).
– Le calcul se fait en regardant successivement les quatre pixels adjacents : le pixel courant
peut donc être réétiqueté différemment plusieurs fois.
– Le pixel sera étiqueté soit par un label voisin, soit par WATERSHED.
– Il faut aussi déterminer les pixels voisins à distance +1 et les mettre dans la file. A la
détection, ils sont de distance nulle et MASKés.
7. La dernière phase de l’algorithme reprend tous les pixels traités, et s’ils ne sont pas étiquetés,
leur donne une nouvelle étiquette. Tous les voisins non étiquetés sont étiquetés de même par
propagation. Implémentez cet étiquetage des nouveaux bassins. Voir (V. TODO).
Reprenez les tests du premier exercice.
Fermeture des frontières entre bassins
La ligne de partage des eaux telle que calculée par cet algorithme ne crée pas des frontières
complètes autour des régions. En effet, les frontières sont placées sur les pixels à égale distance
entre deux bassins. Complétez la méthode fermeWatershed pour fermer les frontières après calcul
du watershed.
2