123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142 |
- % PAD_NII: Pad the NIfTI volume from any of the 6 sides
- %
- % Usage: nii = pad_nii(nii, [option])
- %
- % Inputs:
- %
- % nii - NIfTI volume.
- %
- % option - struct instructing how many voxel to be padded from which side.
- %
- % option.pad_from_L = ( number of voxel )
- % option.pad_from_R = ( number of voxel )
- % option.pad_from_P = ( number of voxel )
- % option.pad_from_A = ( number of voxel )
- % option.pad_from_I = ( number of voxel )
- % option.pad_from_S = ( number of voxel )
- % option.bg = [0]
- %
- % Options description in detail:
- % ==============================
- %
- % pad_from_L: Number of voxels from Left side will be padded.
- %
- % pad_from_R: Number of voxels from Right side will be padded.
- %
- % pad_from_P: Number of voxels from Posterior side will be padded.
- %
- % pad_from_A: Number of voxels from Anterior side will be padded.
- %
- % pad_from_I: Number of voxels from Inferior side will be padded.
- %
- % pad_from_S: Number of voxels from Superior side will be padded.
- %
- % bg: Background intensity, which is 0 by default.
- %
- % NIfTI data format can be found on: http://nifti.nimh.nih.gov
- %
- % - Jimmy Shen (jshen@research.baycrest.org)
- %
- function nii = pad_nii(nii, opt)
- dims = abs(nii.hdr.dime.dim(2:4));
- origin = abs(nii.hdr.hist.originator(1:3));
- if isempty(origin) | all(origin == 0) % according to SPM
- origin = round((dims+1)/2);
- end
- pad_from_L = 0;
- pad_from_R = 0;
- pad_from_P = 0;
- pad_from_A = 0;
- pad_from_I = 0;
- pad_from_S = 0;
- bg = 0;
- if nargin > 1 & ~isempty(opt)
- if ~isstruct(opt)
- error('option argument should be a struct');
- end
- if isfield(opt,'pad_from_L')
- pad_from_L = round(opt.pad_from_L);
- if pad_from_L >= origin(1) | pad_from_L < 0
- error('pad_from_L cannot be negative');
- end
- end
- if isfield(opt,'pad_from_P')
- pad_from_P = round(opt.pad_from_P);
- if pad_from_P >= origin(2) | pad_from_P < 0
- error('pad_from_P cannot be negative');
- end
- end
- if isfield(opt,'pad_from_I')
- pad_from_I = round(opt.pad_from_I);
- if pad_from_I >= origin(3) | pad_from_I < 0
- error('pad_from_I cannot be negative');
- end
- end
- if isfield(opt,'pad_from_R')
- pad_from_R = round(opt.pad_from_R);
- if pad_from_R > dims(1)-origin(1) | pad_from_R < 0
- error('pad_from_R cannot be negative');
- end
- end
- if isfield(opt,'pad_from_A')
- pad_from_A = round(opt.pad_from_A);
- if pad_from_A > dims(2)-origin(2) | pad_from_A < 0
- error('pad_from_A cannot be negative');
- end
- end
- if isfield(opt,'pad_from_S')
- pad_from_S = round(opt.pad_from_S);
- if pad_from_S > dims(3)-origin(3) | pad_from_S < 0
- error('pad_from_S cannot be negative');
- end
- end
- if isfield(opt,'bg')
- bg = opt.bg;
- end
- end
- blk = bg * ones( pad_from_L, dims(2), dims(3) );
- nii.img = cat(1, blk, nii.img);
- blk = bg * ones( pad_from_R, dims(2), dims(3) );
- nii.img = cat(1, nii.img, blk);
- dims = size(nii.img);
- blk = bg * ones( dims(1), pad_from_P, dims(3) );
- nii.img = cat(2, blk, nii.img);
- blk = bg * ones( dims(1), pad_from_A, dims(3) );
- nii.img = cat(2, nii.img, blk);
- dims = size(nii.img);
- blk = bg * ones( dims(1), dims(2), pad_from_I );
- nii.img = cat(3, blk, nii.img);
- blk = bg * ones( dims(1), dims(2), pad_from_S );
- nii.img = cat(3, nii.img, blk);
- nii = make_nii(nii.img, nii.hdr.dime.pixdim(2:4), ...
- [origin(1)+pad_from_L origin(2)+pad_from_P origin(3)+pad_from_I], ...
- nii.hdr.dime.datatype, nii.hdr.hist.descrip);
- return;
|