How do I loop over subjects in a script with 3d arrays?
이전 댓글 표시
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월 25일
The only tricky part is to get the complete filepath. do both seg and lobes vary for each subject?
Gülizar Kaya
2018년 4월 25일
Praveen Iyyappan Valsala
2018년 4월 25일
Remove this.
seg=cell(length(ID_CODES), 1); % predefines the size of the matrix
Use this for dp(More clean)
dp=fullfile(ID_CODES(i).folder,ID_CODES(i).name,'/Images/wseg.nii');
as seg is 3D array now it will becomes 4D array
seg(:,:,:,i)=spm_read_vols(spm_vol(dp));
Gülizar Kaya
2018년 4월 25일
편집: Gülizar Kaya
2018년 4월 25일
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개)
카테고리
도움말 센터 및 File Exchange에서 Medical Physics에 대해 자세히 알아보기
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!