Index: trunk/src/series/relabel_i_j.m
===================================================================
--- trunk/src/series/relabel_i_j.m	(revision 40)
+++ trunk/src/series/relabel_i_j.m	(revision 40)
@@ -0,0 +1,126 @@
+% relabel_i_j: relabel an image series with two indices, according to the time matrix given by ImaDoc
+%----------------------------------------------------------------------
+function GUI_input=relabel_i_j(num_i1,num_i2,num_j1,num_j2,Series)
+%requests for the visibility of input windows in the GUI series  (activated directly by the selection in the menu ACTION)
+if ~exist('num_i1','var')
+    GUI_input={};
+    return %exit the function 
+end
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%enable waitbar
+hseries=guidata(Series.hseries);%handles of the GUI series
+WaitbarPos=get(hseries.waitbar_frame,'Position');
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+basename=fullfile(Series.RootPath,Series.RootFile) ;
+
+%create dir of the new images
+[dir_images,namebase]=fileparts(basename);
+[path,subdir_ima]=fileparts(dir_images);
+curdir=pwd;
+cd(path);
+mkdir([subdir_ima '_ij']);
+cd(curdir);
+basename_new=fullfile(path,[subdir_ima '_ij'],namebase);
+
+% read imadoc
+[XmlData,warntext]=imadoc2struct([basename '.xml']);
+nbfield1=size(XmlData.Time,1)
+nbfield2=size(XmlData.Time,2)
+
+answer=msgbox_uvmat('CONFIRMATION','apply image rescaling function levels.m')
+test_level=isequal(answer,'Yes')
+
+%copy the xml file
+if exist([basename '.xml'],'file')
+    copyfile([basename '.xml'],[basename_new '.xml']);% copy the .civ file
+    t=xmltree([basename_new '.xml']);
+    
+    %update information on the first image name in the series
+    uid_Heading=find(t,'ImaDoc/Heading');
+    if isempty(uid_Heading)
+        [t,uid_Heading]=add(t,1,'element','Heading');
+    end   
+    uid_ImageName=find(t,'ImaDoc/Heading/ImageName');
+    ImageName=name_generator(basename_new,num_i1(1),num_j1(1),'.png','_i_j');
+    [pth,ImageName]=fileparts(ImageName);
+    ImageName=[ImageName '.png']
+    if isempty(uid_ImageName)
+       [t,uid_ImageName]=add(t,uid_Heading,'element','ImageName');
+    end
+    uid_value=children(t,uid_ImageName);
+    if isempty(uid_value)
+        t=add(t,uid_ImageName,'chardata',ImageName)%indicate  name of the first image, with ;png extension
+    else
+        t=set(t,uid_value(1),'value',ImageName)%indicate  name of the first image, with ;png extension
+    end  
+
+%     %add information about image transform
+%     [t,new_uid]=add(t,1,'element','ImageTransform');
+%     [t,NameFunction_uid]=add(t,new_uid,'element','NameFunction');
+%     [t]=add(t,NameFunction_uid,'chardata','sub_background');      
+%     [t,NbSlice_uid]=add(t,new_uid,'element','NbSlice');
+%     [t]=add(t,new_uid,'chardata',num2str(nbslice_i));
+%     [t,NbSlidingImages_uid]=add(t,new_uid,'element','NbSlidingImages');
+%     [t]=add(t,NbSlidingImages_uid,'chardata',num2str(nbaver));
+%     [t,LuminosityRank_uid]=add(t,new_uid,'element','RankBackground');
+%     [t]=add(t,LuminosityRank_uid,'chardata',num2str(rank));% luminosity rank almong the nbaver sliding images 
+    save(t,[basename_new '.xml'])
+end
+
+%main loop
+for ifile=1:nbfield1*nbfield2
+    update_waitbar(hseries.waitbar,WaitbarPos,ifile/(nbfield1*nbfield2))
+    filename=name_generator(basename,ifile-1,1,Series.FileExt,Series.NomType);
+    num_j=mod(ifile-1,nbfield2)+1;
+    num_i=floor((ifile-1)/nbfield2)+1;
+    filename_new=name_generator(basename_new,num_i,num_j,'.png','_i_j');
+    if test_level
+        A=imread(filename);
+        C=levels(A);
+        imwrite(C,filename_new)
+    else 
+        copyfile(filename,filename_new);
+    end   
+end
+
+
+
+function C=levels(A)
+%whos A;
+B=double(A(:,:,1));
+windowsize=round(min(size(B,1),size(B,2))/20);
+windowsize=floor(windowsize/2)*2+1;
+ix=[1/2-windowsize/2:-1/2+windowsize/2];%
+%del=np/3;
+%fct=exp(-(ix/del).^2);
+fct2=cos(ix/(windowsize-1)/2*pi/2);
+%Mfiltre=(ones(5,5)/5^2);
+%Mfiltre=fct2';
+Mfiltre=fct2'*fct2;
+Mfiltre=Mfiltre/(sum(sum(Mfiltre)));
+
+C=filter2(ones(windowsize)/windowsize^2,B);
+C(:,1:windowsize)=C(:,windowsize)*ones(1,windowsize);
+C(:,end-windowsize+1:end)=C(:,end-windowsize+1)*ones(1,windowsize);
+C(1:windowsize,:)=ones(windowsize,1)*C(windowsize,:);
+C(end-windowsize+1:end,:)=ones(windowsize,1)*C(end-windowsize,:);
+C=tanh(B./(2*C));
+[n,c]=hist(reshape(C,1,[]),100);
+% figure;plot(c,n);
+
+[m,i]=max(n);
+c_max=c(i);
+[dummy,index]=sort(abs(c-c(i)));
+n=n(index);
+c=c(index);
+i_select = find(cumsum(n)<0.95*sum(n));
+if isempty(i_select)
+    i_select = 1:length(c);
+end
+c_select=c(i_select);
+n_select=n(i_select);
+cmin=min(c_select);
+cmax=max(c_select);
+C=(C-cmin)/(cmax-cmin)*256;
+C=uint8(C);
