Next: Affichage Up: Types de données Previous: intersection

Le calcul de la surface

Pour calculer la surface d'une image, on pose Chaque variable de l'image voit donc sa surface s'exprimer par une équation linéaire sur la surface de ses fils. Pour calculer la surface de l'image, on doit résoudre le système linéaire ainsi formé. Chaque ligne représente l'équation associée à une variable, et il est nécessaire de les indexer, ce qui aurait été simplifié dans le cas de la représentation en tableaux. On commence donc par associer à chaque variable un entier en parcourant simplement l'arbre, puis on remplit la matrice en regardant l'indice des fils de chaque variable et les termes constants proviennent des éventuels fils Noir. Le système est ensuite résolu par la méthode du pivot de Gauss sur les matrices réelles.

Cependant, on peut remarquer que la matrice ne comporte au plus que cinq coefficients non nuls (le terme diagonal et les quatre fils) par ligne en comptant le terme constant. C'est pourquoi la procédure vérifie si le coefficient est non nul et différent de 1 avant d'effectuer un calcul coûteux. On obtient ainsi la surface de toutes les variables, ce qui s'avère très utile pour l'affichage, comme on le verra par la suite.

Une autre méthode avait tout d'abord été implémentée qui tirait parti de la structure en arbre et consistait à simplifier le système à chaque nud. En effet on implante une fonction récursive equation_surface qui prend pour argument la variable X dont on veut la surface et un ensemble de variables qui sont celles situées au dessus de X dans l'arbre, et qui renvoie la surface de X comme combinaison linéaire des .


surface X {Yi} =
  si X=Blanc renvoie 0
  si X=Noir renvoie 1
  si il existe i tq X=Yi alors renvoie Yi
  sinon 
    combinaison_lineaire=0
    pour chaque    fils Z de X
      ajoute 1/4(surface Z {Yi}UX} a combinaison_lineaire
    match combinaison_lineaire with aX+b+Somme(aiYi) 
          et renvoie b+Somme(aiYi)/(1-a)

(en effet on a d'où le résultat renvoyé, qui est la surface de X en fonction des seules variables qui sont au dessus de lui.)

Malheureusement, cet algorithme ne fonctionne plus dès que l'on autorise les variables utilisées à ne pas se trouver uniquement au dessus dans l'arbre, il a donc été abandonné ; il avait également le défaut de ne calculer, dans un premier temps, que la surface de l'image toute entière (on pouvait tout de même calculer simplement les surfaces des variables en parcourant l'arbre à nouveau, ce qui revenait à résoudre le système en cascade).

Toutefois, étant donné la spécificité de la matrice (une majorité de 0, et uniquement des coefficients et 1 !), la matrice peut très certainement être inversée de manière plus élégante et plus juste, malheureusement, cette possibilité n'a pu être exploitée faute de temps.



Next: Affichage Up: Types de données Previous: intersection


fdurand@clipper.ens.fr, fleuret@clipper.ens.fr
Thu Jun 9 18:32:25 MET DST 1994