Dear Paul Macey: Your script is exactly what I was looking for, and allows me to apply bias correction onto other anatomical sequences like FLAIR, T2W, and etc. However I have one question. Can you assume EPI field inhomogeneity, or distortion, is similar to anatomical sequence? With regards, Hedok Paul Macey wrote: > Hi Marko > > Although I haven't used the old SPM2 bias correction in SPM5, I did > write a short script to apply the bias correction as determined in the > SPM5 unified segmentation to images other than the input image (m-file > attached). This is not what you asked for, but it may be handy for you > or others. I've used this to correct bias in EPI images - I run the > SPM5 segment on the mean image, then apply the correction to all the > images in the series. > > Best wishes, > Paul > > Marko Wilke wrote: >> Dear All, >> >> I know, the bias estimation as implemented in the segmentation is >> superior but I would still like to play around with the command line >> version that directly estimates the bias in the image as implemented >> in spm_bias_estimate and spm_bias_apply. >> >> It seems that the estimation did not change from spm2 to spm5 but the >> process works in spm2 and does not in spm5... specifically, if I call >> spm_bias_estimate, I get an error related to the plotting of results >> ("vectors must be the same length"), or Matlab crashes completely. >> Uncommenting the plot still crashes Matlab, so the error seems to be >> in the mex-file. Using the spm2-dll does not work as the spm_vol >> syntax changed, and re-compiling the spm5-version also does not >> succeed, likely due to the inaptness of the operator. >> >> My question is, has anyone used spm_bias_estimate in spm5 on a >> Windows machine? If so, I would appreciate receiving your dll-file to >> see if it is a local problem. >> >> Best regards and thanks in advance, >> Marko >> > ------------------------------------------------------------------------ > > function cspm_bias_writecorrected( sn_file, P ) > if ~strcmp(spm('ver'),'SPM5') > msgbox('Function works with SPM5 only.') > return > end > if nargin < 1 > sn_file = spm_select(1,'mat',... > 'Select spatial normalization parameters (from segment/unified)'); > end > if nargin < 2 > P = spm_select(Inf,'image',... > 'Select files to be bias-corrected using sn parameters'); > end > if iscell(P) > P = char(P); > end > > sn = load(sn_file); > > opts.biascor = 1; > opts.GM = [0 0 0]; > opts.WM = [0 0 0]; > opts.CSF = [0 0 0]; > opts.cleanup = 0; > > % Rename priors as the path will vary according to SPM5 location > sn.VG(1) = spm_vol( fullfile(spm('dir'),'apriori','grey.nii') ); > sn.VG(2) = spm_vol( fullfile(spm('dir'),'apriori','white.nii') ); > sn.VG(3) = spm_vol( fullfile(spm('dir'),'apriori','csf.nii') ); > > for m = 1:size(P,1) > sn.VF = spm_vol(deblank(P(m,:))); > spm_preproc_write(sn,opts) > end >