source: trunk/src/series/ima2vol.m @ 72

Last change on this file since 72 was 72, checked in by sommeria, 11 years ago

ima2vol: write image volumes in 16 bits (test for civ_3D)
plot-text removed: put as a sub-function of plot_field
uvmat: movie stops in case of error in reding files
bug fixes for reading 3D vel fields

File size: 3.8 KB
Line 
1% relabel_i_j: relabel an image series with two indices, according to the time matrix given by ImaDoc
2%----------------------------------------------------------------------
3function GUI_input=ima2vol(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)
5if ~exist('num_i1','var')
6    GUI_input={};
7    return %exit the function
8end
9
10%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%enable waitbar
11hseries=guidata(Series.hseries);%handles of the GUI series
12WaitbarPos=get(hseries.waitbar_frame,'Position');
13%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
14
15basename=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);
20curdir=pwd;
21cd(path);
22mkdir([subdir_ima '_vol']);
23cd(curdir);
24basename_new=fullfile(path,[subdir_ima '_vol'],namebase);
25
26% read imadoc
27[XmlData,warntext]=imadoc2struct([basename '.xml']);
28nbfield1=size(XmlData.Time,1)
29nbfield2=size(XmlData.Time,2)
30
31answer=msgbox_uvmat('INPUT_Y-N','apply image rescaling function levels.m')
32test_level=isequal(answer,'Yes')
33
34%copy the xml file
35if exist([basename '.xml'],'file')
36    copyfile([basename '.xml'],[basename_new '.xml']);% copy the .civ file
37    t=xmltree([basename_new '.xml']);
38   
39    %update information on the first image name in the series
40    uid_Heading=find(t,'ImaDoc/Heading');
41    if isempty(uid_Heading)
42        [t,uid_Heading]=add(t,1,'element','Heading');
43    end   
44    uid_ImageName=find(t,'ImaDoc/Heading/ImageName');
45    ImageName=name_generator(basename_new,num_i1(1),num_j1(1),'.png','_i_j');
46    [pth,ImageName]=fileparts(ImageName);
47    ImageName=[ImageName '.png']
48    if isempty(uid_ImageName)
49       [t,uid_ImageName]=add(t,uid_Heading,'element','ImageName');
50    end
51    uid_value=children(t,uid_ImageName);
52    if isempty(uid_value)
53        t=add(t,uid_ImageName,'chardata',ImageName)%indicate  name of the first image, with ;png extension
54    else
55        t=set(t,uid_value(1),'value',ImageName)%indicate  name of the first image, with ;png extension
56    end 
57    save(t,[basename_new '.xml'])
58end
59
60%main loop
61 vol=[];
62for ifile=1:nbfield1*nbfield2
63    update_waitbar(hseries.waitbar,WaitbarPos,ifile/(nbfield1*nbfield2))
64    filename=name_generator(basename,ifile-1,1,Series.FileExt,Series.NomType);
65    num_j=mod(ifile-1,nbfield2)+1;
66    num_i=floor((ifile-1)/nbfield2)+1;
67    A=imread(filename);
68    if test_level
69         A=levels(A);
70    end
71    vol=[vol;A];%concacene along y
72    if num_j==nbfield2
73         filename_new=name_generator(basename_new,num_i,1,'.vol','_i');
74         imwrite(vol,filename_new,'png','BitDepth',16)% WRITE IN 16 bits
75         vol=[];
76    end     
77end
78
79
80
81function C=levels(A)
82%whos A;
83B=double(A(:,:,1));
84windowsize=round(min(size(B,1),size(B,2))/20);
85windowsize=floor(windowsize/2)*2+1;
86ix=[1/2-windowsize/2:-1/2+windowsize/2];%
87%del=np/3;
88%fct=exp(-(ix/del).^2);
89fct2=cos(ix/(windowsize-1)/2*pi/2);
90%Mfiltre=(ones(5,5)/5^2);
91%Mfiltre=fct2';
92Mfiltre=fct2'*fct2;
93Mfiltre=Mfiltre/(sum(sum(Mfiltre)));
94
95C=filter2(Mfiltre,B);
96C(:,1:windowsize)=C(:,windowsize)*ones(1,windowsize);
97C(:,end-windowsize+1:end)=C(:,end-windowsize+1)*ones(1,windowsize);
98C(1:windowsize,:)=ones(windowsize,1)*C(windowsize,:);
99C(end-windowsize+1:end,:)=ones(windowsize,1)*C(end-windowsize,:);
100C=tanh(B./(2*C));
101[n,c]=hist(reshape(C,1,[]),100);
102% figure;plot(c,n);
103
104[m,i]=max(n);
105c_max=c(i);
106[dummy,index]=sort(abs(c-c(i)));
107n=n(index);
108c=c(index);
109i_select = find(cumsum(n)<0.95*sum(n));
110if isempty(i_select)
111    i_select = 1:length(c);
112end
113c_select=c(i_select);
114n_select=n(i_select);
115cmin=min(c_select);
116cmax=max(c_select);
117C=(C-cmin)/(cmax-cmin)*256;
118%C=uint8(C);
Note: See TracBrowser for help on using the repository browser.