SPM Volume Extraction Script HELP!

7 ビュー (過去 30 日間)
Catherine
Catherine 2013 年 2 月 5 日
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
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 件)

カテゴリ

Help Center および File ExchangeMedical Physics についてさらに検索

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!

Translated by