[64] | 1 | % relabel_i_j: relabel an image series with two indices, according to the time matrix given by ImaDoc
|
---|
| 2 | %----------------------------------------------------------------------
|
---|
| 3 | function GUI_input=ima_levels(num_i1,num_i2,num_j1,num_j2,Series)
|
---|
| 4 | %requests for the visibility of input windows in the GUI series (activated directly by the selection in the menu ACTION)
|
---|
| 5 | if ~exist('num_i1','var')
|
---|
| 6 | GUI_input={};
|
---|
| 7 | return %exit the function
|
---|
| 8 | end
|
---|
| 9 |
|
---|
| 10 | %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%enable waitbar
|
---|
| 11 | hseries=guidata(Series.hseries);%handles of the GUI series
|
---|
| 12 | WaitbarPos=get(hseries.waitbar_frame,'Position');
|
---|
| 13 | %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
|
---|
| 14 |
|
---|
| 15 | basename=fullfile(Series.RootPath,Series.RootFile) ;
|
---|
| 16 |
|
---|
| 17 | %create dir of the new images
|
---|
| 18 | [dir_images,namebase]=fileparts(basename);
|
---|
| 19 | [path,subdir_ima]=fileparts(dir_images);
|
---|
| 20 | curdir=pwd;
|
---|
| 21 | cd(path);
|
---|
| 22 | mkdir([subdir_ima '_levels']);
|
---|
| 23 | cd(curdir);
|
---|
| 24 | basename_new=fullfile(path,[subdir_ima '_levels'],namebase);
|
---|
| 25 |
|
---|
| 26 | % read imadoc
|
---|
| 27 | [XmlData,warntext]=imadoc2struct([basename '.xml']);
|
---|
| 28 | nbfield1=size(XmlData.Time,1)
|
---|
| 29 | nbfield2=size(XmlData.Time,2)
|
---|
| 30 |
|
---|
| 31 | answer=msgbox_uvmat('CONFIRMATION','apply image rescaling function levels.m ')
|
---|
| 32 |
|
---|
| 33 | %copy the xml file
|
---|
| 34 | if exist([basename '.xml'],'file')
|
---|
| 35 | copyfile([basename '.xml'],[basename_new '.xml']);% copy the .civ file
|
---|
| 36 | end
|
---|
| 37 |
|
---|
| 38 | %main loop
|
---|
| 39 | nbfield=size(num_i1,2)
|
---|
| 40 | nbfield2=size(num_i1,1)
|
---|
| 41 | for ifile=1:nbfield
|
---|
| 42 | update_waitbar(hseries.waitbar,WaitbarPos,ifile/nbfield)
|
---|
| 43 | stopstate=get(hseries.RUN,'BusyAction');
|
---|
| 44 | if isequal(stopstate,'queue') % enable STOP command
|
---|
| 45 | for jfile=1:nbfield2
|
---|
| 46 | filename=name_generator(basename,num_i1(jfile,ifile),num_j1(jfile,ifile),Series.FileExt,Series.NomType);
|
---|
| 47 | filename_new=name_generator(basename_new,num_i1(jfile,ifile),num_j1(jfile,ifile),'.png',Series.NomType);
|
---|
| 48 | A=imread(filename);
|
---|
| 49 | C=levels(A);
|
---|
| 50 | imwrite(C,filename_new)
|
---|
| 51 | end
|
---|
| 52 | end
|
---|
| 53 | end
|
---|
| 54 |
|
---|
| 55 |
|
---|
| 56 |
|
---|
| 57 | function C=levels(A)
|
---|
| 58 | %whos A;
|
---|
| 59 | B=double(A(:,:,1));
|
---|
| 60 | windowsize=round(min(size(B,1),size(B,2))/20);
|
---|
| 61 | windowsize=floor(windowsize/2)*2+1;
|
---|
| 62 | ix=[1/2-windowsize/2:-1/2+windowsize/2];%
|
---|
| 63 | %del=np/3;
|
---|
| 64 | %fct=exp(-(ix/del).^2);
|
---|
| 65 | fct2=cos(ix/(windowsize-1)/2*pi/2);
|
---|
| 66 | %Mfiltre=(ones(5,5)/5^2);
|
---|
| 67 | %Mfiltre=fct2';
|
---|
| 68 | Mfiltre=fct2'*fct2;
|
---|
| 69 | Mfiltre=Mfiltre/(sum(sum(Mfiltre)));
|
---|
| 70 |
|
---|
[71] | 71 | C=filter2(Mfiltre,B);
|
---|
[64] | 72 | C(:,1:windowsize)=C(:,windowsize)*ones(1,windowsize);
|
---|
| 73 | C(:,end-windowsize+1:end)=C(:,end-windowsize+1)*ones(1,windowsize);
|
---|
| 74 | C(1:windowsize,:)=ones(windowsize,1)*C(windowsize,:);
|
---|
| 75 | C(end-windowsize+1:end,:)=ones(windowsize,1)*C(end-windowsize,:);
|
---|
| 76 | C=tanh(B./(2*C));
|
---|
| 77 | [n,c]=hist(reshape(C,1,[]),100);
|
---|
| 78 | % figure;plot(c,n);
|
---|
| 79 |
|
---|
| 80 | [m,i]=max(n);
|
---|
| 81 | c_max=c(i);
|
---|
| 82 | [dummy,index]=sort(abs(c-c(i)));
|
---|
| 83 | n=n(index);
|
---|
| 84 | c=c(index);
|
---|
| 85 | i_select = find(cumsum(n)<0.95*sum(n));
|
---|
| 86 | if isempty(i_select)
|
---|
| 87 | i_select = 1:length(c);
|
---|
| 88 | end
|
---|
| 89 | c_select=c(i_select);
|
---|
| 90 | n_select=n(i_select);
|
---|
| 91 | cmin=min(c_select);
|
---|
| 92 | cmax=max(c_select);
|
---|
| 93 | C=(C-cmin)/(cmax-cmin)*256;
|
---|
| 94 | C=uint8(C);
|
---|