SPM Volume Extraction Script HELP!
7 ビュー (過去 30 日間)
古いコメントを表示
Hello experts:
The script I will post works for SPM5 (running from MATLAB -nojvm). Now on SPM8 that is not supported with -nojvm and possibly other changes to the new version... the script does not work!
Any suggestions would be greatly appreciated.
The volume extractoin script:
1
clear all;
option=input('What volume do you want to get for grey only enter 1 for grey+white enter 2 for grey+white+csf enter 3: ')
scan_list=spm_select(1, 'any','Select scan list file');
scans = load(scan_list);
reg = spm_select(inf,'image','Select Region Mask Images');
V_regs = spm_vol(reg);
m_len=length(V_regs);
if (option == 1 || option == 2 || option == 3)
for i=1:m_len
[Y,XYZ]=spm_read_vols(V_regs(i));
NZ=find(Y);
[prth,nam,ext]=fileparts(V_regs(i).fname);
fid1=fopen(nam,'a');
fprintf(fid1,'%s\n','scans type volume');
for j=1:length(scans)
scanid = num2str(scans(j));
if (5 - length(scanid))==1
prefix = 'mwc10';
elseif (5 - length(scanid))==2
prefix = 'mwc100';
elseif (5 - length(scanid))==3
prefix = 'mwc1000';
else
prefix = 'mwc1';
end
V=spm_vol(fullfile(pwd,[prefix scanid '.img,1']));
M=inv(V.mat);
volume=0;
%lnam=length(V_regs(i).fname);
%nam=V_regs(i).fname(53:lnam-4);
for k=1:length(NZ)
arr=XYZ(:,NZ(k));
vox=M(1:3,:)*[arr;ones(1,size(arr,2))];
intensity=spm_sample_vol(V,vox(1),vox(2),vox(3),1);
if (isnan(intensity) == 1)
intensity = 0;
end
volume=volume+(intensity*8);
end
fprintf(fid1,'%d %s %f\n',scans(j),'gray',volume);
end
fclose(fid1);
end
end
if (option == 2 || option == 3)
for i=1:m_len
[Y,XYZ]=spm_read_vols(V_regs(i));
NZ=find(Y);
[prth,nam,ext]=fileparts(V_regs(i).fname);
fid1=fopen(nam,'a');
%fprintf(fid1,'%s\n','scans type volume');
for j=1:length(scans)
scanid = num2str(scans(j));
if (5 - length(scanid))==1
prefix = 'mwc20';
elseif (5 - length(scanid))==2
prefix = 'mwc200';
elseif (5 - length(scanid))==3
prefix = 'mwc2000';
else
prefix = 'mwc2';
end
V=spm_vol(fullfile(pwd,[prefix scanid '.img,1']));
M=inv(V.mat);
volume=0;
%lnam=length(V_regs(i).fname);
%nam=V_regs(i).fname(53:lnam-4);
for k=1:length(NZ)
arr=XYZ(:,NZ(k));
vox=M(1:3,:)*[arr;ones(1,size(arr,2))];
intensity=spm_sample_vol(V,vox(1),vox(2),vox(3),1);
if (isnan(intensity) == 1)
intensity = 0;
end
volume=volume+(intensity*8);
end
fprintf(fid1,'%d %s %f\n',scans(j),'white',volume);
end
fclose(fid1);
end
end
if (option == 3)
for i=1:m_len
[Y,XYZ]=spm_read_vols(V_regs(i));
NZ=find(Y);
[prth,nam,ext]=fileparts(V_regs(i).fname);
fid1=fopen(nam,'a');
%fprintf(fid1,'%s\n','scans type volume');
for j=1:length(scans)
scanid = num2str(scans(j));
if (5 - length(scanid))==1
prefix = 'mwc30';
elseif (5 - length(scanid))==2
prefix = 'mwc300';
elseif (5 - length(scanid))==3
prefix = 'mwc3000';
else
prefix = 'mwc3';
end
V=spm_vol(fullfile(pwd,[prefix scanid '.img,1']));
M=inv(V.mat);
volume=0;
%lnam=length(V_regs(i).fname);
%nam=V_regs(i).fname(53:lnam-4);
for k=1:length(NZ)
arr=XYZ(:,NZ(k));
vox=M(1:3,:)*[arr;ones(1,size(arr,2))];
intensity=spm_sample_vol(V,vox(1),vox(2),vox(3),1);
if (isnan(intensity) == 1)
intensity = 0;
end
volume=volume+(intensity*8);
end
fprintf(fid1,'%d %s %f\n',scans(j),'csf',volume);
end
fclose(fid1);
end
end
Thank you in advance, Catherine
1 件のコメント
Sean de Wolski
2013 年 2 月 5 日
What does "not work mean"? What isn't working? Have you tried using:
dbstop if error
To stop with the debugger at the point of the error?
回答 (0 件)
参考
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!