123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128 |
- function mip = spm_mip(Z,XYZ,M,units)
- % SPM Maximum Intensity Projection
- % FORMAT mip = spm_mip(Z,XYZ,M,units)
- % Z - vector point list of SPM values for MIP
- % XYZ - matrix of coordinates of points (mip coordinates)
- % M - voxels - > mip matrix or size of voxels (mm)
- % units - defining space [default {'mm' 'mm' 'mm'}]
- %
- % mip - maximum intensity projection
- % if no output, the mip is displayed in current figure.
- %__________________________________________________________________________
- %
- % If the data are 2 dimensional [DIM(3) = 1] the projection is simply an
- % image, otherwise:
- %
- % spm_mip creates and displays a maximum intensity projection of a point
- % list of voxel values (Z) and their location (XYZ) in three orthogonal
- % views of the brain. It is assumed voxel locations conform to the space
- % defined in the atlas of Talairach and Tournoux (1988); unless the third
- % dimension is time.
- %
- % This routine loads a mip outline from MIP.mat. This is an image with
- % contours and grids defining the space of Talairach & Tournoux (1988).
- % mip95 corresponds to the Talairach atlas, mip96 to the MNI templates.
- % The outline and grid are superimposed at intensity 0.4.
- %
- % A customised mip outline can be used instead of the default.
- %
- % A default colormap of 64 levels is assumed. The pointlist image is
- % scaled to fit in the interval [1/9,1]*64 for display. Flat images
- % are scaled to 1*64.
- %
- % If M is not specified, it is assumed the XYZ locations are
- % in Talairach mm.
- %__________________________________________________________________________
- % Copyright (C) 1996-2013 Wellcome Trust Centre for Neuroimaging
- % Karl Friston
- % $Id: spm_mip.m 5245 2013-02-06 17:28:06Z guillaume $
- %-Get units and grid scaling
- %--------------------------------------------------------------------------
- try, units; catch, units = {'mm' 'mm' 'mm'}; end
- try, M; catch, M = 1; end
- Grid = 0.4;
- %-Transpose locations if necessary
- %--------------------------------------------------------------------------
- if size(XYZ,1) ~= 3, XYZ = XYZ'; end
- if size(Z,1) ~= 1, Z = Z'; end
- if size(M,1) == 1, M = speye(4,4)*M; end
- %-Scale & offset point list values to fit in [1/(1+Scal),1]
- %--------------------------------------------------------------------------
- Z = Z - min(Z);
- mx = max(Z);
- Scal = 8;
- if isempty(mx)
- Z = [];
- elseif isfinite(mx) && mx
- Z = (1 + Scal*Z/mx)/(Scal + 1);
- else
- Z = ones(1,length(Z));
- end
- %-Display format
- %==========================================================================
- % load various grids, DXYZ, CXYZ, scale (see spm_mip_ui and spm_project)
- load(char(spm_get_defaults('stats.results.mipmat')));
- %-Single slice case
- %--------------------------------------------------------------------------
- if isempty(units{3}) && ~strcmp(units{2},'mm')
- %-2d case: Time-Frequency or Frequency-Frequency
- %----------------------------------------------------------------------
- mip = 4*grid_trans;
-
- elseif isempty(units{3})
-
- %-2d case
- %----------------------------------------------------------------------
- mip = 4*grid_trans + mask_trans;
-
- elseif strcmp(units{3},'ms') || strcmp(units{3},'Hz')
-
- %-3d case: Space-time
- %----------------------------------------------------------------------
- mip = 4*grid_time + mask_trans;
- else
- %-3d case: Space
- %----------------------------------------------------------------------
- mip = 4*grid_all + mask_all;
- end
- %-Create maximum intensity projection
- %--------------------------------------------------------------------------
- mip = mip/max(mip(:));
- c = [0 0 0 ;
- 0 0 1 ;
- 0 1 0 ;
- 0 1 1 ;
- 1 0 0 ;
- 1 0 1 ;
- 1 1 0 ;
- 1 1 1 ] - 0.5;
- c = c*M(1:3,1:3);
- dim = [(max(c) - min(c)) size(mip)];
- d = spm_project(Z,round(XYZ),dim,DXYZ,CXYZ);
- %if true
- mip = max(d,Grid*mip);
- mip = rot90((1 - mip)*64);
- %else
- % mip = rot90((1 - mip)*64);
- % d = rot90((1 - d)*64);
- % i = repmat(any(d~=64,3),[1 1 3]);
- % mip = ind2rgb(ceil(mip),gray(64));
- % c = hot(128);
- % d = ind2rgb(ceil(d),c(end:-1:65,:));
- % mip(i) = d(i);
- %end
- %-And display it
- %--------------------------------------------------------------------------
- if ~nargout
- image(mip); axis tight; axis off;
- end
|