Next: Le calcul de Up: les algorithmes de Previous: pivotement

intersection

L'intersection relève du même principe, en un peu plus compliqué, puisqu'ici deux images sont à considérer, notons les A et B. Pour chaque couple de variables X et Y de A et B rencontré, on crée une variable . On a en effet :

Les deux dernières relations permettent de simplifier le calcul par rapport au cas général d'une opération binaire sur deux image où il faudrait impérativement rencontrer deux couleurs pour donner le résultat, en s'appuyant sur la table de vérité de la relation. C'est pourquoi la procédure n'a pas été généralisée, contrairement a ce qui a par la suite été fait pour les images en couleurs. Et le programme termine forcément puisque le nombre de variables créées est majoré par nm+n+m où n est le nombre de variables de A et m celui de B (mn pour les , n pour et m pour les ).


let intersection i j =
let deja_vues = ref [] in
let rec inter_aux = function
  Fantome -> failwith("Calcul d'intersection sur une image 
fantome")
| Color Blanc -> (function _ -> ref (Color Blanc))
| Color Noir  -> (function i -> ref i)
| i -> function 
    Fantome -> failwith("Calcul d'intersection sur une image 
fantome")
  | Color Blanc -> ref (Color Blanc)
  | Color Noir  -> ref i
  | j -> try cpl_assq (i, j) !deja_vues
         with Not_found -> let h = ref Fantome
                           in deja_vues := ((i, j), h)::(!deja_vues);
                           h := Node(map2 inter_aux (fils i) (fils j));
                           h
in !(inter_aux i j);;

Et on l'a vu il s'agit d'un algorithme en .


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