12.07.2015 Views

Algorithmes de la morphologie mathématique pour - Pastel - HAL

Algorithmes de la morphologie mathématique pour - Pastel - HAL

Algorithmes de la morphologie mathématique pour - Pastel - HAL

SHOW MORE
SHOW LESS
  • No tags were found...

You also want an ePaper? Increase the reach of your titles

YUMPU automatically turns print PDFs into web optimized ePapers that Google loves.

Jaromír BRAMBOR5.1. ALGORITHMES ÉLÉMENTAIRES POUR LES GPPet elle peut contenir ainsi (ou pas) le pixel même, ses voisins mais également les pixels qui sont plus éloignés<strong>de</strong>s voisins les plus proches du pixel concerné. Malgré ce fait, nous parlons du voisinage local (ou<strong>de</strong> local neighborhood en ang<strong>la</strong>is). Et c’est, en effet, <strong>la</strong> fonction extr qui assure tout en ce qui concerne<strong>la</strong> notion du voisinage, le type <strong>de</strong> <strong>la</strong> grille, <strong>la</strong> manière dont on gère les effets <strong>de</strong> bord et <strong>la</strong> manière exacte<strong>de</strong> l’échantillonnage <strong>de</strong>s pixels dans l’image. Ainsi, nous obtenons un stream <strong>la</strong>rge dont les élémentssont les listes composées <strong>de</strong>s pixels formant le voisinage.Sur tous les éléments <strong>de</strong> ce stream <strong>la</strong>rge, nous appliquons, sur <strong>la</strong> ligne 4, <strong>la</strong> fonction map qui secharge d’exécuter le kernel <strong>de</strong> l’opération morphologique op. Il s’agit, en effet, d’un kernel <strong>de</strong> réduction,cf. 3.4.1.2, page 45, qui calcule une nouvelle valeur <strong>pour</strong> l’in<strong>de</strong>x donné à partir d’un ensemble <strong>de</strong>s voisins.Nous obtenons un stream <strong>de</strong>s résultats auquel nous ajoutons (ligne 3) l’information sur <strong>la</strong> position par <strong>la</strong>fonction zip avec le stream <strong>de</strong>s in<strong>de</strong>x ixs comme argument. Le résultat <strong>de</strong> cette opération est un stream<strong>de</strong>s tuples (in<strong>de</strong>x, valeur) à partir duquel nous reconstituons, sur <strong>la</strong> ligne 2, un array <strong>de</strong> sortie par <strong>la</strong>fonction standard array.Il faut préciser que nous avons obtenu un skeleton algorithmique qui est très général et dont nouspouvons dériver beaucoup <strong>de</strong> cas particuliers. Il décrit le principe <strong>de</strong> fonctionnement et n’exhibe pasexplicitement les détails secondaires. Ainsi, <strong>la</strong> gran<strong>de</strong> partie du travail lourd n’est pas exposée et resteà définir par l’utilisateur lors <strong>de</strong> <strong>la</strong> spécialisation <strong>de</strong> ce skeleton à travers <strong>la</strong> fonction d’extraction duvoisinage ExtrNgb α.5.1.1.2 <strong>Algorithmes</strong> concrets utilisant le skeleton algorithmique ngbAlgoUne fois <strong>la</strong> structure du mo<strong>de</strong> opérationnel <strong>de</strong> l’approche naïve <strong>de</strong> travail sur le voisinage présentée,nous allons procé<strong>de</strong>r à <strong>la</strong> construction <strong>de</strong>s algorithmes concrets et utilisables en pratique par <strong>la</strong> spécialisation<strong>de</strong> ce skeleton.Mais tout d’abord, il faut ajouter une précision concernant l’extraction du voisinage. L’extractiond’un pixel à partir d’un array 2D est simple. Pour pouvoir extraire les valeurs <strong>de</strong>s pixels voisins à ce<strong>de</strong>rnier, nous avons besoin <strong>de</strong> déterminer certains détails. Pour les applications travail<strong>la</strong>nt sur le voisinagelocal dans le domaine digitalisé 1 , il s’agit notamment :• du voisinage utilisé – 4, 6, 8 voisins ou autres, représentés par les in<strong>de</strong>x re<strong>la</strong>tifs,• du type <strong>de</strong> <strong>la</strong> grille – hexagonale, carrée ou spécifique (graphes <strong>de</strong> voisinage particuliers), représenté,en général, par <strong>la</strong> fonction qui met en correspondance les in<strong>de</strong>x re<strong>la</strong>tifs désignant les voisinsavec l’emp<strong>la</strong>cement exact <strong>de</strong>s voisins dans l’array d’entrée,• <strong>de</strong> <strong>la</strong> façon <strong>de</strong> gérer les effets <strong>de</strong> bord – valeur <strong>de</strong> bord constante, valeur du voisin le plus prochedans l’image, gestion particulière du voisinage aux bords, etc.C’est <strong>la</strong> fonction d’extraction du voisinage qui assure toutes ces activités. Elle nous retourne, <strong>pour</strong>chaque in<strong>de</strong>x concret qui localise une position à l’intérieur <strong>de</strong> l’array, une liste <strong>de</strong>s valeurs <strong>de</strong>s pixelsdésignées par l’élément structurant. Cette liste, qui est le seul argument d’entrée à l’opération morphologiquesur le voisinage, peut être perçue par certains algorithmes comme un stream où l’ordonnancementn’est pas important (e.g. di<strong>la</strong>tation morphologique), mais nous pouvons utiliser avec avantage <strong>la</strong> notion<strong>de</strong> l’ordre dans cette liste dans d’autres algorithmes (e.g. <strong>la</strong> transformation tout ou rien).Expliquons cette implémentation (définie par <strong>la</strong> fonction dilSQR) sur un exemple précis <strong>de</strong> <strong>la</strong> di<strong>la</strong>tationmorphologique sur <strong>la</strong> grille carrée par un élément structurant <strong>de</strong> 4 voisins. Nous allons utiliser<strong>la</strong> fonction d’extraction <strong>de</strong>s voisins extrNgbSQR qui est spécialisée <strong>pour</strong> <strong>la</strong> grille carrée. Le voisinageest défini par <strong>la</strong> liste <strong>de</strong>s dép<strong>la</strong>cements re<strong>la</strong>tifs <strong>pour</strong> un point et ses 4 voisins ngbSQR4. La fonction <strong>de</strong>traitement <strong>de</strong>s bords que nous avons choisie, cBor<strong>de</strong>r, représente le bord <strong>de</strong> l’image dont <strong>la</strong> valeur estconstante, c’est-à-dire que cette fonction nous retourne <strong>pour</strong> tous les in<strong>de</strong>x <strong>la</strong> valeur <strong>de</strong> son premier argumentbrdval. L’opération <strong>de</strong> di<strong>la</strong>tation morphologique est assurée par le kernel <strong>de</strong> réduction du stream<strong>de</strong>s voisins, ce kernel est exprimé par <strong>la</strong> fonction ngbDi<strong>la</strong>te. Le <strong>de</strong>rnier point à préciser est l’utilisation1Notons que ce principe est utilisé dans le champs plus <strong>la</strong>rge <strong>de</strong>s applications et ne se restreint pas seulement à <strong>la</strong> Morphologie<strong>mathématique</strong>101

Hooray! Your file is uploaded and ready to be published.

Saved successfully!

Ooh no, something went wrong!