Error: The logical indices contain a true value outside of the array bounds.

14 次查看(过去 30 天)
Hi all,
I have amended the code below slightly and it is now returning an error when it was working perfectly before, and I can't figure out why! Any advice greatly appreciated:
The logical indices contain a true value outside of the array bounds.
Error in LF_lesion_quant (line 44)
mean(F(I)); ...
clear, clc
addpath /Applications/freesurfer/7.3.2/matlab/
datadir = '';
d = dir([datadir filesep '*LF_Lesion_Mask.nii.gz']);
disp(['Found ' num2str(length(d)) ' Lesion Mask ' ]);
d = dir([datadir filesep '*LF_Contralateral_Mask.nii.gz']);
disp(['Found ' num2str(length(d)) ' Contralateral Mask ' ]);
d = dir([datadir filesep '*LF_DWI_Nonlinear_lncc5sx30vel_Coregistration.nii.gz']);
disp(['Found ' num2str(length(d)) ' LF DWI ' ]);
d = dir([datadir filesep '*LF_FLAIR.nii.gz']);
disp(['Found ' num2str(length(d)) ' LF FLAIR ' ]);
resultspath = '';
Nd = numel(d);
data = cell(Nd+1,5);
data(1,2:6) = {'Lesion_Mask_mm3', 'Contralateral_Mask_mm2', 'Mean_Lesion_DWI', 'Mean_Lesion_FLAIR', 'Mean_Contralateral_FLAIR'};
for i = 1 : Nd
disp(sprintf('Working on case %d of %d: %s',i,Nd,d(i).name))
f = find(d(i).name=='_');
prefix = d(i).name(1:f(1));
ipsimaskfile = fullfile(datadir,[prefix 'LF_Lesion_Mask.nii.gz']);
contramaskfile = fullfile(datadir,[prefix 'LF_Contralateral_Mask.nii.gz']);
dwifile = fullfile(datadir,[prefix 'LF_DWI_Nonlinear_lncc5sx30vel_Coregistration.nii.gz']);
flairfile = fullfile(datadir,[prefix 'LF_FLAIR.nii.gz']);
IMmri = MRIread(ipsimaskfile);
CMmri = MRIread(contramaskfile);
Dmri = MRIread(dwifile);
Fmri = MRIread(flairfile);
I = IMmri.vol > (max(IMmri.vol(:))/2);
C = CMmri.vol > (max(CMmri.vol(:))/2);
D = double(Dmri.vol);
F = double(Fmri.vol);
data(i+1,:) = { ...
prefix(1:end-1); ...
sum(I(:)) * prod(IMmri.volres); ...
sum(C(:)) * prod(CMmri.volres); ...
mean(D(I)); ...
mean(F(I)); ...
mean(F(C)); ...
};
disp(data)
output_file = fullfile(resultspath,'FLAIR_SIR_NEW_2.csv');
writecell(data, output_file);
disp('All done!');
end

回答(1 个)

Cris LaPierre
Cris LaPierre 2023-10-12
This error occurs when your logical index has more elements than the array you are indexing with it.
ind1 = logical([0 1 1 0]);
A = rand(1,4);
% works
A(ind1)
ans = 1×2
0.3485 0.9401
% your error
ind2 = logical([0 1 1 0 1]);
A(ind2)
The logical indices contain a true value outside of the array bounds.

类别

Help CenterFile Exchange 中查找有关 Data Type Conversion 的更多信息

Community Treasure Hunt

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

Start Hunting!

Translated by