% Calcul du veritable mean square deviation % En fonction du seuil mais aussi calcul de la piece wise constant pour ne % pas perdre de temps a la recalculer apres function [msd,MC,C] = msd_relier2(l, c, N, R, k) % On appelle les fonctions handles ed = @edginess; cons = @byaverage; n = @norme; moy = @moyenne; bds = @boundaries; link = @relier; % Voila la premiere boucle pour trouver % les edges et la matrice qui va avec % En plus on cree la matrice temoin M B = zeros(size(N)); B(l,:) = N(l,:); B(:,c) = N(:,c); M = zeros([l c]); % M est la matrice temoin, mais on commence par enlever % tous les points qui sont des edges % B est la matrice couleur qui a aussi les edges en blanc [M, B] = feval(bds, l, c, N, R, k,'no'); % Maintenant on applique a M RELIER, pour % ameliorer l'etude [M, B]= feval(link, M, B, l, c,'no'); %[M, B]= feval(link, M, B, l, c,'no'); %[M, B]= feval(link, M, B, l, c,'no'); % On sauvegarde la matrice contour apres link MC = M; % on va limiter l'etude a la matrice temoin M(l,:) = 1; M(:,c) = 1; M(1,:) = 1; M(:,1) = 1; t = 0; % Ensuite on calcule la reelle mean square % deviation al'aide du "fill" programme couple =[[-1 0];[1 0];[0 -1];[0 1]]; C = B; for i = 1:l for j = 1:c if M(i,j) ~= 1 M(i,j) = 1; % On cree la matrice AP qui represente % les coordonnees des derniers points crees % initialisation AP = [i j]; [m,n] = size(AP); % On va essayer de tout mettre a la moyenne sur tous les points s = 0; So = 0; % d va representer le nombre de lignes dans l'ancienne matrice A while m > 0 AV = AP; AP = []; % u va representer le nombre de lignes dans la nouvelle matrice A u = 0; for k = 1:m for r = 1:4 if M(AV(k,1) + couple(r,1), AV(k,2) + couple(r,2)) ~= 1 M(AV(k,1) + couple(r,1), AV(k,2) + couple(r,2)) = 1; % Ici on agrandit l'after matrice u = u + 1; % Ici on agrandit le vecteur contenant les coordonnes des points % dont on veut la moyenne s = s + 1; % On transforme le vecteur avant en vecteur apres AP(u,1) = AV(k,1) + couple(r,1); AP(u,2) = AV(k,2) + couple(r,2); % Et on ajoute un vecteur dans le vecteur moyenne AM(s,1) = AV(k,1) + couple(r,1); AM(s,2) = AV(k,2) + couple(r,2); So = So + B(AV(k,1) + couple(r,1), AV(k,2) + couple(r,2)); end end end [m n] = size(AP); end % On calcule le mean square deviation w = 0; for e = 1:s w = (B(AM(e,1),AM(e,2)) - (So)/s)^2 + w; C(AM(e,1),AM(e,2)) = (So)/s; end % Et on donne la valeur a tous les points concernes for e = 1:s msd(AM(e,1),AM(e,2)) = w; end else continue end end end