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 CenterFile Exchange에서 Medical Physics에 대해 자세히 알아보기

Community Treasure Hunt

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

Start Hunting!

Translated by