• Aucun résultat trouvé

2.3 Identification des classes

2.3.1 Problèmes liés au filtre

Afin de détecter la structure par blocs d’une matrice P ∈ Rn×n doublement stochas- tique, nous appliquons le filtre de Canny sur son/ses vecteurs singuliers dominants (sauf le tout premier car il s’agit de e = (1...1)T), triés dans l’ordre croissant. Conformément à notre modèle, le fait de trier ces vecteurs dans l’ordre croissant doit les rendre à peu près constants par morceaux, et ainsi permettre de réorganiser les lignes et les colonnes de P de façon à faire apparaître sa structure par blocs. Appliquer le filtre de Canny doit détecter les sauts dans le vecteur analysé, sauts qui correspondent aux séparations entre les blocs. Un exemple est donné Figure 2.5. Sur la Figure 2.5(a) est affichée une matrice symétrique bi-stochastique présentant une structure avec 5 blocs diagonaux de taille 100 dans son ordre naturel. On observe sur le haut de la Figure 2.5(b) son vecteur dominant dans l’orthogonal de e, trié dans l’ordre croissant. Ce vecteur présente une séparation

(a)

(b) (c)

Figure 2.4 : (a) Le filtre pour différentes tailles de fenêtre glissante. (b) et (c) Détection des paliers.

très nette à l’indice 201, et deux moins nettes autour des indices 100 et 400. Les traits en pointillés noirs correspondent aux sauts détectés par le filtre de Canny. En dessous, on affiche la répartition des éléments des classes dans ce vecteur : sur la droite y = 1, une astérisque dont l’abscisse vaut i signifie qu’un élément du premier bloc de la matrice (situé dans l’ordre naturel entre les indices 1 et 100) se trouve être la ieme coordonnée du vecteur réordonné. Sur la droite y = 2, une astérisque en j signifie qu’un élément du deuxième bloc de la matrice (initialement situé entre les indices 101 et 200) est la jeme cordonnée du vecteur réordonné, etc. Les traits verticaux montrent l’emplacement du premier et du dernier indice d’une classe. On peut ainsi observer que l’aspect constant par morceaux de notre vecteur propre coïncide relativement bien avec la structure par blocs de la matrice. Enfin, sur la Figure 2.5(c), on affiche la matrice de la Figure 2.5(a) après avoir réordonné ses lignes et ses colonnes conformément au tri dans l’ordre croissant

(a)

(b) (c)

Figure 2.5 : (a) : Matrice symétrique bi-stochastique avec 5 blocs diagonaux. (b)-haut : Deuxième vecteur propre dominant après tri dans l’ordre croissant. (b)-bas : Répartition des éléments des classes résultant du tri. (c) : Même matrice après permutation des lignes et des colonnes conformément au tri vecteur.

de son vecteur propre. Deux blocs sont mélangés. Les trois autres sont relativement bien séparés.

Cependant, une observation attentive a montré qu’il était impossible de supposer que la structure par blocs proposée directement en sortie de ce processus était cohérente avec celle de la matrice. En effet, plusieurs phénomènes entrent en compte et viennent compromettre ce processus. Certains résultent du tri des vecteurs, d’autres, du produit de convolution :

— Les vecteurs singuliers dominants d’une matrice présentant une structure par blocs imparfaite dans son ordre naturel présentent ce que nous avons appelé un “effet peigne” : les coordonnées d’un vecteur qui correspondent à un même bloc sont bruitées autour d’une constante caractérisant ce bloc dans ce vecteur, constante égale à la moyenne des-dites coordonnées. Pour illustrer cet effet peigne, nous affichons sur la Figure 2.6(a) le vecteur présenté en haut de la Figure 2.5(b), cette fois dans son ordre naturel respectant la structure par blocs de la matrice. Chaque

(a)

(b) (c)

Figure 2.6 : (a) : Deuxième vecteur propre de la matrice de la Figure 2.5(a) dans son ordre naturel. (b) : Zoom autour de l’indice 400 de la Figure 2.5 (b). (c) : Même chose autour de l’indice 100.

couleur correspond à un bloc. On observe que, outre la séparation entre les deux premiers blocs et les trois derniers, on est a priori capable de séparer les deux premiers blocs entre eux, et de séparer le troisième bloc des quatrième et cinquième blocs. En triant le vecteur propre, les éléments d’un bloc présentant les pics les plus hauts se trouvent à côté des éléments d’un autre bloc (celui ayant la moyenne juste supérieure) présentant les pics les plus bas. Il peut être alors très difficile de faire la part des choses entre l’appartenance d’une coordonnée au bloc de droite ou de gauche, étant donné que la séparation entre les blocs se fait par une pente plus ou moins douce contenant plusieurs éléments de chacun des blocs. On dit que le tri des vecteurs propres dans l’ordre croissant a tendance à “lisser" les sauts entre les blocs. Le produit de convolution fournira alors un maximum – voire plusieurs maxima – dans cette zone, mais il est impossible d’être sûr que ce maximum séparera de façon exacte les éléments des deux blocs. C’est par exemple le cas de la séparation entre le troisième et les quatrième et cinquième blocs dans le vecteur des Figures 2.5(b) et 2.6(a) : sur la Figure 2.6(b), on affiche un zoom de la Figure 2.5(b) autour de l’indice 400. L’indice 401 permet effectivement de séparer les deux groupes de blocs. Cependant, si l’on n’a pas d’autre information que l’aspect constant par morceaux du vecteur, il n’est pas possible d’affirmer que c’est précisément cet indice qui sépare la matrice en deux groupes cohérents.

En outre, il peut y avoir des situations où l’amplitude du bruit est supérieure à la différence entre les moyennes de deux blocs successifs : dans ce cas, le tri du vecteur singulier va proposer une répartition des indices qui, quoique fausse – certains éléments du blos de droite seront à la gauche d’éléments du bloc de gauche dans le vecteur réordonné –, a une certaine cohérence : il existe un indice tel que la plupart des éléments d’un même bloc sont d’un même côté de cet indice. Alors il existe une pente au milieu du vecteur singulier réordonné, et le filtre de Canny devrait donc présenter un pic dans cette zone. Le résultat du tri et du produit de convolution va résulter en un découpage qui est incorrect. Un exemple est fourni Figure 2.6(c), en zoomant autour de l’indice 100 de la Figure 2.5(b).

— Le filtre de Canny n’a pas été conçu pour être optimal sur des données discrètes. Ainsi, même dans des cas parfaits, il arrive que des maxima soient décalés de quelques indices par rapport au saut véritable dans le vecteur, ou même qu’un maximum ne corresponde à aucun saut dans le vecteur.

— Appliquer le filtre de Canny sur le vecteur singulier, cela correspond à effectuer un produit de convolution entre le vecteur et le filtre. Comme tout produit de convolution, le vecteur qui en résulte présente des effets de bords, c’est-à-dire des

oscillations sur ses premières et dernières coordonnées. Cela vient du fait que lors de la convolution, le vecteur est implicitement prolongé à gauche et à droite par 0. Un exemple est montré sur la Figure 2.7 : l’image (a) montre un vecteur sur lequel on applique le filtre de Canny sans l’avoir préalablement prolongé. Le résultat du filtre pour deux tailles de fenêtre est donné sur l’image (b), où la partie entre les traits en pointillés correspond aux indices des produits de convolution qui seront conservés dans la somme finale – la taille du vecteur résultant de la convolution est égale à la somme des tailles du vecteur et du filtre moins 1 ; on supprime donc les extrémités pour se retrouver avec un vecteur de la taille du vecteur à analyser. Enfin, l’image (c) montre la somme des deux produits de convolution, et les traits en pointillés correspondent aux maxima, et donc aux sauts détectés dans le vecteur par le filtre. On voit qu’à ses extrémités, cette somme plonge vers des valeurs négatives, alors que le filtre de Canny sur un vecteur croissant doit normalement ne renvoyer que des valeurs positives.

Afin d’éviter que ce phénomène d’effets de bords impacte notre résultat, nous prolongeons le vecteur singulier par une constante à chacune de ses extrémités, et dont la valeur est égale au plus petit (respectivement plus grand) élément du vecteur singulier. Cela permet de supprimer les oscillations de la convolution sur la partie qui nous intéresse. Cependant, suivant le comportement du vecteur singulier à ses bords – notamment si ses bords sont très pentus, comme c’est le cas d’un vecteur baigné dans un bruit Gaussien puis trié dans l’ordre croissant –, cela peut amener le filtre à détecter un saut au début et/ou à la fin du vecteur, saut qui n’est en réalité qu’un parasite. Ce maximum est souvent haut, et peut même être supérieur aux maxima correspondant aux véritables sauts du vecteur. Pour illustrer ce phénomène, nous reprenons le vecteur de la Figure 2.7(a) que nous prolongeons à ses extrémités : le vecteur résultant est donné Figure 2.8(a), où la prolongation est affichée en rouge. Nous observons alors, sur la Figure 2.8(c), que la somme des convolutions de la Figure 2.8(b) présente à ses extrémités des maxima, qui sont loin d’être négligeables, et dont il est clair qu’ils ne correspondent pas à de réels sauts dans le vecteur, mais aux sauts factices introduits par notre prolongation plate aux extrémités du vecteur, qui sont très pentues.

Ainsi, le filtre de Canny appliqué au vecteur singulier réordonné peut amener à la création de blocs parasites, ou au découpage de blocs cohérents. On pourrait être tenté de retourner ce découpage et laisser au processus d’amalgamation chargé de fusionner les classes – processus défini Section 2.5.2 – le soin de supprimer les blocs parasites ou de recoller les parties d’un même bloc injustement séparées. Cependant, cela ne marche

généralement pas : le processus d’amalgamation doit servir à fusionner des blocs cohérents, mais trop petits, ou ayant des valeurs numériques trop faibles, pour être considérés comme importants. S’il est utilisé pour autre chose, son comportement n’est pas prédictible. On illustre cela par la Figure 2.9. Sur les deux images de gauche, on a une matrice et une proposition de découpage par blocs représentée par les traits pleins noirs. Sur ces deux figures, une des séparations proposées n’est pas cohérente avec la structure par blocs de la matrice, et on aimerait que le processus d’amalgamation la fasse disparaître. C’est le cas pour la Figure 2.9(a), mais pas pour la Figure 2.9(b).

En conclusion, le filtre fournit trois types différents d’arêtes. Ces trois types sont illustrés Figure 2.10, où le filtre est appliqué au deuxième vecteur singulier dominant de la matrice représentée Figure 2.10(a).

— Le premier type correspond aux arêtes correspondant à de vrais sauts dans le vecteur.

(a)

(b) (c)

Figure 2.7 : (a) : Troisième vecteur singulier gauche trié dans l’ordre croissant de la matrice rbsb480 issue de [3], après équilibrage doublement stochastique. (b) : Produits de convolution avec le filtre pour deux σ différents. (c) : Somme des deux produits de convolutions. En pointillés noirs, les maxima détectés par le filtre.

Ces arêtes peuvent cependant être placées de façon erronée par le filtre, à quelques indices de leur véritable localisation, comme c’est le cas Figure 2.10(b).

— Le deuxième type correspond aux pentes “douces” dans le vecteur et vient du fait que l’on a réordonné un vecteur bruité. Ce phénomène est montré Figure 2.10(c). — Le troisième type d’arêtes correspond aux arêtes parasites, et peut venir du pro-

longement ou de phénomènes très locaux dans le vecteur analysé. Un exemple est donné Figure 2.10(d).

Pour ces raisons, il est nécessaire de développer un outil permettanta minima de : — Déplacer une charnière nette qui a été mal détectée par le filtre, pour réparer les

erreurs de décalages d’indices.

— Ne pas accepter des charnières en lesquelles on n’a pas suffisamment confiance, pour

(a) (b)

(c)

Figure 2.8 : (a) : Troisième vecteur singulier gauche de la matrice rbsb480 issue de [3] doublement stochastique avec prolongation (en rouge). (b) : Produits de convolution avec le filtre pour deux σ différents. (c) : Somme des deux produits de convolution. En pointillés noirs, les maxima détectés par le filtre.

éviter de détecter des blocs correspondant à des effets de bords, ou de séparer deux blocs dont l’écart entre les valeurs moyennes n’est pas suffisante par rapport au bruit pour éviter l’entrelacement de leurs éléments lors du réordonnancement du vecteur.

— Valider avec certitude les blocs dont on est suffisamment sûrs.

Nous allons voir dans la sous-section suivante qu’il est parfois possible d’obtenir une information complémentaire sur la structure par blocs de P, qui peut permettre de limiter les problèmes liés à l’effet peigne.