How do I loop over subjects in a script with 3d arrays?
2 views (last 30 days)
Show older comments
Dear experts, I have written a script to read .nii files (volumetric 3d images), one of it being binary. I made sure the dimensions are equal, because I needed to multiply the arrays and calculate the overlap. The script works. However, I want the script to loop over 77 subjects in a directory.
This is the script for one subject:
lobes = spm_read_vol(spm_vol('xx/xx/x.nii')); %this is a mask with dim [51 75 55]
seg = spm_read_vols(spm_vol('/xx/xx/Images/wseg.nii')); %this is a binary 3D object with dim [153 225 165]
segf=flipud(seg); %I used this, because somehow my object is mirrored
seg2=griddedInterpolant(segf);
seg3=seg2({linspace(1, size(segf,1),51),linspace(1,size(segf,2),75),linspace(1,size(segf,3),55)}); %resizes the original 3D image to get the same dimensions as the mask image (lobes).
for j=1:55
locseg(:,:,j)=lobes(:,:,j).*seg3(:,:,j); %multiply 3D arrays with a for loop
end
location=mode(nonzeros(locseg)) %final output of interest
ps.: I don't have the image processing toolbox, and I am 100% sure this is not the easiest way to get the wanted output, but my options are limited.
Any help is appreciated!
5 Comments
Praveen Iyyappan Valsala
on 26 Apr 2018
as you don't need any variable other than location.
%get all things for dp
for 1=1:#subjects
dp=...
seg= read(dp) (don't append)
rest of the code as in your question
location(:,:,:,i)=mode(...) (put that many colons as dimension of the location w/o looping)
end
Answers (0)
See Also
Categories
Find more on Matrix Indexing in Help Center and File Exchange
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!