ERREUR FÉQUENTE SUR LE CODAGE DE L'ICM ====================================== En regardant rapidement votre code, je vois que vous avez deux matrices (tableau 2D), un pour x et l'autre pour xnew. Dans votre code, vous regardez le voisinage des étiquettes de x (pour l'énergie a priori) et, en ajoutant la vraisemblance (ligne U0=-log(P0)+alpha*N1; et U1=-log(P1)+alpha*N0 ), vous prenez la décision, c-a-d modifier, l'étiquette (1 ou 0 ) dans xnew ! Non il faut modifier l'étiquette (1 ou 0 ) dans x ! l'ICM n'est pas un filtrage dans lequel il y a deux matrices mais une descente de gradient faite sur x ! x est un tableau 2Dim de variables (prenant soit la valeur 1 ou 0) pour lequel on doit faire une descente de gradient laquelle consiste a prendre chaque variable, l'une après l'autre, et une fois que l'on a modifié une variable (en un pixel) c-a-d changer son étiquette de classe (0 ou 1) on passe à la variable suivante (c-a-d au pixel suivant) en conservant se qui a été changé précédemment pour la variable précédente donc sur x ! On appelle cela un gradient à direction alternée (chaque pixel est modifié l'un à la suite de l'autre; l'autre étant modifié en conservant l'étiquette de classe qui a été modifiée précédemment). Prenons un exemple d'une fonction à deux variables f(a_c,b_c). Si on fait une descente de gradient à pas alterné sur f, alors en étape 1, on prendra d'abord la variable a_opt pour laquelle f(a_opt,b) est plus petit que f(a_c,b_c) et cela nous donnera f(a_opt,b_c) puis après on prendra b_opt pour laquelle f(a_opt,b_opt) est plus petit que f(a_opt,b_c) et cela nous donnera finalement f(a_opt, b_opt).... puis, en deuxième balayage, on essaiera de prendre a_opt2 tel que f(a_opt2, b_opt) plus petit que f(a_opt, b_opt): résultat f(a_opt2, b_opt) puis b_opt2 pour lequel f(a_opt2, b_opt2) plus petit que f(a_opt2, b_opt) (fin du deuxième balayage) ...et on fait un troisième balayage ...jusqu'à convergence .... Dans le cas de l'ICM sur une image, il faut remplacer f qui a deux variables dans mon exemple, par l'image qui a autant de variables que de pixels et qui prend pour les valeurs de a et b soit l'étiquette 0 ou 1 et pour f(.) le calcul de l'energie que l'on cherche a minimiser. Vous avez besoin d'un second tableau 2Dimensions pour savoir seulement si d'une itération à l'autre (c-a-d, après un balayage complet de l'image) combien d'étiquettes ont été changées.