How do I loop over subjects in a script with 3d arrays?
조회 수: 13 (최근 30일)
이전 댓글 표시
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
Praveen Iyyappan Valsala
2018년 4월 26일
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
답변 (0개)
참고 항목
카테고리
Help Center 및 File Exchange에서 Resizing and Reshaping Matrices에 대해 자세히 알아보기
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!