1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465 |
- function spm_mean(P)
- % Compute a mean image from a set
- % FORMAT spm_mean(P)
- % P - list of images to average [Default: GUI]
- %__________________________________________________________________________
- %
- % spm_mean_ui simply averages a set of images to produce a mean image
- % that is written as type int16 to "mean.img" (in the current directory).
- %
- % The images must have the same dimensions, orientations and the same
- % voxel sizes.
- %
- % This is not a "softmean" - zero voxels are treated as zero.
- %__________________________________________________________________________
- % Copyright (C) 1998-2014 Wellcome Trust Centre for Neuroimaging
- % John Ashburner, Andrew Holmes
- % $Id: spm_mean.m 6081 2014-07-01 18:19:42Z guillaume $
- persistent runonce
- if isempty(runonce)
- warning('ImCalc should be preferred to spm_mean.');
- runonce = 1;
- end
- SVNid = '$Rev: 6081 $';
- %-Say hello
- %--------------------------------------------------------------------------
- SPMid = spm('FnBanner',mfilename,SVNid);
- %-Select images & check dimensions, orientations and voxel sizes
- %--------------------------------------------------------------------------
- if ~nargin
- [P, sts] = spm_select([2 Inf],'image','Select images to be averaged');
- if ~sts, return; end
- end
- Vi = spm_vol(P);
- spm_check_orientations(Vi);
- %-Compute mean and write image
- %--------------------------------------------------------------------------
- Vo = struct('fname', ['mean' spm_file_ext],...
- 'dim', Vi(1).dim(1:3),...
- 'dt', [spm_type('int16') spm_platform('bigend')],...
- 'mat', Vi(1).mat,...
- 'pinfo', [1 0 0]',...
- 'descrip', 'spm - mean image');
- %-Adjust scalefactors by 1/n to effect mean by summing
- n = numel(Vi);
- for i=1:n
- Vi(i).pinfo(1:2,:) = Vi(i).pinfo(1:2,:)/n;
- end
- Vo = spm_create_vol(Vo);
- Vo.pinfo(1,1) = spm_add(Vi,Vo);
- Vo = spm_create_vol(Vo);
- %-End - report back
- %--------------------------------------------------------------------------
- fprintf('Mean image written to file ''%s'' in current directory\n',Vo.fname);
|