Changeset 897 for trunk/src/series
- Timestamp:
- May 25, 2015, 8:48:58 PM (10 years ago)
- Location:
- trunk/src/series
- Files:
-
- 3 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/src/series/civ_input.m
r885 r897 1793 1793 end 1794 1794 Param.ActionInput.Civ1.CorrSmooth=0;% launch Civ1 with no data point (to get the image names for A and B) 1795 Param.IndexRange.first_i=str2num(get(handles.ref_i,'String')); 1796 Param.IndexRange.last_i=str2num(get(handles.ref_i,'String')); 1797 if strcmp(get(handles.ref_j,'Visible'),'on') 1798 Param.IndexRange.first_j=str2num(get(handles.ref_j,'String')); 1799 Param.IndexRange.last_j=Param.IndexRange.first_j; 1800 else 1801 Param.IndexRange.first_j=1; 1802 Param.IndexRange.last_j=1; 1803 end 1795 1804 [Data,errormsg]=civ_series(Param);% get the civ1+fix1 results 1796 1805 if ~isempty(errormsg), return, end % rmq: error msg displayed in civ_series -
trunk/src/series/civ_series.m
r896 r897 355 355 % if Civ1 computation is requested 356 356 if isfield (Param.ActionInput,'Civ1') 357 if CheckInputFile 357 358 disp('civ1 started') 359 end 358 360 par_civ1=Param.ActionInput.Civ1; 359 361 if CheckInputFile % read input images (except in mode Test where it is introduced directly in Param.ActionInput.Civ1.ImageNameA and B) -
trunk/src/series/sub_background.m
r854 r897 75 75 ParamOut.AllowInputSort='off';% allow alphabetic sorting of the list of input file SubDir (options 'off'/'on', 'off' by default) 76 76 ParamOut.WholeIndexRange='on';% prescribes the file index ranges from min to max (options 'off'/'on', 'off' by default) 77 ParamOut.NbSlice='on'; % nbre of slices ('off' by default)77 ParamOut.NbSlice='on'; % edit box nbre of slices made active 78 78 ParamOut.VelType='off';% menu for selecting the velocity type (options 'off'/'one'/'two', 'off' by default) 79 79 ParamOut.FieldName='off';% menu for selecting the field (s) in the input file(options 'off'/'one'/'two', 'off' by default) … … 117 117 118 118 %% numbers of fields 119 NbSlice =1;%default119 NbSlice_i=1;%default 120 120 if isfield(Param.IndexRange,'NbSlice')&&~isempty(Param.IndexRange.NbSlice) 121 NbSlice =Param.IndexRange.NbSlice;121 NbSlice_i=Param.IndexRange.NbSlice; 122 122 end 123 123 incr_j=1;%default … … 130 130 nbfield_j=numel(first_j:incr_j:last_j);%nb of fields for the j index (bursts or volume slices) 131 131 end 132 incr_i=1;%default 133 first_i=1;last_i=1;incr_i;%default 132 first_i=1;last_i=1;incr_i=1;%default 134 133 if isfield(Param.IndexRange,'first_i'); last_i=Param.IndexRange.first_i; end 135 134 if isfield(Param.IndexRange,'last_i'); last_i=Param.IndexRange.last_i; end … … 139 138 nbfield_i=numel(first_i:incr_i:last_i);%nb of fields for the i index (bursts or volume slices) 140 139 nbfield=nbfield_j*nbfield_i; %total number of fields 141 nbfield_i=floor(nbfield/NbSlice );%total number of indexes in a slice (adjusted to an integer number of slices)140 nbfield_i=floor(nbfield/NbSlice_i);%total number of indexes in a slice (adjusted to an integer number of slices) 142 141 143 142 %% setting of parameters specific to sub_background … … 159 158 160 159 %check input consistency 161 if strcmp(answer{1},'No') && ~isequal(NbSlice ,1)162 check=msgbox_uvmat('INPUT_Y-N',['confirm the multi-level splitting into ' num2str(NbSlice ) ' slices']);160 if strcmp(answer{1},'No') && ~isequal(NbSlice_i,1) 161 check=msgbox_uvmat('INPUT_Y-N',['confirm the multi-level splitting into ' num2str(NbSlice_i) ' slices']); 163 162 if ~strcmp(check,'Yes') 164 163 return … … 166 165 end 167 166 if strcmp(answer{1},'Yes') 168 step=1; 167 step=2;%the sliding background is shifted by the length of one burst, assumed =2 for volume ;ode 168 ParamOut.NbSlice=1; %nbre of slices displayed 169 169 else 170 170 step=nbfield_j;%case of bursts: the sliding background is shifted by the length of one burst … … 198 198 199 199 %% input preparation 200 NbSlice =Param.IndexRange.NbSlice;201 if ~isequal(NbSlice ,1)202 display(['multi-level splitting into ' num2str(NbSlice ) ' slices']);200 NbSlice_i=Param.IndexRange.NbSlice; 201 if ~isequal(NbSlice_i,1) 202 display(['multi-level splitting into ' num2str(NbSlice_i) ' slices']); 203 203 end 204 204 RootPath=Param.InputTable(:,1); … … 207 207 NomType=Param.InputTable(:,4); 208 208 FileExt=Param.InputTable(:,5); 209 hdisp=disp_uvmat('WAITING...','checking the file series',checkrun);210 [filecell,i1_series,i2_series,j1_series ,j2_series]=get_file_series(Param);211 if ~isempty(hdisp),delete(hdisp),end;209 %hdisp=disp_uvmat('WAITING...','checking the file series',checkrun); 210 [filecell,i1_series,i2_series,j1_series]=get_file_series(Param); 211 % if ~isempty(hdisp),delete(hdisp),end; 212 212 %%%%%%%%%%%% 213 213 % The cell array filecell is the list of input file names, while … … 225 225 frame_index{1}=i1_series{1}; 226 226 end 227 nbfield_j=size(i1_series{1},1); %nb of fields for the j index (bursts or volume slices) 228 nbfield_i=size(i1_series{1},2); %nb of fields for the i index 229 nbfield=nbfield_j*nbfield_i; %total number of fields 230 nbfield_i=floor(nbfield/NbSlice);%total number of indexes in a slice (adjusted to an integer number of slices) 231 nbfield=nbfield_i*NbSlice; %total number of fields after adjustement 232 233 %% output 227 228 229 %% output file naming 234 230 FileExtOut='.png'; % write result as .png images for image inputs 235 231 if strcmp(lower(NomType{1}(end)),'a') … … 240 236 NomTypeOut='_1_1';% caseof purely numerical indexing 241 237 end 242 243 238 OutputDir=[Param.OutputSubDir Param.OutputDirExt]; 244 239 245 if isequal(Param.ActionInput.CheckVolume,1) 246 step=1; 247 else 240 %% file index parameters 241 % NbSlice_i: nbre of slices for i index: different of of 1 for multi-level, 242 % the function sub_background is then relaunched by the GUI series for each 243 % slice, incrementing the first index i by 1 244 % NbSlice_j: nbre of slices in volume mode 245 % nbfield : total number of images treated per slice 246 % step: shift of image index at each step of the sliding background (corresponding to the nbre of images in a burst) 247 % nbaver_ima: nbre of the images in the sliding sequence used for the background 248 % nbaver=nbaver_ima/step: nbre of bursts corresponding to nbaver_ima images. It has been adjusted so that nbaver is an odd integer 249 nbfield_j=size(i1_series{1},1); %nb of fields for the j index (bursts or volume slices) 250 nbfield_i=size(i1_series{1},2); %nb of fields for the i index 251 nbfield=nbfield_j*nbfield_i; %total number of fields 252 if Param.ActionInput.CheckVolume 253 step=2;% we assume the burst contains only one image pair 254 NbSlice_j=nbfield_j; 255 NbSlice=nbfield_j; 256 nbfield_series=nbfield_i; 257 else 248 258 step=nbfield_j;%case of bursts: the sliding background is shifted by the length of one burst 259 NbSlice_j=1; 260 NbSlice=NbSlice_i; 261 nbfield_i=floor(nbfield/NbSlice_i);%total number of indexes in a slice (adjusted to an integer number of slices) 262 nbfield=nbfield_i*NbSlice_i; %total number of fields after adjustement 263 nbfield_series=nbfield; 249 264 end 250 265 nbaver_ima=Param.ActionInput.SlidingSequenceLength;%number of images for the sliding background … … 258 273 return 259 274 end 260 261 % calculate absolute brightness rank 275 halfnbaver=floor(nbaver/2); % half width (in unit of bursts) of the sliding background 276 277 %% calculate absolute brightness rank 262 278 rank=floor(Param.ActionInput.BrightnessRankThreshold*nbaver_ima); 263 279 if rank==0 … … 281 297 end 282 298 283 %% summary of the parameters: 284 % nbfield : total number of images treated (in case of multislices the function sub_background is repeated for each slice) 285 % step: shift at each step of the sliding background (corresponding to the nbre of images in a burst) 286 % nbaver_ima: length of the sequence used for the sliding background 287 288 % nbaver=nbaver_ima/step: nbaver_ima has been adjusted so that nbaver is an odd integer 289 halfnbaver=floor(nbaver/2); % half width (in unit of bursts) of the sliding background 290 291 %% select the series of image indices to process 292 indselect=1:step:nbfield;% select file indices of the slice 293 for ifield=1:step-1 294 indselect=[indselect;indselect(end,:)+1]; 295 end 296 297 %% read the first series of nbaver_ima images and sort by luminosity at each pixel 298 for ifield = 1:nbaver_ima 299 ifile=indselect(ifield); 300 filename=filecell{1,ifile}; 301 Aread=read_image(filename,FileType{1},MovieObject{1},frame_index{1}(ifile)); 302 if ndims(Aread)==3;%color images 303 Aread=sum(double(Aread),3);% take the sum of color components 304 end 305 Ak(:,:,ifield)=Aread; 306 end 307 Asort=sort(Ak,3);%sort the luminosity of images at each point 308 B=Asort(:,:,rank);%background image 309 310 %% substract the first background image to the first images 311 display( 'first background image will be substracted') 312 for ifield=1:step*(halfnbaver+1);% nbre of images treated by the first background image 313 Acor=double(Ak(:,:,ifield))-double(B);%substract background to the current image 314 Acor=(Acor>0).*Acor; % put to 0 the negative elements in Acor 315 ifile=indselect(ifield); 316 j1=1; 317 if ~isempty(j1_series{1}) 318 j1=j1_series{1}(ifile); 319 end 320 newname=fullfile_uvmat(RootPath{1},OutputDir,RootFile{1},FileExtOut,NomTypeOut,i1_series{1}(ifile),[],j1); 321 322 %write result file 323 if Param.ActionInput.CheckLevelTransform 324 C=levels(Acor); 325 imwrite(C,newname,'BitDepth',8); % save the new image 326 else 327 if isequal(FileInfo{1}.BitDepth,16) 328 C=uint16(Acor); 329 imwrite(C,newname,'BitDepth',16); % save the new image 299 300 %%%%%%% LOOP ON SLICES FOR VOLUME SCAN %%%%%%% 301 for j_slice=1:NbSlice_j 302 %% select the series of i indices to process 303 indselect=j_slice:step*NbSlice_j:nbfield;% select file indices of the slice 304 for ifield=1:step-1 305 indselect=[indselect;indselect(end,:)+NbSlice_j]; 306 end 307 308 %% read the first series of nbaver_ima images and sort by luminosity at each pixel 309 for ifield = 1:nbaver_ima 310 ifile=indselect(ifield); 311 filename=filecell{1,ifile}; 312 Aread=read_image(filename,FileType{1},MovieObject{1},frame_index{1}(ifile)); 313 if ndims(Aread)==3;%color images 314 Aread=sum(double(Aread),3);% take the sum of color components 315 end 316 Ak(:,:,ifield)=Aread; 317 end 318 Asort=sort(Ak,3);%sort the luminosity of images at each point 319 B=Asort(:,:,rank);%background image 320 321 %% substract the first background image to the first images 322 display( 'first background image will be substracted') 323 for ifield=1:step*(halfnbaver+1);% nbre of images treated by the first background image 324 Acor=double(Ak(:,:,ifield))-double(B);%substract background to the current image 325 Acor=(Acor>0).*Acor; % put to 0 the negative elements in Acor 326 ifile=indselect(ifield); 327 j1=1; 328 if ~isempty(j1_series{1}) 329 j1=j1_series{1}(ifile); 330 end 331 newname=fullfile_uvmat(RootPath{1},OutputDir,RootFile{1},FileExtOut,NomTypeOut,i1_series{1}(ifile),[],j1); 332 333 %write result file 334 if Param.ActionInput.CheckLevelTransform 335 C=levels(Acor); 336 imwrite(C,newname,'BitDepth',8); % save the new image 330 337 else 331 C=uint8(Acor); 338 if isequal(FileInfo{1}.BitDepth,16) 339 C=uint16(Acor); 340 imwrite(C,newname,'BitDepth',16); % save the new image 341 else 342 C=uint8(Acor); 343 imwrite(C,newname,'BitDepth',8); % save the new image 344 end 345 end 346 display([newname ' written']) 347 end 348 349 %% repeat the operation on a sliding series of images 350 display('sliding background image will be substracted') 351 if nbfield_series > nbaver_ima 352 for ifield = step*(halfnbaver+1):step:nbfield_series-step*(halfnbaver+1)% ifield +iburst=index of the current processed image 353 update_waitbar(WaitbarHandle,ifield/nbfield_series) 354 if ~strcmp(get(RUNHandle,'BusyAction'),'queue') 355 disp('program stopped by user') 356 return 357 end 358 if nbaver_ima>step 359 Ak(:,:,1:nbaver_ima-step)=Ak(:,:,1+step:nbaver_ima);% shift the current image series by one burst (step) 360 end 361 %incorporate next burst in the current image series 362 for iburst=1:step 363 ifile=indselect(ifield+iburst+step*halfnbaver); 364 j1=1; 365 if ~isempty(j1_series{1}) 366 j1=j1_series{1}(ifile); 367 end 368 filename=fullfile_uvmat(RootPath{1},SubDir{1},RootFile{1},FileExt{1},NomType{1},i1_series{1}(ifile),[],j1); 369 Aread=read_image(filename,FileType{1},MovieObject{1},i1_series{1}(ifile)); 370 if ndims(Aread)==3;%color images 371 Aread=sum(double(Aread),3);% take the sum of color components 372 end 373 Ak(:,:,nbaver_ima-step+iburst)=Aread;% fill the last burst of the current image series by the new image 374 end 375 Asort=sort(Ak,3);%sort the new current image series by luminosity 376 B=Asort(:,:,rank);%current background image 377 %substract the background for the current burst 378 for iburst=1:step 379 Acor=double(Ak(:,:,step*halfnbaver+iburst))-double(B); %the current image has been already read ans stored as index step*halfnbaver+iburst in the current series 380 Acor=(Acor>0).*Acor; % put to 0 the negative elements in Acor 381 ifile=indselect(ifield+iburst); 382 if ~isempty(j1_series{1}) 383 j1=j1_series{1}(ifile); 384 end 385 newname=fullfile_uvmat(RootPath{1},OutputDir,RootFile{1},FileExtOut,NomTypeOut,i1_series{1}(ifile),[],j1); 386 %write result file 387 if Param.ActionInput.CheckLevelTransform 388 C=levels(Acor); 389 imwrite(C,newname,'BitDepth',8); % save the new image 390 else 391 if isequal(FileInfo{1}.BitDepth,16) 392 C=uint16(Acor); 393 imwrite(C,newname,'BitDepth',16); % save the new image 394 else 395 C=uint8(Acor); 396 imwrite(C,newname,'BitDepth',8); % save the new image 397 end 398 end 399 display([newname ' written']) 400 end 401 end 402 end 403 404 %% substract the background from the last images 405 display('last background image will be substracted') 406 for ifield=nbfield_series-step*halfnbaver+1:nbfield_series 407 Acor=double(Ak(:,:,ifield-nbfield_series+step*(2*halfnbaver+1)))-double(B); 408 Acor=(Acor>0).*Acor; % put to 0 the negative elements in Acor 409 ifile=indselect(ifield); 410 if ~isempty(j1_series{1}) 411 j1=j1_series{1}(ifile); 412 end 413 newname=fullfile_uvmat(RootPath{1},OutputDir,RootFile{1},FileExtOut,NomTypeOut,i1_series{1}(ifile),[],j1); 414 %write result file 415 if Param.ActionInput.CheckLevelTransform 416 C=levels(Acor); 332 417 imwrite(C,newname,'BitDepth',8); % save the new image 333 end 334 end 335 display([newname ' written']) 336 end 337 338 %% repeat the operation on a sliding series of images 339 display('sliding background image will be substracted') 340 if nbfield_i > nbaver_ima 341 for ifield = step*(halfnbaver+1):step:nbfield_i-step*(halfnbaver+1)% ifield +iburst=index of the current processed image 342 update_waitbar(WaitbarHandle,ifield/nbfield_i) 343 if ~isempty(RUNHandle) &&ishandle(RUNHandle) && ~strcmp(get(RUNHandle,'BusyAction'),'queue') 344 disp('program stopped by user') 345 return 346 end 347 Ak(:,:,1:nbaver_ima-step)=Ak(:,:,1+step:nbaver_ima);% shift the current image series by one burst (step) 348 %incorporate next burst in the current image series 349 for iburst=1:step 350 ifile=indselect(ifield+iburst+step*halfnbaver); 351 j1=1; 352 if ~isempty(j1_series{1}) 353 j1=j1_series{1}(ifile); 354 end 355 filename=fullfile_uvmat(RootPath{1},SubDir{1},RootFile{1},FileExt{1},NomType{1},i1_series{1}(ifile),[],j1); 356 Aread=read_image(filename,FileType{1},MovieObject{1},i1_series{1}(ifile)); 357 if ndims(Aread)==3;%color images 358 Aread=sum(double(Aread),3);% take the sum of color components 359 end 360 Ak(:,:,nbaver_ima-step+iburst)=Aread;% fill the last burst of the current image series by the new image 361 end 362 Asort=sort(Ak,3);%sort the new current image series by luminosity 363 B=Asort(:,:,rank);%current background image 364 %substract the background for the current burst 365 for iburst=1:step 366 Acor=double(Ak(:,:,step*halfnbaver+iburst))-double(B); %the current image has been already read ans stored as index step*halfnbaver+iburst in the current series 367 Acor=(Acor>0).*Acor; % put to 0 the negative elements in Acor 368 ifile=indselect(ifield+iburst); 369 if ~isempty(j1_series{1}) 370 j1=j1_series{1}(ifile); 371 end 372 newname=fullfile_uvmat(RootPath{1},OutputDir,RootFile{1},FileExtOut,NomTypeOut,i1_series{1}(ifile),[],j1); 373 %write result file 374 if Param.ActionInput.CheckLevelTransform 375 C=levels(Acor); 418 else 419 if isequal(FileInfo{1}.BitDepth,16) 420 C=uint16(Acor); 421 imwrite(C,newname,'BitDepth',16); % save the new image 422 else 423 C=uint8(Acor); 376 424 imwrite(C,newname,'BitDepth',8); % save the new image 377 else 378 if isequal(FileInfo{1}.BitDepth,16) 379 C=uint16(Acor); 380 imwrite(C,newname,'BitDepth',16); % save the new image 381 else 382 C=uint8(Acor); 383 imwrite(C,newname,'BitDepth',8); % save the new image 384 end 385 end 386 display([newname ' written']) 387 end 388 end 389 end 390 391 %% substract the background from the last images 392 display('last background image will be substracted') 393 for ifield=nbfield_i-step*halfnbaver+1:nbfield_i 394 Acor=double(Ak(:,:,ifield-nbfield_i+step*(2*halfnbaver+1)))-double(B); 395 Acor=(Acor>0).*Acor; % put to 0 the negative elements in Acor 396 ifile=indselect(ifield); 397 if ~isempty(j1_series{1}) 398 j1=j1_series{1}(ifile); 399 end 400 newname=fullfile_uvmat(RootPath{1},OutputDir,RootFile{1},FileExtOut,NomTypeOut,i1_series{1}(ifile),[],j1); 401 %write result file 402 if Param.ActionInput.CheckLevelTransform 403 C=levels(Acor); 404 imwrite(C,newname,'BitDepth',8); % save the new image 405 else 406 if isequal(FileInfo{1}.BitDepth,16) 407 C=uint16(Acor); 408 imwrite(C,newname,'BitDepth',16); % save the new image 409 else 410 C=uint8(Acor); 411 imwrite(C,newname,'BitDepth',8); % save the new image 412 end 413 end 414 display([newname ' written']) 415 end 416 425 end 426 end 427 display([newname ' written']) 428 end 429 end 417 430 418 431
Note: See TracChangeset
for help on using the changeset viewer.