function valeur= Inter_LN(Imdep,Imseg)
% Calcul du contraste inter-région de Lévine et Nazif
% pour une image bmp 8bits en niveaux de gris stockée sous la forme d'une matrice
% Imseg : matrice correspondant à l'image segmentée avec des valeurs allant de 1 à n pour les n régions segmentées 
% Imdep : matrice correspondant à l'image originale
%
%
% Utilitaires pour l'évaluation de la segmentation d'images
% Toolbox matlab (version 5.3)
%
% (c) Laboratoire de Vision et Robotique (UPRES EA 2078)
% ENSI de Bourges - Université d'Orléans
%
% Sébastien Chabrier : sebastien.chabrier@ensi-bourges.fr
%
% Si vous utilisez cette toolbox, veuillez citer ce papier svp.
%
%S. Chabrier, B. Emile, C. Rosenberger, H. Laurent, 
%"Unsupervised performance evaluation of image segmentation", 
%Special Issue on Performance Evaluation in Image Processing, 
%EURASIP Journal on Applied Signal Processing, pages 1-12, 2006.

valeur=0;

NBCLASS=double(max(max(Imseg)));
moyenne=zeros(1,NBCLASS);
contraste=zeros(1,NBCLASS);
contraste_croise=zeros(NBCLASS);
perimetre=zeros(1,NBCLASS);
frontiere=zeros(NBCLASS);
aire=zeros(1,NBCLASS);

for k=1:NBCLASS
   [region_k]=find(Imseg==k);
   aire(k)=length(region_k);         %nb de pixels de la région k
   if (aire(k)>0)
      moyenne(k)=sum(sum(Imdep(region_k)))/aire(k);
   else
      moyenne(k)=0;
   end;
   
   Imbin=zeros(size(Imseg));
   Imbin(region_k)=ones(size(region_k));
	contour_k=find((double(dilate(Imbin,ones(3)))-double(Imbin))==1);
   for l=1:NBCLASS
      if (contour_k)
	      M=find(Imseg(contour_k)==l);
   	   if (M)
      	   frontiere(k,l)=length(M);
	      else
   	      frontiere(k,l)=0;
         end;
      else
         frontiere(k,l)=0;
      end;
	end;
   perimetre(k)=length(contour_k);
   if (perimetre(k)==0)
      frontiere(k,:)=0;
   else
      frontiere(k,:)=frontiere(k,:)/perimetre(k);
   end;
   
end;

for k=1:NBCLASS
   for l=1:NBCLASS
		if (moyenne(k)+moyenne(l)==0)
         contraste_croise(k,l)=0;
      else
         contraste_croise(k,l)=abs(moyenne(k)-moyenne(l))/(moyenne(k)+moyenne(l));
      end;
   end;
	contraste(k)=frontiere(k,:)*contraste_croise(k,:)';
end;
%[contraste_croise]
%pause;
valeur=(aire*contraste')/sum(aire);   
   
disp(valeur)