spm_segment

spm_segment.mは三次元配列から脳の灰白質、白質、髄液を切り出す関数です。 被験者の解剖画像を標準脳のtemplateに合わせるAffine変換のみを用いて、 予め標準脳用に切り出された脳、灰白質、白質、髄液のtemplateを逆変換し、 被験者解剖画像の灰白質、白質、髄液の切り出しとしているようです。 解剖画像の標準脳化の時には非線形変換が用いられますが、ここではAffine変換のみです。
.../spm2/aprioriに各種切り出しようのtemplateがあるので見てみます。
V1=spm_vol('.../apriori/brainmask.mnc');
V1.dat=spm_read_vols(V1);
V2=spm_vol('.../apriori/gray.mnc');
V2.dat=spm_read_vols(V2);
V3=spm_vol('.../apriori/gray.mnc');
V3.dat=spm_read_vols(V3);
V4=spm_vol('.../apriori/csf.mnc');
V4.dat=spm_read_vols(V4);
因みにbrainmask.mnc以外はdefaults.segment.estimate.priorにpath名+ファイル名が保存されています。 表示してみます。
W=[rot90(squeeze(V1.dat(:,55,:))),rot90(squeeze(V2.dat(:,55,:)));...
rot90(squeeze(V3.dat(:,55,:))),rot90(squeeze(V4.dat(:,55,:)))];
figure;imagesc(W);daspect([1,1,1]);colormap(gray);

脳実質(左上)、灰白質(右上)、白質(左下)、髄液(右下)の順となっています。 これら切り出し用のtemplateを逆Affine変換し、解剖画像に当てはめることで、解剖画像の切り出しと称しているようです。
[filename,pathname]=uigetfile('*.mnc'); %標準脳の選択
PG=strcat(pathname,filename);
[filename,pathname]=uigetfile('*.img'); %解剖画像の選択
PF=strcat(pathname,filename);
spm_defauts;
flags=defaults.segment.estimate;
flags.cutoff=25;
VO=spm_segment(VF,VG,flags); %相当時間がかかります
VO{1}は灰白質、VO{2}は白質、VO{3}は髄液のデータになっています。
みてみます。
PF=spm_vol(PF);
PF.dat=spm_read_vols(PF);
W=[rot90(squeeze(PF.dat(:,128,:))),rot90(squeeze(VO(1).dat(:,128,:)));...
rot90(squeeze(VO(2).dat(:,128,:))),rot90(squeeze(VO(3).dat(:,128,:)))];
figure;imagesc(W);colormap(gray);daspect(flipud(abs(diag(PF.mat(1:3,1:3)))))

これらの画像はSPMのUI、Segmentボタンを押したときにえら得るものと同じものです。

結果表示です。

左から、元画像、灰白質、白質、髄液の順になっています。 それぞれ、*_seg1.img、*_seg2.img、*_seg3.imgという名前で保存されます。
単純に脳を切り出すだけであればMRIcroのStripSkull機能のほうが秀逸です。